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

Marklogic XDMP-ARGTYPE: (err:XPTY0004) arg0 is not of type xs:anyAtomicType?

我收到一个错误:

XDMP-ARGTYPE: (err:XPTY0004) local:getrole(xs:unsignedLong($perm/sec:role-id)) || "=" || xs:string($perm/sec:capability) -- arg0 is not of type 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>

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

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

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