OVH Cloud OVH Cloud

[SPS2003] SPListItem

2 réponses
Avatar
Chris
Dans le but de jouer un peu avec les metadata, j'avais fait un petit outil dans l'urgence pr le transfert de metadata qui marchait bien mais pas du tout modulable.

J'aimerais remplacer ma mise à jour des metadata par quelque qui ressemblerait a ca

foreach (SPField field in item.Fields)
{
string FieldTitle = field.InternalName;
if (!field.ReadOnlyField && targetItem[FieldTitle] != item[FieldTitle])
{
targetItem[FieldTitle] = item[FieldTitle];
}
}
try
{
targetItem.Update();
}
catch{}

Apparament, je recupere bien les bons champs, mais, j'ai une exception a chaque update, pour tous les champs mis a jour (meme qd le update etait dans le foreach pr tester). Avant j'utilisais la methode suivante ->

targetItem[LinkField] = item[LinkField];
targetItem.Update();

Qui marchait tres bien (LinkField etant une constante). Quelqu un pourrait il m'aider a rendre mon code plus joli ? :)

2 réponses

Avatar
Stephane CORDONNIER [MVP]
Peut être ta boucle essaye-t-elle de mettre à jour un champ qui n'est pas en
lecture seule mais que tu n'as pas le droit de mettre à jour (certains
champs système qui sont cachés par exemple).

--
Stephane CORDONNIER
http://www.sharepoint-france.com
[Microsoft MVP - France]


"Chris" a écrit dans le message de
news:
Dans le but de jouer un peu avec les metadata, j'avais fait un petit outil


dans l'urgence pr le transfert de metadata qui marchait bien mais pas du
tout modulable.

J'aimerais remplacer ma mise à jour des metadata par quelque qui


ressemblerait a ca

foreach (SPField field in item.Fields)
{
string FieldTitle = field.InternalName;
if (!field.ReadOnlyField && targetItem[FieldTitle] != item[FieldTitle])
{
targetItem[FieldTitle] = item[FieldTitle];
}
}
try
{
targetItem.Update();
}
catch{}

Apparament, je recupere bien les bons champs, mais, j'ai une exception a


chaque update, pour tous les champs mis a jour (meme qd le update etait dans
le foreach pr tester). Avant j'utilisais la methode suivante ->

targetItem[LinkField] = item[LinkField];
targetItem.Update();

Qui marchait tres bien (LinkField etant une constante). Quelqu un pourrait


il m'aider a rendre mon code plus joli ? :)




Avatar
Chris
Effectivement, j'essaye de mettre à jour des champs en lecture seule, mais,
en utilisant un try/catch global ou par field, j'ai toujours la meme erreur
meme lorsque je fait l'update dans le foreach -->

Nom de l'affaire -> Des données non valides ont été utilisées pour mettre à
jour l'élément de liste. Le champ que vous essayez de mettre à jour est
peut-être en lecture seule.

Numéro de dossier -> Des données non valides ont été utilisées pour mettre à
jour l'élément de liste. Le champ que vous essayez de mettre à jour est
peut-être en lecture seule.

alors que si je fait un item["Nom de l'affaire"] = "blabla";item.Update();
je n'ai pas d'erreur et j'ai bien blabla dans nom de l'affaire du fichier
selectionné.


"Stephane CORDONNIER [MVP]" wrote:

Peut être ta boucle essaye-t-elle de mettre à jour un champ qui n'est pas en
lecture seule mais que tu n'as pas le droit de mettre à jour (certains
champs système qui sont cachés par exemple).

--
Stephane CORDONNIER
http://www.sharepoint-france.com
[Microsoft MVP - France]


"Chris" a écrit dans le message de
news:
> Dans le but de jouer un peu avec les metadata, j'avais fait un petit outil
dans l'urgence pr le transfert de metadata qui marchait bien mais pas du
tout modulable.
>
> J'aimerais remplacer ma mise à jour des metadata par quelque qui
ressemblerait a ca
>
> foreach (SPField field in item.Fields)
> {
> string FieldTitle = field.InternalName;
> if (!field.ReadOnlyField && targetItem[FieldTitle] != item[FieldTitle])
> {
> targetItem[FieldTitle] = item[FieldTitle];
> }
> }
> try
> {
> targetItem.Update();
> }
> catch{}
>
> Apparament, je recupere bien les bons champs, mais, j'ai une exception a
chaque update, pour tous les champs mis a jour (meme qd le update etait dans
le foreach pr tester). Avant j'utilisais la methode suivante ->
>
> targetItem[LinkField] = item[LinkField];
> targetItem.Update();
>
> Qui marchait tres bien (LinkField etant une constante). Quelqu un pourrait
il m'aider a rendre mon code plus joli ? :)
>
>