共享业务对象

共享业务对象的值可供其他实例在运行时访问,这在应用程序需要使用当前数据时很有用。

由于共享业务对象是不同类型的业务对象,因此应注意其特殊注意事项。

  • 共享业务对象仅适用于复杂结构类型。
  • 共享业务对象中的数据在业务流程和任务之间共享。

    您可以将数据从一个流程发送到另一个流程,方法是使用消息事件,或者通过使用共享业务对象的唯一键来将数据装入到第二个流程中。要装入数据,请获取唯一标识键,然后使用该键来装入实例。例如在以下代码中,将会通过运行 tw.local.myVariable.metadata("key") 来获取 sharedBusinessObjectKey。

    tw.local.myVariable = new tw.object.mySharedBusinessObject(sharedBusinessObjectKey);
  • 共享业务对象使用数据库资源。在以下情况中,共享对象中的数据保存到数据库:
    • 创建了共享对象
    • 该任务会持久存储到数据库中
    • 对共享业务对象执行了 JavaScript 方法 save()。
  • 各共享对象以逻辑方式连接到创建了该共享对象的业务流程实例。如果删除了业务流程实例(例如,当删除正在 Inspector 中运行的业务流程实例时),那么还将删除数据库中的共享对象数据。
  • 如果在今后某个时间点取消选中共享对象复选框,那么业务对象在运行时将不再可供其他实例访问。
  • 如果在可以启动且活动未绑定到业务流程实例的人员服务中创建了共享业务对象,那么共享业务对象会连接到活动的任务实例。在此类情况下,如果删除了任务实例,那么将会删除共享业务对象。
  • 如果从数据库中删除了共享业务对象,那么表明引用该共享业务对象的任务或流程的行为未定义。
  • 针对共享业务对象的最佳做法:如果要创建生存期较长的共享业务对象,那么您可能要设计充当工厂的业务流程(即,它基于工厂方法模式)。结果是您的共享业务对象将保留在数据库中,直至删除工厂业务流程为止。
  • 外部服务(如 web service)和 Advanced Integration Service 的输出共享业务对象将返回新的并且通常已更新的原始输入共享业务对象副本。因此,如果应用程序处理的是外部服务或 Advanced Integration Service,那么应用程序不应引用值预计会进行更新的输入共享业务对象。 它应引用新的输出共享业务对象。
  • 共享业务对象允许同时进行的修改。例如,两个用户可以在人员服务中查看和修改同一个共享业务对象实例。当用户触发边界事件时,将保存共享业务对象实例的数据。但是仅保存每位用户修改的字段。因此,如果两位用户修改的字段不同,那么这两个用户的更改都会保存。如果两位用户修改的字段相同,那么保存最后一位用户的更新。除多个用户之外,您可能会遇到自动化步骤的情况,例如,对共享业务对象进行修改的服务器脚本。

您可以创建和检索已通过使用键创建的共享业务对象,如以下示例所示。 在该示例中,tw.object.SharedObject 是共享业务对象。

// Create shared object
var sharedObject = new tw.object.SharedObject();
sharedObject.taskId = "init";
sharedObject.save();

// Create key for shared object
tw.local.sharedObjectKey = sharedObject.metadata("key");
log.info("sharedObjectkey: " + tw.local.sharedObjectKey);

// Retrieve shared object by key
var sharedObject2 = new tw.object.SharedObject(tw.local.sharedObjectKey);
log.info("sharedObject2.taskId: " + sharedObject2.taskId);