سؤال

لقد هاجروا مؤخرا موقع Sharepoint 2010 Sharepoint 2013, ومنذ ذلك الحين بلدي تخصيص سير العمل المتقدمة في Visual Studio الذي يعمل تماما لمدة 2 سنوات دون خلل فجأة بعد الهجرة بدأ رمي هذا الاستثناء.

w3wp.exe (0x4D3C)                           0x10F0  SharePoint Foundation           Legacy Workflow Infrastructure  88xr    Unexpected
WinWF Internal Error, terminating workflow Id# 21492445-9c27-479c-ae16-5d0d3ae84b69 

w3wp.exe (0x4D3C)                           0x10F0  SharePoint Foundation           Legacy Workflow Infrastructure  98d4    Unexpected
Microsoft.SharePoint.SPException: Cannot complete this action.  Please try again. ---> System.Runtime.InteropServices.COMException: Cannot complete this action.  
Please try again.<nativehr>0x80004005</nativehr><nativestack></nativestack>     
at Microsoft.SharePoint.Library.SPRequestInternalClass.AddOrUpdateItem(String bstrUrl, String bstrListName, Boolean bAdd, Boolean bSystemUpdate, Boolean bPreserveItemVersion, Boolean bPreserveItemUIVersion, Boolean bUpdateNoVersion, Int32& plID, String& pbstrGuid, Guid pbstrNewDocId, Boolean bHasNewDocId, String bstrVersion, Object& pvarAttachmentNames, Object& pvarAttachmentContents, Object& pvarProperties, Boolean bCheckOut, Boolean bCheckin, Boolean bUnRestrictedUpdateInProgress, 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 bPreserveItemUIVersion, Boolean bUpdateNoVersion, Int32& plID, String& pbstrGuid, Guid pbstrNewDocId, Boolean bHasNewDocId, String bstrVersion, Object& pvarAttachmentNames, Object& pvarAttachmentContents, Object& pvarProperties, Boolean bCheckOut, Boolean bCheckin, Boolean bUnRestrictedUpdateInProgress, 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 bPreserveItemUIVersion, Boolean bUpdateNoVersion, Int32& plID, String& pbstrGuid, Guid pbstrNewDocId, Boolean bHasNewDocId, String bstrVersion, Object& pvarAttachmentNames, Object& pvarAttachmentContents, Object& pvarProperties, Boolean bCheckOut, Boolean bCheckin, Boolean bUnRestrictedUpdateInProgress, 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, Boolean bPreserveItemUIVersion)     
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, Boolean bPreserveItemUIVersion)     
at Microsoft.SharePoint.SPListItem.Update()     
at ProductList.AutoApprovalProcess.ApprovalWorkflow.AuthorizeItem()     
at ProductList.AutoApprovalProcess.ApprovalWorkflow.onWorkflowActivated1_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.ActivityExecutorOperation.Run(IWorkflowCoreRuntime workflowCoreRuntime)     
at System.Workflow.Runtime.Scheduler.Run()

نظرت لي رموز و نرى ما يحدث بالضبط على ApprovalWorkflow.AuthorizeItem() ثم لا يتوهم حقا هنا هو ماذا يفعل

private void AuthorizeItem()
{
    workflowProperties.Item.ModerationInformation.Status = SPModerationStatusType.Approved;
    workflowProperties.Item.Update();
}

أساسا سير العمل فقط السيارات توافق على هذا البند بناء على شرط معين يلبي.ما ثم انظر في سير العمل المعلومات هذه

enter image description here

التي القيت من قبل ActivityExceutionStatus

protected override ActivityExecutionStatus HandleFault(ActivityExecutionContext executionContext, Exception exception)
{
    ((ISharePointService)executionContext.GetService(typeof(ISharePointService))).LogToHistoryList(base.WorkflowInstanceId, SPWorkflowHistoryEventType.WorkflowComment, 0, TimeSpan.MinValue, string.Empty, string.Format("WorkFlow Exception!: {0}", exception.Message), string.Empty);
    return ActivityExecutionStatus.Closed;
}

علما أن هذا لا يحدث في كل مرة سير العمل الاحتجاج يحدث في مناسبات أنا لا أعرف ما يطلق

هل لديها فكرة عن ما هي أسباب ذلك وكيفية منع ذلك من الحدوث مرة أخرى ؟

تحديث 1 الفعلية رموز وأضاف أدناه للتوضيح

public Guid workflowId = default(System.Guid);
public SPWorkflowActivationProperties workflowProperties = new SPWorkflowActivationProperties();
pblic enum ThresholdItem { MultipleThreshold, NoThreshold, BelowThreshold, AboveThreshold, Valid };

private void onWorkflowActivated1_Invoked(object sender, ExternalDataEventArgs e)
{
    switch (ThresholdCheck())
    {
        case ThresholdItem.Valid:
            AuthorizeItem();
            break;
        case ThresholdItem.BelowThreshold:
            RequestDenied("Below Threshold");
            break;
        case ThresholdItem.AboveThreshold:
            RequestDenied("Above Threshold");
            break;
        case ThresholdItem.NoThreshold:
            RequestDenied("No Threshold Defined");
            break;
        case ThresholdItem.MultipleThreshold:
            RequestDenied("Multiple Threshold Defined");
            break;
    }
}   


