Marklogic XDMP-ARGTYPE:(err:XPTY0004)arg0不是xs:anyAtomicType类型吗?

时间:2018-08-06 16:17:25

标签: marklogic

我收到一个错误:

  

XDMP-ARGTYPE:(err:XPTY0004)local:getrole(xs:unsignedLong($ perm / sec:role-id))|| “ =” || xs:string($ perm / sec:capability)-arg0不是xs:anyAtomicType类型吗?

我不知道怎么了。我正在尝试获取每个用户的权限列表。结果应该是userA和角色列表,userB和角色列表。

let $uris := cts:uris(
                  (),
                  (),
                  cts:and-query(
                      cts:collection-query("/users")
                  )
        )
return

    (:loop for each user & assign permission to variable:)
for $user in $uris
let $perm := xdmp:document-get-permissions(($user))

return
<info>

 <user>{$user}</user>
  <roles>{(local:getrole(xs:unsignedLong($perm/sec:role-id)) || "=" || 
  xs:string($perm/sec:capability))}</roles>
</info>

1 个答案:

答案 0 :(得分:1)

很可能local:getrole(xs:unsignedLong($perm/sec:role-id)返回多个值,这是您尝试使用||运算符连接序列时遇到的错误。

由于用户可以(并且很可能会)拥有多个权限,因此您也需要遍历这些权限。

for $user in $uris
for $perm in xdmp:document-get-permissions(($user))
...