介绍
配置
使用OOERP
自动化
账户
资产
求购
客户关系管理
人力资源
电子商务
贷款管理
项目
质量管理
销售
库存
支持
网站
农业
教育
卫生保健
款待
制造业
非营利组织
定制化
一体化
区域性
OneOffice Logo

事件流

## 介绍

事件流支持两个或多个站点之间的站点间通信。您可以订阅文档类型并在不同站点之间流式传输文档。

例如:假设您在不同站点上托管了多个公司,其中之一是您要进行分类帐过帐的主站点,而在其他站点上会生成销售发票。在这种情况下,您可以使用事件流。为此,您的子公司站点可以订阅主公司站点的项目、客户和供应商文档类型。总公司又可以向子公司订阅销售发票。

要访问事件流,请转至:

主页 > 自动化 > 事件流

1.先决条件

在创建事件生产者之前,需要在两个站点上创建一个公共用户,该用户将用于访问该站点并将充当事件订阅者。确保用户是系统管理员,并且具有创建、更新和删除订阅的 DocType 所需的权限。

2. 如何设置事件流

我们举两个网站来解释一下这个过程。 http://test_site:8000(消费者站点)和 http://test_site_ Producer:8000(生产者站点)

2.1 从生产者站点获取事件订阅者的密钥

  1. 在 http://test_site_ Producer:8000(生产者站点)上,转到用户列表。
  2. 打开您要用作事件订阅者的用户文档。向下滚动到标有“API 访问”的部分。在该部分中,通过单击 生成密钥 按钮为用户生成密钥。您将收到包含用户机密的提示,复制用户机密并随身携带。它还会生成一个 API 密钥。

2.2 为消费者站点上的事件订阅者生成密钥

在 http://test_site:8000(消费者站点)上,转到用户列表并按照上一步中指定的相同流程进行操作。

