在林中启动数据创建,以在Marklogic中启动http通信

时间:2016-04-21 14:14:11

标签: marklogic

几个问题

  1. 为给定林创建触发器时,使用带有林名称的trgr:collection-scope函数是否正确?
  2. https://docs.marklogic.com/trgr:trigger-data-event

    1. 我对执行将数据提交发布到林时将参数传递给脚本的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() 
      );
      
    2. 使用以下用于测试的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>)
      
      1. 是否可以将导致触发器触发的数据库名称传递给模块脚本?
      2. 由于

        康特

1 个答案:

答案 0 :(得分:4)

你看过Alerting API了吗?它抽象了需要对匹配(反向)查询的数据的数据库更改做出反应的应用程序的低级触发器详细信息。

Alerting 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;

至于您的具体问题,trgr:collecion-scope()将集合的名称作为参数,通常是URI。顾名思义,它允许您将触发器的权限限制为特定集合。通常,您的应用程序代码不应该关注林。数据库可以很好地抽象出数据在下面的组织方式。直接使用森林的代码可能效率不高,可能会破坏安全检查,例如重复的URI检测。

从警报API开始。