设计计算

设计计算涉及了解您期望计算实现的内容,了解输入字段和字段值,设置的字段值以及了解计算表达式中可能的内容。

了解计算适用于哪些对象

可以对对象类型的所有对象或所选对象运行计算。

如果仅对所选对象运行计算,那么计算上的适用性和输入字段条件将定义选择标准。

测试计算的一部分是验证是否正确定义了适用性和输入字段条件。

了解计算结果

了解您希望计算实现的内容。

了解计算是否由工作流程启动

计算类型 (自动或手动) 确定是否可以通过工作流程中的 运行计算 操作来启动计算。

了解计算中的操作

了解计算中的操作。

在计算中使用输入字段和变量。 它使计算模块化,更容易调试。

向表达式添加注释。

遵循良好的编程实践。

请研究 "损失事件" 计算,以了解如何在后续操作中使用一个集合字段操作的结果。

了解计算表达式

了解计算表达式中可用的可能性。 有关更多信息,请参阅 GRC 计算中的表达式

了解计算如何级联到其他计算

每个计算都是独立的,但一个计算的结果会对其他计算产生级联效应。

允许在不同对象之间进行级联计算,但不允许在同一对象上进行级联计算。

以下示例说明了此操作的工作方式:

  1. Calculation A中使用的 Input Field A 进行了更改,这会将 Set Field A 设置为值。
  2. Set Field ACalculation B中使用的输入字段。 当 Set Field A 更改时, Calculation B 将运行。 Calculation BSet Field B 设置为值。
  3. Set Field BCalculation CCalculation D中使用的输入字段。 当 Set Field B 更改时, Calculation CCalculation D 将运行。 Calculation CSet Field C 设置为值。 Calculation DSet Field D 设置为值。
  4. 计算可以继续此模式。

了解计算的设计如何影响性能

计算在创建或更新对象时或在异步运行的最终用户操作之后自动执行对象字段分配。 因此,简单对象字段更新可能会在后台触发数百个后续对象更新,从而导致整体系统性能下降。

使用以下方法来管理计算的性能:

  • 减少要重新计算的对象数。

    在用户操作结束时,计算将确定是否有任何其他对象受到该更改的影响。 要确定其他对象是否受影响, OpenPages® 将按相反顺序查找相关对象引用。 标识的对象越多,影响的性能就越多。 当您具有祖代或后代引用时,逆向查找可能会标识数百个对象。 请考虑以下方法:

    • 使用 适用性 条件来限制要重新计算的对象数。
    • 对相关对象中的输入字段设置操作时,请将 过滤条件 条件应用于 相关对象字段
    • 对相关对象中的输入字段设置操作 (其中 关系类型直接父代) 时,请启用 仅主要父代
  • 了解链式计算的影响。

    您可以定义计算,以便它们可以递归地依赖于其他计算,并且计算可以识别所有受影响的对象并按顺序重新计算值。 但是,这种计算链对整体系统的性能影响可能很大。

    以下事件序列是计算链的示例:

    1. 您具有用于更新操作项的计算。
    2. 对操作项的更新将导致计算以更新父问题的问题状态。
    3. "问题状态" 用于对父控件对象进行分类。
    4. 控件的分类用于计算父风险的审计固有风险评级。
    5. 将在父流程上汇总风险的 "审计固有风险评级"。

    在开发计算时,执行以下操作:

    • 监视计算管理页面上的 "入队" 计数列。
    • 将对象更新为测试。
    • 定期刷新计算页面以查看对象更新的影响。

    如果在某些计算上看到 "入队" 计数的峰值,请分析链关系并优化计算定义。

  • 了解自动更新工作流程受托人如何降低性能。

    当工作流程受让人定义设置为对象字段并且该字段在对象上更新时,将自动更新工作流程受让人。 自动受让人更新使用与计算相同的引擎。 异步处理共享队列以管理对象字段和工作流程字段的重新计算。 随着队列的增长,计算和工作流程自动更新都会变慢。

  • 将高速缓存大小设置为足以将工作流程保留在内存高速缓存中。

    通常有许多活动工作流程分布在多个版本的工作流程定义中。 OpenPages 尝试读取工作流程定义以查找受影响的工作流程。 如果工作流程在内存高速缓存中不可用,那么 OpenPages 将从数据库获取工作流程定义。

    将注册表设置 平台 > 工作流程实现 > OpenPages > 到期进程定义高速缓存大小 设置为正整数值。 为避免性能下降,请不要将此值设置为低于缺省值 200。

  • 终止不再使用的工作流程,因为它们可以占用资源。 未使用的工作流程在开发环境中尤其常见。
  • 请勿将计算与同一对象上的定制触发器配合使用。

    从技术上讲,可以在同一对象上使用计算和定制触发器。 但是,此做法可能会导致针对单个用户操作对数据库进行多次调用,并且调试定制触发器代码可能很困难。 大多数任务可以通过计算或工作流程来完成。 例如,可以将计算用于自动字段分配,而不使用定制触发器。

  • 调整计算配置注册表设置。

    您可以使用多个注册表设置来控制计算的性能。

    • 如果增大 Platform > 计算 > OP > 并发计算作业 的值以增加计算的异步处理吞吐量,那么可能会限制 OpenPages 系统上其他用户活动的计算资源。

    • 您可以在计算的开发阶段将 平台 > 计算 > OP > 始终在对象保存时重新计算 设置为 true ,以在计算定义更新后轻松查看计算结果。 但是,这会导致在计算定义未频繁更改的生产系统中进行冗余重新计算。
    • 如果增大 Platform > 计算 > OP > 队列对象的任务视图超时的值,那么可能会影响性能。 在 "任务视图" 中打开对象时, OpenPages 会显示队列中包含计算的每个对象字段的等待图标。 将显示此图标,直到结果可用或 已排队对象的任务视图超时 中指定的分钟数已过为止。 显示等待图标时, OpenPages 会继续使用服务器端资源来监视计算进度。 此设置的值越大,越可能影响 OpenPages 系统的整体性能。

保持简单

具有许多具有复杂表达式的操作的计算可能会影响性能。 避免使计算过于复杂。 使表达式尽可能简短。