2017-11-08 3 views
0

私はCPFを使用しています。cpf:MarkLogicでdocument-set-stateが正常に動作しない

ドメインはコレクションスコープ用に作成されます(トリガーは、特定のコレクションで作成または更新されたドキュメントがある場合に起動されます)。

文書の状態をxs:anyURI('http://marklogic.com/states/updated')に明示的に設定しようとしていますが、cpf:document-set-stateを使用しています。いくつかのURISトリガーが起動し、いくつかのために解雇されていないため

(すべてのURIは、ドメイン内で使用されているコレクションに属している)

トリガーが発射されていないためURISは、私がノードを置き換える(xdmp:node-replaceを走りました同じテキストで)最初に。

xdmp:node-replaceを実行すると、cpf:document-set-stateが期待どおりに動作します。私は引き金が発射されるのを見ることができた。

私はCPFは、2台の連動の状態マシンで動作xs:anyURI('http://marklogic.com/states/updated')

答えて

1

にドキュメントの状態を設定したときに何のトリガーが起動しないしまった理由を初めて理解することはできませんよ:CPFがでドキュメントに何かをやってに興味があるか否かを判断するものをすべて(cpf:processing-statusプロパティを介して記録されたもの)、特定のアプリケーション用のもの(cpf:state属性を使用して記録されたもの)を記録します。

CPFは動作中にこれらのプロパティを更新するため、プロパティの変更に応答する必要があるため、多くのCPFコードは、それ自身のアクションに応答するトリガのカスケードを回避します。

あなたがやりたいことが、ドキュメントがアプリケーションステータスマシンをちょう​​ど更新されたかのように動かすようにしたいのであれば、これを行う最も簡単な方法は、ノードを置換することです。 。ステータス変更のパイプラインがあれば、残りの部分を処理します。ドキュメントフラグメントを更新するためにプロパティフラグメントを更新するには、それ以上のコストはかかりません。

文書をポックして処理を開始しますが、通常は文書更新(つまり、アプリケーションパイプラインの途中の状態)から取得する以外の状態で開始する場合は、処理ステータスを設定する必要があります「アクティブ」に、そして状態を中間状態にする。しかし、これは忍者の動きであり、私は本当にあなたが良い理由がない限り、より簡単なことをお勧めします。

関連する問題