3

これは可能ですか?WFアクティビティパックがあるのでMS用であることは知っていますが、どのように行われるのかわかりません。他のアクティビティやボタンなどを挿入するために、Bodyブロックを使用したアクティビティを用意できると便利です。それほど面倒ではない場合や時間のかかる場合はそうです。

4

3 に答える 3

3

いくつかのルールに従えば、それは十分に簡単です。子を持つNativeActivityの例を次に示します。

[Designer(typeof(MyActivityDesigner)), ContentProperty("Child")]
public sealed class MyActivity : 
    NativeActivity, IActivityTemplateFactory
{
    // this "activity delegate" holds our child activity
    public ActivityAction Child { get; set; }

    // may be necessary to do this
    protected override void 
        CacheMetadata(NativeActivityMetadata metadata)
    {
        metadata.AddDelegate(Child);
    }

    protected override void 
        Execute(NativeActivityContext context)
    {
        // do some work here, then
        context.ScheduleAction(Child);
    }

    // better to use a template factory than a constructor to do this!
    Activity IActivityTemplateFactory
        .Create(System.Windows.DependencyObject target)
    {
        return new MyActivity
        {
            // HAVE to have this set, or it fails in the designer!
            Child = new ActivityAction()
        };
    }
}

いくつかの点に注意してください。子を保持するためにActivityDelegateタイプを使用します。次に、IActivityTemplateFactoryを実装して、デザイナーのアクティビティを構成します。コンストラクターで設定するよりも、これを行う方が常に優れています/安定しています。デリゲートのプロパティにバインドするため、インスタンスを設定する必要があります。そうしないと、バインディングが失敗します。

私たちが実行するとき、あなたがしなければならないのは、適切なときにあなたの子供をスケジュールして戻ることだけです。もちろん、ブロックするべきではありません。

次に、デザイナーで、次のように子にバインドします。

<sap:WorkflowItemPresenter
    HintText="Add children here!"
    Item="{Binding Path=ModelItem.Child.Handler}" />
于 2010-07-22T16:49:28.363 に答える
2

BruceBukovicsによる.Net4の本のProWF:WindowsWorkflowにも多くの例があります。あなたはそれをチェックしたいかもしれません。

于 2010-07-27T13:52:27.470 に答える
0

CodeActivityではなくNativeActivityから始める必要があります。NativeActivityを使用すると、実行コンテキストを通じて子アクティビティをスケジュールできます。NativeActivityのテンプレートはありません。代わりに、クラスを作成してNativeActivityから派生します。

于 2010-06-23T20:29:31.693 に答える