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

Triggers MarkLogic触发器声明-我在这方面做错了什么?,triggers,marklogic,Triggers,Marklogic,我涉猎了MarkLogic,并不是很轻松。最近我一直在试验触发器,但效果也很差。我希望这里有人能给我一些建议,看看我到底做错了什么 在上的MarkLogic社区教程之后,我将我的数据库命名为test,并将其列为自己的触发器数据库。然后,我对测试数据库运行了以下查询: xquery version "1.0-ml" import module namespace trgr="http://marklogic.com/xdmp/triggers" at "/MarkLogic/triggers.

我涉猎了MarkLogic,并不是很轻松。最近我一直在试验触发器,但效果也很差。我希望这里有人能给我一些建议,看看我到底做错了什么

在上的MarkLogic社区教程之后,我将我的数据库命名为test,并将其列为自己的触发器数据库。然后,我对测试数据库运行了以下查询:

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:documentinsert(“/myDir/test.xml”)
时,创建了文档,没有发生其他任何事情。当我打开
ErrorLog.txt
时,它应该附加的文本不在那里

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


我希望你们中的一位能告诉我我做错了什么,因为这让我很沮丧。我等待您的帮助。

您说您创建了
模块/log.xqy
,但代码指的是
/modules/log.xqy
。这两个URI确实不同

谢谢你接电话。我修正了上面的打字错误。我看你做的没有错。事实上,我复制/粘贴了您的命令,它们运行得很好,除了一个小错误:您的第一个命令在第一行缺少分号。但是既然你看到了创建的触发器,我想当你运行它的时候,它没有那个错误。在该修复命令和所有命令运行后,我在上次命令运行后的ErrorLog.txt中得到了这个消息:2015-12-09 09:37:06.438 Info:TaskServer:****创建了Document/myDir/test.xml.****您是否在qconsole中针对“test”数据库运行所有这些命令?您在第一个命令中指定了,但在第二个和第三个命令中没有指定。是的,所有三个查询都在名为“test”的数据库中执行,我可以确认最后一个查询正在将新文档插入该数据库,但是错误日志永远不会被更改。@Sam Mefford如果它在您的数据库上运行良好,那么可能是我没有正确设置我的数据库。你知道我在创建测试数据库时是如何不正确地配置它的吗?我对它进行了测试,它也对我起了作用。我刚刚用所有默认值创建了一个全新的数据库。我创建了一个角色
测试角色
,并向其中添加了一个新用户
测试用户
(并将
应用程序用户
替换为代码中的
测试角色
)。