SPQuery - 목록 항목을 업데이트하려면 어떤 필드(ViewFields)가 필요합니까?

sharepoint.stackexchange https://sharepoint.stackexchange.com//questions/85556

  •  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();
        }

그것은 최고의 솔루션이 아닐 수도 있지만 그것은 나를 시작하고 실행하게 만들었습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 sharepoint.stackexchange
scroll top