Pergunta

Estou copiando itens de uma lista para outra lista.

Após a cópia, o campo "Autor" é preenchido com "Conta do Sistema" e, portanto, desejo atualizar alguns campos na lista de destinos da seguinte maneira.

Eu tenho uma lista com uma coluna Person personalizada chamada "OriginalAuthor".

Quero substituir o valor de "Autor" integrado pelo valor de "OriginalAuthor".

Também desejo conseguir o mesmo com o campo modificado (que atualmente FUNCIONA)

Encontrei alguns exemplos on-line, mas não consegui fazer nenhum funcionar.Até agora eu tenho o seguinte:

foreach (SPListItem destItem in destList.Items)
{
     SPFieldUserValue val = new SPFieldUserValue(web.Site.RootWeb, destItem["OriginalAuthor"].ToString());

     destItem["Author"] = val;
     destItem["Modified"] = destItem["OriginalModified"];
     destItem.Update();
}
destList.Update();

A data de modificação é substituída, porém o campo Autor permanece o mesmo.

Como posso fazer isso funcionar?

Obrigado, KS

Foi útil?

Solução 3

Bem, depois de não conseguir fazer isso, decidi usar o Sharepoint Content Manager para copiar os itens que preservam os campos obrigatórios.Obrigado a todos pela sua ajuda.

Outras dicas

Existe um motivo pelo qual você não consegue obter o campo Autor do item original?

Meu outro pensamento tem a ver com o uso SPListItem.SystemUpdate() em vez de Update(), mas isso tem mais a ver com não alterar Modificado/Modificado por do que Autor.

Não tenho certeza e não posso testar agora, mas acho que o campo autor é um campo pessoal, então você não pode simplesmente colocar um nome lá, acho que deveria ser um spuser ou talvez algum outro tipo que faça referência ao usuário em SP .

Ou você também pode tentar este código:

SPList list = web.Lists["myList"];
list.Fields["Author"].ReadOnlyField = false;
SPListItem item = list.Items.Add();
item["Author"] = "value";
item.SystemUpdate(false);
list.Fields["Author"].ReadOnlyField = true;

Boa codificação

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