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

时间:2017-06-30 13:28:16

标签: triggers marklogic

我正在使用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它不起作用,请帮助我理解错误以及如何解决它。

2 个答案:

答案 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)

您是否已将状态更改处理管道附加到您的域?它负责处理创建和更新的状态事件以设置这些状态,以便状态转换可以响应。