使用CAML Join查询SharePoint Online时无法获取父列表字段
问题说明
通过Web API + Power Automate HTTP请求查询SharePoint数据,使用CAML Join关联子列表Nomination Detail与父列表Nominations(子列表通过「Nomination」列关联父列表ID),尝试通过ProjectedFields获取父列表的NominationDate字段,但仅能返回子列表字段,父列表字段无法正常返回。
原请求脚本:
_api/web/lists/GetByTitle('Nomination Detail')/GetItems(query=@v1)?@v1= {"ViewXml":"\n<View>\n <ViewFields>\n <FieldRef Name='ID'/>\n <FieldRef Name='YearOfService'/>\n <FieldRef Name='NominationDate'/>\n <FieldRef Name='Nomination'/>\n </ViewFields>\n <Joins>\n <Join Type='INNER' ListAlias='Nominations'>\n <Eq>\n <FieldRef Name='Nomination' RefType='Id'/>\n <FieldRef Name='ID' List='Nominations'/>\n </Eq>\n </Join>\n </Joins>\n<ProjectedFields>\n <Field Name='NominationDate' Type='Lookup' List='Nominations' ShowField='NominationDate'/>\n</ProjectedFields>\n</View> \n"}
核心错误点
- Projected字段类型错误:父列表的
NominationDate是日期类型,但原脚本中Type设为Lookup,需改为与父列表字段匹配的DateTime。 - 字段命名冲突:Projected字段名
NominationDate与父列表原字段名重复,容易导致SharePoint识别混淆,需改为唯一名称(如ParentNominationDate)。 - ViewFields引用错误:ViewFields中未正确引用自定义的Projected字段名。
修正后的脚本
_api/web/lists/GetByTitle('Nomination Detail')/GetItems(query=@v1)?@v1= {"ViewXml":"\n<View>\n <ViewFields>\n <FieldRef Name='ID'/>\n <FieldRef Name='YearOfService'/>\n <FieldRef Name='ParentNominationDate'/>\n <FieldRef Name='Nomination'/>\n </ViewFields>\n <Joins>\n <Join Type='INNER' ListAlias='Nominations'>\n <Eq>\n <FieldRef Name='Nomination' RefType='Id'/>\n <FieldRef Name='ID' List='Nominations'/>\n </Eq>\n </Join>\n </Joins>\n <ProjectedFields>\n <Field Name='ParentNominationDate' Type='DateTime' List='Nominations' ShowField='NominationDate'/>\n </ProjectedFields>\n</View> \n"}
关键注意事项
- Projected字段的
Type必须与父列表目标字段的类型完全匹配(如文本对应Text、数字对应Number、日期对应DateTime)。 - Projected字段名需唯一,避免与子列表、父列表的现有字段名重复。
- ViewFields中必须明确引用自定义的Projected字段名,才能在返回结果中获取父列表的对应字段值。
内容的提问来源于stack exchange,提问作者Mr Peragin
相关产品推荐
相关产品推荐

