SPQuery - o Que campos (campos de visão) são necessárias para Atualizar o item de lista?

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

  •  10-12-2019
  •  | 
  •  

Pergunta

Em um SPQuery, quais os campos que são necessários para a atualização de um item de lista?

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;

Se eu executar listItem.Update() sem alterar todos os campos, a atualização falhará com o erro 'value does not fall within the expected range'.Mas se eu mudar ViewFieldsOnly para false, a atualização for bem-sucedida.A minha pergunta é quais os campos que são necessários para a atualização de um item de lista com sucesso (excluindo quaisquer campos que podem ter sido alteradas)?

Foi útil?

Solução

AFAIK não é documentado em qualquer lugar os campos que devem ser incluídos para ser capaz de fazer uma Actualização depois de consultar com ViewFieldOnly definido como true, mas de acordo com SPQuery.ViewFieldsOnly e a Atualização de um SPListItem é, entre outras ID, Id, tipo de objeto, ...

MAS minha recomendação é, definitivamente, não mesmo tentar, basta definir ViewFieldsOnly como falso, você está certo você conseguir o que é necessário, mesmo em futuras versões do SharePoint.

Outras dicas

Eu também tinha esse problema, e conseguiu se em volta dele.Eu incluído o ListItem IDENTIFICAÇÃO nos campos de visão, em seguida, criou um novo SPListItem variável usando a Lista.GetItemByID.Em seguida, você pode fazer uma Lista normal atualização de itens usando esta nova variável.

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

Pode não ser a melhor solução sempre, mas isso me fez levantar e correr.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a sharepoint.stackexchange
scroll top