Marklogic模板驱动提取:插入模板

时间:2017-10-06 08:03:14

标签: marklogic

我正在尝试上传模板以用于MarkLogic模板驱动提取。我在控制台中使用Javascript(在localhost上)。但是,无论我尝试什么,我在尝试上传时都会遇到同样的错误。错误:" [javascript] SEC-INVALIDPERM:xdmp:document-insert ...."我给了自己所有可能的权限,但我仍然不断收到错误。

'use strict'

declareUpdate();
var tde = require("/MarkLogic/tde.xqy");
var MatchesTDE = xdmp.toJSON(
  {
    "template": {
      "context": "/com.marklogic.client.mapper.MatchesDoc",
      "collections": ["com.marklogic.client.mapper.MatchesDoc"],
      "rows": [
        {
          "schemaName": "mapper",
          "viewName": "matches",
          "columns": [
            {
              "name": "nrOfDocumentsInNC",
              "scalarType": "long",
              "val": "nrOfDocumentsInNC"
            },
            {
              "name": "totalNrOfDocuments",
              "scalarType": "long",
              "val": "totalNrOfDocuments"
            },
            {
              "name": "matchesID",
              "scalarType": "long",
              "val": "matchesID"
            },
            {
              "name": "uniqueInNC",
              "scalarType": "boolean",
              "val": "uniqueInNC"
            }
          ]
        }
      ]
    }
  }
);

tde.templateInsert(
  "/MatchesDoc/TDE.json" ,
  MatchesTDE,
  xdmp.defaultPermissions(),
  ["com.marklogic.client.autorelationmapper.MatchesDoc"]
);

顺便说一句,如果我使用tde.validate([MatchesTDE]);验证模板,我会true。如果我用

测试脚本
tde.nodeDataExtract( 
  [cts.doc( "com.marklogic.client.mapper.MatchesDoc/2722286.json" )],
  [MatchesTDE]
);

它有效。此外,当我在https://developer.marklogic.com/learn/template-driven-extraction处遵循TDE教程时,除了 insertTemplate函数之外,一切都有效。我也有同样的错误。我做错了什么?

1 个答案:

答案 0 :(得分:0)

尝试删除运行此代码的用户的所有权限。或者尝试使用空的第3个参数运行tde.templateInsert()

tde.templateInsert(
  "/MatchesDoc/TDE.json" ,
  MatchesTDE,
  [],
  ["com.marklogic.client.autorelationmapper.MatchesDoc"]
);

听起来这是你的问题:

  

我给了自己所有可能的权限,但我仍然不断收到错误。

用户没有权限,文档具有权限。用户只有在写文档时才有默认权限。

用户的默认权限是分配给用户插入的文档的权限集。默认权限授予该用户数据库中的任何其他权限。通常,管理员用户没有分配默认权限。

当您为用户分配所有这些默认权限时,最终会在tde.templateInsert()的第3个参数中添加大量权限,并传递xdmp.defaultPermissions()。其中至少有一个是无效的,所以你得到SEC-INVALIDPERM错误。