我有一个Workflow SQL databroker,其中ID字段是一个带有附加字符填充的序号,即 P001 或 TM234 。
我已将ID生成的查询定义为:
<key-generation field="id" query="queries/asset-patent-get-id" />
它只是根据提供的参数检索下一个序列值。因此,对于每个创建的记录,我需要确保在ID存储在数据库中时,它已根据所需规则填充并存储为字符串而不是数字。
答案 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>