Introduction: The InvokeMethod activity
is another way to implement a code which is outside of the standard built-in
activities. You can use this activity to invoke a method of a class. The class
does not need to be part of the workflow or use any of the workflow base
classes. The InvokeMethod calls
a public method of a specified object or type.
InvokeMethod Properties:
- MethodName: Assign the
method name to this property.
- TargetObject: When we
want to invoke non-static methods, we need first to create an object that
contains the method to execute.
- TargetType: When we want
to invoke static methods, we specify the type that contains the static
method to execute.
- GenericTypeArguments:
When we want to invoke a generic method, we specify generic types in this
collection.
- Parameters: The parameter
collection of the method to be invoked.
- Result: The return value
of the method execution.
InvokeMethod Class:
- System.Object.
- System.Activities.Activity.
- System.Activities.AsyncCodeActivity.
-
System.Activities.Statements.InvokeMethod.
Namespace:
System.Activities.Statements.
Assembly: System.Activities (in System.Activities.dll).
Step 1: Open Visual Studio 2010.
- Go to File->New->Project.
- Select WorkflowConsoleApplication.
Define Arguments:
Step 2: Go to the Workflow.xaml file and
double-click on the Arguments option.
- Click Create Arguments.
- Give Name, Direction, Arguments Type,
Default Value.
Step 3: Drag Activity from Toolbox.
- Sequence, While, Assign activity.
Step 4: Select Sequence and While
activity and create variables.
- Define Name, Variable Type, Scope,
Default.
Step 5: Drag Sequence, Assign,
InvokeMethod activity inside the body of While activity.
Step 6: Go to properties of InvokeMethod
and define MethodName, TargetObject.
Step 7: Define Parameters for
InvokeMethod.
Step 8: Go to the Programe.cs file and
write the below code.
using
System;
using
System.Linq;
using
System.Activities;
using
System.Activities.Statements;
using
System.Activities.Expressions;
using
System.Collections.Generic;
using
System.ServiceModel.Activities;
using
System.Runtime.Serialization;
using
System.Collections;
namespace
WorkflowConsoleApplication23
{
class Program
{
static void
Main(string[] args)
{
Console.Write("Enter
string: ");
string reversedString =
string.Empty;
IDictionary<string,
object> results =
WorkflowInvoker.Invoke(new
ReverseStringWorkflow(),
new
Dictionary<string,
object>{ {"StringToReverse",
stringToReverse } });
Console.Write("Reversed
string: ");
Console.WriteLine(results["ReversedString"]);
Console.ReadKey();
}
}
}
Creating Workflow using code:
Step 9: Write the code for creation of
Workflow.
- Go to Solution Explorer->Add->New Item.
- Select Class.
- Class1.cs file open.
Code:
using
System;
using
System.Collections.Generic;
using
System.Linq;
using
System.Text;
using
System.Collections;
using
System.Activities;
using
System.Activities.Expressions;
using
System.Activities.Statements;
using
System.ComponentModel;
using
System.Runtime.Serialization;
namespace
WorkflowConsoleApplication23
{
class Class1
{
public class
ReverseStringWorkflow : Activit
{
public InArgument<string>
StringToReverse { get;
set; }
public OutArgument<string>
ReversedString { get;
set; }
protected override
Func<Activity>
Implementation
{
get
{
return () =>
{
Sequence sequence = new
Sequence
{
Variables = new
Variable<StringBuilder>("ReverseStringBuilder",
new StringBuilder())},
Activities = new
While
{
Variables = new
Variable<int>("Counter")
{
Default = new
VisualBasicValue<int>("StringToReverse.Length")
}
},
Condition = new
VisualBasicValue<bool>("Counter > 0"),
Body = new
Sequence
{
Activities =
{
new
Assign
{
To =
new OutArgument<int>(new
VisualBasicReference<int>("Counter")),
Value =
new InArgument<int>(new
VisualBasicValue<int>("Counter
- 1"))
},
new
InvokeMethod
{
MethodName =
"Append",
TargetObject =
new InArgument<StringBuilder>(new
VisualBasicValue<StringBuilder>("ReverseStringBuilder")),
Parameters =
{
new InArgument<char>(new
VisualBasicValue<char>("StringToReverse.Chars(Counter)"))
}
}
}
}
},
new Assign|
{
To =
new OutArgument<string>(new
VisualBasicReference<string>("ReversedString")),
Value =
new InArgument<string>(new
VisualBasicValue<string>("ReverseStringBuilder.ToString()"))
}
}
};
return sequence;
};
}
set
{
base.Implementation = value;
}
}
}
Step 10: Press F5 to run the
application.