原文地址:点击打开链接
这是要解决的问题:在使用REST API的时候,对于lookup类型的列,不能使用它的值来过滤item。
原因其实很简单,使用REST API获取的值是id,而不是我们想得到的字符串。
下面举个例子:你有两个列表
(1)Companies
(2)Exployees
Employees列表有一个Employer列,是一个lookup列,在Companies列表中取值。如果你使用REST API获取一条Employees列表中的item的数据,会得到如下结果:(注意xml中有一个EmployerId节点,却没有Employer节点)
“EmployerId”节点其实包含的值是Employer所lookup的item的Id,这个item在Companies列表中,其Id为1。如果你想使用这一列作为过滤条件,就必须使用OData操作符“$expand”。因此如果需要在Employees列表中,过滤出来所有为ID是1的company工作的员工,应该使用如下代码:
http://[...]/_api/web/lists/getbytitle('Employees')/Items/
?$select=Title,Employer/Id
&$expand=Employer/Id
&$filter=Employer/Id eq 1
如果是元数据(Managed Metadata)该怎样处理呢? 一个metadata field本质上也是一个lookup类型的field,源数据列表是一个隐藏列表“TaxonomyHiddenList”中。我的测试列表中的一个metadata类型的field的名字为“Relevant Office”,使用REST API获取到的值为:
可以看到,在“Label”节点中保存着metadata的值“New York”,在WssId节点中保存着metadata所引用的值的Id,在TernGuid节点中保存着guid。因此我们可以根据这些信息,到“TaxonomyHiddenList”这个隐藏的列表中读取真正的metadata的值。