FieldDefinition 流结构

适用于:Outlook 2013 | Outlook 2016

FieldDefinition 流结构包含用户定义的字段的字段定义,或内置字段的一组数据绑定设置。

如果结构包含用户定义的字段的字段定义,则可以以编程方式操作 FieldDefinition 流结构。 如果结构包含内置字段的设置,则不应尝试以编程方式创建或修改 FieldDefinition 结构。 应使用 Microsoft Outlook 窗体Designer来维护内置字段的此类设置。

注意

Outlook 支持两种格式的字段定义:PropDefV1 和 PropDefV2。 字段定义的 PropDefV1 格式包含以下数据元素:Flags、VT、DispId、NmidNameLength、NmidName、NameANSI、FormulaANSI、ValidationRuleANSI、ValidationTextANSI 和 ErrorANSI。 PropDefV2 格式包含相同的元素以及 InternalType 和 SkipBlocks 元素。

Outlook 不维护 PropDefV2 字段定义格式的 FormulaANSI、ValidationRuleANSI 和 ValidationTextANSI 数据元素的 Unicode 版本。 如果这些元素包含非 ASCII 字符,则根据运行 Outlook 的计算机的 ANSI 代码页,这些字符的解释可能会不一致。 因此,对于这些数据元素,应仅使用完全由 ASCII 字符组成的字符串值。

此流中的数据元素以 little-endian 字节顺序存储,并按下面指定的顺序紧跟彼此。

  • 标志:DWORD (4 个字节) ,这是零个或多个标志的组合,其值和含义在下表中列出。

    标志名称 说明
    PDO_IS_CUSTOM
    0x00000001
    FieldDefinition 结构包含用户定义的字段的定义。
    PDO_REQUIRED
    0x00000002
    对于绑定到此字段的窗体控件,在“属性”对话框的“验证”选项卡中选中此字段的“值”的“检查”框。
    PDO_PRINT_SAVEAS
    0x00000004
    对于绑定到此字段的窗体控件,在“属性”对话框的“验证”选项卡中选择了“包括此字段用于打印和另存为”的“检查”框。
    PDO_CALC_AUTO
    0x00000008
    对于绑定到此字段的窗体控件,“属性”对话框的“”选项卡中选择了“自动计算此公式”的“检查”框。
    PDO_FT_CONCAT
    0x00000010
    这是一个类型为“组合”的字段,它在其“组合公式字段”对话框中选中了“联接字段和彼此之间的任何文本片段”选项。
    PDO_FT_SWITCH
    0x00000020
    此字段的类型为“组合”,并且具有“仅显示第一个非空字段,忽略在”组合公式字段“对话框中选择的后续字段选项。
    PDO_PRINT_SAVEAS_DEF
    0x00000040
    Outlook 未使用此标志,但它包含在所有用户定义字段定义中。
  • VT:WORD (2 个字节,) 字段的数据类型,它是 VARENUM 枚举中的常量。

  • DispId:DWORD (字段的调度标识符) 4 个字节。 对于用户定义的字段,值为 0。

  • NmidNameLength:WORD (2 个字节) ,即 NmidName 数组中的元素数。

  • NmidName:WCHAR 的数组。 对于用户定义的字段定义,这是 Unicode (UTF-16) 字段名称的表示形式。 此数组的计数等于 NmidNameLength。

  • NameANSI: PackedAnsiString 流结构。 这是字段名称的 ANSI 表示形式。

  • FormulaANSI:PackedAnsiString 流结构。 这是字段计算公式的 ANSI 表示形式。 它显示在绑定到此字段的窗体控件的“属性”对话框的“”选项卡的“初始值”部分。

  • ValidationRuleANSI:PackedAnsiString 流结构。 这是字段验证公式的 ANSI 表示形式。 它显示在绑定到此字段的窗体控件的“属性”对话框的“验证”选项卡上的“验证公式”文本框中。

  • ValidationTextANSI:PackedAnsiString 流结构。 这是字段的验证失败文本的 ANSI 表示形式。 如果验证失败,则显示在绑定到此字段的窗体控件的“属性”对话框的“验证”选项卡上的“显示此消息”文本框中。

  • ErrorANSI:PackedAnsiString 流结构。 Outlook 不使用此元素;应将此元素设置为空字符串。

  • InternalType:DWORD (4 个字节,) 字段的内部类型。 仅当字段定义格式为 PropDefV2 时,此数据元素才存在。 内部类型是以下值之一,每个值对应于用户定义字段的“ 新建字段 ”对话框中的类型。

    内部类型名称 “新建字段”对话框中的相应类型
    iTypeString
    0
    Text
    iTypeNumber
    1
    Number
    iTypePercent
    2
    Percent
    货币
    3
    Currency
    iTypeBool
    4
    是/否
    iTypeDateTime
    5
    日期/时间
    iTypeDuration
    6
    Duration
    iTypeCombination
    7
    组合,使用“仅显示第一个非空字段,忽略在”组合公式字段“对话框中选择的后续字段选项。
    iTypeFormula
    8
    Formula
    iTypeResult
    9
    此类型不用于用户定义的字段。
    iTypeVariant
    10
    此类型不用于用户定义的字段。
    iTypeFloatResult
    11
    此类型不用于用户定义的字段。
    iTypeConcat
    12
    组合,在“组合公式字段”对话框中选中“联接字段和任意文本片段”选项。
    iTypeKeywords
    13
    关键字
    iTypeInteger
    14
    Integer
  • SkipBlocks:一系列一个或多个 SkipBlock 流结构。 仅当字段定义格式为 PropDefV2 时,此数据元素才存在。 如果字段定义格式为 PropDefV2,则序列应至少包含一个 SkipBlock 结构,即 Size 数据元素等于 0 的 SkipBlock 结构,并且该系列应以此 SkipBlock 结构开头并终止。

    SkipBlock 结构的用途取决于它在 SkipBlocks 系列中的相对位置。 如果字段定义采用 PropDefV2 格式,并且第一个结构不是终止结构 (Size 数据元素大于 0) ,则 Outlook 假定第一个 SkipBlock 结构指定 Unicode (UTF-16) 中的字段名称。

    重要

    如果第一个 SkipBlock 是终止结构,则 NameANSI 数据元素用于确定字段名称。 如果该字符串包含任何非 ASCII 字符,则这些字符的解释可能会不一致,具体取决于运行 Outlook 的计算机的 ANSI 代码页。 若要防止此类不一致,请确保始终在创建的字段定义中指定第一个 SkipBlock,至少在字段名称包含非 ASCII 字符时如此。

    如果字段定义格式的未来版本在 FieldDefinition 流中引入其他数据片段,则此数据可以作为其他 SkipBlock 流结构存储在 SkipBlocks 系列中,然后再终止的 SkipBlock 结构(大小数据元素等于 0)。 早期版本的 Outlook 可以安全地忽略这些额外的 SkipBlock 结构,一直忽略终止的 SkipBlock 结构,并且仍可以正确处理它们支持的所有块。

另请参阅