My requirement is: selecting different template(for 4 different user)in WPF using WF4 custom code.As for now i have created only one template per user
I have created a ActivityLibrary,contains codeactivity,activity.xaml + workflowconsoleapplication + WPFapp (to host the workflow)activity.xaml contains 2 arguments one is In and one is out.
Codeactivity contians simple code below.
public sealed class VisitorCodeActivity : CodeActivity<String>
{
public InArgument<String> Visit { get; set; }
public OutArgument<String> output { get; set; }
protected override String Execute(CodeActivityContext context)
{
string line = Visit.Get(context).ToString();
return String.Format(" {0} ", Visit.Get(context));
}
}
WorkflowconsoleApp code:
namespace VisitorWorkflowConsoleApp
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Enter your visit Number '1' for FirstTime and '2' for Secondtime:");
try
{
string input = Console.ReadLine();
VisitorCodeActivity vca = new VisitorCodeActivity();
string result = WorkflowInvoker.Invoke<String>(vca);
Console.WriteLine("{0}", result);
Console.ReadKey(false);
}
catch (Exception ex)
{
Console.WriteLine("Result is {0}:{1}", ex.Message, ex.GetType());
}
}
}
}
WPFAPPcode :
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void OncbTypeSelectionChanged(object sender, SelectionChangedEventArgs e)
{
string szSelection = Workflowprocess();
if (szSelection.Trim().Equals("FirstVisit"))
{
spPhonenumber.Visibility = Visibility.Hidden;
gdVisitorDetails.Visibility = Visibility.Visible;
}
else
{
txtvisiorPassdetails.Visibility = Visibility.Hidden;
spPhonenumber.Visibility = Visibility.Visible;
gdVisitorDetails.Visibility = Visibility.Hidden;
}
}
private void OnWindowLoaded(object sender, RoutedEventArgs e)
{
cbType.Items.Insert(0, "FirstVisit");
cbType.Items.Insert(0, "SecondVisit");
}
private string Workflowprocess()
{
string szoutput = string.Empty;
string szInput = null;
szInput = cbType.SelectedValue.ToString();
if (!string.IsNullOrEmpty(szInput))
{
StringWriter writer = new StringWriter();
try
{
VisitorActivityXaml vaxObj = new VisitorActivityXaml();
IDictionary<String, Object> output = WorkflowInvoker.Invoke(vaxObj, new Dictionary<String, Object>
{
{"Visit",szInput},
});
lblDisplay.Content = (String)output["Result"];
writer.WriteLine("{0}",output["Result"]);
}
catch (Exception ex)
{
Console.WriteLine("Workflow Exception:{0}:{1}", ex.Message, ex.GetType());
}
szoutput = writer.ToString();
}
return szoutput;
}
private void OnbtnGeneratepassClick(object sender, RoutedEventArgs e)
{
txtvisiorPassdetails.Visibility = Visibility.Visible;
}
}
If it is not the correct way of doing please suggest me correct way with any example.So that i can understand best way of working with WF and WPF.