我參與MarkLogic,並沒有一個簡單的時間。最近我一直在嘗試觸發器,並且它一直不好。我希望這裏的某個人能夠提供一些建議,告訴我在這裏做錯了什麼。MarkLogic觸發器聲明 - 我在做什麼錯?
在MarkLogic社區教程https://docs.marklogic.com/guide/app-dev/triggers#id_66092之後,我命名了我的數據庫測試,並將其列爲其自己的觸發器數據庫。然後我跑在測試數據庫的查詢:
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")
,這樣它會告訴我它是否運行,但是將新文檔插入到正確的目錄中從來沒有提示任何觸發器的操作。
我希望你的一個號碼可以告訴我我做錯了什麼,因爲這很讓人沮喪。我等待你的幫助。
我沒有看到你在做什麼錯。事實上,我複製/粘貼了你的命令,除了一個小錯字之外,它們運行得很完美:你的第一條命令在第一行中缺少一個分號。但是,既然你看到了創建的觸發器,我認爲它在運行時沒有發生錯誤。有了這個固定的命令並運行了所有命令,我在最後一個命令運行後在ErrorLog.txt中得到了這個結果:2015-12-09 09:37:06.438 Info:TaskServer:*****創建了文檔/myDir/test.xml ***** –
你是否在qconsole中針對「測試」數據庫運行所有這些命令?你指定你在第一個命令上做了,但不是第二個和第三個。 –
是的,所有三個查詢都在名爲「test」的數據庫中執行,我可以確認最後一個查詢將新文檔插入到該數據庫中,但ErrorLog永遠不會被更改。 – Benjamin