2015-07-10 48 views
1

如果SharePoint列表中有多重选择用户场(DeveloperSecondary)过滤一个多重选择用户字段?这两个查询产生一个404错误:使用SharePoint的OData的API

http://server/_vti_bin/listdata.svc/list?$filter=(DeveloperSecondary/Results/UserName eq 'foo') 

http://server/_vti_bin/listdata.svc/list?$filter=(DeveloperSecondary/UserName eq 'foo') 

如果这是一个单选择用户领域,OData的查询将是:

http://server/_vti_bin/listdata.svc/list?$filter=(SingleSelectUserField/UserName eq 'foo') 

回答

1

多值用户场不幸的是$filter查询选项而不是在SharePoint中支持 OData API。

正如你可以考虑应用过滤器到一种变通方法返回的结果如下证明:

$requestUrl = "http://contoso.intranet.dev/_vti_bin/listdata.svc/TheList?`$expand=DeveloperSecondary" 
$data = Execute-RequestJson -Url $requestUrl -UseDefaultCredentials $true 
#filter items 
$data.d.results | % { $_.DeveloperSecondary.results | Where-Object {($_.Name -eq 'John Doe')} } 

其中

Function Execute-RequestJson() 
{ 
Param(
    [Parameter(Mandatory=$True)] 
    [string]$Url, 
    [Parameter(Mandatory=$False)] 
    [System.Net.ICredentials]$Credentials, 
    [Parameter(Mandatory=$False)] 
    [bool]$UseDefaultCredentials = $True, 
    [Parameter(Mandatory=$False)] 
    [Microsoft.PowerShell.Commands.WebRequestMethod]$Method = [Microsoft.PowerShell.Commands.WebRequestMethod]::Get 
) 

    $client = New-Object System.Net.WebClient 
    if($Credentials) { 
    $client.Credentials = $Credentials 
    } 
    elseif($UseDefaultCredentials){ 
    $client.Credentials = [System.Net.CredentialCache]::DefaultCredentials 
    } 
    $client.Headers.Add("Content-Type", "application/json;odata=verbose") 
    $client.Headers.Add("Accept", "application/json;odata=verbose") 
    $data = $client.DownloadString($Url) 
    $client.Dispose() 
    return $data | ConvertFrom-Json 
}