在运行时,业务数据通过使用变量在业务流程定义 (BPD) 组件之间传递。根据涉及的组件,数据通过值或通过引用来传递。
变量会捕获业务数据。如果业务数据是简单类型(例如“字符串”),那么变量包含业务数据的值。如果业务数据是复杂类型,那么该变量是对包含多个值的对象的引用。
| 调用 | 传递方式 | ||
|---|---|---|---|
| 从 | 到 | 简单类型 | 案例属性、复杂业务对象或共享业务对象 |
| BPD 活动 | 链接 BPD | 值 | 引用(复杂业务对象、共享业务对象) |
| BPD 活动 | 客户端人员服务 | 值 | 值(复杂业务对象) 具有引用的值(共享业务对象) |
| BPD 活动 | 其他服务 | 值 | 值(复杂业务对象) 具有引用的值(共享业务对象) |
| 案例类型活动 | 链接 BPD | 值 | 值(案例属性) 引用(复杂业务对象、共享业务对象) |
| 案例类型活动 | 客户端人员服务 | 值 | 值(案例属性、复杂业务对象) 具有引用的值(共享业务对象) |
| 案例类型活动 | 其他服务 | 值 | 值(案例属性、复杂业务对象) 具有引用的值(共享业务对象) |
| 客户端人员服务 | 嵌套服务 | 值 | 值(案例属性、复杂业务对象) 具有引用的值(共享业务对象) |
| 其他服务 | 嵌套服务 | 值 | 值(案例属性) 引用(复杂业务对象、共享业务对象) |
BPD、案例类型和服务引用了其变量。 复杂变量从 BPD 或案例类型传递到服务时,会将该变量的深度副本从 BPD 或案例类型空间传输到服务空间,然后服务会获取对该副本的引用。类似地,复杂变量从服务传递到 BPD 或案例时,会将该变量的深度副本从服务空间传输到 BPD 或案例类型空间,然后 BPD 或案例类型会获取对该副本的引用。
服务更改现有复杂变量的值时,会通过将整个复杂变量替换为服务中的深度副本来将更改的值传回 BPD 或案例类型。如果替换的变量原先是从外部流程(BPD 或案例类型)通过值传递的,那么内部和外部流程不再访问同一变量。因此,对内部流程的更改不会反映在外部流程中。
共享业务对象是通过具有引用的值传递的。这意味着您所作的更改将保存并传播到使用相同数据的其他实例。在 BPD 或服务中必须启用自动同步共享业务对象设置以启用自动保存和数据同步。
例如,某个共享对象通过具有引用的值从某个 BPD 传递到两个不同的服务。BPD 和服务各自包含业务对象的单独副本。第一个服务完成时,共享对象值将自动持久存储到数据存储器。第二个服务启动时,将从数据存储器自动装入共享对象值。因此,尽管 BPD 和两个服务引用单独的对象,这些对象的值也会通过数据存储器进行更新,然后服务会对当前数据进行操作。
有关共享业务对象的信息,请参阅在 Process Designer 中创建定制业务。
Outer process -> NVP1
Inner process -> NVP1
对任一流程的更改都将影响另一个流程。Outer process -> NVP1
Inner process -> NVP1
Service -> NVP2
Outer process -> NVP1
Inner process -> NVP3
对 NVP3 的更改未反映在 NVP1 中。如果您希望服务修改 BPD 中的顶级变量,请使用嵌入式服务器脚本将服务结果存储在临时变量中,并将其成员复制到原始变量或共享业务对象。子 BPD 完成之前,将不更新父 BPD。
由于运行时的变量处理方式,请遵循以下准则: