在启动Marklogic中http通信的林中触发数据创建

在启动Marklogic中http通信的林中触发数据创建,marklogic,Marklogic,几个问题 为给定林创建触发器时,使用trgr:collection scope函数和林名称是否正确 我对执行一个jsp脚本感兴趣,该脚本在向林发布数据提交时将参数传递给脚本。下面的方法正确吗 xquery version "1.0-ml" import module namespace trgr="http://marklogic.com/xdmp/triggers" at "/MarkLogic/triggers.xqy"; trgr:create-trigger("execut

几个问题

  • 为给定林创建触发器时,使用trgr:collection scope函数和林名称是否正确
  • 我对执行一个jsp脚本感兴趣,该脚本在向林发布数据提交时将参数传递给脚本。下面的方法正确吗

    xquery version "1.0-ml"
    import module namespace trgr="http://marklogic.com/xdmp/triggers" 
        at "/MarkLogic/triggers.xqy";
    
    trgr:create-trigger("executeCreateBlock", "Execute Block Creation", 
    
       trgr:trigger-data-event(
       trgr:collection-scope("/str-1/"),
       trgr:document-content("create"),
       trgr:post-commit()),
    
       trgr:trigger-module(xdmp:database("str-1-modules"), "/modules/", "http.xqy"),
    
       fn:true(), 
    
       xdmp:default-permissions() 
    );
    
  • 下面的http.xqy模块当前用于测试,它只接受一个名为filename的参数

    xquery version "1.0-ml";
    
    let $payload :=  '{ "filename": $filename}' 
    return xdmp:http-post("http://chain1.xmp.com:8080/CreateBlock/response.jsp",
         <options xmlns="xdmp:http">
           <data>{$payload}</data>
         </options>)
    
    xquery版本“1.0-ml”;
    让$payload:='{“filename”:$filename}'
    返回xdmp:http post(“http://chain1.xmp.com:8080/CreateBlock/response.jsp",
    {$payload}
    )
    
  • 是否可以将导致触发的数据库中创建的文件名传递给模块脚本 谢谢

    孔蒂

    你看过那张照片了吗?它为需要对匹配(反向)查询的数据上的数据库更改作出反应的应用程序抽象了低级触发器细节

    警报API通过外部变量自动注入触发操作的文档的上下文。例如,您的操作—为响应警报触发器而调用的代码将包括以下内容:

    xquery version "1.0-ml";
    declare namespace alert = "http://marklogic.com/xdmp/alert";
    
    declare variable $alert:config-uri as xs:string external;
    declare variable $alert:doc as node() external;
    declare variable $alert:rule as element(alert:rule) external;
    declare variable $alert:action as element(alert:action) external;
    
    至于您的特定问题,将集合的名称作为参数,通常是URI。顾名思义,它允许您将触发器的权限限制为特定集合。一般来说,应用程序代码不应该与林有关。数据库在抽象底层数据的组织方式方面做得很好。直接使用林的代码可能效率不高,并且可能会破坏安全检查,如重复URI检测


    从警报API开始。

    管理API也应该有助于配置警报/触发器。谢谢,我将研究这些。到目前为止,对于配置触发器,我一直在编辑java api客户端com.marklogic.client.example.util.Bootstrapper,将installBootstrapExtension方法转换为installTriggers方法,该方法调整url HttpPut=new HttpPut(“http://“+host+”:“+port+”/manage/v2/databases/triggers/triggers?method=POST”);以及setEntity xquery