2012-11-21 2 views
2

VS 2010에서 간단한 워크 플로를 만들었습니다. 사람의 작업 상태를 "완료"로 변경하면 작업 흐름에 메시지를 기록합니다 역사.Visual Studio 2010/SharePoint 2010 워크 플로 오류

상태를 완료로 변경하면 "xxxx (작업 흐름 이름)에 오류가 발생했습니다"라고 표시됩니다.

코드 :

using System; 
using System.ComponentModel; 
using System.ComponentModel.Design; 
using System.Collections; 
using System.Drawing; 
using System.Linq; 
using System.Workflow.ComponentModel.Compiler; 
using System.Workflow.ComponentModel.Serialization; 
using System.Workflow.ComponentModel; 
using System.Workflow.ComponentModel.Design; 
using System.Workflow.Runtime; 
using System.Workflow.Activities; 
using System.Workflow.Activities.Rules; 
using Microsoft.SharePoint; 
using Microsoft.SharePoint.Workflow; 
using Microsoft.SharePoint.WorkflowActions; 

namespace WorkflowProject2.Workflow1 
{ 
public sealed partial class Workflow1 : SequentialWorkflowActivity 
{ 
    public Workflow1() 
    { 
     InitializeComponent(); 
    } 

    public Guid workflowId = default(System.Guid); 
    public SPWorkflowActivationProperties workflowProperties = new SPWorkflowActivationProperties(); 

    private void onWorkflowActived(object sender, ExternalDataEventArgs e) 
    { 

    } 

    public Guid taskID = default(System.Guid); 
    public SPWorkflowTaskProperties taskProperties = new Microsoft.SharePoint.Workflow.SPWorkflowTaskProperties(); 
    private bool taskHasCompleted = false; 

    public SPWorkflowTaskProperties taskAfterProperties = new Microsoft.SharePoint.Workflow.SPWorkflowTaskProperties(); 
    public SPWorkflowTaskProperties taskBeforeProperties = new Microsoft.SharePoint.Workflow.SPWorkflowTaskProperties(); 
    public String taskOutcome = default(System.String); 
    public Guid TaskStatusFieldID = new Guid("c15b34c3-ce7d-490a-b133-3f4de8801b76"); 

    private void createTask1_MethodInvoking(object sender, EventArgs e) 
    { 

     taskID = Guid.NewGuid(); 
     taskProperties.AssignedTo = "spdev\\lzhang"; 
     taskProperties.Description = "Please review"; 
     taskProperties.Title = "Leave application"; 

    } 

    private void completeTask1_MethodInvoking(object sender, EventArgs e) 
    { 
     // Finalize the task: 
     taskAfterProperties.PercentComplete = 100; 
     taskOutcome = "Completed"; 
    } 

    private void notComplete(object sender, ConditionalEventArgs e) 
    { 
     e.Result = !taskHasCompleted; // **(A)** 
    } 
    private void onTaskChanged1_Invoked(object sender, ExternalDataEventArgs e) 
    { 
     string taskStatus = taskAfterProperties.ExtendedProperties[TaskStatusFieldID].ToString(); 

     if (taskStatus == "Completed") 
     { 
      taskHasCompleted = true;  // **(B)** 

     } 

    } 

} 
} 

나는 (A) 몇 가지 문제가 있어야한다는 느낌 또는 (B)를 가지고 있지만 나는 그것을 해결하는 방법을 모르겠어요. 14/LOGS 폴더의 로그 파일에서 오류를 찾지 못했습니다 ...

감사합니다! 감사!

답변

1

Visual Studio 및 Workflows에는 거의 문제가 없었습니다. 대부분의 경우 올바른 작업 ID를 할당하지 않았거나 변경된 작업이나 상관 관계 토큰 또는 기타 작은 것들에 대한 사후 속성을 만드는 것을 잊어 버렸습니다.

그래서 당신이 직면하고있는 문제는 뒤에있는 코드에 문제가있는 것보다는이 범주에 속하는 것 같습니다.

이 가이드 시도하고 모든 단계가 완료되었는지 확인 : 더 나은 http://dotnetadil.wordpress.com/2012/05/29/sharepoint-foundation-2010-visual-studio-approval-workflow/

또는 단계를 안내하여 Microsoft 단계 :

http://msdn.microsoft.com/en-us/library/hh824675.aspx

내가 시도 할 또 다른 점은 만드는 것입니다 당신의 워크 플로를 종료하고 종료 조건이 true로 설정되어 있는지 확인하여 구조가 올바르게 완료되었는지 확인할 수 있습니다.

+0

감사를 읽을 것을 권장합니다! 나는 링크를 체크 아웃하고 내가 아무것도 찾을 수 있는지 확인합니다 ... 안부, 린 Logged –

1

문제점을 발견했습니다! "Workflow1.cs [디자인]"(디자인보기)에서 "속성 상자"에 "completeTask1"에 대한 TaskID를 지정하지 않았기 때문입니다. 기본적으로 "00000000-0000-0000-000000000000"입니다. "taskID"로 변경해야합니다.

1

예, GUID로 채우고, Visual Studio에서 도구, Create Guid를 선택하고 새 창에서 레지스트리 형식을 선택하고 모든 0이있는 곳에 복사하여 붙여 넣기를 선택하십시오.

[...]을 선택하고 새 상자에서 새 구성원에 바인딩을 선택하고 필드를 만듭니다.

createTask1_TaskId1 = Guid.NewGuid(); 

두 번째 옵션은 동일한 워크 플로우에 의해 만들어진 여러 작업을 할 수 있는지 확인합니다 : 그것은 뒤에 createTask1method의 _invoking 내에서 그냥 같이 새 GUID를 할당해야합니다 마지막으로 코드에서 createTask1_TaskId1과 같이 호출 할 수 얼지 마라.

관련 문제