ISyncMetadataStore::InitializeReplicaMetadata
为副本创建、初始化并保存新元数据。
HRESULT InitializeReplicaMetadata(
BYTE * pbReplicaId,
ID_PARAMETERS * pIdParameters,
CUSTOM_FIELD_DEFINITION * pItemCustomFields,
ULONG cItemCustomFields,
CUSTOM_FIELDS_INDEX * pItemCustomFieldsIndexes,
BYTE cItemCustomFieldsIndexes);
参数
- pbReplicaId
[in] 由正在创建和初始化的元数据表示的副本的副本 ID。
- pIdParameters
[in] 提供程序的 ID 格式架构。
- pItemCustomFields
[in, unique, size_is(cItemCustomFields)] 用于描述与元数据项相关联的自定义元数据字段的架构信息。如果不存在自定义元数据字段,则可以为 NULL。
- cItemCustomFields
[in] pItemCustomFields 中的字段数。
- pItemCustomFieldsIndexes
[in, unique, size_is(cItemCustomFieldsIndexes)] 可用于更有效地查找元数据存储区中的项的索引架构列表。如果不存在索引架构,则可以为 NULL。
- cItemCustomFieldsIndexes
[in] pItemCustomFieldsIndexes 中的索引数。
返回值
S_OK。
E_POINTER。
E_OUTOFMEMORY。
如果 pItemCustomFields 为 NULL 而 cItemCustomFields 不为 0,或 pItemCustomFields 为非 NULL 而 cItemCustomFields 为 0;或者,如果副本 ID 或 ID 参数无效或者 pItemCustomFields 指定的一个自定义字段无效,则返回值为 E_INVALIDARG。
如果尚未打开存储区,则返回值为 E_UNEXPECTED。
如果 pItemCustomFieldsIndexes 中指定的某个字段名称在 pItemCustomFields 中没有对应的指定字段,则返回值为 SYNC_E_METADATA_FIELD_INVALID_NAME。
如果指定副本的元数据已经存在(如再次调用此方法后),则返回值为 SYNC_E_METADATA_REPLICA_ALREADY_EXISTS。
备注
元数据存储服务实现所使用的元数据存储区会对自定义字段强加一些限制。有关详细信息,请参阅 CUSTOM_FIELD_DEFINITION 结构。
可以使用 pItemCustomFields 为项元数据定义一组自定义字段。每个字段均由一个唯一的字符串名称和一个值组成。这些字段可用于存储项的默认元数据集不支持的任何其他元数据。可以使用 IItemMetadata 的各种方法(如 IItemMetadata::TryGetFieldByteArray 或 IItemMetadata::SetFieldByteArray)访问这些字段。
可以使用 pItemCustomFieldsIndexes 定义一组索引架构,这样就可以将自定义字段集用作索引,从而有效地在元数据存储区中查找项。索引架构可定义为唯一,以确保该索引定义单个项。包含在索引架构中的每个字段也还必须存在于为副本定义的自定义字段架构中。可以在如 IReplicaMetadata::FindItemMetadataByIndexedFields 和 IReplicaMetadata::FindItemMetadataByUniqueIndexedFields 等方法中使用索引字段。