使用数据迁移工具

数据迁移工具是在 Frappe Framework 第 9 版中引入的。

数据迁移工具旨在抽象远程数据源与 DocType 之间的所有数据同步操作。它是基于 Frappe 的网站与远程数据源之间的中间层。

为了理解这个工具,让我们创建一个连接器,将 ERPNext 物料推送到一个名为 Atlas 的虚拟服务中。

数据迁移计划

数据迁移计划封装了一组映射。

让我们创建一个新的 数据迁移计划。将计划名称设置为“Atlas 同步”。我们还需要在映射子表中添加映射。

数据迁移映射

数据迁移映射是一组规则,用于指定字段到字段的映射关系。

创建一个新的 数据迁移映射。将其命名为“物料到 Atlas 物料”。

要定义映射,我们需要输入一些值来定义本地和远程数据的结构。

  1. 远程对象名称:用于标识远程对象的名称,例如 Atlas 物料
  2. 远程主键:这是 Atlas 物料的主键名称,例如 id
  3. 本地 DocType:用于同步的 DocType,例如物料
  4. 映射类型:映射类型可以是“推送”或“拉取”,取决于数据是要映射到远程还是本地。也可以是“同步”,它将在单个周期内同时执行推送和拉取操作。
  5. 页长度:这定义了同步的批处理大小。

指定字段映射:

字段映射最基本的形式是指定远程和本地对象的字段名称。但是,如果映射是单向的(推送或拉取),则源字段名称也可以采用带引号的字面值(例如 "GadgetTech")和 eval 语句(例如 "eval:frappe.db.get_value('Company', 'Gadget Tech', 'default_currency')")。例如,在推送映射的情况下,本地字段名称可以设置为带引号的字符串或 eval 表达式,而不是本地 doctype 中的字段名称。(这在同步映射中是不可能的,因为在同步映射中,本地和远程字段名称在某个时刻都充当目标位置,因此不能是字面值)。

让我们添加字段映射并保存:

我们现在可以将“物料到 Atlas 物料”映射添加到我们的数据迁移计划中并保存。

通过前置和后置处理增加额外的控制层:

数据迁移通常除了字段间的一对一映射之外,还涉及更多步骤。对于添加到计划中的数据迁移映射,会在该计划指定的模块中生成一个映射模块。

在我们的案例中,在 Integrations(“Atlas 同步”计划的模块)中的 data_migration_mapping 目录下创建了一个 item_to_atlas_item 模块。

您可以实现 pre_process(接收源文档)和 post_process(接收源文档和目标文档,以及任何附加参数)方法,以扩展映射过程。以下是一些可能操作的示例:

数据迁移连接器

现在,要连接到远程源,我们需要创建一个 数据迁移连接器。

我们目前只有两种连接器类型,让我们在数据迁移连接器 DocType 中添加另一种连接器类型。

现在,让我们创建一个新的数据迁移连接器。

如您所见,我们选择了连接器类型为 Atlas。我们还为我们的 Atlas 实例添加了主机名、用户名和密码,以便进行身份验证。

现在,我们需要为我们的连接器编写代码,以便我们能够实际推送数据。

在 frappe/data_migration/doctype/data_migration_connector/connectors/ 目录下创建一个名为 atlas_connection.py 的新文件。其他连接器也存放在这里。

我们只需要为我们的 atlas 连接器实现 insert、update 和 delete 方法。我们还需要在 __init__ 方法中编写代码来连接到我们的 Atlas 实例。请参阅 frappe_connection.py 作为参考。

创建 Atlas 连接器后,我们还需要将其导入到 data_migration_connector.py 中

数据迁移运行

现在我们有了连接器,最后要做的事情是创建一个新的 数据迁移运行。

数据迁移运行接收一个数据迁移计划和一个数据迁移连接器,并根据我们的配置执行该计划。它负责处理排队、批处理、增量更新等。

只需点击“运行”。它将把我们的物料推送到远程 Atlas 实例,您可以看到实时更新的进度。

运行成功执行后,您不能再次运行它。您必须创建另一个运行并执行它。

数据迁移运行将尽可能高效,因此下次执行时,它将只推送上次运行中更改或失败的物料。

注意:数据迁移工具仍处于测试阶段。如果您发现任何问题,请在此处报告