SPQuery - 목록 항목을 업데이트하려면 어떤 필드(ViewFields)가 필요합니까?
-
10-12-2019 - |
문제
SPQuery에서 목록 항목을 업데이트하려면 어떤 필드가 필요합니까?
SPQuery query = new SPQuery();
query.Query = @"
<OrderBy>
<FieldRef Name='ID' Ascending='true' />
</OrderBy>";
query.ViewFields = string.Concat(
"<FieldRef Name='ID' />",
"<FieldRef Name='Title' />");
query.ViewFieldsOnly = true;
query.RowLimit = 2000; // Effective batch size.
query.QueryThrottleMode = SPQueryThrottleOption.Override;
내가 달리면 listItem.Update()
필드를 변경하지 않으면 오류와 함께 업데이트가 실패합니다. 'value does not fall within the expected range'
.하지만 내가 변하면 ViewFieldsOnly
false로 설정하면 업데이트가 성공합니다.내 질문은 목록 항목을 성공적으로 업데이트하는 데 필요한 필드입니다(변경되었을 수 있는 필드 제외).
해결책
AFAIK ViewFieldOnly를 true로 설정하여 쿼리한 후 업데이트를 수행할 수 있도록 어떤 필드를 포함해야 하는지 어디에도 문서화되어 있지 않지만 SPQuery.ViewFieldsOnly 및 SPListItem 업데이트 다른 ID, UniqueID, 객체 유형 등이 있습니다.
하지만 내 추천은 시도조차 하지 말고 ViewFieldsOnly를 false로 설정하면 향후 버전의 SharePoint에서도 필요한 것을 확실히 얻을 수 있다는 것입니다.
다른 팁
저도 이 문제를 겪었고, 해결했습니다.ViewFields에 ListItem ID를 포함한 다음 List.GetItemByID를 사용하여 새 SPListItem 변수를 만들었습니다.그런 다음 이 새 변수를 사용하여 일반적인 목록 항목 업데이트를 수행할 수 있습니다.
SPQuery q = new SPQuery();
q.Query = "Query here";
q.ViewFields = "...Fields Here...<FieldRef Name='ID' />";
q.ViewFieldsOnly = true;
foreach (SPListItem item in list.GetItems(q))
{
SPListItem i = list.GetItemById(int.Parse(item["ID"].ToString()));
//code to update item here
i.Update();
}
그것은 최고의 솔루션이 아닐 수도 있지만 그것은 나를 시작하고 실행하게 만들었습니다.
제휴하지 않습니다 sharepoint.stackexchange