Domanda

Attualmente sto sviluppando un gestore eventi per SharePoint 2010 che definisce i valori predefiniti per le raccolte documenti sulla creazione (tipi di contenuto, le impostazioni di versione ecc). Sto avendo un problema con conflitti di salvataggio durante la creazione di raccolte documenti attraverso la GUI, il ricevitore di eventi non sempre eseguito dopo la GUI è fatto salvare la lista.

Ho assunto ListAdded sarebbe stato chiamato dopo che la GUI ha correttamente completato la creazione della lista e salvato, ma non sembra essere il caso. Ho provato l'impostazione delle proprietà nella funzione ListAdding, ma le modifiche non vengono salvate (l'elenco non è ancora creata).

ricevo il seguente messaggio durante il debug in Visual Studio:

Salva conflitto.
Le modifiche in conflitto con quelle fatte contemporaneamente da un altro utente. Se si desidera applicare le modifiche, fare clic su Indietro nel browser Web, aggiornare la pagina, e inviare nuovamente le modifiche.

con l'analisi dello stack di:

Microsoft.SharePoint.SPException è stata gestita dal codice utente ErrorCode = -2.130,575305 millions NativeErrorMessage = hr FALLITA rilevato (hr = 0x81020037)

NativeStackTrace = "" Messaggio = Salva Conflitto.

le modifiche in conflitto con quelle fatte contemporaneamente da un altro utente. Se si desidera applicare le modifiche, fare clic su Indietro nel browser Web, aggiornare la pagina, e inviare nuovamente le modifiche. Fonte = Microsoft.SharePoint StackTrace: a Microsoft.SharePoint.SPGlobal.HandleComException (COMException Comex) a Microsoft.SharePoint.Library.SPRequest.SetListProps (String bstrUrl, String bstrListName, booleano bMigrate) a Microsoft.SharePoint.SPList.Update (booleano bFromMigration) a Company.SharePoint.EventReceivers.ListCreate.CompanyListCreateEventReceiver.ListAdded (SPListEventProperties proprietà) a Microsoft.SharePoint.SPEventManager.RunListEventReceiver (ricevitore SPListEventReceiver, SPUserCodeInfo userCodeInfo, SPListEventProperties proprietà, String receiverData) a Microsoft.SharePoint.SPEventManager.RunListEventReceiverHelper (ricevitore oggetto, SPUserCodeInfo userCodeInfo, Proprietà oggetto, contesto SPEventContext, String receiverData) a Microsoft.SharePoint.SPEventManager. <> c__DisplayClassc`1.b__6 () a Microsoft.SharePoint.SPSecurity.RunAsUser (SPUserToken userToken, booleano bResetContext, codice WaitCallback, Object param) InnerException: System.Runtime.InteropServices.COMException

e le ULS tronchi di:

2011/2/25 11: 12: 52.06 w3wp.exe si è verificato (0x363C) 0x219C SharePoint Foundation Generale 8e2s errore medio Unknown SPRequest. Per maggiori informazioni: 0x8007047e f35857af-3d3a-462c-86a6-de24d3b3d8d3
2011/02/25 11: 12: 52.06 w3wp.exe (0x363C) 0x219C SharePoint Foundation Generale 72k4 medio 0x8007047e f35857af-3d3a-462c-86a6-de24d3b3d8d3
2011/02/25 11: 12: 52.06 w3wp.exe (0x363C) 0x219C SharePoint Foundation Generale 8kh7 alta 0x8007047e f35857af-3d3a-462c-86a6-de24d3b3d8d3

C'è un modo per garantire il conflitto non avviene, o un modo diverso di impostazione o di accedere alle proprietà di elenco che non sarà in conflitto. Ho stanco di creare un'istanza separata di SPSite / SPWeb, ma che ha ancora lo stesso problema.

Un semplice esempio di codice che sta fallendo è:

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

        }
}

Qualsiasi aiuto sarebbe apprezzato. Grazie!

È stato utile?

Soluzione

Si deve registrare l'evento ItemAdded come evento sincrono. SPEventReceiverSynchronization.Synchronous

È possibile definire a livello di codice: http://msdn.microsoft.com/en-us/library/microsoft. sharepoint.speventreceiverdefinition.synchronization.aspx

O nell'elemento ricevitore della definizione caratteristica: http://msdn.microsoft.com/en-us/library/ff512765.aspx

Altri suggerimenti

Ho combattuto con i ricevitori di eventi di SharePoint da qualche tempo. Un sacco di insidie ??e logica inaspettata in questa parte di SharePoint imo.

Non ho visto questo problema esatto prima, ma posso dare un suggerimento comunque. Nella mia esperienza, la modifica della lista proprietà può a volte avere problemi. È per questo che voglio ottenere l'elenco dal web invece. Se questo non funziona (ha funzionato per me), provare a creare un'istanza di un nuovo SPWeb da Web.Url pure.

In questo caso, vi suggerisco di provare il seguente approccio:

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

Credo che, potrebbe essere necessario specificare "sincrono" nel file element.xml, vedere http://sharepointconnoisseur.blogspot.com/2011/04/save-conflict-error-when-creating-list.html

Prova ad utilizzare evento disattivare e attivare metodi di eventi.

2) (Utile in da aggiornare elemento dal gestore di eventi)

Item[FieldName] = FieldValue;
this.DisableEventFiriing();
item.SystemUpdate(false);
or
item.Update();
this.EnableEventFiring();
//must enable event firing if we are disable it
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a sharepoint.stackexchange
scroll top