ActivityFilter - aceryan-consulting/aceryansoft.codeflow GitHub Wiki

A common ActivityFilter need is to run code before and after each activity.

For instance let's add an ActivityFilter to log each activity execution details.

var aicodeFlow = new CodeFlow();
aicodeFlow.StartNew(cfg => {
	cfg.WithContext(() => new AiContext())
	.UseMiddleware(exceptionHandlingMiddleware)
	.UseActivityFilter((ctx, inputs, next) =>
	{
           //run code before each activity
	   var res = next(ctx, inputs);
	   // log each activity details : res.Status, res.ActivityName, res.StartDate, res.Duration , res.Error , res.ErrorCode,  etc ... 
           //run code after each activity
	   return res;
	});
})
.Call((ctx, inputs) =>
{
	Console.WriteLine("Hello World");
})
.Close();

aicodeFlow.Execute();

ActivityFilter can also be define as a class implementing ICodeFlowActivityFilter

 public class LogActivityFilter : ICodeFlowActivityFilter
{
	public void OnActivityExecuting(ICodeFlowContext context, params object[] inputs)
	{
		//run code before each activity
	}

	public void OnActivityExecuted(ICodeFlowContext context, IExecutionLog res, params object[] inputs)
	{
		// log each activity details : res.Status, res.ActivityName, res.StartDate, res.Duration , res.Error , res.ErrorCode,  etc ... 
		//run code after each activity
	}
}

The ActivityFilter class is now use as follow

 var exceptionHandlingMiddleware = new ExceptionHandlingMiddleware();
var logActivityFilter = new LogActivityFilter();

var aicodeFlow = new CodeFlow();
aicodeFlow.StartNew(cfg => {
	cfg.WithContext(() => new AiContext())
	.UseMiddleware(exceptionHandlingMiddleware)
	.UseActivityFilter(logActivityFilter);
})
.Call((ctx, inputs) =>
{
	Console.WriteLine("Hello World");
})
.Close();

aicodeFlow.Execute();

Continue reading: CodeFlowActivity