3.2.2.5 DocumentParts Property Example

This is an example of a DocumentParts property (VtVecUnalignedLpstr property (section 2.3.3.1.10)).

The DocumentParts property ought to be viewed together with the HeadingPairs Property (section 3.2.2.6) because the data in the two are closely related. This relationship is illustrated by the following diagram.

Relationship between the DocumentParts property and the HeadingPairs property

Figure 21: Relationship between the DocumentParts property and the HeadingPairs property

In the figure, the first element of the HeadingPairs property has a headingString value of "Title", meaning it is associated with the title group in the DocumentParts property. The value of the headerParts field is 1, meaning there is only 1 element in the DocumentParts property that is in the title group, LpstrElement-1. The headingString of the second element in the HeadingPairs property is "Headings", meaning this element is associated with the headings group in the DocumentParts property. HeaderParts equals 8, meaning there are 8 elements in the DocumentParts property that are in the headings group. They are LpstrElement-2 through LpstrElement-9.

Offset

Size

Structure

Value

00000154

010D

TypedPropertyValue - GKPIDDSI_DOCPARTS

00000154

0002

    WORD - wType

0x101E

00000156

0002

    WORD - padding

0x0000

00000158

0109

    VtVecUnalignedLpstrValue - UnalignedLpstr Vector

00000158

0004

        DWORD - cElements

0x00000009

0000015C

0105

        Array of UnalignedLpstr - rgString

0000015C

0020

            UnalignedLpstr - LpstrElement-1

0000015C

0004

                DWORD - cch

0x0000001C

00000160

001C

                Array of CHAR - value

Invoice Approval Procedures

0000017C

0017

            UnalignedLpstr - LpstrElement-2

0000017C

0004

                DWORD - cch

0x00000013

00000180

0013

                Array of CHAR - value

Approval Procedure

00000193

0019

            UnalignedLpstr - LpstrElement-3

00000193

0004

                DWORD - cch

0x00000015

00000197

0015

                Array of CHAR - value

    Manager Approval

000001AC

001C

            UnalignedLpstr - LpstrElement-4

000001AC

0004

                DWORD - cch

0x00000018

000001B0

0018

                Array of CHAR - value

    Skip-level Approval

000001C8

0021

            UnalignedLpstr - LpstrElement-5

000001C8

0004

                DWORD - cch

0x0000001D

000001CC

001D

                Array of CHAR - value

        Organizational Chart

000001E9

0024

            UnalignedLpstr - LpstrElement-6

000001E9

0004

                DWORD - cch

0x00000020

000001ED

0020

                Array of CHAR - value

        Skip-level verification

0000020D

0017

            UnalignedLpstr - LpstrElement-7

0000020D

0004

                DWORD - cch

0x00000013

00000211

0013

                Array of CHAR - value

Verification Steps

00000224

001D

            UnalignedLpstr - LpstrElement-8

00000224

0004

                DWORD - cch

0x00000019

00000228

0019

                Array of CHAR - value

    Manager Verification

00000241

0020

            UnalignedLpstr - LpstrElement-9

00000241

0004

                DWORD - cch

0x0000001C

00000245

001C

                Array of CHAR - value

    Skip-level Verification

Figure 22: Structure of a DocumentParts property

In this example, the LpstrElements share the same structure. For brevity, only one of them is explained in the following section. LpstrElement-2 is explained because it is more representative in the calculation of count of bytes.         

GKPIDDSI_DOCPARTS: DocumentParts.

wType: 0x101E indicates this property value is an array of single-byte character strings. In the case of DocumentParts this indicates the property is a VtVecUnalignedLpstr property (section 2.3.3.1.10).

UnalignedLpstr Vector.cElements: 0x00000009 indicates there are 9 elements in the VtVecUnalignedLpstr (section 2.3.3.1.10).

UnalignedLpstr Vector.rgString.LpstrElement-2: The second UnalignedLpstr (section 2.3.3.1.5) in this vector.

UnalignedLpstr Vector.rgString.LpstrElement-2.cch: 0x00000013 (19) is the count of bytes of the value field of the UnalignedLpstr (section 2.3.3.1.5) ("Approval Procedure" followed by a terminating NULL character). The UnalignedLpstr (section 2.3.3.1.5) structure does not require padding. Therefore, in this example, even though 19 is not a multiple of 4 bytes, no padding is added to the value field.

UnalignedLpstr Vector.rgString.LpstrElement-2.value: "Approval Procedure" is the value of the value field of this UnalignedLpstr (section 2.3.3.1.5).

The rest of the UnalignedLpstr (section 2.3.3.1.5) structures in this example have the same format as the Vector.rgString.LpstrElement-2 structure defined previous.