对象节点到元素节点的转换失败

object-node to element-node conversion fails?

本文关键字:节点 转换 失败 元素 对象      更新时间:2023-09-26

我正试图在JavaScript中为角色设置一个默认功能,比如:

declareUpdate(); 
var sec = require('/MarkLogic/security.xqy'); 
var pid = 3223704;
var role = 'scc-proj-' + pid + '-member';
sec.roleSetDefaultPermissions("scc-proj-3223704-member",(xdmp.permission("scc-proj-3223704-member", "read")));

这会产生一个错误:

[javascript] XDMP-AS: $permissions as element(sec:permission)* -- Invalid coercion: object-node{"capability": text{"read"}, "roleId": text{"12999117528518422097...} as element(sec:permission)

如果我仔细观察,似乎xdmp.permissions()返回一个对象节点,而sec.roleSetDefaultPermissions()期望一个元素节点。看来有些类型转换不起作用。。。

XQuery等价物可以正常工作。

  1. 这可以用javascript修复吗
  2. 作为一种变通方法,我可以使用xdmp.eval或invoke从javascript运行XQuery吗

只需将element作为第三个可选$output-kind参数传递给xdmp.permission:

xdmp.permission("scc-proj-3223704-member", "read", "element");