协调和提交对传统版本的编辑

对版本树中的版本进行编辑后,版本开始彼此不同。从祖先版本检索任何更改内容并将版本中的编辑内容合并到祖先版本的过程称为协调和提交过程。完成某一版本的编辑后,可将进行的更改合并到另一个版本。使用传统版本化,您可以将更改合并到该版本的任意原型版本(如父版本或 Default 版本)。

在开始处理当前版本时,其他用户可能已经对祖先版本进行了更改,其更改内容与您的编辑内容可能存在冲突。在对编辑内容和目标版本进行协调时将会发现这些冲突。

如果存在冲突,ArcGIS Pro 会对其进行解决,具体依照编辑版本表示还是目标版本表示将取决于首选项设置。最初冲突解决后,您可以逐一检查这些冲突,如有必要,可进行任何更改。例如,如果优先在编辑版本中解决冲突,则您可以选择优先在目标版本中替换此冲突,或者使用编辑工具采用其他方式来修改此冲突。

注:
本主题介绍使用版本化选项卡协调和提交的过程。您还可以使用协调版本地理处理工具协调和提交版本,当您处于版本视图中时,可以使用版本选项卡上的协调/提交按钮 协调和提交 来执行此操作。

协调过程

在传统版本化中,要使用祖先版本协调编辑内容,以下条件必须为真:

  • 您必须是正在对当前协调的传统版本进行编辑的唯一用户。
  • 任何其他用户都不能编辑目标版本。例外是目标版本是否为默认版本。即使其他用户正在编辑默认版本,也可以针对默认版本进行协调。
  • 您必须能够查看目标版本,这意味着目标版本可以是公有的,也可以是受保护的。如果目标版本是私有的,您必须是版本所有者或地理数据库管理员。
  • 如果工作流是一个用户编辑,另一个用户协调,则要确保协调的用户对已在版本中修改的所有要素类和表具有所有权限;否则,该用户将无法协调。执行协调过程的用户必须对已经进行修改的任何关系(包括基本或复合关系)的双方具有所有权限。在这种类型的工作流程中,执行协调过程的用户还必须具有足够的版本权限。协调用户必须能够修改要协调的版本(这表示该版本必须是公有的),而且必须能够查看目标版本(这表示该用户必须拥有该目标版本或者该目标版本必须是公有的或受保护的)。

要更改协调操作期间的冲突处理方式,请参阅用于编辑的版本化选项

要执行协调过程,您可以在版本化选项卡上访问协调命令,方法是单击内容窗格中的按数据源列出按钮 按数据源列出。要开始协调过程,可单击版本化选项卡上的协调按钮。将显示协调对话框。

协调对话框出现后,需要提供以下信息:

  • 目标版本。
  • 您希望定义冲突的方式。您具有以下几种选项:

    定义冲突的级别要检测这些情况

    行(按对象)

    另一用户像您一样编辑同一行或要素或者拓扑结构上相关的要素。即使您编辑不同属性,也会发生冲突。

    列(按属性)

    另一用户编辑某一要素或某个表的同一属性。这是默认设置。

    用于定义冲突的选项

  • 希望 ArcGIS Pro 解决冲突的方式 您具有以下几种选项:

    解决冲突描述

    优先使用编辑版本(您正在编辑的版本)

    当前版本中的所有冲突要素优先于目标版本中的冲突表示。

    优先使用目标版本

    当前版本中的所有冲突要素将替换为目标版本中的冲突表示。

    用于解决冲突的选项

注:

无法使用“撤消”操作撤消协调操作。要撤销协调,您可以放弃更改,而不进行保存。

要使用祖先版本对传统版本中的编辑内容进行协调,请执行以下操作:

  1. 单击版本化选项卡上版本化组中的协调

    将显示协调对话框。

  2. 选择目标版本。
  3. 指定定义冲突的方式。
  4. 指定是优先使用编辑版本还是其他目标版本解决所有冲突。
  5. 单击确定

如果存在冲突,ArcGIS Pro 将根据您的首选项设置解决冲突。冲突解决后,您可以逐一检查这些冲突,如有必要,可进行任何更改。例如,如果依照编辑版本解决了冲突,您可以选择依照目标版本进行替换,或者使用编辑工具通过其他方式对其进行修改。

协调过程仅更新编辑版本,以便 ArcGIS Pro 可以检查冲突;此过程不会将更改内容合并到目标版本中。完成协调并查看所有冲突后,通过将更改提交到目标版本来完成合并过程。

使用“冲突”视图查看冲突

如果在协调时检测到冲突,您可以选择使用交互式“冲突”视图对其进行查看。该视图可以停靠在应用程序中的任意位置,也可以定位为浮动窗口。由此您能够同时与地图视图进行交互以提供背景并进一步浏览数据。

