Approaches:• Code-based Atomic Activities – CodeActivity, Async & Native• Code-based Composite Activities - NativeActivity• XAML-based Composite Activities - Activity
DoWorkDoWork11
DoWorkDoWork22
DoWorkDoWork33
<p:Activity x:Class=MyActivity” …> <p:Sequence …> <my:DoWork1 ...> <my:DoWork2 ...> <my:DoWork3 ...> </p:Sequence></p:Activity>
public InArgument<string> TextToLog {get;set;}
public class SimpleLogActivity: CodeActivity{ protected override void Execute(CodeActivityExecutionContext context) { //activity logic goes here context.Track(new UserTrackingRecord(“Activity says: “ +
TextToLog.Get(context))); } …}
public sealed class MyNativeActivity : NativeActivity{ protected override void Execute(NativeActivityContext c) { }}
Using Arguments & Variables in Custom Activities
DoWorDoWorkk
WorkToDoWorkToDo
ResulResultt
ResultResult
DoWorDoWorkk
WorkToDoWorkToDo
ResultResult
•Inherit from
CodeActivity
•Override Execute
method
•Use DataReader,
Command or
DataAdapter
Using ADO.NET Using ADO.NET for CRUD from for CRUD from Custom Custom ActivitiesActivities
CRUD Activity: CodeActivityCRUD Activity: CodeActivity
In ArgumentsIn Arguments
Out ArgumentsOut Arguments
Execute• Get Connection String (web.config)• Open Connection• Perform CRUD ops• Write values to Output Arguments• Close Connection
Execute• Get Connection String (web.config)• Open Connection• Perform CRUD ops• Write values to Output Arguments• Close Connection
If using Integrated Security, ensure AppPool
Identity has DB access
If using Integrated Security, ensure AppPool
Identity has DB access
• Set of custom
Activities
• Perform CRUD using
ADO.NET
• Enable using SQL or
Stored Procedure for
command
• Support mapping
returned record
collection to collection
variable in workflow
• Pull connection string
from config
Database Database Activity PackActivity Pack
• No persistence within
transaction
• No explicit rollback or
commit activities OOB
• NativeActivityContext
can get current
transaction (if needed)
• TransactedReceiveScope
activity supports flow-in of
distributed transactions in
workflow services
DB Activities DB Activities with with TransactionsTransactions
Transaction Scope
Create ActivityCreate Activity
Update ActivityUpdate Activity
Delete ActivityDelete Activity
Isolation LevelIsolation Level
TimeoutTimeout
Creates or Joins Ambient Transaction
Creates or Joins Ambient Transaction
Exceptions thrown cause
implicit rollback
Exceptions thrown cause
implicit rollback
Completion of Transaction
Scope implicitly commits
transaction & persists workflow
Completion of Transaction
Scope implicitly commits
transaction & persists workflow
Join ambient transaction
Join ambient transaction
Activity Designers
Property Grid Extensibility
Validation
Custom Inline, Pop-Up & Dialog Property Value
Editors
Custom Inline, Pop-Up & Dialog Property Value
Editors
Category Editors allow
“batch” editing of multiple
properties with single complex
UI
Category Editors allow
“batch” editing of multiple
properties with single complex
UI
Customize presentation &
design time behavior
Customize presentation &
design time behavior
WPF BasedWPF Based
Expression support
Expression support
Validate individual
properties or entire activity
tree
Validate individual
properties or entire activity
tree