Come posso scrivere un custom WorkFlow 4 Codice di attività che include un “blocco corpo”?
-
29-09-2019 - |
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 è.
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.