我有一个 Workflow SQL 数据代理,其中 ID 字段是带有附加字符填充的序列号,即P001或TM234。
我已将 ID 生成查询定义为:
<key-generation field="id" query="queries/asset-patent-get-id" />
它只是根据提供的参数检索下一个序列值。因此,对于每条创建的记录,我需要确保当 ID 存储在数据库中时,它已经按照所需的规则填充并存储为字符串而不仅仅是数字。
我有一个 Workflow SQL 数据代理,其中 ID 字段是带有附加字符填充的序列号,即P001或TM234。
我已将 ID 生成查询定义为:
<key-generation field="id" query="queries/asset-patent-get-id" />
它只是根据提供的参数检索下一个序列值。因此,对于每条创建的记录,我需要确保当 ID 存储在数据库中时,它已经按照所需的规则填充并存储为字符串而不仅仅是数字。
首先要注意:数据规则不绑定到操作,而是绑定到字段。因此,在这种情况下,只需将生成密钥的操作视为检索序列中的下一个数字,仅此而已。一旦检索到序列值,适当的绑定数据规则应该能够在序列值被持久化之前对其进行格式化。
您应该能够定义如下数据规则:
<!-- 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>