实体ECA规则

实体ECA(EECA)规则可被用来触发动作以在数据被更改或搜索时运行。维护基于其他实体字段的实体字段(数据库列),或更新基于系统内数据的其他一套分开的系统中的数据时有用。EECA规则通常不应当被用于触发业务进程,因为这样规则应用超出了范围。触发业务进程的更好的工具是服务ECA规则。

例如这有一个来自于Mantle业务构件中的 Work.eecas.xml 文件的 EECA 规则,在一条 TimeEntry 被创建、更新或删除时调用一个服务来更新在一个任务(WorkEffort)上的总工作时间:

<eeca entity="mantle.work.time.TimeEntry" on-create="true" on-update="true" on-delete="true" get-entire-entity="true">
        <condition><expression>workEffortId</expression></condition>
        <actions><service-call name="mantle.work.TaskServices.update#TaskFromTime" in-map="context"/></actions>
</eeca>

一个 ECA(事件-条件-动作)规则是一个特定类型的规则,根据事件有条件地执行动作。对于Entity ECA规则,各种你可以对记录做的查找和更新操作会触发事件。设置(eeca元素的)这些属性为true来在on-createon-updateon-deleteon-find-oneon-find-liston-find-iteratoron-find-count操作时触发EECA规则。

默认EECA规则将在实体操作之后运行。要让它在之前运行,设置 run-before 属性为true。也有一个 run-on-error 属性,默认为false,如果设置为true,那么 EECA 规则在实体操作中出了错也会被触发。

当动作运行时,上下文将是服务所运行之中的上下文,加上为了方便使用而传入操作的实体字段值。还加上一些特殊的上下文字段:

  • entityValue: 有传入实体操作的字段值的Map。也许不包括数据库返回记录的所有字段值。要填充那些传入数据库记录中有、但未传入的字段值,设置 eeca.get-entire-entity 属性为true
  • originalValue: 如果 eeca.get-original-value 属性被设置为true,并且 EECA 规则在实体操作前运行(run-before=true),这将是一个 EntityValue 对象,表示在数据库中的原始(当前)值
  • eecaOperation: 一个字符串,表示触发EECA规则的操作,基本上是 on-* 属性名去掉 "on-"。

condition 元素和在XML动作中使用的condition一样,可能包含expression和compare元素,根据需要还可能有 or、and和not元素。

actions 元素和服务定义、页面、表单等中的actions元素一样。包含一个XML动作脚本。更多信息请查看 XML动作概览

results matching ""

    No results matching ""