使用过滤器和相关数据进行同步
此主题仅适用于 ArcEditor 和 ArcInfo。
对于双向和单向复制,在同步期间会应用复本创建时所使用的相同过滤器和关系类规则,但不会应用基于选择集的过滤器。确定要发送的更改时,将对上次同步之后各个复本数据集中应用的所有编辑进行评估。如果某一编辑符合复本过滤器,则同步该编辑。
下图说明了在编辑会话中移动要素时如何在同步期间应用复本区域过滤器。同步期间,以下编辑将被发送到关系复本:
- 将要素移动到复本区域内的新位置。
- 从复本区域内移出要素。尽管要素位于复本区域之外,但同步期间也会针对关系复本而更新要素的新位置。注意:要发送编辑,要素在上次同步时必须位于复本过滤器内部。例如,假设插入要素后将其移出,然后与关系复本进行同步,则不会发送这些更改。
- 将要素从复本区域外移动到复本区域内。
移动未处于复本区域内部的要素时(情况 4),此要素在同步期间不会针对关系复本进行更新。
基于选择集的过滤器在复本创建期间应用,但在同步时将被忽略。同步过程将选择集过滤器视为所有行。例如,如果在创建复本时仅使用一个选择集来定义要从表中复制的行,则在同步期间对该表所做的全部更改都将得到应用。如果在创建复本时使用选择集和其他过滤器定义要从表中复制的行,则在同步期间仅应用其他过滤器。例如,在创建复本时使用了选择集和定义查询,则在同步期间仅应用定义查询。
如果正在复制的数据包括关系类,则会对同步过程产生影响。下面介绍关系类在同步期间的应用方式。
如果编辑不符合过滤器,则在满足以下条件时该编辑仍能够得到同步:
- 它属于具有仅架构过滤器的数据集并且包含在至少一个关系类中。
它还必须满足下述条件之一:
- 它与另一个满足过滤器的数据集中的一行相关联。与之相关联的行在上次同步之后并不需要经过编辑。
- 它所处的数据集与具有仅架构过滤器的数据集相关联。
这意味着如果要素类或表具有仅架构过滤器以外的其他过滤器,则其中的行仅在满足这些过滤条件时才会得到同步。
这些规则也允许链接相关数据。当关系类中较远的目标类中的行可通过多个关系追溯至复本中的原始版本时,可能会发生这种情况。
示例
在本示例中,选择三个建筑物进行复制。因为相关记录包含在复本创建过程中,所以也复制相关目标类。在子复本上编辑与原始要素相关联的目标类字段。同步复本时,在父复本中的相关目标类上更新这些编辑。
维护关系
同步过程会维护关系。例如,如果将新关系添加到关系复本,则同步所包含的行时将维护该关系。如果原始键是 objectID 字段,则可能需要更改接收更改的复本上的外键值才能维护关系。
以下示例描述同步期间相关记录的行为:
示例一
在第一个示例中,选择原始类中的一些要素(建筑物)进行复制。建筑物通过非属性化关系与表中未包括在复制过程中的属性记录相关联。在子复本上进行编辑时,删除了一个建筑物。同步时,为将与被删除的要素的关系置为无效,相关目标类(表)中的外键字段中的对应条目被设置为 NULL。
此同步行为也可能导致表示属性关系类表中关系的行被删除(如下一示例所示)。
示例二
在本例中,原始要素类与目标类表之间的关系是属性化关系,这意味着关系本身具有相关联的表。关系和目标类都被排除在复本创建过程之外。在子复本上对原始要素类进行编辑使得一个要素被删除。同步时,属性化关系类表中表示此要素与目标类中对象的关系的行将被删除。
同步时,仅删除关系,相关对象本身不会被删除。