Triggers MarkLogic CPF未对文档删除执行操作

Triggers MarkLogic CPF未对文档删除执行操作,triggers,marklogic,Triggers,Marklogic,我正在使用MarkLogic CPF 我已为以下3种状态配置了CPF http://marklogic.com/states/initial http://marklogic.com/states/updated http://marklogic.com/states/deleted 当初始和更新状态时,一切正常 但是当我删除一个文档时,CPF没有执行配置的模块 请在下面找到管道配置(仅针对已删除状态粘贴) 未对文档创建、更新和删除执行任何操作。 请帮我找出我正在犯的错误 我已将两条管道连接到域

我正在使用MarkLogic CPF

我已为以下3种状态配置了CPF

http://marklogic.com/states/initial

http://marklogic.com/states/updated

http://marklogic.com/states/deleted

初始
更新
状态时,一切正常

但是当我删除一个文档时,CPF没有执行配置的模块

请在下面找到管道配置(仅针对已删除状态粘贴)

未对文档创建、更新和删除执行任何操作。 请帮我找出我正在犯的错误

我已将两条管道连接到域

以上一项&
状态更改处理

更新:

分析:

我在
名称空间条件.xqy
文件中放置了一个日志。 删除上面的文档时,将调用和 当我检查
fn:docavailable($cpf:documenturi)
时,它返回我
false
。这意味着该文档已经消失(删除),因此没有触发器


对于
状态转换
状态转换
它不起作用,请帮助我理解错误以及如何解决错误。

状态名称本身没有意义。如果查看状态更改处理管道中的定义,您将看到在创建时将状态设置为(对于更新也是如此),但对于删除,它不会设置状态,而是运行操作。如果您希望自己的操作响应删除,则需要状态转换,而不是状态转换。比如:

<status-transition>
  <annotation>
  Do some extra work.
  </annotation>
  <status>deleted</status>
  <priority>5000</priority>
  <always>true</always>     
  <execute>
    <condition>
        <module>/MarkLogic/cpf/actions/namespace-condition.xqy</module>
        <options xmlns="/MarkLogic/cpf/actions/namespace-condition.xqy">
            <root-element>head</root-element>
            <namespace>https://www.head.org/Schema/head/hd</namespace>
        </options>
    </condition>
    <action>
        <module>delete-record.xqy</module>
    </action>
</execute>

做一些额外的工作。
删除
5000
真的
/MarkLogic/cpf/actions/namespace-condition.xqy
头
https://www.head.org/Schema/head/hd
delete-record.xqy


“始终”表示除了状态更改处理管道中的正常删除处理之外,还要执行此操作。

状态名称本身没有意义。如果查看状态更改处理管道中的定义,您将看到在创建时将状态设置为(对于更新也是如此),但对于删除,它不会设置状态,而是运行操作。如果您希望自己的操作响应删除,则需要状态转换,而不是状态转换。比如:

<status-transition>
  <annotation>
  Do some extra work.
  </annotation>
  <status>deleted</status>
  <priority>5000</priority>
  <always>true</always>     
  <execute>
    <condition>
        <module>/MarkLogic/cpf/actions/namespace-condition.xqy</module>
        <options xmlns="/MarkLogic/cpf/actions/namespace-condition.xqy">
            <root-element>head</root-element>
            <namespace>https://www.head.org/Schema/head/hd</namespace>
        </options>
    </condition>
    <action>
        <module>delete-record.xqy</module>
    </action>
</execute>

做一些额外的工作。
删除
5000
真的
/MarkLogic/cpf/actions/namespace-condition.xqy
头
https://www.head.org/Schema/head/hd
delete-record.xqy



“始终”表示除了状态更改处理管道中的正常删除处理之外,还要执行此操作。

您的域是否连接了状态更改处理管道?它负责处理创建和更新的状态事件,以设置这些状态,以便状态转换能够响应

您的域是否连接了状态更改处理管道?它负责处理创建和更新的状态事件,以设置这些状态,以便状态转换能够响应

我认为在评估状态条件时,文档已经消失了,因此不能使用依赖于文档附加的任何内容(内容、属性、集合等)的条件。我怀疑你只能让它依赖于uri。@grtjn我按照
mholstege
的建议做了一些更改,但仍然面临一些问题,你能帮我一下吗。我已经更新了问题。如果您需要更多详细信息,请告诉我。我认为在评估状态条件时,文档已经消失,因此您不能使用依赖于文档附加的任何内容(内容、属性、集合等)的条件。我怀疑你只能让它依赖于uri。@grtjn我按照
mholstege
的建议做了一些更改,但仍然面临一些问题,你能帮我一下吗。我已经更新了问题。如果您需要更多详细信息,请告诉我。在添加状态转换时,请使用状态删除。CPF已停止工作
http://marklogic.com/states/initial
&
http://marklogic.com/states/updated
状态转换
。未触发任何操作。我已在问题中添加了完整的管道配置。我已更新问题。增加了分析。请帮忙!请回复。在添加状态为“删除”的状态转换时。CPF已停止工作
http://marklogic.com/states/initial
&
http://marklogic.com/states/updated
状态转换
。未触发任何操作。我已在问题中添加了完整的管道配置。我已更新问题。增加了分析。请帮忙!请回答。是的“状态更改处理”管道已连接到域。若要诊断此类事件,请启用CPF跟踪事件(组>诊断,键入CPF,您将启用多个事件)以及
CPF条件调用
CPF条件结果
,以及
CPF操作调用
。这将给你一个非常健谈的关于CPF正在尝试做的事情的详细介绍。您还可以启用
finer
级别的调试,这应该会显示预提交触发器“状态更改处理”管道连接到域。若要诊断此类事件,请启用CPF跟踪事件(组>诊断,键入CPF,您将启用多个事件)以及
CPF条件调用
CPF条件结果
,以及
CPF操作调用
。这将给你一个非常健谈的关于CPF正在尝试做的事情的详细介绍。您还可以启用
finer
级别的调试,这将显示预调试
<status-transition>
  <annotation>
  Do some extra work.
  </annotation>
  <status>deleted</status>
  <priority>5000</priority>
  <always>true</always>     
  <execute>
    <condition>
        <module>/MarkLogic/cpf/actions/namespace-condition.xqy</module>
        <options xmlns="/MarkLogic/cpf/actions/namespace-condition.xqy">
            <root-element>head</root-element>
            <namespace>https://www.head.org/Schema/head/hd</namespace>
        </options>
    </condition>
    <action>
        <module>delete-record.xqy</module>
    </action>
</execute>