我有一个XQuery函数,我用它以编程方式安装CPF管道。我通过从Query控制台执行函数调用来测试它,其中我的内容源设置为启用了CPF的内容db。
我正在执行以下操作来解决正在发生的事情。 $ 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>
)
答案 0 :(得分:1)
您应该针对内容数据库而不是内容数据库针对架构数据库运行管道API:这是CPF将查找的位置。
p:insert会将管道插入具有默认权限的管道集合中。
我认为您的问题是您在添加管道时在同一事务中获取管道列表。事务不会看到自己的提交结果。如果在单独的查询中运行查找,则应该看到管道。
答案 1 :(得分: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>
)
执行此操作后,管道显示在管理控制台的列表中。