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.