2010-11-30 8 views
0

.NET 3.5をターゲットとするVS2010でカスタムワークフローアクティビティを作成しています。 DLLはMicrosoft System Center Service Managerのカスタムワークフローで実際に使用されていますが、私はそれが私の問題だとは思わない。カスタムワークフローアクティビティエラー '値はnullにはなりません'

私はパブリック文字列プロパティを持っています。ユーザは、そのアクティビティで使用する文字列を入力します。ただし、WFが実行されると、 '値はnullにはなりません'というエラーが出力されます。自分のコードやその他のものであればターゲットにしたい

カスタムアクティビティをデザイナにドラッグすると、そのプロパティのデザイナに文字列のテキストを入力できます。それがエラー「nullにすることはできません値」になっているので

public static DependencyProperty ChangeRequestStageProperty = DependencyProperty.Register("ChangeRequestStage", typeof(String), typeof(UpdateChangeRequestStage)); 

    [DescriptionAttribute("The value to set the ChangeRequestStage Property in the ChangeRequest Extension class.")] 
    [CategoryAttribute("Change Request Extension")] 
    [BrowsableAttribute(true)] 
    [DesignerSerializationVisibilityAttribute(DesignerSerializationVisibility.Visible)] 
    public String Stage 
    { 
     get { return ((String)(base.GetValue(UpdateChangeRequestStage.ChangeRequestStageProperty))); } 
     set { base.SetValue(UpdateChangeRequestStage.ChangeRequestStageProperty, value); } 
    } 

    protected override ActivityExecutionStatus Execute(ActivityExecutionContext executionContext) 
    { 
     EnterpriseManagementGroup emg = CreateEMG(); 

     //System.WorkItem.ChangeRequest Extension - ClassExtension_928bec0a_cac4_4a0a_bd89_7146c9052fbe 
     ManagementPackClass mpcChangeRequest = emg.EntityTypes.GetClass(new Guid("8c6c6057-56ad-3862-47ec-dc0dde80a071")); 

     //System.WorkItemContainsActivity Relationship Class 
     ManagementPackRelationship workItemContainsActivityRelationship = emg.EntityTypes.GetRelationshipClass(new Guid("2DA498BE-0485-B2B2-D520-6EBD1698E61B")); 

     EnterpriseManagementObject changeRequest = null; 

     //Loop thru each emo (Change Request in this case), and assign it. There will never be more than 1 emo returned 
     foreach (EnterpriseManagementObject obj in emg.EntityObjects.GetRelatedObjects<EnterpriseManagementObject>(executionContext.ContextGuid, workItemContainsActivityRelationship, TraversalDepth.OneLevel, ObjectQueryOptions.Default)) 
     { changeRequest = obj; } 

     EnterpriseManagementObjectProjection emop = new EnterpriseManagementObjectProjection(changeRequest); 

     if (emop != null) 
     { emop.Object[mpcChangeRequest, "ChangeRequestStage"].Value = Stage; } 

     emop.Commit(); 

     return base.Execute(executionContext); 
    } 

、私は推測していることは、この行にあります:

emop.Object[mpcChangeRequest, "ChangeRequestStage"].Value = Stage; 

私は価値の作品をハードコーディングかどうかをテストして見るつもりですかない。何か案は? は、ここにコード

+0

私はこれがコードの問題ではないと思います。私はそれがSCSMの問題だと思う。ステージ変数を調べる代わりに、ハードコードされた値 "TEST VALUE"を試しました。 –

+0

問題は、WF自体ではなく、Service Manager SDKに関連しています。 –

答えて

0

を試してみてくださいを入力してください。

EnterpriseManagementObjectProjection(emop)で作業するのではなく、標準EnterpriseManagementObject(emo)で作業しました。そこから、私は上記と同様のフォーマットに従うことができました:

ManagementPackClass mpcChangeRequest = emg.EntityTypes.GetClass(new Guid("8c246fc5-4e5e-0605-dc23-91f7a362615b")); 
changeRequest[mpcChangeRequest, "ChangeRequestStage"].Value = this.Stage; 
changeRequest.Commit(); 
0

(長い時間前に)私は大きく開いてこの質問を残したくなかったので、私はこれを解決する方法として、それを更新しています。この

if (emop != null && emop.Object[mpcChangeRequest, "ChangeRequestStage"] != null) 
    emop.Object[mpcChangeRequest, "ChangeRequestStage"].Value = Stage 
+0

それは動作しません。アクティビティによって値がnullまたは何かに変更されていることがあります。 –

+0

しかし、オブジェクトがnullの場合、その値にアクセスすることはできません。 –

+0

オブジェクトは常にそこにあります。値はnullでもかまいません。 –

関連する問題