0

我有一个 XQuery 函数,用于以编程方式安装 CPF 管道。我正在通过从查询控制台执行函数调用来对此进行测试,其中我的内容源设置为启用了 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 回答