0

.NET 3.5 を対象とする VS2010 でカスタム ワークフロー アクティビティを作成しています。DLL は実際には Microsoft System Center Service Manager のカスタム ワークフローで使用されていますが、それは私の問題ではないと思います。

ユーザーがアクティビティで使用する文字列を入力するパブリック文字列プロパティがあります。ただし、WF を実行すると、「値を 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);
    }

「値をnullにすることはできません」というエラーが発生しているため、次の行にあると推測しています。

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

値のハードコーディングが機能するかどうかをテストして確認します。何か案は?ここにコードを入力してください

4

2 に答える 2

0

これを試して

if (emop != null && emop.Object[mpcChangeRequest, "ChangeRequestStage"] != null)
   emop.Object[mpcChangeRequest, "ChangeRequestStage"].Value = Stage
于 2010-11-30T14:54:45.173 に答える
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();
于 2011-05-10T14:53:15.363 に答える