“冲突”视图包含所有冲突类及其处于冲突状态的要素或行。冲突按数据源、类、冲突类别和 ObjectID 进行组织。冲突类表示整个独立数据中存在冲突的图层。

冲突视图允许您执行以下操作:

  • 确定处于冲突状态的字段或行。
  • 查看冲突。
  • 将冲突标记为已查看或未查看。
  • 通过指定用来代替要素或属性的表示以解决冲突。

在以下几种情况下发生冲突:

  • 在当前正在编辑的版本和目标版本中对同一要素进行更新。
  • 在一个版本中更新某个要素,而在另一版本中删除该要素。
  • 在当前正编辑的版本和目标版本中修改拓扑结构上相关的要素或关系类。

“冲突”视图还包含“冲突显示”部分,用于查看几何编辑的不同表示形式。冲突显示中的内容取决于活动地图中是否存在冲突类:

  • 如果活动地图中存在冲突类,冲突显示将显示所有地图图层、使用地图符号系统并包括底图。
  • 如果活动地图中不存在冲突类,冲突显示将仅显示冲突的图层、使用默认符号系统且不包括底图。

确定处于冲突状态的字段或行

冲突视图左上角的列表框可显示所有冲突类和要素。此列表用于告知所有要素类中的冲突总数。

单击对象上的下拉箭头时,将显示每个要素的冲突。这些冲突将分为三种可能的类别:

  • 更新-删除 - 要素已在当前版本中更新并在目标版本中删除
  • 删除-更新 - 要素已在当前版本中删除并在目标版本中更新
  • 更新-更新 - 要素已在当前版本和目标版本中更新

在列表中选择单个要素的 ObjectID 后,“冲突”视图右侧的信息格网中将显示要素的当前版本、目标版本和公共祖先版本中的列和属性。

通过使要素表示的所有属性和值处于冲突状态,您可以查看不同版本之间属性值的差异程度并选择要保留的数据的表示。

  • 当前版本表示对要素和属性所做的编辑。
  • 目标版本表示由其他用户进行编辑和协调的要素及其属性。这是您在打开“冲突”视图时选择的目标版本
  • 公共祖先版本是数据库中的要素及其属性的表示;这是未经任何编辑的要素和属性。

行左侧的红色指示器用于标识冲突。例如,如果已在各版本中对要素几何进行了编辑,则会在 Shape 字段旁显示红色指示器。

如果其他属性字段处于冲突状态,则将在行的左侧显示红色指示器。如果在任一版本中删除了某个要素,则会对该版本的属性值显示 <已删除>

如果已将要素插入编辑版本且这些要素被提升为冲突,则会在目标公共祖先版本中显示 <不存在>

您可以使用对话框底部的两个按钮在显示所有字段或仅显示处于冲突状态的字段之间进行切换。

注:

所有字段都显示在“冲突”视图中;但是,应用冲突过滤器的字段不会标识为存在冲突,也不会显示红色指示器。

标记为已查看或未查看

一旦确定处于冲突状态中的字段或行,您可以将要素标记为已查看。您可以追踪列表中已检查的要素,因为这些被标记为已查看的要素将不再显示为粗体。

如果决定以后要重新查看要素冲突,则可右键单击冲突列表中的 ObjectID,然后单击标记为未查看。这会使得要素重新显示为粗体。

如果您单击视图顶部的过滤已查看冲突复选框,您可以过滤列表,以便仅显示尚未查看的冲突。

解决冲突

解决冲突时,您需决定要保留要素和属性的哪个表示。无论您选择优先使用哪个版本(目标版本还是已编辑版本)进行协调,您都可以指定要保留哪个表示:当前表示(协调之前在您的版本中的显示方式)、目标表示(另一编辑器进行更改后的显示方式)或公共祖先表示(要素或属性在目标版本中的显示方式)。

要解决冲突,可使用四种替换选项:

  • 属性替换:

    它在字段级出现。如果属性中存在冲突,可以将当前版本中的属性值替换为当前、目标或公共祖先表示中的属性值。要执行此操作,右键单击冲突中的属性,然后在菜单中单击您想要的选项。

  • 要素替换:

    它在行级出现。可以将整个要素替换为当前、目标或公共祖先版本中的要素的表示。这意味着将替换冲突中的所有字段。

  • 类级别替换:

    要解决冲突,可以选择将整个要素类的当前表示替换为当前、目标或公共祖先版本表示。这将立即替换所有的冲突要求和属性,使用户能够快速更新和替换冲突要素。如果在差异列表中存在多个要素,则会将所有的要素替换为您所选择的版本。

    要选择类级别替换选项,右键单击差异列表中的要素类名称,然后单击任意想要使用的版本。

  • 完全替换:

    这是一个根级别替换。使用此替换选项会将列表中的所有冲突要素和要素类替换为所指定的表示。如果在冲突中存在多个要素类和多个对象,则所有的这些要素类和对象都会被替换为您所选择的版本。

    右键单击差异列表顶部的版本和连接信息,然后单击要用于替换所有冲突的版本。