private ThresholdItem ThresholdCheck()
{
    SPLinqDataContext dc = new SPLinqDataContext(workflowProperties.SiteUrl + "/Testing");

    EntityList<ThresholdsItem> PriceThreshold = dc.GetList<ThresholdsItem>("Thresholds");

    string destination = GetLinkedListItemString(workflowProperties.Item["Destination"].ToString());
    string origin = GetLinkedListItemString(workflowProperties.Item["Origin"].ToString());
    double price = double.Parse(workflowProperties.Item["Price"].ToString());

    var Result = (from p in Threshold
                    where
                        p.Destination.Title == destination &&
                        p.Origin.Title == origin
                    select p);
    switch (Result.Count())
    {
        case 1:
            var SingleResult = Result.SingleOrDefault();
            if (SingleResult.MinPrice > price)
                return ThresholdItem.BelowThreshold;
            else if (SingleResult.MaxPrice < price)
                return ThresholdItem.AboveThreshold;
            else
                return ThresholdItem.Valid;
        case 0:
            return ThresholdItem.NoThreshold;

        default:
            return ThresholdItem.MultipleThreshold;

    }
}

private void RequestDenied(string note)
{
    workflowProperties.Item.ModerationInformation.Status = SPModerationStatusType.Denied;
    workflowProperties.Item.ModerationInformation.Comment = note;
    workflowProperties.Item.Update();
}

private string GetLinkedListItemString(string item)
{
    if (item.Contains("#"))
    {
        return sItem.Substring(item.LastIndexOf("#") + 1);
    }
    else
    {
        return item;
    }
}
هل كانت مفيدة؟

المحلول 2

حسنا يبدو أنني وجدت هذه المسألة في القانون نفسه إذا قرأت عليه عن كثب.نأمل أن هذا الحل من شأنه أن يساعد شخص ما في المستقبل.

ما يحدث هو أن العمل يدور في حلقة متعددة ، وهذا يحدث عندما يقوم المستخدم بتحديث قائمة البند ، فإنه يؤدي إلى تشغيل سير العمل.ما يحدث بعد ذلك هو أن سير العمل ترابط المعتدلين البند وضعه على الموافقة ، وهذا بدوره مرة أخرى بتشغيل سير العمل ، ثم يذهب مرة أخرى ومرة أخرى حتى SharePoint تقرر إنهاء ذلك ؟ (لست متأكدا حتى الآن كيف ولكن لاحظت أنه يعمل فقط 10 مرات).ما لاحظته هو أن Sharepoint 2010 تتعامل مع ذلك بشكل جيد جدا ولكن Sharepoint 2013 لا يلقي باستثناء مرة واحدة في كل حين.

اذا نظرتم الى الصورة تشغيله 10 مرات (الأحمر أبرز البند) من قبل ولكن بعد تحديد ذلك, حاولت مرتين و الآن يعمل كما هو متوقع (الأزرق والأخضر أبرز البنود).

حتى يكون الإصلاح عملية التحديث التي لا تؤدي إلى سير العمل مرة كنت قد فعلت ذلك باتباع هذا الحل: https://stackoverflow.com/a/2468156/412519

ثم تغيير التحديثات

workflowProperties.Item.Update(true);

enter image description here

نصائح أخرى

لست متأكدا إذا كان هذا ينطبق على حالتك ، ولكن إذا كان هذا هو معلن سير العمل باستخدام مخصص النشاط الذي كنت قد وضعت في مقابل ، ثم سير العمل سوف تعمل تحت نفس الامتيازات البادئ من سير العمل (أي شخص إضافة هذا البند إلى الموافقة).

يمكنك التحقق من ذلك هنا: التعريفي سير العمل سياق المستخدم

الشيء الأساسي هو أن نتذكر أن التعريفي سير العمل (واحد تم إنشاؤها بواسطة "مصمم SharePoint") دائما تشغيل انتحال شخصية المستخدم الذي بدأ سير العمل.حتى إذا أنا مساهم وأنا جعل تحرير قائمة البند الذي يقوم بتشغيل سير العمل ثم العمل يعمل لي و لديه القدرة على فعل كل ما أقوم به.أين يمكن الحصول على هذا التحدي هو في حالة سير العمل يحاول أن يفعل شيئا لم أستطع أن أفعل ذلك بمفردي ، مثل إجراء تغيير على قائمة لا يكون لديك أذونات لأنه أيضا لديه نفس القيود أفعل.

إذا كان المستخدم ليس لديه الإذن تعيين الاعتدال وضع هذا رمي استثناء.إذن المستوى المطلوب هو "الموافقة على قائمة البنود" (SPBasePermissions.ApproveItems).التي يمكن أن تفسر لماذا تحدث فقط بعض الوقت.ربما أذونات المستخدم لم تكن تماما في الحفاظ على الهجرة ؟ اتخاذ طعنة في الظلام دون معرفة المزيد من المعلومات ، ولكن في AuthorizeItem() وظيفة جميلة مقتضبة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى sharepoint.stackexchange
scroll top