2.3 在消费者站点创建事件生产者

  1. 您要订阅的站点称为事件生产者。为您希望从中获取更新的站点创建一个事件制作者文档。
  2. 在 http://test_site:8000(消费者站点)上,转至 主页 > 自动化 > 事件流 > 事件生成器
  3. 在 Producer URL 字段中输入您要订阅的站点的 URL(在本例中为 http://test_site_ Producer:8000)。
  4. 在事件生成器文档类型表中添加您想要订阅的所有文档类型。
  5. 如果您希望创建的文档与远程 Event Producer 站点上的名称相同,请根据所需的文档类型选中表中的“使用相同名称”复选框。
  6. 将事件订阅者字段设置为将用于创建从事件生产者获取的文档的用户。您需要以两种方式创建相同的用户,即在创建事件生产者之前在事件消费者和事件生产者站点上创建相同的用户。
  7. 将您在第一步 (2.1) 中生成的 API 密钥和 API 密钥分别粘贴到 API 密钥和 API 密钥字段中。
  8. 保存。
  9. 保存后,在生产者站点(http://test_site_ Producer:8000)上创建一个Event Consumer。在此过程中,消费者站点上用户的密钥将自动复制到生产者站点上的事件消费者文档中。

活动制作人

注意:如果任何这些站点上的用户的 API 密钥发生更改,您将必须手动更新两个站点上的事件生产者和事件使用者中的密钥。

2.4 在事件生产者站点上批准事件消费者

  1. 创建事件生产者后,生产者站点上会自动创建事件消费者。默认情况下,所有订阅的文档类型的状态均为“待处理”。为了使事件使用者能够使用这些文档类型的文档,需要将其状态更新为“已批准”。
  2. 转至:主页 > 自动化 > 事件流 > 事件使用者
  3. 打开事件消费者文档后,您将看到消费者已订阅的所有文档类型。将您想要批准使用的所有文档类型的状态从“待处理”更改为“已批准”。如果您不希望使用该文档类型的文档,您可以将状态更改为“已拒绝”。
  4. 保存。

事件消费者

注意:订阅文档类型的文档更新除非获得批准,否则不会同步。

2.5 单站点离线访问

如果您所在的某些地方的互联网连接速度较低,例如,位于偏远地区且生成销售发票的商店,并且您希望将这些发票从商店同步到托管帐户,则可以使用以下步骤设置离线同步:

  1. 设置 OneOfficeERP 本地实例。
  2. 现在在托管帐户上创建一个事件生成器,并将生成器 URL 设置为您本地帐户的 URL。
  3. 在事件生成器文档类型子表中添加您想要同步的任何文档类型。
  4. 批准文档类型。

3. 特点

3.1 取消订阅更新

作为事件使用者,如果您希望取消订阅之前订阅的任何文档类型的更新,请选中该文档类型的取消订阅。取消订阅后,您将不会再从制作者网站收到该特定文档类型的任何更新。

取消订阅

3.2 事件更新日志

“事件更新日志”记录事件生产者站点上拥有使用者的文档的每个创建、更新和删除操作。要查看事件更新日志:

转至:主页 > 自动化 > 事件流 > 事件更新日志

  • 对于“创建”类型,记录更新类型、文档类型、文档名称和整个文档(作为 JSON)。
  • 对于“更新”类型,记录更新类型、文档类型、文档名称和更新的数据(文档的先前状态和当前状态之间的差异)。
  • 对于“删除”类型,仅记录更新类型、文档类型和文档名称。

事件更新日志

3.3 事件同步日志

与更新日志一样,事件同步日志记录从事件生产者同步到事件消费者站点上的每个文档。要查看事件同步日志:

转至:主页 > 自动化 > 事件流 > 事件同步日志

事件同步日志

成功同步的事件会生成一个日志文档,其中包含:

  • 更新类型:创建、更新或删除
  • 状态:同步状态
  • 文档类型
  • 事件制作者:创建文档的站点 URL
  • 文件名称
  • 远程文档名称:如果未选中“使用相同名称”
  • 使用相同的名称
  • 数据:JSON 格式的文档数据

事件同步日志

失败的事件会生成一个包含上述字段以及以下字段的日志文档:

  • 错误:导致文档未同步的错误。

事件已同步

  • 重新同步按钮:它还提供了一个“重新同步”按钮,以便重新同步失败的事件。

事件失败

3.4 依赖同步

某些文档类型具有依赖性。例如,在同步销售发票之前,项目和客户需要存在于当前站点中。因此,项目和客户是销售发票的依赖项。事件流通过按需依赖同步来处理此问题。每当要同步任何文档时,它都会首先检查该文档是否具有任何依赖项(链接字段、动态链接字段、子表字段等)。如果该依赖关系未满足,即依赖文档(例如:项目)不存在于您的消费者站点上,则将首先同步该文档,然后同步销售发票。

例如:销售发票与项目依赖项同步: 事件依赖

3.5 命名配置

选中“使用相同名称”复选框以使文档在事件生产者和事件使用者站点上具有相同的名称。如果未选中此项,则将使用当前站点的命名约定创建文档。

使用同名配置

注意:对于具有命名系列的文档类型,建议不要选中“使用相同名称”复选框,以防止命名冲突。如果未选中此选项,则将按照当前站点上的命名约定创建文档,并在同步文档中设置“远程站点名称”和“远程文档名称”自定义字段以存储事件生产者站点 URL 和文档名称分别在远程站点上。

订阅文档

3.6 映射配置

如果您想要在具有相同或不同结构的特定文档类型的两个 OneOfficeERP 实例之间流式传输文档,或者如果两个站点中的字段名称不同,则可以使用具有映射配置的事件流。

为此,您需要首先设置文档类型映射。

要访问文档类型映射,请转至:

主页 > 自动化 > 事件流 > 文档类型映射。

1. 具有相似结构的 DocType 的映射

  • 映射名称:为映射指定唯一的名称
  • 本地文档类型:当前站点中的文档类型
  • 远程文档类型:您要同步的事件制作者站点上的文档类型

在字段映射子表中:

  • 本地字段名称:当前站点的本地文档类型中的字段名称。
  • 远程字段名称:您想要映射到本地字段名称的事件生产者站点的远程文档类型中的字段名称。在同步期间,远程字段名称的值被复制到本地字段名称。

文档类型映射

2. 某些字段的默认值

如果您的字段未映射到任何其他远程字段名称,并且您始终希望该字段具有相同的值,请在默认值字段中设置相同的值。如果您设置了远程字段名称,则发生此事件,以防在同步期间找不到远程字段的值,并且如果已指定“默认值”,则会设置该值。

子表映射链接

3. 映射具有子表的 DocType

如果您尝试映射的字段是子表,则需要为子表字段创建另一个文档类型映射。

子表映射链接

  • 映射类型:选择映射类型为子表。
  • 映射:选择您为子表创建的文档类型映射文档。

子表映射链接

4. 映射具有依赖关系的 DocType(链接、动态链接字段)

如果您尝试映射的 DocType 具有任何类型的依赖项(例如链接或动态链接字段),则您需要设置另一个文档类型映射来同步依赖项。

例如,假设本地文档类型是 Opportunity,远程文档类型是 OneOfficeERP Opportunity。业务机会中的字段“party_name”(DocType 潜在客户的链接字段)映射到 OneOfficeERP 业务机会中的“full_name”(数据字段)。在同步期间,必须创建此潜在客户才能同步主要机会。因此,您还需要为此链接字段设置映射。

导致依赖项创建

  • 映射类型:在本例中,映射类型是文档。
  • 映射:选择您刚刚创建的映射。
  • 远程值过滤器:您需要指定将获取要映射的确切远程文档的过滤器。就像在本例中一样,远程 DocType 是 OneOfficeERP Opportunity,可以使用姓名、电话号码和国家/地区进行唯一获取。

格式为:

{“远程字段名”:“我们将从中获取该字段名的值的字段或表达式”}

如果您想从某处获取值,请以 eval 开始表达式:

就像在本例中一样,它是:eval:frappe.db.get_value('Global Defaults', None, 'country')

文档映射类型

最后,根据所需的文档类型在事件生成器的事件配置子表中启用“具有映射”选项,并选择刚刚创建的文档类型映射。

映射配置

3.7 条件事件配置

如果您不想将文档类型中的所有文档发送给消费者,您可以为它们指定条件。

例如,如果您只想发出那些公开的“Note”文档,则可以在生产者/消费者文档中指定它们。

子表映射链接

如果文档在其生命周期内满足某个条件,则所有旧的“事件更新日志”都会同步到消费者

让我们考虑另一个例子。您只想同步那些已提交的销售发票。您可以指定“doc.docstatus == 1”作为条件。发票在提交之前不会同步。

对于每个更新日志,您可以在更新日志文档中查看其使用者。

如果您需要对条件进行更精细的控制,您可以连接自定义函数。您的函数将使用参数“consumer”、“doc”和“update_log”执行。例如,您只想同步那些“奇数”的注释

``py def is_odd_note(消费者,文档,update_log): 返回frappe.db.sql(""" 选择 数数(*) 来自tabNote WHERE 创建 <= %(创建)s """, { "creation": doc.creation })[0][0] % 2 != 0


然后,您可以指定条件:

````js
cmd: my_custom_app.note.is_odd_note