如何将数据附加到数据代理的密钥生成操作?

时间:2012-10-02 00:56:58

标签: aviarc

我有一个Workflow SQL databroker,其中ID字段是一个带有附加字符填充的序号,即 P001 TM234

我已将ID生成的查询定义为:

<key-generation field="id" query="queries/asset-patent-get-id" />

它只是根据提供的参数检索下一个序列值。因此,对于每个创建的记录,我需要确保在ID存储在数据库中时,它已根据所需规则填充并存储为字符串而不是数字。

1 个答案:

答案 0 :(得分:0)

首先要注意的是:数据规则未绑定到操作,而是绑定到字段。因此,在这种情况下,只需考虑密钥 - 生成操作作为检索序列中的下一个数字,仅此而已。检索序列值后,适当的绑定数据规则应该能够在序列值保持之前对其进行格式化。

您应该能够定义如下数据规则:

<!-- datarules/format-asset-patent-id/definition.xml -->
<data-rule name="format-asset-patent-id"
           factory-class="com.aviarc.framework.datarule.xml.DefaultXMLDataRuleProviderFactoryImpl"
           datarule-class="com.aviarc.framework.datarule.workflow.WorkflowDataRule">
    <parameters>
        <parameter name="field" mandatory="y"/>
    </parameters>
    <event name="onBeforeDatasetPersisted" workflow="workflows/format-asset-patent-id" field="{@field}"/>
</data-rule>

然后在format-asset-patent-id工作流程中,您可以处理格式化id。 (注意:我没有机会测试onBeforeDatasetPersisted事件是否在执行密钥生成操作之前或之后触发。)

然后你可以用数据绑定绑定它,例如:

<!-- databindings/asset-patent.xml -->
<databinding databroker="asset-patent"
             factory-class="com.aviarc.framework.databinding.basic.BasicDataBindingFactoryImpl">
    <on-dataset-bound>
        <data-rules>
            <format-asset-patent-id field="id"/>
        </data-rules>
    </on-dataset-bound>
</databinding>