2012-01-04 10 views
1

Visual Studioで書かれたカスタム承認ワークフローに関する問題が発生しています。カスタムコンテンツタイプを使用して承認タスクを作成します。私は、SharePointエンタープライズ環境でワークフローを開発しましたが、クライアントはそれを基盤サーバーで実行しようとしています。私が実行している問題は、コンテンツタイプがタスクリストに割り当てられている場合です。ワークフローが実行されるたびに、リスト項目を編集したり、タスク項目を更新することができません。タスクリストからコンテンツタイプを削除すると、すぐにすべてのレコードを表示して編集することができます。私は、ログに次のイベントを取得します:カスタムコンテンツタイプのSharepointワークフローに関する問題

System.NullReferenceException:オブジェクト参照がオブジェクトのインスタンス に設定されていません。コンテンツタイプが割り当てられていないとき でMicrosoft.SharePoint.Publishing.CachedListItem

でMicrosoft.SharePoint.Publishing.CachedListItem.GetWorkflowInfo(SPListItem 項目は)それをより面白くするために、私はワークフローを実行することができました作成された承認タスクを取得してから、コンテンツタイプを追加してから、両方のレコードを正常に編集して更新します。

とコードのビット....これは私のコンテンツタイプの方法でタスクを作成します

private void createTaskWithContentType1_MethodInvoking(object sender, EventArgs e) 
    { 
     //set the primary approval task as not completed 
     this.primaryApprovalTaskCompleted = false; 

     //get the primary approver 
     var field = workflowProperties.Item.Fields.GetField("primaryApprover") as SPFieldUser; 
     var fieldValue = field.GetFieldValue(workflowProperties.Item[field.Id].ToString()) as SPFieldUserValue; 

     createTaskWithContentType1.TaskProperties.AssignedTo = fieldValue.User.LoginName; 

     createTaskWithContentType1.TaskProperties.DueDate = DateTime.Now.AddHours(4); 

     createTaskWithContentType1.TaskProperties.Title = "Primary Approval for Batch Job ID: " + workflowProperties.Item["batchJobId"].ToString(); 

     createTaskWithContentType1.TaskProperties.SendEmailNotification = true; 

    } 

と私のコンテンツタイプのためのXML:

<?xml version="1.0" encoding="utf-8"?> 
<Elements xmlns="http://schemas.microsoft.com/sharepoint/"> 
    <Field ID="{46F9442F-19E3-4818-8FE7-719E5961C8A1}" Name="ApprovalStatus" DisplayName="Approval Status" Type="Choice" Required="TRUE" Sealed="TRUE" Overwrite="True" > 
    <CHOICES> 
     <CHOICE>Approve</CHOICE> 
     <CHOICE>Reject</CHOICE> 
    </CHOICES> 
    </Field> 

    <Field ID="{B485C5E5-A85C-4C09-AE96-F7FC71FB4A3D}" Name="ApprovalNotes" DisplayName="Approval Notes" Type="Text" Overwrite="True" /> 


    <ContentType ID="0x01080100922FA9051D1C471DA956E627E6B3B81E" 
      Name="ApprovalContentType" 
      Group="Custom Content Types" 
      Description="Approval Content Type" 
      Version="0" 
      Overwrite="True"> 
    <FieldRefs> 
     <RemoveFieldRef ID="{a8eb573e-9e11-481a-a8c9-1104a54b2fbd}" Name="Priority" Hidden="TRUE"/> 
     <RemoveFieldRef ID="{c3a92d97-2b77-4a25-9698-3ab54874bc6f}" Name="Predecessors" Hidden="TRUE"/> 
     <RemoveFieldRef ID="{c15b34c3-ce7d-490a-b133-3f4de8801b76}" Name="Status" Hidden="TRUE"/> 
     <RemoveFieldRef ID="{d2311440-1ed6-46ea-b46d-daa643dc3886}" Name="PercentComplete" Hidden="TRUE"/> 
     <RemoveFieldRef ID="{7662cd2c-f069-4dba-9e35-082cf976e170}" Name="Body" Hidden="TRUE"/> 
     <FieldRef 
    ID="{46F9442F-19E3-4818-8FE7-719E5961C8A1}" 
    Name="ApprovalStatus" Sealed="TRUE" Required="TRUE"/> 
     <FieldRef 
    ID="{B485C5E5-A85C-4C09-AE96-F7FC71FB4A3D}" 
    Name="ApprovalNotes"/> 
    </FieldRefs> 

    </ContentType> 
</Elements> 

答えて

0

オクラホマので、ソリューションこの問題は、コンテンツタイプオブジェクトで作成タスクを使用したという事実と関係していました。私は、それを作成タスクオブジェクトに置き換えて、コードを通してオブジェクトのコンテンツタイプを設定することができました。私はなぜこれが私のテストファームでもうまくいったのですが、私のクライアントでは失敗しました...

+0

作成タスクオブジェクトのコンテンツタイプIDはどのように設定しましたか?コンテンツタイプの作成タスクを使用しているワークフローで同じ問題が発生していますが、解決策を試してみたいと思います。 – Peterson

1

私は同じ問題があり、次のコードで解決しました。すべてのものが正常に動作するように

<ContentType ID="0x01080100C2CC93E34F784038BE7CA4CFD86BD58E" 
       Name="taskCT" 
       Group="Custom Content Types" 
       Description="My Content Type" 
       Inherits="FALSE" 
       Version="0"> 

ただ、コンテンツタイプのIDで010x01080x010801 [remaing guid_])を追加します。それはバグだ、マイクロソフトはこの解決策を与えている。

関連する問題