Migration << >>

Formatting the Secondary Files

A secondary file is a collection of one or more sections. Each section contains a description of the data, followed by the actual data. A message body and its attachments are in separate sections.

The offset in the primary file specifies the first section in the secondary file for messages with multiple sections. Sections are separated by blank lines. The following example shows the format of secondary files:

Type,Length,Encoding,Islast,Name,Position,Format
Body,91,,TRUE,,,
Do you want to play a game of racquetball after work tonight?

Pat

Body,70,,FALSE,,,
I saw this short review of Microsoft's Back Office products.

Pat

Attachment,205,,TRUE,backoffi.txt,0,
Microsoft BackOffice package includes Windows NT Server, Microsoft Exchange Server, SQL Server, and System Management Server.

Other,51,,TRUE,,,
leslied;sallys;marck;louisej;robinh;bobbyq;gregoryc

The following table describes the fields in the header line of secondary files.

Heading Description Values
Type (Required) Type of data. Body, Attachment, Schedule, Document, or Other.
Length (Required) Length of data in bytes, including end-of-line characters. Integer. If message is body part of a free document, the length must = 0.
Encoding Reserved field. Leave blank.
Islast If TRUE, body or attachment is the last in the file for this message. If FALSE, the next section in file is either body or attachment for this message. TRUE or FALSE.
Name File name of attachment. Required for sections that are attachments and documents, and ignored otherwise.
Position (Optional) Location, in bytes, where icon for attachment should be placed. Valid only for attachments. Default is to end of the body. Required for sections that are attachments and ignored otherwise. Must be between -1 and the number of bytes in the body.
Format File format of attachment. None or Macbinary. Defaults to None. Required for sections that are attachments and ignored otherwise.

Free Documents

Documents or files can be migrated, even if they are not associated with messages. In the primary file, they appear as standard messages. In the secondary file, the length of the body of the message = 0. The subject for this message is ignored, and the Islast field is set to FALSE. The Document section is next in the secondary file.

It is very important that the file name in the Document section include an extension. If none exists, add an extension that can launch a viewer application. Here is an example of a free document in the secondary file:

Type,Length,Encoding,Islast,Name,Position,Format
Body,0,,FALSE,,,
Document,205,,TRUE,backoffi.txt,0,
Microsoft BackOffice package includes Windows NT Server, Microsoft Exchange Server, SQL Server, and System Management Server.

Schedule Data

Schedule data is moved to the user's mailbox as an attachment to a new mail message. The user opens the message and imports the data by double-clicking the attachment. You must install Microsoft Outlook to import the data.

In the primary file, the schedule data appears to be another message in the message section. In the following example, the third message in bold is the schedule message, which is placed in the Inbox.

MAILMESSAGE,PROFS:SANFRAN(HOWARDS)
Folder,Sender,To,Cc,Bcc,Subject,Send-Date,Received-Date,Priority,Unread,Unsent,Body
,Bill Lee,Howard Snyder,,,"End of Month Report",19950321093421,,-1,,,#SALESPO1.SEC(54)
Phoenix Project,Pat Parkes,Howard Snyder,,,Back Office Review,,,,,,#SALESPO1.SEC(161)
,Howard Snyder,Howard Snyder,,,Schedule+,19951005022543,,1,TRUE,,#SALESPO1.SEC(356)

In the secondary file, set the body of the message to a length of 0. The Migration Wizard automatically adds instructions for importing the schedule file in English, German, French, or Japanese, depending on the language of your Microsoft Exchange Server computer.

Type,Length,Encoding,Islast,Name,Position,Format
Body,0,,FALSE,,,
Schedule,298,,True,HOWARDS.SC2,-1,
SCHEDULE+2 EXPORT VERSION 103
...

The first line in the schedule file must be a header line as follows:

SCHEDULE+2 EXPORT VERSION 103

Each line thereafter has schedule properties and values. The following table describes the differences between the schedule file format and the standard migration file format.

