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.




Visual Studio Workflow "Microsoft.SharePoint.SPException: Save Conflict"

Unbeantwortet Dieser Beitrag hat 8 Antworten

Ohne Rang
302 Beiträge
Ardenda erstellt 20 Nov. 2013 13:46
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Hallo,

habe ein Problem mit meinem Statemaschine Workflow. Ab und an kommt es zu einem "Save Conflict". Kann mir da jemand weiterhelfen was ich da tun muss?

Irgendwie kracht es schon beim Erstellen einer Workflowaufgabe aber das wirklich willkürlich ohne es nachvollziehen zu können

 

Hier mal der Auszug

 Microsoft.SharePoint.SPException: Save Conflict.  Your changes conflict with those made concurrently by another user. If you want your changes to be applied, click Back in your Web browser, refresh the page, and resubmit your changes. ---> System.Runtime.InteropServices.COMException (0x81020037): Save Conflict.  Your changes conflict with those made concurrently by another user. If you want your changes to be applied, click Back in your Web browser, refresh the page, and resubmit your changes.<nativehr>0x81020015</nativehr><nativestack></nativestack>   
 at Microsoft.SharePoint.Library.SPRequestInternalClass.AddOrUpdateItem(String bstrUrl, String bstrListName, Boolean bAdd, Boolean bSystemUpdate, Boolean bPreserveItemVersion, Boolean bUpdateNoVersion, Int32& plID, String& pbstrGuid, Guid pbstrNewDocId, Boolean bHasNewDocId, String bstrVersion, Object& pvarAttachmentNames, Object& pvarAttachmentContents, Object& pvarProperties, Boolean bCheckOut, Boolean bCheckin, Boolean bMigration, Boolean bPublish, String bstrFileName, ISP2DSafeArrayWriter pListDataValidationCallback, ISP2DSafeArrayWriter pRestrictInsertCallback, ISP2DSafeArrayWriter pUniqueFieldCallback)   
 at Microsoft.SharePoint.Library.SPRequest.AddOrUpdateItem(String bstrUrl, String bstrListName, Boolean bAdd, Boolean bSystemUpdate, Boolean bPreserveItemVersion, Boolean bUpdateNoVersion, Int32& plID, String& pbstrGuid, Guid pbstrNewDocId, Boolean bHasNewDocId, String bstrVersion, Object& pvarAttachmentNames, Object& pvarAttachmentContents, Object& pvarProperties, Boolean bCheckOut, Boolean bCheckin, Boolean bMigration, Boolean bPublish, String bstrFileName, ISP2DSafeArrayWriter pListDataValidationCallback, ISP2DSafeArrayWriter pRestrictInsertCallback, ISP2DSafeArrayWriter pUniqueFieldCallback)     -
 -- End of inner exception stack trace ---   
 at Microsoft.SharePoint.SPGlobal.HandleComException(COMException comEx)   
 at Microsoft.SharePoint.Library.SPRequest.AddOrUpdateItem(String bstrUrl, String bstrListName, Boolean bAdd, Boolean bSystemUpdate, Boolean bPreserveItemVersion, Boolean bUpdateNoVersion, Int32& plID, String& pbstrGuid, Guid pbstrNewDocId, Boolean bHasNewDocId, String bstrVersion, Object& pvarAttachmentNames, Object& pvarAttachmentContents, Object& pvarProperties, Boolean bCheckOut, Boolean bCheckin, Boolean bMigration, Boolean bPublish, String bstrFileName, ISP2DSafeArrayWriter pListDataValidationCallback, ISP2DSafeArrayWriter pRestrictInsertCallback, ISP2DSafeArrayWriter pUniqueFieldCallback)   
 at Microsoft.SharePoint.SPListItem.AddOrUpdateItem(Boolean bAdd, Boolean bSystem, Boolean bPreserveItemVersion, Boolean bNoVersion, Boolean bMigration, Boolean bPublish, Boolean bCheckOut, Boolean bCheckin, Guid newGuidOnAdd, Int32& ulID, Object& objAttachmentNames, Object& objAttachmentContents, Boolean suppressAfterEvents, String filename)   
 at Microsoft.SharePoint.SPListItem.UpdateInternal(Boolean bSystem, Boolean bPreserveItemVersion, Guid newGuidOnAdd, Boolean bMigration, Boolean bPublish, Boolean bNoVersion, Boolean bCheckOut, Boolean bCheckin, Boolean suppressAfterEvents, String filename)   
 at Microsoft.SharePoint.SPListItem.Update()   
 at .WorkFlowAAP.onWorkflowActivated_Invoked(Object sender, ExternalDataEventArgs e)   
 at System.Workflow.ComponentModel.Activity.RaiseGenericEvent[T](DependencyProperty dependencyEvent, Object sender, T e)   
 at System.Workflow.Activities.HandleExternalEventActivity.RaiseEvent(Object[] args)   
 at System.Workflow.Activities.HandleExternalEventActivity.Execute(ActivityExecutionContext executionContext)   
 at System.Workflow.ComponentModel.ActivityExecutor`1.Execute(T activity, ActivityExecutionContext executionContext)   
 at System.Workflow.ComponentModel.ActivityExecutor`1.Execute(Activity activity, ActivityExecutionContext executionContext)   
 at System.Workflow.ComponentModel.ActivityExecutorOperation.Run(IWorkflowCoreRuntime workflowCoreRuntime)   
 at System.Workflow.Runtime.Scheduler.Run()

