2015-12-08 50 views
2

我參與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"),這樣它會告訴我它是否運行,但是將新文檔插入到正確的目錄中從來沒有提示任何觸發器的操作。

我希望你的一個號碼可以告訴我我做錯了什麼,因爲這很讓人沮喪。我等待你的幫助。

+0

我沒有看到你在做什麼錯。事實上,我複製/粘貼了你的命令,除了一個小錯字之外,它們運行得很完美:你的第一條命令在第一行中缺少一個分號。但是,既然你看到了創建的觸發器,我認爲它在運行時沒有發生錯誤。有了這個固定的命令並運行了所有命令,我在最後一個命令運行後在ErrorLog.txt中得到了這個結果:2015-12-09 09:37:06.438 Info:TaskServer:*****創建了文檔/myDir/test.xml ***** –

+0

你是否在qconsole中針對「測試」數據庫運行所有這些命令?你指定你在第一個命令上做了,但不是第二個和第三個。 –

+0

是的,所有三個查詢都在名爲「test」的數據庫中執行,我可以確認最後一個查詢將新文檔插入到該數據庫中,但ErrorLog永遠不會被更改。 – Benjamin

回答

0

你說你創建了modules/log.xqy,但代碼指的是/modules/log.xqy。這兩個URI確實不同。

+0

感謝您的支持。我修正了上面的錯字。 – Benjamin