我正在使用MarkLogic CPF。
我已为以下3个州配置了CPF
http://marklogic.com/states/initial
http://marklogic.com/states/updated
http://marklogic.com/states/deleted
initial
& updated
个州
但是当我删除文档时,CPF没有执行配置的模块。
请在下面找到管道配置(仅粘贴已删除状态)
<state-transition>
<annotation>
when document is deleted in 'abc' collection
</annotation>
<state>http://marklogic.com/states/deleted</state>
<on-success>http://marklogic.com/states/done</on-success>
<on-failure>http://marklogic.com/states/error</on-failure>
<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>
</state-transition>
为abc
集合配置了CPF。
当我删除根节点为head
且命名空间为https://www.head.org/Schema/head/hd
delete-record.xqy
模块没有被执行。
请帮我找到问题,如果需要更多细节,请告诉我。
更新
完整的管道配置
<pipeline xmlns="http://marklogic.com/cpf/pipelines">
<pipeline-name>Combined Search</pipeline-name>
<pipeline-description>Make a single copy</pipeline-description>
<success-action>
<module>/MarkLogic/cpf/actions/success-action.xqy</module>
</success-action>
<failure-action>
<module>/MarkLogic/cpf/actions/failure-action.xqy</module>
</failure-action>
<state-transition>
<annotation>
on creation
</annotation>
<state>http://marklogic.com/states/initial</state>
<on-success>http://marklogic.com/states/done</on-success>
<on-failure>http://marklogic.com/states/error</on-failure>
<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>create-full-record.xqy</module>
</action>
</execute>
</state-transition>
<state-transition>
<annotation>
on update
</annotation>
<state>http://marklogic.com/states/updated</state>
<on-success>http://marklogic.com/states/done</on-success>
<on-failure>http://marklogic.com/states/error</on-failure>
<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>update-record-biblio.xqy</module>
</action>
</execute>
<execute>
<condition>
<module>/MarkLogic/cpf/actions/namespace-condition.xqy</module>
<options xmlns="/MarkLogic/cpf/actions/namespace-condition.xqy">
<root-element>media</root-element>
<namespace>https://www.media.org/Schema/Media/md</namespace>
</options>
</condition>
<action>
<module>update-media.xqy</module>
</action>
</execute>
<execute>
<condition>
<module>/MarkLogic/cpf/actions/namespace-condition.xqy</module>
<options xmlns="/MarkLogic/cpf/actions/namespace-condition.xqy">
<root-element>tracking</root-element>
<namespace>https://www.tracking.org/Schema/Tracking/tr</namespace>
</options>
</condition>
<action>
<module>update-tracking.xqy</module>
</action>
</execute>
</state-transition>
<status-transition>
<annotation>
on deletion
</annotation>
<status>deleted</status>
<on-success>http://marklogic.com/states/done</on-success>
<on-failure>http://marklogic.com/states/error</on-failure>
<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>
</status-transition>
</pipeline>
不对文档创建,更新和操作执行任何操作。 deletetion。 请帮助我找到我正在做的错误。
我已将两条管道连接到域。
以上&amp; Status Change Handling
更新
分析:
我在namespace-condition.xqy
文件中放了一个日志。
删除文件上面的文件将被调用和
当我检查fn:doc-available($cpf:document-uri)
时,它正在返回false
。这意味着文档已经消失(删除),因此没有触发器。
status-transition
&amp; state-transition
它不起作用,请帮助我理解错误以及如何解决它。
答案 0 :(得分:1)
州名本身并不重要。如果您查看状态更改处理管道中的定义,您会发现在创建时将状态设置为http://marklogic.com/states/initial(类似地用于更新),但是对于删除,它不会设置状态,它运行一个动作。如果您希望自己的操作响应删除,则需要进行状态转换,而不是状态转换。类似的东西:
<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>
总是&#34;&#34;除了状态变更处理管道中的正常删除处理之外,他说这样做。
答案 1 :(得分:0)
您是否已将状态更改处理管道附加到您的域?它负责处理创建和更新的状态事件以设置这些状态,以便状态转换可以响应。