字段级别冲突过滤

在使用传统版本化的一些情况下,一旦在协调期间检测到冲突,您可能想要将编辑内容应用至要保留的一个或一组字段。以下示例为,进行协调时可能想要过滤出在字段上检测到的冲突:

  • 将对不同版本的字段执行批量更新
  • 根据在版本中执行的编辑操作在字段中写入信息

为避免在父版本和子版本中更新相同属性时发现冲突,可以使用添加字段冲突过滤器工具,定义要通过冲突过滤的一组字段。通过字段冲突过滤器,可在通过冲突检测过滤要素类时在要素类中标记一个或一组字段。如果仅编辑应用冲突过滤器的字段,协调操作期间不会返回冲突。仅适用于按属性定义冲突。

注:

所有字段都显示在“冲突”视图中;但是,应用冲突过滤器的字段不会标识为存在冲突,也不会显示红色指示器。

对更改内容进行协调后,放置在带有冲突过滤器的字段中的值取决于是选择优先使用目标版本还是编辑版本进行协调。如果选择优先使用目标版本执行协调,则带有冲突过滤器的字段将具有与目标版本相同的值。如果选择优先使用编辑版本执行协调,则带有冲突过滤器的字段将具有与编辑版本相同的值。

移除字段冲突过滤器工具可从这些字段中移除这些冲突过滤器。ListFieldConflictFilters Python 函数可用于确定何时为要素类或表定义了冲突过滤器。

注:

为要素类或表定义了字段冲突过滤器后,10.2.1 版之前的 ArcGIS 客户端将被禁止打开要素类或表。字段冲突过滤器可在字段中定义,如果之前版本的 ArcGIS 需要访问数据,则可以在协调版本后将其移除。

使用属性规则解决冲突

属性规则可改善地理数据库数据集的编辑体验并提高数据完整性。针对实时计算或约束规则协调传统版本化要素类将会评估这些属性规则。如果违反了约束规则,则会报告约束规则错误,并且协调失败。按行协调冲突,以避免约束规则错误。

解决与关系类之间的冲突

使用关系类有助于增强相关对象之间的引用完整性。如果版本化数据源参与关系类,则协调过程将评估此数据的引用完整性。如果违反了引用完整性,则参与要素将报告为冲突,并可以在“冲突”视图中进行查看。

从源关系类中删除要素可能会生成一条从目标关系类中删除要素的消息。因此,请注意仅替换涉及参与关系类的要素类的冲突的结果。

下面是关系要素类之间可能出现的冲突的示例:

  • 在父版本中,添加目标要素并将其关联到原始类中的某个要素。
  • 在子版本中,删除用于关联新目标要素的同一个源要素。
  • 协调编辑后,将在源类上检测出“删除-更新”冲突。

下面是另一个示例:

  • 在电力公共设施要素数据集中,删除与某个变压器关联的电线杆会导致关联的变压器也被删除。
  • 同时在另一个编辑会话中,编辑器会更改刚刚因删除与其关联的电线杆而被删除的变压器的属性。
  • 协调编辑后,将在源类和目标类上检测出“更新-删除”冲突。

在上一个示例中,如果第二个编辑器选择使用编辑会话表示替换所有冲突,则会重新创建在编辑会话期间删除的电线杆和变压器。

提交更改

要将编辑提交到目标版本,您必须具有编辑该版本的权限。这意味着,该版本必须将访问属性设置为公共,或您必须是地理数据库管理员。

要在协调并查看了冲突后将更改提交到目标版本,请在版本化选项卡的版本化组中单击提交

提示:

其他正在读取您所提交的目标版本的用户在刷新他们的版本化工作空间之前,看不到提交的更改内容。

有关提交过程的其他信息:

  • 只有在上次协调更改内容后未对目标版本做出任何修改时,才能提交更改内容。如果在此期间修改了目标版本,则必须在提交前重新进行协调。
  • 提交更改内容后无法进行撤消,因为对其应用更改的版本不是当前正在编辑的版本。
  • 提交后,可在版本中继续执行进一步编辑。要将这些更改应用到目标版本,必须再次执行协调、解决冲突和提交过程。

如果提交操作标志着工作流结束,则可删除已编辑的版本