0

プログラムで CPF パイプラインをインストールするために使用している XQuery 関数があります。クエリ コンソールから関数呼び出しを実行して、これをテストしています。コンテンツ ソースは、CPF が有効になっているコンテンツ データベースに設定されています。

何が起こっているのかをトラブルシューティングするために、以下を実行していました。$processsed_pipline_config には、パイプライン構成 XML が含まれています。リターンは挿入されたパイプラインのみを返すので、パイプラインが単一のパイプラインしかないデータベースに挿入されているように見えますか?

let $pipeline_id := p:insert($processed_pipeline_config)

return
  for $pipeline in p:pipelines()
    return $pipeline

管理コンソールに移動すると、この挿入されたパイプラインがコンテンツ データベースのパイプライン リストに表示されません。

アップデート

また、以下に示すように、スキーマ db のコンテキストでそれを呼び出そうとしました。運もありません。

  let $pipeline_id :=
    xdmp:invoke-function(
      function() {
         p:insert($processed_pipeline_config)
      },
      <options xmlns="xdmp:eval">
        <database>{ xdmp:schema-database() }</database>
        <transaction-mode>update-auto-commit</transaction-mode>
        <isolation>different-transaction</isolation>
      </options>
    )
4

2 に答える 2

1

コンテンツ データベースではなく、コンテンツ データベースのスキーマ データベースに対してパイプライン API を実行する必要があります。これが CPF が検索する場所です。

p:insert は、既定のアクセス許可でパイプライン コレクションにパイプラインを挿入します。

ここでの問題は、パイプラインを追加するのと同じトランザクションでパイプラインのリストを取得していることだと思います。トランザクションは、それ自体のコミットの結果を見ることはありません。別のクエリでルックアップを実行すると、パイプラインが表示されます。

于 2016-02-16T16:41:33.830 に答える
0

解決策は、コンテンツやスキーマではなく、トリガー データベースに対して p:insert() 呼び出しを行うことです。基本的に:

      xdmp:invoke-function(
        function() {
         p:insert($processed_pipeline_config)
        },
        <options xmlns="xdmp:eval">
          <database>{ xdmp:triggers-database() }</database>
          <transaction-mode>update-auto-commit</transaction-mode>
          <isolation>different-transaction</isolation>
        </options>
      )

これを行った後、管理コンソールのリストにパイプラインが表示されました。

于 2016-02-18T15:40:51.160 に答える