Frage

Ich entwickle derzeit einen Event -Handler für SharePoint 2010, der Standardeinstellungen für Dokumentbibliotheken für die Erstellung (Inhaltstypen, Versionseinstellungen usw.) festlegt. Ich habe ein Problem mit Speichern von Konflikten beim Erstellen von Dokumentbibliotheken über die GUI. Der Ereignisempfänger läuft nicht immer, nachdem die GUI die Liste gerettet hat.

ich nahm an ListAdded würde aufgerufen werden, nachdem die GUI die Liste richtig erstellt und gespeichert hat, aber es scheint nicht der Fall zu sein. Ich habe versucht, Eigenschaften in der festzulegen ListAdding Funktion, aber Änderungen werden nicht gespeichert (da die Liste noch nicht erstellt wird).

Ich erhalte die folgende Nachricht beim Debuggen in Visual Studio:

Konflikt retten.
Ihre Änderungen in Konflikt mit denen, die gleichzeitig von einem anderen Benutzer hergestellt wurden. Wenn Ihre Änderungen angewendet werden möchten, klicken Sie in Ihren Webbrowser zurück, aktualisieren Sie die Seite und erneut zu Ihren Änderungen.

Mit der Stapelspur von:

Microsoft.SharePoint.Spexception wurde durch Benutzercode-Fehlercode = -2130575305 natromessage = fehlgeschlagener HR erkannt (HR = 0x81020037) nicht behandelt.

Nativestacktrace = "" Nachricht = Konflikt speichern.

Ihre Änderungen in Konflikt mit denen, die gleichzeitig von einem anderen Benutzer hergestellt wurden. Wenn Ihre Änderungen angewendet werden möchten, klicken Sie in Ihren Webbrowser zurück, aktualisieren Sie die Seite und erneut zu Ihren Änderungen. Source = Microsoft.SharePoint Stacktrace: unter microsoft.sharepoint.spglobal.Handlecomexception (COMSXception COMSX) bei Microsoft.SharePoint.library.sprequest.SetListListProps (String Bstrurl, String Bstrlistname, Boolean Bmigrate) auf MicroSoft.SharePoint.Splist.updat (boolean bmigrate) auf microsoft.SharePoint.Slist.updatat (Boolean Bmigrate) auf Microsoft.SharePoint.Slist. ) at Company.SharePoint.EventReceivers.ListCreate.CompanyListCreateEventReceiver.ListAdded(SPListEventProperties properties) at Microsoft.SharePoint.SPEventManager.RunListEventReceiver(SPListEventReceiver receiver, SPUserCodeInfo userCodeInfo, SPListEventProperties properties, String receiverData) at Microsoft.SharePoint.SPEventManager.RunListEventReceiverHelper(Object receiver, Trockodeinfo UserCodeinfo, Objekteigenschaften, SpeventContext -Kontext, String -Receiverdata) bei Microsoft.SharePoint.SpeVentManager. : System.runtime.interopervices.comex CPCTCTION

und die ULS -Protokolle von:

25.02.2011 11: 12: 52.06 W3WP.Exe (0x363c) 0x219c SharePoint Foundation General 8E2S Medium Unbekannter Sprequest -Fehler ist aufgetreten. Weitere Informationen: 0x8007047e F35857AF-3D3A-462C-86A6-DE24D3B3D8D3
25.02.2011 11: 12: 52.06 W3WP.Exe (0x363c) 0x219c SharePoint Foundation General 72K4 Medium 0x8007047e F35857AF-3D3A-462C-86A6-DE24D3B3D8D3
25.02.2011 11: 12: 52.06 W3WP.Exe (0x363c) 0x219c SharePoint Foundation General 8KH7 High 0x8007047E F35857AF-3D3A-462C-86A6-DE24D3B3D3D3

Gibt es eine Möglichkeit, sicherzustellen, dass der Konflikt nicht stattfindet, oder eine andere Art, die Listeneigenschaften festzulegen oder zugreifen, die nicht konflikt werden? Ich habe es müde, eine separate Instanz von Sp -Site/SPWEB zu erstellen, aber das hat immer noch das gleiche Problem.

Ein einfaches Beispiel für den fehlenden Code ist:

  public class CompanyListCreateEventReceiver : SPListEventReceiver
    {

        public override void ListAdded(SPListEventProperties properties)
        {
            base.ListAdded(properties);

            SPList l_list = properties.List;
            l_list.Title = "Changed title";
            l_list.Update();

        }
}

Jede Hilfe wäre geschätzt. Vielen Dank!

War es hilfreich?

Lösung

Sie müssen das Elemented Event als synchrones Ereignis registrieren.Speventreceiversynchronisation.synchronous

Sie können es programmatisch definieren:http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.speventreceiverdefinition.synchronization.aspx

Oder im Empfängerelement der Feature -Definition:http://msdn.microsoft.com/en-us/library/ff512765.aspx

Andere Tipps

Ich kämpfe seit einiger Zeit mit SharePoint -Event -Empfängern. Viele Fallstricke und unerwartete Logik in diesem Teil von SharePoint IMO.

Ich habe dieses genaue Problem noch nie gesehen, aber ich kann Ihnen sowieso einen Vorschlag geben. Nach meiner Erfahrung kann das Ändern der Eigenschaftenliste manchmal Probleme haben. Deshalb möchte ich stattdessen die Liste aus dem Web erhalten. Wenn dies fehlschlägt (es hat bei mir funktioniert), probieren Sie auch einen neuen SPWEB von web.url.

In diesem Fall schlage ich vor, dass Sie den folgenden Ansatz ausprobieren:

 public class CompanyListCreateEventReceiver : SPListEventReceiver
{

    public override void ListAdded(SPListEventProperties properties)
    {
        base.ListAdded(properties);

        SPList l_list = properties.Web.Lists[properties.List.ID];
        l_list.Title = "Changed Title";
        l_list.Update();
    }
}

Ich denke, Sie müssen möglicherweise "Synchron" in Ihrer Element.xml -Datei angeben, siehe http://sharepointconnoisseur.blogspot.com/2011/04/save-conflict-error-when-creating-list.html

Versuchen Sie, das Deaktivieren von Ereignissen zu verwenden und Ereignismethoden zu aktivieren.

2) (nützlich, um Artikel aus dem Event -Handler zu aktualisieren)

Item[FieldName] = FieldValue;
this.DisableEventFiriing();
item.SystemUpdate(false);
or
item.Update();
this.EnableEventFiring();
//must enable event firing if we are disable it
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit sharepoint.stackexchange
scroll top