4.2 Processing a Task Update
Russell King assigned a task to Scott Bishop. Scott updated some of the task properties, such as percent completed, and sent an update. Russell has now received a task update, and Scott's changes need to be merged into his own copy of the task. The following is a description of what a client might do to process the update.
The client begins by obtaining property IDs from the server as described in section 4.
The client obtains a handle to the task update by using the RopOpenMessage ROP ([MS-OXCROPS] section 2.2.6.1). The updated task information is part of the Task object that is embedded within the first Attachment object of the task update. To get the attachment, the client uses the handle to the task update with the RopOpenAttachment ROP ([MS-OXCROPS] section 2.2.6.12). The client gets a handle to the Embedded Message object from this Attachment object by using the RopOpenEmbeddedMessage ROP ([MS-OXCROPS] section 2.2.6.16), which can then be used as the Task object. The client reads properties from the embedded Task object by using the RopGetPropertiesSpecific ROP ([MS-OXCROPS] section 2.2.8.3).
The property types in the following tables are described in [MS-OXCDATA] section 2.11.1.
Property |
Property ID |
Type |
Value obtained from server |
---|---|---|---|
PidLidTaskStatus (section 2.2.2.2.2) |
0x8146 |
0x0003 (PtypInteger32) |
0 (Not started) |
PidLidPercentComplete (section 2.2.2.2.3) |
0x8147 |
0x0005 (PtypFloating64) |
0.0 (0%) |
PidLidTaskDueDate (section 2.2.2.2.5) |
0x8145 |
0x0040 (PtypTime) |
<not found> |
PidLidTaskStartDate (section 2.2.2.2.5) |
0x8144 |
0x0040 (PtypTime) |
<not found> |
PidLidTaskActualEffort (section 2.2.2.2.11) |
0x814D |
0x0003 (PtypInteger32) |
0 |
PidLidTaskEstimatedEffort (section 2.2.2.2.12) |
0x814E |
0x0003 (PtypInteger32) |
0 |
PidLidTaskDateCompleted (section 2.2.2.2.9) |
0x814A |
0x0040 (PtypTime) |
<not found> |
PidLidTaskAccepted (section 2.2.2.2.7) |
0x82C2 |
0x000B (PtypBoolean) |
0x01 |
PidLidTaskResetReminder (section 2.2.2.2.6) |
0x815C |
0x000B (PtypBoolean) |
<not found> |
PidLidTaskMultipleRecipients (section 2.2.2.2.23) |
0x814F |
0x0003 (PtypInteger32) |
0 |
PidLidTaskUpdates (section 2.2.2.2.19) |
0x82C3 |
0x000B (PtypBoolean) |
0x01 |
PidLidTaskStatusOnComplete (section 2.2.2.2.17) |
0x82C4 |
0x000B (PtypBoolean) |
0x01 |
PidLidTaskDeadOccurrence (section 2.2.2.2.8) |
0x814C |
0x000B (PtypBoolean) |
<not found> |
PidLidTaskComplete (section 2.2.2.2.20) |
0x8149 |
0x000B (PtypBoolean) |
0x00 |
PidLidTaskFFixOffline (section 2.2.2.2.31) |
0x8156 |
0x000B (PtypBoolean) |
0x00 |
PidLidTaskOwnership (section 2.2.2.2.29) |
0x8154 |
0x0003 (PtypInteger32) |
2 (task assignee's copy) |
PidLidTaskAcceptanceState (section 2.2.2.2.30) |
0x8151 |
0x0003 (PtypInteger32) |
0 (Not assigned) |
PidLidTaskHistory (section 2.2.2.2.18) |
0x8150 |
0x0003 (PtypInteger32) |
3 (Updated) |
PidLidTaskLastUpdate (section 2.2.2.2.10) |
0x8153 |
0x0040 (PtypTime) |
2008/02/19 |
PidLidTaskLastUser (section 2.2.2.2.25) |
0x8152 |
0x001F (PtypString) |
"Scott Bishop" |
PidLidTaskLastDelegate (section 2.2.2.2.27) |
0x82C5 |
0x001F (PtypString) |
"Scott Bishop" |
PidLidTaskVersion (section 2.2.2.2.13) |
0x8158 |
0x0003 (PtypInteger32) |
4 |
PidLidTaskState (section 2.2.2.2.14) |
0x8148 |
0x0003 (PtypInteger32) |
2 (task assignee's copy) |
PidLidTaskAssigners (section 2.2.2.2.16) |
0x82C8 |
0x0102 (PtypBinary) |
<binary data> |
PidLidTaskRecurrence (section 2.2.2.2.15) |
0x815B |
0x0102 (PtypBinary) |
<not found> |
PidLidTaskAssigner (section 2.2.2.2.24) |
0x8159 |
0x001F (PtypString) |
"Russell King" |
PidLidTaskOwner (section 2.2.2.2.22) |
0x801B |
0x001F (PtypString) |
"Scott Bishop" |
PidLidTaskFCreator (section 2.2.2.2.21) |
0x82CA |
0x000B (PtypBoolean) |
0x00 |
PidLidTaskOrdinal (section 2.2.2.2.26) |
0x815D |
0x0003 (PtypInteger32) |
-1000 |
PidLidTaskFRecurring (section 2.2.2.2.28) |
0x814B |
0x000B (PtypBoolean) |
0x00 |
PidLidCommonStart (section 2.2.2.1.3) |
0x81BD |
0x0040 (PtypTime) |
<not found> |
PidLidCommonEnd (section 2.2.2.1.4) |
0x81BC |
0x0040 (PtypTime) |
<not found> |
PidLidTaskGlobalId (section 2.2.2.2.32) |
0x8211 |
0x0102 (PtypBinary) |
0E B0 1E 03 85 02 EF 4B 9A 14 50 83 B3 BB 4D E9 |
The client will use the value of the PidLidTaskGlobalId property to locate the Task object locally and will then use the values of the other properties to copy to the local Task object.
The client uses a handle to the Tasks folder and the RopGetContentsTable ROP ([MS-OXCROPS] section 2.2.4.14) to get a handle to the contents table of the folder. Using this handle, the client uses the RopSetColumns ROP ([MS-OXCROPS] section 2.2.5.1).
Property |
Property ID |
Type |
---|---|---|
PidTagFolderId ([MS-OXCFOLD] section 2.2.2.2.1.6) |
0x6748 |
0x0014 (PtypInteger64) |
PidTagMid ([MS-OXCFXICS] section 2.2.1.2.1) |
0x674A |
0x0014 (PtypInteger64) |
With the proper column set, the client can now search for the local Task object whose PidLidTaskGlobalId property matches the one found in the embedded Task object. The client performs the search with the RopFindRow ROP ([MS-OXCROPS] section 2.2.5.13).
Condition type |
Relational operator |
Property ID |
Property data |
---|---|---|---|
0x04 (RES_PROPERTY) |
0x04 (RELOP_EQ) |
0x8211 (PidLidTaskGlobalId ) |
0E B0 1E 03 85 02 EF 4B 9A 14 50 83 B3 BB 4D E9 |
Having completed the search, the client releases the handle to the contents table by using the RopRelease ROP ([MS-OXCROPS] section 2.2.15.3).
If the search succeeded, the client will have located the PidTagFolderId and PidTagMid properties for the local Task object. The client uses these values to open a handle to the local Task object by using the RopOpenMessage ROP ([MS-OXCROPS] section 2.2.6.1). The client will now use the RopSetProperties ROP ([MS-OXCROPS] section 2.2.8.6) to update the properties of the local Task object, copying the properties from the embedded Task object, as appropriate.
Property |
Property ID |
Type |
Value |
---|---|---|---|
PidLidTaskStatus |
0x8146 |
0x0003 (PtypInteger32) |
0 (Not started) |
PidLidPercentComplete |
0x8147 |
0x0005 (PtypFloating64) |
0.0 (0%) |
PidLidTaskActualEffort |
0x814D |
0x0003 (PtypInteger32) |
0 |
PidLidTaskEstimatedEffort |
0x814E |
0x0003 (PtypInteger32) |
0 |
PidLidTaskAccepted |
0x82C2 |
0x000B (PtypBoolean) |
0x01 |
PidLidTaskMultipleRecipients |
0x814F |
0x0003 (PtypInteger32) |
0 |
PidLidTaskUpdates |
0x82C3 |
0x000B (PtypBoolean) |
0x01 |
PidLidTaskStatusOnComplete |
0x82C4 |
0x000B (PtypBoolean) |
0x01 |
PidLidTaskComplete |
0x8149 |
0x000B (PtypBoolean) |
0x00 |
PidLidTaskFFixOffline |
0x8156 |
0x000B (PtypBoolean) |
0x00 |
PidLidTaskOwnership |
0x8154 |
0x0003 (PtypInteger32) |
1 (task assigner's copy) |
PidLidTaskAcceptanceState |
0x8151 |
0x0003 (PtypInteger32) |
2 (Accepted) |
PidLidTaskHistory |
0x8150 |
0x0003 (PtypInteger32) |
1 (Accepted) |
PidLidTaskLastUpdate |
0x8153 |
0x0040 (PtypTime) |
2008/02/19 |
PidLidTaskLastUser |
0x8152 |
0x001F (PtypString) |
"Scott Bishop" |
PidLidTaskLastDelegate |
0x82C5 |
0x001F (PtypString) |
"Scott Bishop" |
PidLidTaskVersion |
0x8158 |
0x0003 (PtypInteger32) |
4 |
PidLidTaskState |
0x8148 |
0x0003 (PtypInteger32) |
3 (task assigner's copy of an accepted Task object) |
PidLidTaskAssigner |
0x8159 |
0x001F (PtypString) |
"" |
PidLidTaskOwner |
0x801B |
0x001F (PtypString) |
"Scott Bishop" |
PidLidTaskFCreator |
0x82CA |
0x000B (PtypBoolean) |
0x01 |
PidLidTaskOrdinal |
0x815D |
0x0003 (PtypInteger32) |
-1000 |
PidLidTaskFRecurring |
0x814B |
0x000B (PtypBoolean) |
0x00 |
PidLidTaskGlobalId |
0x8211 |
0x0102 (PtypBinary) |
0E B0 1E 03 85 02 EF 4B 9A 14 50 83 B3 BB 4D E9 |
The client saves and closes the local Task object, embedded Task object, and Attachment object by using, in order, the following operations: RopSaveChangesMessage ([MS-OXCROPS] section 2.2.6.3) with the handle to the local Task object, RopRelease with the handle to the embedded Task object, RopRelease with the handle to the Attachment object, and RopRelease with the handle to the local Task object.