aviarc - 在 aviarc 工作流程中,从数据库中删除行后,如何从数据集中删除行?

标签 aviarc

这是我正在使用的工作流程。

<atomic-commit>
   <dataset name="foo"/>
</atomic-commit>

<dataset-iterator dataset="foo">
    <create-row dataset="hist-foo"/>
    <mark-row-created dataset="hist-foo"/>
</dataset-iterator>

所以基本上,在更新数据集 foo 后,我想将剩余的 foo 条目记录在另一个历史表中。但是,当我从 foo 表中删除行时,这些行仍然保留在数据集中,因此会添加到 hist-foo 中。 我尝试向 foo 数据代理的删除操作添加后期工作流程,如下所示:

<workflow>
     <delete-row dataset="{$context.commit-dataset-name}"/>
</workflow>

但是,当调用删除操作时,我收到错误。

此外,在第一次原子提交后,foo 数据集不会保留已删除的行操作,因此我无法识别从数据集中删除了哪些行。

最佳答案

对于这种情况,最简单的解决方案是将标记删除的行筛选到单独的数据集中。不幸的是,当仅使用内置命令时,这有点长。

<dataset name="deleted-foo" databroker="..."/>

<dataset-iterator dataset="foo">
    <if test="row-marked-deleted" value1="foo">
        <then>
            <create-row dataset="deleted-foo"/>
            <copy-row from-dataset="foo" to-dataset="deleted-foo"/>
            <mark-row-deleted dataset="deleted-foo"/>
        </then>
    </if>
</dataset-iterator>

<!-- Keeping in mind that you can't delete rows from a dataset
     which is being iterated over. -->
<dataset-iterator dataset="deleted-foo">
    <dataset-reset dataset="foo" no-current-row="y"/>
    <!-- Assuming rows have a field 'id' which uniquely IDs them -->
    <set-current-row-by-field dataset="foo" field="id" value="{$deleted-foo.id}"/>

    <if test="dataset-has-current-row" value1="foo">
        <then>
            <delete-row dataset="foo"/>
        </then>
    </if>
</dataset-iterator>

<atomic-commit>
    <dataset name="deleted-foo"/>
    <dataset name="foo"/>
</atomic-commit>

<dataset-iterator dataset="foo"> 
    <create-row dataset="hist-foo"/> 
    <mark-row-created dataset="hist-foo"/> 
</dataset-iterator> 

另一种解决方案是在运行插入/更新的同时进行历史记录,例如通过在操作中运行多个语句或设置插入/更新触发器(如果可用)。

关于aviarc - 在 aviarc 工作流程中,从数据库中删除行后,如何从数据集中删除行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12417069/

相关文章:

Aviarc 调试命令不起作用?

xslt - Aviarc REST Databroker 的 XSL 转换错误

validation - Aviarc - 验证电子邮件?

aviarc - 所有应用程序中的小部件可访问性

aviarc - 添加 aviarc 小部件命名空间时出现 RegistryItemLoader.LoaderException

xml - 在纯文本电子邮件中插入换行符

java - Aviarc 中 aviarc.engine.aviarcData 的默认/故障转移值