MarkLogic触发器声明 - 我在这做错了什么?

时间:2015-12-08 23:09:49

标签: triggers marklogic

我正在考虑MarkLogic并且没有轻松的时间。最近我一直在试验触发器,它一直都很糟糕。我希望这里有人可以就我在这里做错了什么给我一些建议。

https://docs.marklogic.com/guide/app-dev/triggers#id_66092的MarkLogic社区教程之后,我命名了我的数据库测试,并将其列为自己的触发器数据库。然后,我针对测试数据库运行此查询:

xquery version "1.0-ml"
import module namespace trgr="http://marklogic.com/xdmp/triggers" 
 at "/MarkLogic/triggers.xqy";

trgr:create-trigger("myTrigger", "Simple trigger example", 
  trgr:trigger-data-event(
  trgr:directory-scope("/myDir/", "1"),
  trgr:document-content("create"),
  trgr:post-commit()),
  trgr:trigger-module(xdmp:database("test"), "/modules/", "log.xqy"),
  fn:true(), xdmp:default-permissions() );

返回14463004257041262559,我可以确认这是正确的URI。

然后我按照使用此查询的指示定义了/modules/log.xqy

xquery version '1.0-ml';
(: evaluate this against the database specified 
in the trigger definition (test in this example)
:)
xdmp:document-insert("/modules/log.xqy", 
  text{ "
xquery version '1.0-ml';
import module namespace trgr='http://marklogic.com/xdmp/triggers' 
   at '/MarkLogic/triggers.xqy';

declare variable $trgr:uri as xs:string external;

xdmp:log(fn:concat('*****Document ', $trgr:uri, ' was created.*****'))"
}, xdmp:permission('app-user', 'execute'))

然后我确认存在,并且与引号之间的文本完全匹配。

但是,当我运行xdmp:document-insert("/myDir/test.xml", <test/>)时,文档已创建,没有其他任何事情发生。当我打开ErrorLog.txt时,它应该附加的文本不存在。

认为可能是我在找错了地方,我还添加了fn:doc("/modules/log.xqy")以便它显示我是否运行,但是将新文档插入到正确的目录中从未提示任何类型的操作触发器。

我希望你的一个号码可以告诉我我做错了什么,因为这很令人沮丧。我在等待你的帮助。

1 个答案:

答案 0 :(得分:0)

您说您创建了modules/log.xqy,但代码引用了/modules/log.xqy。这两个URI确实不同。