我正在访问SharePoint列表中有一个关联的利益相关方实体 - 我很难访问利益相关方的属性。
“主要”内容的属性位于xpath /feed/entry/content/properties/*
上。利益相关者的属性位于xpath /feed/entry/link/inline/entry/content/properties/*
。
假设我在odata查询中包含了利益相关者的名字:
http://server/list/_vti_bin/listdata.svc/TheList?$select=Id,Title,Stakeholder/Name&$expand=Stakeholder
在枚举Feed的属性时,如何引用利益相关者的属性?
使用此代码,未填充Stakeholder.Name
属性:
(Invoke-RestMethod -Uri $url -Method Get -UseDefaultCredentials).entry.content.properties | Foreach {
[PsCustomObject]@{
Id=$_.Id."#text";
Title=$_.Title;
StakholderName=$_.Stakeholder.Name;
}
}
我是否需要为利益相关者填充第二个PsCustomObject
,然后合并“主要”数据?
答案 0 :(得分:2)
由于/^(\-{3})?(.*)?(\-{3})?[^\n]$/gm
符号必须使用单引号字符串文字进行转义,因此查询格式不正确,例如:
$
然后可以检索$url = "http://contoso.intranet.com/_vti_bin/listdata.svc/TheList?`$select=Id,Title,Stakeholder/Name&`$expand=Stakeholder"
值,如下所示:
Stakeholder
修改后的示例
$StakeholderValue = $data.link | where { $_.title -eq "Stakeholder" } | select -Property @{name="Name";expression={$($_.inline.entry.content.properties.Name)}}
或者我建议考虑另一种方法。默认情况下,SharePoint 2010 REST服务以$url = "http://contoso.intranet.com/_vti_bin/listdata.svc/TheList?`$select=Id,Title,Stakeholder/Name&`$expand=Stakeholder"
$data = Invoke-RestMethod -Uri $url -Method Get -UseDefaultCredentials -ContentType "application/json;odata=verbose"
$data | Foreach {
[PsCustomObject]@{
Id = $_.content.properties.Id."#text";
Title = $_.content.properties.Title;
Stakeholder = $_.link | where { $_.title -eq "Stakeholder" } | select -Property @{name="Name";expression={$($_.inline.entry.content.properties.Name)}}
}
}
格式返回结果。我们的想法是以xml
格式返回结果。
不幸的是Invoke-RestMethod也没有 Invoke-WebRequest可以不用于此目的 因为它们都包含PowerShell 3.0 中的错误 Microsoft Connect
此特定错误阻止我们使用SharePoint REST服务 由于无法指定
json
标头,因此结果不能 以Accept
格式返回
话虽如此,我建议使用WebClient Class。
下面演示了以json
格式返回结果的相同示例。请注意,与原始示例相比,获取JSON
属性变得更容易:
List Item