代码之家  ›  专栏  ›  技术社区  ›  thichxai

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

  •  0
  • thichxai  · 技术社区  · 6 年前

    我得到一个错误:

    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 回复  |  直到 6 年前
        1
  •  1
  •   wst    6 年前

    最有可能 local:getrole(xs:unsignedLong($perm/sec:role-id) 返回多个值,这是尝试使用 || 接线员。

    由于用户可以(而且很可能会)拥有多个权限,因此还需要循环这些权限。

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