Domanda

È possibile? So che è per MS dato che hanno pacchetti di attività WF, ma io non sono sicuro di come si fa. Sarebbe bello essere in grado di avere attività con blocchi di corpo per inserire altre attività, bottoni, ecc Se non troppo disturbo e / o che richiede tempo che è.

È stato utile?

Soluzione

La sua abbastanza facile se si seguono alcune regole. Ecco un esempio di un NativeActivity che ha un figlio:

[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()
        };
    }
}

Si noti un paio di cose: Usiamo un tipo di attività delegato di tenere il nostro bambino. In secondo luogo, abbiamo attuare IActivityTemplateFactory per configurare la nostra attività per il progettista. La sua sempre meglio / più stabile per fare questo che roba set up nel costruttore. Ci saranno vincolanti a una proprietà del delegato, quindi dobbiamo impostare un'istanza; altrimenti il ??legame fallirà.

Quando eseguiamo, tutto quello che dovete fare è pianificare il bambino quando appropriato e ritorno. Si consiglia di non bloccare, naturalmente.

Quindi, nella finestra di progettazione, che ci si legano al bambino in questo modo:

<sap:WorkflowItemPresenter
    HintText="Add children here!"
    Item="{Binding Path=ModelItem.Child.Handler}" />

Altri suggerimenti

La WF Pro: Windows Workflow in .NET 4 libro di Bruce Bukovics ha anche un sacco di esempi. Si potrebbe voler verificare che fuori.

È necessario iniziare con un NativeActivity invece di un CodeActivity. Il NativeActivity consente di pianificare attività figlio attraverso il suo contesto di esecuzione. Non v'è alcun modello per il NativeActivity, invece basta creare una classe e derivano da NativeActivity.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top