
Thursday, July 12, 2007
Migrating to Exchange 2007

Thursday, June 21, 2007
How many Recurring Appointments Does it Take to Screw Up Outlook in E2K7?
The answer: 1300 (not 1301, we mean 1300)
While debugging our insertion technology for migrations from legacy calendaring systems into Exchange 2007, Russ decided to insert 23,000 appointments into a single calendar (which is not as rare a real-world occurrence as you might think).
When we narrowed th einsertion to just recurring items we found a hard limit at 1300:

We were really surprised to be getting CDO errors server-side, especially since CDOEXM is obsoleted and CDOEX is denigrated in 2007, and our new insertion code is based on EWS and has had all CDO-specific code ripped out of it with the diligence of a vegan removing meat and dairy products from their diet.
The specific Outlook error message: "There is not enough memory available to perform the operation." led us to some server-side errors that looked like this:
Exception type: Microsoft.Mapi.MapiExceptionNotEnoughMemory
Exception message: MapiExceptionNotEnoughMemory:
Unable to save changes. (hr=0x8007000e, ec=-2147024882) Diagnostic context
Event Type: Error
Event Source: EXCDO
Event Category: General
Event ID: 8199
User: N/A
Description:
Calendaring agent failed in message save notification with error 0x8007000e on judy@lab.sumatra.local: /Calendar/test5.EML
We didn't find anything on specific 2007 problems, but this does sound very similar to an existing 2003 problem: You cannot save or delete a recurring appointment from a Calendar that is maintained on an Exchange Server 2003 computer, aka KB 892524.
So we wanted to put this up to let folks know and see if anyone else had been experiencing this problem.
Friday, June 01, 2007
Meeting Maker to Zimbra Migration
Let's deal with the limitations first of all.
Meeting Maker calendar attributes that we do not transfer to Zimbra:
- Private activities: We're taking this attribute along so that when Zimbra supports Private appointments (This is coming in their next version 5.0) it will be there -- but the current version has no way of (not) displaying them.
- "Weekend move": Zimbra does not have this functionality so affected meetings will not move.
- Comments: We've been dropping these for five years in Exchange migrations and there's been no complaints.
- Colors / Labels: The Zimbra palette is very different from the primary colors of Meeting Maker so we don't even try to match colors.
- Proxies: We extract them from Meeting Maker we'll look at what we can do to insert the same proxy rights (thank you to KevinH who with amazing speed pointed out Zimbra DOES have the ability to Share calendars - I just wasn't looking hard enough)
- To-Dos: Zimbra has capability for to-dos in the user interface after version 5.0. So only supported for 5.0.
- Optional / CC / BCC guests: Zimbra hdoes not have this functionality so we make all guests Required guests except for BCC (which would defeat the original purpose of a BCC) and respond appropriately. BCC guests get the meeting put in their calendar separately from the rest of the distribution list.
Meeting Maker calendar attributes that transfer to Zimbra:
- Recurrence patterns (we even think we have a chance of solving the infamous "Refrigerator Bug" we always warn you about)
- Meeting Agendas
- Guest lists
- Guest responses
- Meeting Exceptions
- Guest exceptions
- Contacts
- To-Dos in Version 5.0.
- Banners
- Holidays (we can insert into each calendar separately since Zimbra does not have server-wide holidays)
- Conference Rooms
- Resources
- Time Zones
Please keep in mind this is a fluid list and we're likely to change a few things over time as new functions are added, as we get more clever in our migration implementation, or as we discover "gotchas" that are currently hidden to us.
Keep in mind we're doing all this server-side with no end user intervention.
The one functionality we're striving to add is the one that many of you have found so useful for testing in the past: UNDO.
We'll keep you informed as this migration technology develops.
Thursday, May 24, 2007
Meeting Maker to Zimbra Migration Function Mapping
Let's say Adam invites Claudette to three meetings, which in Meeting Maker she Accepts, Declines, and Decides Later.
Adam's calendar looks like this in Meeting Maker:

And after migration Adam's calendar looks like this in Zimbra:

Claudette's looks like this in Meeting Maker:

And after migration Claudette's calendar looks like this in Zimbra:

Note that the model for display of calendar state information is completely opposite between the two products. In Meeting Maker, the proposer / owner of a meeting is the one who sees an instant display of guest response status. In Zimbra, it is the guest who has the "one glance" view of her response status. In going from Meeting Maker to Zimbra this radically simplifies things for the guest (especially compared with the clunky "proposals box" in Meeting Maker). However, it does make it harder for those used to the symbols Meeting Maker uses to manage meetings to see them at a glance. This information does display very handily in the proposer's mail Inbox as guests make decisions.
Note that we are opting to map "Decide Later" as "New" in Zimbra rather than "Tentative" to highlight the need to make a decision on the meeting.
Wednesday, May 16, 2007
E2K3 to E2K7 Upgrade Problem: Exchange Resource Manager
Symptoms
Meeting invitations/updates sent to conference rooms that have been moved from Exchange 2003 with ERM to Exchange 2007 with resource calendar assistant are ignored and/or deleted without being processed.
The Problem
ERM has a bug that causes mailbox attribute 0x8217 to be set to 1 (organizer) when it places meetings on the calendar.
In OutlookSpy you would see this:

A Microsoft representative was able to confirm via testing that when 0x8217 is altered prior to the resource mailbox being moved from Exchange 2003 to Exchange 2007 the E2k7 Resource Calendar Assistant is unable to act on the meeting invitation/update and treats it as a non-meeting message (deletes it).
The fix is to set 0x8217 to 3 (invitee), with potentially 1000s of meetings with this issue it would be very time consuming to do it manually, so we wrote one to fix it.
Not surprisingly we put it into the Sumatra Utilities.
The latest version has the following additional flags:
/ERM:fix
This can change all calendar items with x8217=1 (from ERM) and set the value to 3.
If the /ERM switch is used without the :fix then the tool will run and produce counts.
If the ":fix" qualifier is used, then the appointments will be updated.
Can also be used with /e (show all) and /s (summary)
So for example, looking at the resource "LCD":
su /ERM /u:lcd /e
Gives the following REPORT in outfile.txt
User:lcd
Resource Mtg Organizer Mtg Name MtgStart MtgEnd Meeting Type
Validated lcd lcd - test test test - - Appointment
1 Resources processed.
1 Total meetings read.
1 meetings with ERM flag=1
0 meetings skipped (didn't have flag=1)
ReadFrom:
WroteTo: outfile.txt
su /ERM:fix /u:lcd /e
Will fix and record which ERM-managed meetings are repaired.
Saturday, April 21, 2007
Been working with the Zimbra calendaring functions
Things I really like about it -- the way accepted, declined, and tentative meetings show up with varying degrees of transparency. Very intuitive, very elegant:

There's also a fairly decent schema for resources.
On the other hand there's zero concept of private activities or degrees of delegate access.
Calendar migration from Outlook via PST is better than we typically see with most packages. Zimbra manages to preserve the recurrence pattern of meetings and exceptions, and there is an option to change your email address on meetings from your former email to your new one if you're changing.
On the downside, it doesn't change guests' email so when I brought it up in our test lab (changing domains) I had outdated guest lists. Migration is also done on a single user basis (making it a pain if you have a large base you're migrating).
I didn't bother with the Domino or GroupWise migrators.
Friday, April 06, 2007
We've noticed everyone else with a blog is into visuals
of a T-shirt from a migration we did into Exchange of a legacy calendar system called "Meeting Maker."
We moved 9,900 users and resources that weekend.
Thursday, April 05, 2007
Update to Sumatra Utilities - current version 2.3.25
We had to rev the code so that holidays would insert correctly with the new CDO that Microsoft issued to
If you're trying to insert Holidays please use version 2.3.25.
Monday, April 02, 2007
Exchange 2007 Installation for 2003 Coexistence -- Beware of this....
If you are trying to do this:
Make sure you are running the install as Domain Admin and Schema Admin (and for good measure also an Enterprise Admin).
We neglected to do this and found intermittent problems throughout our initial configuration.
Had we done this using VMware's 64 bit emulator we could have rolled back Exchange and tried again. Instead, we'll be reformatting and trying again.
Thursday, March 22, 2007
Migrating iPlanet Calendar to Exchange via SuPump
iPlanet has a tool: csexport.
The file extension of the OUTPUT file (.ics or .xml) determines the format it will export to: ither iCalendar or XML
So since suPump.exe takes an XML file as input for incorporation into Exchange, this gives a quick way of server-side migration.
You use it as follows:
csexport -c jsmithcal calendar jsmith.xml
then
suPump.exe /k /AT:UserID /u:jsmith /DT:A /file:"jsmith.xml"
Tuesday, March 20, 2007
Sumatra Pump Contact Schema
ContactID: alpha numeric identifier (can be left blank)
ContactNum: Contact Number
OwnerUserID: UserID or mailboxAlias
FirstName:
LastName:
Title:
Dept:
Room:
Company:
Address:
City:
State:
Zip: XXXXX-XXXX
Country:
Email:
HomePhone: XXXXXXXXXX
WorkPhone: XXXXXXXXXX x XXXXX
Fax: XXXXXXXXXX
MobilePhone: XXXXXXXXXX
Pager: XXXXXXXXXX
OtherPhone1: XXXXXXXXXX
OtherPhone2: XXXXXXXXXX
OtherPhone3: XXXXXXXXXX
Custom1
Custom2
Custom3
Custom4
NoteInfo :additional information
Sunday, March 18, 2007
If an attendee to an occurrence of a recurring meeting is removed then the series is updated, the removed attendee is re-invited.
If an attendee to an occurrence of a recurring series is removed.
Then the series is updated.
The removed attendee is re-invited and the meeting shows back up on their calendar.
The following steps can be followed to reproduce the error.
1. Create a recurring meeting with “Organizer 1” and “Attendee 1” for at least 2 days.
2. Open any occurrence of the meeting and remove “Attendee 1” and send the update
3. Open the series and make any modification(e.g., Add a note to the details) send the update.
You should notice that “Attendee 1” still has the meeting on their calendar, however when you open the occurrence of the meeting that had “Attendee 1” removed, you will notice that “Attendee 1” is not in the meeting.
Chris further adds:
This is not a problem in CDO 1.21 .... This is a problem in Outlook. When a recurring series is updated it does not send the correct updates for the occurrences.This is similar to a problem Microsoft has acknowledged with resources of which we had written earlier:
We've had reports of meeting locations being overwritten to exceptions to
recurring meetings. As Microsoft KB Article 916108 shows, it is an acknowledged bug in Exchange.
Saturday, March 17, 2007
Sample Syntax for Exchange Insertion with the Sumatra Pump
supump.exe /dn:Sumatra.com /file:contacts.xml /k
Insert one appointment for USERID=37238L. Remove data prior to insertion. Read source data from http (oracle server).
supump.exe /UNDO /k /AT:userID /u:37238L /DT:A /http:"http://oracle-dev.site.edu/dart/harpo/" /PKG:"EXCHANGESYNC_PKG.run_calendar?userid="
Appends one appointment for ExchangeAlias T_L to existing data (missing /undo)/ Read data from http.
supump.exe /k /AT:Exchange /u:T_L /DT:A /http:"http://oracle-dev.site.edu/dart/harpo/" /PKG:"EXCHANGESYNC_PKG.run_calendar?userid="
Remove user’s 37238L’s Appointment data that is tagged with the default keyword
supump.exe /dn:Sumatra.com /undo /k /u:37238L
Insert appointments for USERIDs in a text file. Remove appointment data prior to insertion. Read data from http.
suPump.exe /UNDO /k /AT:UserID /in:"F:\Sumatra\Clients\UserIds.txt" /DT:A /http:"http://oracle-dev.site.edu/dart/harpo/" /PKG:"EXCHANGESYNC_PKG.run_calendar?userid="
Insert appointments for ALL exchange users with USERIDs in a text file. Read data from http. Remove appointment data prior to insertion
suPump.exe /UNDO /k /AT:Exchange /ALL /DT:A /http:"http://oracle-dev.site.edu/dart/harpo/" /PKG:"EXCHANGESYNC_PKG.run_calendar?userid="
Add appointment data for one UserID where XML data is in file “calendar.xml”. Clear calendar before inserting data.
suPump.exe /undo /k /AT:UserID /u:37238L /DT:A /file:"F:\Sumatra\Clients\calendar.xml"
Insert contact data for ALL User IDs. Clear contacts before insertion. Read data from http.
supump.exe /UNDO /k /AT:Exchange /ALL /DT:C /http:"http://oracle-dev.site.edu/dart/harpo/" /PKG:"EXCHANGESYNC_PKG.run_contact?userid="
Insert Task data for User IDs in a file. Clear task data before insertion. Read data from http.
supump.exe /UNDO /k /AT:UserID /in:"F:\Sumatra\Clients\UserIds.txt" /DT:T /http:"http://oracle-dev.site.edu/dart/harpo/" /PKG:"EXCHANGESYNC_PKG.run_task?userid="
Insert all data into the domain name “lab.sumatra.com” for aliases defined in the file IT_Test.txt. Obtain the data from the web, and tag it with keyword testrun4
Suxml /dn:lab.sumatra.com /k:testrun /u:37238L /k:testrun4
/HTTP:"http://oracle-dev.site.edu/dart/harpo”
/pkg:"EXCHANGESYNC_PKG.run_calendar”
Friday, March 16, 2007
Reports of problems with solution to KB 932511
This of course comes up because of the DST issue in North America, in his case he had an exception to a meeting that had been scheduled to another resource. The fix on 932511 and the Rebaser put the exception back on the ORIGINAL resource.
We'll keep you updated on if there is a fix to the fix to the fix (we think the recursion only goes that far, but after three we just lose interest and move on to other projects).
Chris also reports that:
Because we forced all the updates we also found out about another
problem. We found that OWA views can differ significantly from the Outlook
views. So we found another article that was quite interesting.
I thought you'd get a kick out of it. Now we can all POOF our calendars…
http://blogs.msdn.com/stephen_griffin/archive/2007/02/21/poof-your-calender-really.aspx
Syntax for SuPump.exe
suPump /dn:domain /sn:servername /k:kwd /all /u:usr /in:infile /at:acct_type /dt:data_type
/out:outfile /undo /v:file /http:url /pkg:p
where:
/dn:domainname =Run on this "domain name"
/sn:serverName =The server name
User
/at:acct_type=Account type (acct_type=Specific or Exchange) default is Exchange alias.
/all=Retrieve ALL Aliases with SpecificIDs (employeeID)
/in:infile=user INput file, one Exchange Alias or SpecificID per record (default infile.txt)
/u:user =process this Alias or SpecificID User (supersedes /in:)
SpecificID in this case means anything you want to define, an account number or employee ID for example.
/dt:data_type=Data type = Activities, Tasks, Contacts (default is Activities)
/k:kwdstem = Assigns a category during an insert. E.g., /k=holiday2006; Also limits mtgs/appts/contacts/todos tagged with Keyword stem e.g. /k:ca finds ca,car,cat (/k default:mmconv102659080256Z).
/out:outfile=Output file (default outfile.txt)
/undo=remove items from calendar (tagged w/ keyword). Items to be removed is a function of the /dt
Data Location
/file:filestring=passes an XML file (path included) to be processed
/HTTP:URL=Obtain a file to be processed from HTTP address using this URL root. Note, the URL must be enclosed in quotes
/PKG:Pkgname=defines the package name to extract the data. The package will be appended to the URL root to retrieve the data. The package name must be enclosed in quotes.
Monday, March 12, 2007
Sumatra Pump: The Third Way to get Calendar Data into specific accounts
- Invite the user to a meeting which they accept
- The user or their delegate types an entry themselves
They asked Sumatra to develop an Exchange server-based tool we refer to as the Sumatra Pump, suPump.exe.
A bit of background
This school built a web-based calendaring solution that offers its students, faculty, and staff a single source to access all academic calendars and schedules including the academic calendar, class schedules, club events, and one-on-one meetings such as the interview calendar. The web-based solution also provided users with a list of contacts and tasks. Users can personalize the solution by setting preferences to select the calendar data they wish to receive. End users wanted the calendar data in Outlook, so the school built an Outlook add-in that allowed users to merge selected calendar data into their Outlook calendar.
Fine and good, but this was manual -- the user had to initiate the command sequence. The school’s IT department wanted a solution that could be scheduled each night to push the requested data into Outlook.
Sumatra automated the calendar data merge process by implementing a server-based “Push” product on Exchange. The goal of this Push product is to deliver calendar, task, and contact updates to Outlook end users on both a scheduled basis and an on-demand basis.
This solution had the following results:
- Consolidated scheduling data delivery at the Exchange server level;
- Reduced system maintenance and management costs;
- Minimized the negative productivity impact of requiring users to initiate the calendar merge sequence, or by re-keying calendar data into Outlook;
- Extended support to all Exchange clients on-site not served by the client-side VB macro then in use (including, for example, OWA and Entourage users);
The suPump takes as input an XML file. For Activities the file has the following structure:
ActivityID: alpha numeric identifier (can be left blank)
UserID: SchoolID or mailboxAlias
Name: Activity name
Location:Activity location
Banner:True/False - Is this an all day event
Private:True/False - Should this be marked as private
Label:What color label (0-11) corresponds to Outlook labels
Duration:Duration in minutes
ActivityTime:Activity start date and time
LastTime:Activity end date and time
TimeZone:timezone (see below)
FreeBusy:"Free", "Busy", "Tent","OOF"
RecurType: Not implemented for this client
Ongoing:Not implemented for this client
DaysMask:Not implemented for this client
WeeksMask:Not implemented for this client
DaysFromEndOfMonth:Not implemented for this client
Period:Not implemented for this client
Exceptions: Not implemented for this client
Reminder: number of minutes
NoteInfo: additional information
Contacts and Tasks have similar formats.
We've been thinking of using this for simple calendar / contact / task migrations for formats we do not currently handle (iPlanet calendar migration is one of the cases occasionally requested).
This is also something we've looked at as part of a co-existence strategy for alternate calendar servers and Exchange.
Monday, March 05, 2007
Using the Sumatra Utilities to archive appointments
archiving
Aside: you multinational companies shouldn't think it's almost over! I've gotten at least two inquiries from Europeans who are wondering about using the Utilities when the European Union reviews DST for its member nations. And "just move to Exchange 2007" is not the clear answer for everybody.
So why use the Utilities to archive? You could use automatic archiving to a PST file -- which will reduce the size of your local data and speed things. BUT if you want easy access to this data and still want to speed your calendar display, you can use the utilities to move all appointments before a certain date to a specified archive folder.
This gives you the best of both worlds: Better speed AND easy access (if you need it).
So to move all of user “riuliano”'s one-time (non-recurring) appointments before 8/2/2006 to a folder called “My Old Cal Items” use this command:
Su /u:riuliano /dt:8/2/2006 /mc /fn:"my old cal items"
If you do not have your aliases as SMTP addresses, use this syntax:
Su /fn:”my old cal items” /mc /dt /smtp /dn:lab.sumatra.com /u:russ_iuliano@lab.sumatra.com
to move appointments for user russ_iuliano@lab.sumatra.com (identified by SMTP address, /smtp) one-time (non-recurring) appointments before yesterday to a folder called “my old cal items”.
Wednesday, February 28, 2007
Not sending Updates? Check for meeting corruption with the /x flag.
So the latest Microsoft Time Zone Update tool lets you suppress Updates.
But, after you've read the warnings about what could happen if you suppress Updates in KB 933146, you should also check out some other warnings about this being contraindicated behavior in the following other Microsoft articles:
- KB 899704: Description of common scenarios in which Calendar information may be removed from the Calendar or may be inaccurate (search for "Update")
- Outlook Meeting Requests: Essential Do's and Don'ts: "Send Updates" is the second point here.
As always -- our credo is "test the snot out of software in your lab before you deploy to your production environment." If you have no problems in your lab then odds are in your favor when you move to production.
Quick Test for Corrupt Meetings
In the course of various post-migration follow ups we've heard of corrupt / damaged meetings (and improper updates is only one of the possible vectors of infection). So the Utilities have a /x flag to check:
su /u:exec_cr /x
Will look for mis-matches (i.e., a meeting in the OWNER's calendar that is in a different time / place from the entry in the calendar for the Executive Conference Room (exec_cr).
This particular flag got most of its use early on in smaller Exchange installations, so it currently might not scale to large organizations very well (but neither did some of the other flags until a few weeks ago).
Options for Oracle Calendar to Exchange Migration
- Use Oracle Connector for Outlook, save the data to a PST and then Exmerge into Exchange. This is simple, inexpensive, and off-the-shelf, but OCFO is slow (excuse me, performance impaired) and this method does not preserve state information (i.e., guest lists and responses)
- Middle path: Oracle Calendar tools allow server-side export of calendar information (unicpoutu.exe). It is a fairly straight-forward format to read and with some programming can readily be inserted into Exchange for the appropriate user (Sumatra has tools which do this at about 600 calendar objects per minute). This does not preserve recurrence patterns, but can preserve guest lists. Guest responses are not preserved with this method.
- Optimum fidelity: This also requires exporting using the existing Oracle Calendar tools. What it further involves is some proprietary technology which goes through the calendars and re-creates the recurrence patterns of meetings and appointments. This gets done in Sumatra's labs and then is turned into a database that can be inserted into Exchange with our tools. This method is more involved, but it maps all former OCS users tinto Exchange users and preserves all guest responses.
Big Bang vs. Phased Migrations:
Need for an OCS-Exchange Free Busy Connector?
Most calendar migrations we see have been "Big Bang" (i.e., all users at once -- which makes it really easy to preserve all the guest lists and responses). Since December 2006, we've had several inquiries from users about connectors for Exchange calendaring and OCS, specifically for Free Busy queries. We put some brainpower on this and think we have a solution. Come back in a bit for more info.
Thursday, February 22, 2007
Migrating Exchange Calendar to Google?
So if any of you folks out there are interested in migrating your Exchange calendar data into Google and keeping all the info you need (like recurrence patterns, guest lists, responses, exceptions, all the stuff that makes calendars useful) drop us a line.
And please keep in mind - we are not talking about moving one user account at a time -- our solutions move entire servers of calendar data at once with no user intervention.
We clearly know our way around Exchange calendaring.