Alle Antworten

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 20 Nov. 2013 16:03
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

[quote user="Ardenda"]at DFS.Gai.InsuranceListApproval.WorkFlowAAP.onWorkflowActivated_Invoked(Object sender, ExternalDataEventArgs e)[/quote]

Hier mußt Du nachschauen. Du versuchst ein Update auf ein Listenelement, das (unter bestimmten Umständen) vorher von jemand anderem geändert wurde. Evtl. kann dieser jemand sogar ein anderer Thread Deines eigenen Codes sein. Im Zweifel mußt Du ein zwischengespeichertes Listenelement einfach nochmal neu laden, z.B. mit SPList.GetItemById()

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
302 Beiträge
Ardenda Als Antwort am 20 Nov. 2013 16:17
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Hi Andi,

hab mal den Auszug aus dem Code:

   private void onWorkflowActivated_Invoked(object sender, ExternalDataEventArgs e)
        {
            SPListItem listItem = workflowProperties.Item;
            listItem.setFieldValue(ConstVar.FIELD_WORKFLOW_STATUS, ConstVar.ENUM_GAI_WORKFLOW_STATUS.WFstarted.ToString());
            string region = listItem.getFieldValueString(ConstVar.FIELD_REGION);
            listItem.setFieldValue(ConstVar.FIELD_PROCESS_STATUS, formatStatus(ConstVar.ENUM_GAI_WORKFLOW_STATUS.WFstarted.ToString(), region));
            listItem.Update();
            this.WriteLogToWFHistoryList(LOG_STATUS.SUCCESS, "Workflow Started");
        }

Zusätzlich habe ich das gefunden. Kann dass auch der Fehler sein?

 

http://platinumdogs.me/2010/01/21/sharepoint-calling-splist-update-causes-save-conflict-spexception/

 

Ohne Rang
929 Beiträge
Thomas Östreich Als Antwort am 20 Nov. 2013 16:32
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Dafür würde ich dir empfehlen die vorhandene Activity (SetState) zu verwenden. Direkt beim Start was zu ändern kann immer zum Save Conflict führen da auch der Workflow selbst Informationen zum Element speichert u.a. den Status.

Ohne Rang
302 Beiträge
Ardenda Als Antwort am 20 Nov. 2013 16:39
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Hi Thomas,

die SetState wäre doch nur für die Workflow-Tasks oder? Bei mir ist das ein Custom Field in einer Liste

Ohne Rang
929 Beiträge
Thomas Östreich Als Antwort am 20 Nov. 2013 16:50
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Dann kannst du aber auch eine CodeActivity verwenden und dort deinen Code ausführen, dann ist der Workflow zumindest gestartet und hat seine Werte aktualisiert.

Man kann für SetState auch eigene Werte zum Workflow (Schema, XML) http://msdn.microsoft.com/en-us/library/aa543169.aspx registrieren.

Ohne Rang
302 Beiträge
Ardenda Als Antwort am 20 Nov. 2013 17:12
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

bei mir ist das nicht das Workflow-Statusfeld sondern ein Customfield eine Pickliste :-). Deswegen muss ich leider ein Update auf die Liste mache.

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 21 Nov. 2013 08:26
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Dann solltest Du Thomas Tip mit der CodeActivity ausprobieren.

Viele Grüße
Andi
af @ evocom de
Blog