我试图在数据发生变化时在后端触发进程。
这是我目前正在使用的工作触发器。
xquery version "1.0-ml";
import module namespace trgr="http://marklogic.com/xdmp/triggers"
at "/MarkLogic/triggers.xqy";
if (xdmp:database() eq xdmp:database("nbcu-test-ml-triggers"))
then ()
else fn:error((), 'NOTTRIGGERSDB', xdmp:database()) ,
trgr:create-trigger(
"typeahead_modify",
"Update Typeahead Document",
trgr:trigger-data-event(trgr:directory-scope("/triplestore/", "1"), trgr:document-content("modify"), trgr:post-commit()),
trgr:trigger-module(
xdmp:database("nbcu-test-ml-modules"),
"/ext/",
"sample-trigger.xqy"),
fn:true(),
xdmp:default-permissions(),
fn:true() )
但是在模块结束时它正在触发,我想调用一个xdmp:spawn-function来进行一些异步处理。
我对Permission管理很新,但我尝试添加xdmp:privilege
权限集,但这不起作用。
有人可以帮忙建议如何为此触发器添加xdmp:Spawn execute
权限吗?
由于
编辑:我使用mlgradle来部署/ext/sample-trigger.xqy
答案 0 :(得分:2)
运行触发器的用户的范围是导致文档上的插入/更新/删除/属性更改的用户。此规则的唯一例外是您实际定义用户的数据库在线事件。
因此,xdmp:spawn特权必须附加到(直接或间接)附加到上述用户的角色。
要进行故障排除,您可以将xdm:log(xdmp:get-current-user())添加到触发器模块,以确保您了解用于调用代码的用户。然后将xdmp:spawn特权添加到该用户的其中一个角色。