Platform SDK: Exchange Server |
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 Schedule+ 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.
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 Schedule+ and export the calendar.
The following Schedule+ 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 }
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 the Priority Property topic later in this section.
Schedule+ contacts are separate from Microsoft Exchange Client 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. |
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.
Schedule+ appointments can list outside attendees. Their unique MAPI identifier is stored with the appointment and is used to verify responses to meeting requests. Without an attendee's MAPI identifier, 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. |
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. |
Schedule+ 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. |
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.
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 topic later in this section. | Exceptions to a recurring item. |
FirstRecurringAlarmDate | Today's date in mm-dd-yyyy format. | First recurring item with alarm. Recalculated during import into Schedule+. |
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 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. |