SharePointCommunity
Die deutschsprachige Community für SharePoint, Microsoft 365, Teams, Yammer und mit Azure

Sponsored by

Willkommen im Forum Archiv.
Einträge sind hier nicht mehr möglich, aber der Bestand von 12 Jahren SharePoint-Wissen ist hier recherchierbar.




List Event Receiver Fehlermeldung beim Update

Unbeantwortet Dieser Beitrag hat 6 Antworten

Ohne Rang
14 Beiträge
J L erstellt 2 Juli 2012 11:08
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Hallo Gemeinde,

ich fange in Sharepoint durch eine in C# programmierte Funktion das ItemAdded(SPItemEventProperties properties) Event ab, welches nach dem Speichern eines neuen Listeneintrags ausgeführt wird.

 

Ich verändere in der Funktion Felder die den Listeneintrag betreffen. Nur das Update Funktioniert noch nicht richtig. Bei dem Aufruf des Commands

listItem.Update(); oder listItem.UpdateOverwriteVersion();

 

kommt jedesmal die Fehlermeldung:

<nativehr>0x80070057</nativehr><nativestack></nativestack>Es wurden ungültige Daten zur Aktualisierung des Listeneintrags verwendet. Das Feld, das Sie aktualisieren möchten, ist möglicherweise schreibgeschützt.

 

 

Weiß jemand wie ich diesen Fehler umgehen kann, bzw das schreibgeschütze weg bekomme ?

 

Vielen Dank!

Alle Antworten

Ohne Rang
929 Beiträge
Thomas Östreich Als Antwort am 2 Juli 2012 11:12
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Es gibt Felder die kann man nicht Aktualisieren (ID, Calulated Fields, Computed Fields).

Die Fehlermeldung kann auf vieles hindeuten. Posted dosch mal etwas Code.

Ohne Rang
14 Beiträge
J L Als Antwort am 2 Juli 2012 11:54
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

So haben ihn ein bisschen gekürtzt, aber sollte eigentlich alles wichtige enthalten:

public override void ItemUpdated(SPItemEventProperties properties)
        {
            base.ItemAdded(properties);

            //init
            SPSite oSiteCollection = new SPSite("http://sharepointurl/");
            SPList list = oSiteCollection.AllWebs["Collaction"].Lists["Liste"];
            SPListItem kvpListItem = list.GetItemById(properties.ListItemId);
   
            //Update List
            String newStatus = nowStatusId + ";";

            for(int i =0; i < oldStatusIds.Length; i++){

                newStatus = newStatus + oldStatusIds[i] + ";";
               
            }
            listItem["Punkte vergeben für:ID"] = newStatus;
            listItem.Update();
   
  }

Ohne Rang
929 Beiträge
Thomas Östreich Als Antwort am 2 Juli 2012 12:26
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Sieht alles ein wenig wild aus aber ich hoffe es sind nur Fehler vom Post (ItemUpdated, base.ItemAdded, kvpListItem, listItem).

Ändere es mal um:

SPListItem item = properties.List.GetItemById(properties.ListItemId);
....
item[GUID] = value;
item.Update();

So wie du es hast erzeugts du memory leaks.

Leider kann ich nicht erkennen was das für ein Feld ist was du da versuchst zu aktualisieren. Kann es sein das es ein "Lookup Field" ist? Dann kannst du nicht den Wert ändern nur die ID zum Lookup Datensatz.

 

Ohne Rang
14 Beiträge
J L Als Antwort am 2 Juli 2012 12:48
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Ok, den Fehler habe ich gefunden. Es können keine Nachschlagefelder mit einem String geupdatet werden.

Hier sitzt der Fehler:

listItem["Punkte vergeben für:ID"] = newStatus;

 

jetzt mal nach einer Lösung suchen ...

 

Ohne Rang
929 Beiträge
Thomas Östreich Als Antwort am 2 Juli 2012 12:55
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

SPFieldLookup (properties.List.Field[GUID o. Name]) enthält alles was du benötigst die Referenziert ListId und WebId. Über das ListItem was du dann direkt nutzen kannst über properties.ListItem kommst du an die ID kannst dann in der referenzierten Liste anpassen

Ohne Rang
14 Beiträge
J L Als Antwort am 2 Juli 2012 16:29
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Vielen Dank für die Hilfe mit diesem Code kann ich nun das Nachschlagefeld erweitern:

//Update List
SPFieldLookupValueCollection multiLookUp = new SPFieldLookupValueCollection();
multiLookUp = (SPFieldLookupValueCollection)kvpListItem["Punkte vergeben für:ID"];

multiLookUp.Add(new SPFieldLookupValue(3, "3"));
kvpListItem["Punkte vergeben für"] = multiLookUp;

kvpListItem.Update();

 

MFG