Property Description
Object Starts with line that describes type of data (for example: "Projects"), followed by a colon. Next line has open brace ({). Each line thereafter has a property, followed by a colon and the value. Last line of table has close brace (}). Comparable to a header line and row of data in the migration file format.
Object containing an object An object can contain another object. Within open and close braces of an object, another set of braces can designate another object. For example, recurring appointments can contain exception objects to describe modified or deleted single appointments in the recurring appointment schedule.
Separator Schedule file format uses a colon, instead of a comma, to separate schedule property names from values. A colon must be followed by a space.
Space A space after a colon and before a value are ignored. You can use spaces to make the file more readable.
Line continuation character Schedule file format uses a backslash (\), followed by a carriage return and line feed, to indicate that the line continues. Lines cannot exceed 80 characters. You can use two line continuation characters to make a line break in appointment or task descriptions.
Quotation mark Schedule file format encloses all strings and binary data in quotation marks. Quotation marks inside these values are represented by a backslash followed by a quotation mark (\").
Date/Time Date = mm-dd-yyyy. Time = hh:mm, 24-hour format. You can join date and time with a space: mm-dd-yyyy hh:mm. For example, 9:00 AM on New Years Day = 01-01-1996 09:00. All times and dates are imported in the time zone of user.

Tip   To see examples of the schedule file format, create examples in Microsoft Outlook Calendar and export the calendar.

The following objects can be created in the schedule file format.

Property Description
Projects Table of all projects.
Contacts Table of contacts.
SingleAppointments Appointments that occur only once.
SingleEvents Events that occur only once.
SingleTasks Tasks that occur only once.
RecurringAppointments Recurring appointments.
RecurringEvents Recurring events.
RecurringTasks Recurring tasks.

Each type of property can occur multiple times within the file. If objects of the same type are kept together, import performance is improved.

SCHEDULE+2 EXPORT VERSION 103
Projects:
{
   data
}
Projects:
{
   data
}
Contacts:
{
   data
}
RecurringAppointments:
{
   data
}
RecurringEvents:
{
   data
}
RecurringTasks:
{
   data
}
SingleAppointments:
{
   data
}
SingleEvents:
{
   data
}
SingleTasks:
{
   data
}

Schedule+ Projects

The following examples illustrate the projects format:

Projects:
{
   Priority:   16945
   Text:   "Colossus Project"
}
Projects:
{
   Priority:   16689
   Text:   "Region 6 Spring Sales Drive"
}

The following table describes the properties of projects.

Property Description
Priority Urgency of project.
Text Description of project.

For more information on priorities, see "Priority Property" later in this appendix.

Schedule+ Contacts

Schedule+ contacts are separate from Microsoft Outlook PAB entries. There is no link between them. Depending on the configuration of your source system, contacts can be imported into Schedule+ if contact entries are created in the schedule migration file.

You can also create contacts from PAB entries in the source system. Users can delete contacts created this way, but they cannot add information from PAB entries to the contacts list.

The following example illustrates the contact format:

Contacts:
{
   LastName:   "Lee"
   Department:   "MIS"
   AddressBusiness:   "12 Main St"
   CountryBusiness:   "USA"
   PhoneBusiness:   "415 555-9839"
   CityBusiness:   "San Francisco"
   Office:   "16/2102"
   Company:   "Ferguson & Bardell"
   Assistant:   "Sarah"
   ZipCodeBusiness:   "94105"
   CurrentPhone1:   4
   FirstName:   "William"
   StateBusiness:   "CA"
   JobTitle:   "Team Manager"
}

The following table describes the properties of contacts.

Property Description
AddressBusiness Business address.
AddressHome Home address.
Assistant Assistant of the contact.
CityBusiness City for the business address.
CityHome City for the home address.
Company Company.
CountryBusiness Country for the business address.
CountryHome Country for the home address.
Department Department.
FirstName First name.
JobTitle Job title.
LastName Last name.
Notes Miscellaneous information.
Office Office location.
PhoneAssistant Phone number of the contact's assistant.
PhoneBusiness Business phone number.
PhoneBusiness2 Second business phone number.
PhoneFax Fax phone number.
PhoneHome Home phone number.
PhoneHome2 Second home phone number.
PhoneMobile Mobile phone number.
PhonePager Pager phone number.
Spouse Name of the contact's spouse.
StateBusiness State/province of business address.
StateHome State/province of home address.
User1 User-defined string for contact information that doesn't fit any other field.
User2 User-defined string for contact information that doesn't fit any other field.
User3 User-defined string for contact information that doesn't fit any other field.
User4 User-defined string for contact information that doesn't fit any other field.
ZipCodeBusiness Business address postal code.
ZipCodeHome Home address postal code.

Calendar SingleAppointments

If attendees are invited to a migrated appointment, put their names into the Notes or Text property of the appointment. To make it easier for the user to send mail to the attendees or to add the attendees to the attendees list, use a semicolon to separate the names. The user can then copy the list of names into the To line of a message or to the attendees list and resolve them against the Address Book.

Calendar appointments can list outside attendees. Their unique MAPI ID is stored with the appointment and is used to verify responses to meeting requests. Without an attendee's MAPI ID, the display name cannot be added to the attendees list.

The following example illustrates the SingleAppointment format:

SingleAppointments:

{

Ring: T

AlarmAmount: 15

Text: "Attend training class."

AlarmTypeUnit: 0

AlarmAmountOriginal: 15

BusyType: 0

Start: 3-5-1996 15:00

End: 3-5-1996 17:00

}

SingleAppointments:

{

Where: "Rona's office"

Text: "Meet with Rona about shifting contacts to new employees.\

\

Rona Rumalski"

Ring: T

AlarmAmount: 15

Start: 3-5-1996 09:00

BusyType: 1

End: 3-5-1996 10:30

AlarmTypeUnit: 0

}

The following table describes the properties of SingleAppointments.

Property Values Description
AlarmAmount Integer Amount of time before meeting date to issue alarm.
AlarmTypeUnit 0 = Minute

1 = Hour

2 = Day

3 = Week

4 = Month

Type of unit for AlarmAmount.
BeforeEnd T or F

Default = F

Alarm is set relative to end rather than to start of SingleAppointment.
BusyType 0 = Tentative

1 = Busy

If SingleAppointment should appear busy or tentative.
End (Required) mm-dd-yyyy hh:mm End date and time for SingleAppointment.
IsRecurringInstance T or F

Default = F

If SingleAppointment is instance of recurring series.
Notes   Miscellaneous information. Text appears in Notes property page for appointment.
Ring T or F

Default = T

If alarm was set for SingleAppointment.
Start (Required) mm-dd-yyyy hh:mm Start date and time for SingleAppointment.
Text   Description for SingleAppointment. Text appears on calendar.
Where   Location for appointment.

Calendar SingleEvents

Events are different from appointments in the following ways:

The following example illustrates the SingleEvents format:

SingleEvents:

{

Ring: T

AlarmAmount: 2

Text: "River City 10 mile hike and camp. (Weather permitting.)\

Call Josh at 555-1232 to make sure it is happening."

AlarmTypeUnit: 2

AlarmAmount: 2

StartDate: 3-2-1996

EndDate: 3-3-1996

}

The following table describes the properties of SingleEvents:

Property Values Description
AlarmAmount Integer Amount of time before midnight to issue alarm.
AlarmTypeUnit 0 = Minute

1 = Hour

2 = Day

3 = Week

4 = Month

Type of unit for AlarmAmount.
BusyType 0 = Tentative

1 = Busy

If event should appear busy or tentative.
EndDate (Required) mm-dd-yyyy End date for event.
IsRecurringInstance T or F

Default = F

Indicates if event is instance of recurring series.
Notes   Miscellaneous information.
Ring T or F

Default = T

If alarm was set to ring for event.
StartDate (Required) mm-dd-yyyy hh:mm Start date for event.
Text String Text (description) for event.

Calendar SingleTasks

Microsoft Outlook Calendar relates tasks to projects by using the ProjectID number. Without a ProjectID number, tasks are imported without being related to a project.

The following example illustrates the SingleTask format:

SingleTasks:
{
   Priority:   16672
   Text:   "Update summer catalog."
   AmountActualEffort:   0
   AmountEstimatedEffort:   1
   IsTaskAutoDone:   T
   StartDate:   3-6-1996
   AmountStartWork:   4
   TypeUnitStartWork:   2
   EndDate:   3-10-1996
   TypeUnitEstimatedEffort:   2
   TypeUnitActualEffort:   2
}

The following table describes the properties of SingleTasks.

Property Values Description
AmountActualEffort Number Amount of time of actual effort, in units set by TypeUnitActualEffort.
TypeUnitActualEffort 0 = Minute

1 = Hour

2 = Day

3 = Week

4 = Month

Type of unit for measuring actual effort for task.
AmountEstimatedEffort Number Amount of estimated time effort, in units set by TypeUnitEstimatedEffort.
TypeUnitEstimatedEffort 0 = Minute

1 = Hour

2 = Day

3 = Week

4 = Month

Type of unit for measuring estimated effort for task.
AmountStartWork Number Amount of time before end date to start work on item, in units set by TypeUnitStartWork.
TypeUnitStartWork 0 = Minute

1 = Hour

2 = Day

3 = Week

4 = Month

Type of unit for amount of time before end date to start work.
Billing String Billing information.
CompletedDate mm-dd-yyyy Date task was completed.
StartDate mm-dd-yyyy Date task starts.
EndDate mm-dd-yyyy Date task ends.
IsTaskAutoDone T or F If task should appear as automatically completed on end date.
Mileage String Mileage associated with task.
PercentCompleted Number Percentage of task completed.
Priority See the following explanation. Priority of task.

Priority Property   Schedule+ prioritizes tasks by using numbers (1 through 9) and/or letters (A through Z). For example, "A1," " 3," and "B" are valid priorities. The migration file format converts this priority to a decimal.

The following table illustrates how priorities are converted to decimal versions. The ASCII value of the letter or number is converted to a hexadecimal, the number 20 is prefixed or appended as a space and place holder, and this number is converted to a decimal.


Priority
Convert to hexadecimal
Prefix or append 20

Convert to decimal
1 31 2031 8241
2 32 2032 8242
3 33 2033 8243
4 34 2034 8244
5 35 2035 8245
6 36 2036 8246
7 37 2037 8247
8 38 2038 8248
9 39 2039 8249
A 41 4120 16672
B 42 4220 16928
C 43 4320 17184
D 44 4420 17440
E 45 4520 17696
F 46 4620 17952
G 47 4720 18208
H 48 4820 18464
I 49 4920 18720
J 4A 4A20 18976
K 4B 4B20 19232
L 4C 4C20 19488
M 4D 4D20 19744
N 4E 4E20 20000
O 4F 4F20 20256
P 50 5020 20512
Q 51 5120 20768
R 52 5220 21024
S 53 5320 21280
T 54 5420 21536
U 55 5520 21792
V 56 5620 22048
W 57 5720 22304
X 58 5820 22560
Y 59 5920 22816
Z 5A 5A20 23072

For a number priority of 3, for example, use the hexadecimal 33 and prefix 20. The value 2033 converts to decimal 8243. For a letter priority of C, for example, take the hexadecimal 43, and append 20. The value 4320 converts to 17184.

If your existing system prioritizes by requiring both letters and numbers (for example: A1, B3, or Z9), use this procedure. Convert both to hexadecimal, concatenate (link together) the values of the letter and number, and then convert that value to decimal. For a priority of A3, for example, use the hexadecimal of A (41) and concatenate it with the hexadecimal of 3 (33). The value 4133 converts to 16691.

Recurring Appointments, Events, and Tasks

The following examples illustrate the format for recurring appointments, events, and tasks:

RecurringEvents:
{
   Text:   "Yearly tax audit. Start preparations early."
   Ring:   T
   AlarmAmount:   21
   AlarmTypeUnit:   2
   StartDate:   3-4-1996
   EndDate:   3-4-1996
   RecurringType:   7
   YearInterval:   1
   DayOfMonthMask:   8
   MonthOfYearMask:   4
}
RecurringAppointments:
{
   Text:   "SATR meeting.\
\
Big Sale."
   Ring:   T
   AlarmAmount:   15
   DayOfWeekStart:   0
   StartRecurringTime:   12:00
   YearInterval:   1
   WeekInterval:   1
   BusyType:   0
   RecurringType:   51
   StartRecurringDate:   2-26-1996
   DayOfWeekMask:   32
   EndRecurringDate:   3-4-2000
   DayOfMonthMask:   8
   EndRecurringTime:   13:00
   MonthOfYearMask:   4
   AlarmTypeUnit:   0
}
RecurringTasks:
{
   Text:   "Check online mailbox for new mail."
   Priority:   8243
   TypeUnitActualEffort:   2
   AmountEstimatedEffort:   1
   TypeUnitEstimatedEffort:   2
   Billing:   "Billed at higher rate"
   BeforeEndOriginal:   F
   AmountStartWork:   0
   StartRecurringDate:   3-2-1996
   RecurringType:   64
   WeekInterval:   1
   DayOfWeekMask:   16
   DayOfWeekStart:   0
   DayInterval:   1
   EndRecurringDate:   8-10-1996
   TypeUnitStartWork:   2
   Ring:   T
   AlarmAmount:   0
   AlarmTypeUnit:   2
   BeforeEnd:   F
   Exceptions:   
   {
      InstanceDate:   3-3-1996
      StartDate: 3-3-1996
      EndDate:    3-4-1996
      Deleted:   F
      Text: "Check online mailbox for new mail. Check for new rates."
      Priority:   8241
      TypeUnitActualEffort:   2
      AmountEstimatedEffort:   1
      TypeUnitEstimatedEffort:   2
      BeforeEndOriginal:   F
      AmountStartWork:   0
      TypeUnitStartWork:   2
      Ring:   T
      AlarmAmount:   5
      AlarmTypeUnit:   2
      BeforeEnd:   F
   }
}

The following table describes the properties shared by recurring appointments, events, and tasks.

Property Values Description
DayInterval 1 through 999 Number of days between instances. Used only if RecurringType is 64.
DayOfMonthMask 1st day of month = bit 0

31st day of month = bit 30

Bit field indicating which days of the month are valid for recurrence pattern. Used only if RecurringType is 7 or 12.
DayOfWeekMask Sunday = bit 0

Saturday = bit 6

Bit field indicating which days of the week are valid for recurrence pattern. Used only if RecurringType is 48, 51, or 56.
DayOfWeekStart 0 through 6

Sunday = 0

Start of week preference. Used only if RecurringType is 48. For recalculating biweekly meetings.
EndRecurringDate mm-dd-yyyy End date for recurrence pattern.
EndRecurringTime (Required) hh:mm End time for a recurring item.
Exceptions See "Exceptions Property" section later in this chapter. Exceptions to a recurring item.
FirstRecurringAlarmDate Today's date in mm-dd-yyyy format. First recurring item with alarm. Recalculated during import into Microsoft Outlook.
MonthInterval 1 through 99 Interval between months for recurrence pattern. Used only if RecurringType is 12 or 56.
MonthOfYearMask January = bit 0

December = bit 11

Bit field indicating which months of year are valid for recurrence pattern. Used only if RecurringType is 7 or 51.
RecurringType (Required) 7 = Yearly on specific day

12 = Monthly on specific day

48 = Weekly

51 = Yearly on a pattern

56 = Monthly on a pattern

64 = Daily

Type of recurrence pattern.
StartRecurringDate (Required) mm-dd-yyyy Start date for recurrence pattern.
StartRecurringTime (Required) hh:mm Start time for recurring item.
WeekInterval Positive integer Interval between weeks for recurrence pattern. Used only if RecurringType is 48, 51, or 56.
YearInterval Positive integer Interval between years for recurrence pattern. Used only if RecurringType is 7.

The following table describes additional values required for the RecurringType property.

RecurringType Required values
7 = Yearly on specific day DayOfMonthMask, MonthOfYearMask, YearInterval
12 = Monthly on specific day DayOfMonthMask, MonthInterval
48 = Weekly DayOfWeekMask, DayOfWeekStart, WeekInterval
51 = Yearly on a pattern DayOfWeekMask, MonthOfYearMask, WeekInterval
56 = Monthly on a pattern DayOfWeekMask, MonthInterval, WeekInterval
64 = Daily DayInterval

Exceptions Property   Exceptions are deleted or modified properties of a recurring appointment or task. To delete, only two properties are required: Deleted and InstanceDate. To modify, the appointment or task must be redefined as a single appointment or task, and you must redefine the StartDate and EndDate, even if only the Location property is modified.

Property Values Description
Deleted T or F If instance was marked "deleted." If FALSE, instance has been modified.
InstanceDate mm-dd-yyyy Date that original instance would have occurred.