public static Action CreateObject(IApplicationContext ctx, String value) { List<Action> actionList = new List<Action>(); String[] actions = value.Split(';'); foreach(String s in actions) { String[] arr = s.Split(':'); if (arr.Length != 2) throw new Exception (String.Format ("Invalid action: {0}", value)); Action a = null; if(ctx.Workflow.HasAction(arr[0])) a = new WorkflowAction(arr[0]); else { Type t = typeof(Action).Assembly.GetType(String.Format("{0}.{1}", "BitMobile.Actions", arr[0])); if(t==null) throw new Exception("Invalid action: " + arr[0]); System.Reflection.ConstructorInfo ci = t.GetConstructor(new Type[] { }); a = (Action)ci.Invoke(new object[] { }); } if (arr.Length > 1) { int n = 0; foreach (String v in arr[1].Split(',')) { String paramName = String.Format("param{0}",(n+1).ToString()); String paramValue = v.Trim(); if (paramValue.StartsWith("$")) { if(LazyParameter.LazyExpression(ctx.ValueStack,paramValue)) a.AddLazyParameter(paramName, delegate() { return ctx.ValueStack.Evaluate(paramValue,null); }); else a.AddParameter(paramName, ctx.ValueStack.Evaluate(paramValue,null)); } else a.AddParameter(paramName, paramValue); n++; } } actionList.Add(a); } for(int i=0;i<actionList.Count-1;i++) { actionList[i].nextAction = actionList[i+1]; } ctx.Workflow.RegisterAction(actionList[0]); return actionList[0]; }
public static Action CreateObject(IApplicationContext ctx, String value) { List <Action> actionList = new List <Action>(); String[] actions = value.Split(';'); foreach (String s in actions) { String[] arr = s.Split(':'); if (arr.Length != 2) { throw new Exception(String.Format("Invalid action: {0}", value)); } Action a = null; if (ctx.Workflow.HasAction(arr[0])) { a = new WorkflowAction(arr[0]); } else { Type t = typeof(Action).Assembly.GetType(String.Format("{0}.{1}", "BitMobile.Actions", arr[0])); if (t == null) { throw new Exception("Invalid action: " + arr[0]); } System.Reflection.ConstructorInfo ci = t.GetConstructor(new Type[] { }); a = (Action)ci.Invoke(new object[] { }); } if (arr.Length > 1) { int n = 0; foreach (String v in arr[1].Split(',')) { String paramName = String.Format("param{0}", (n + 1).ToString()); String paramValue = v.Trim(); if (paramValue.StartsWith("$")) { if (LazyParameter.LazyExpression(ctx.ValueStack, paramValue)) { a.AddLazyParameter(paramName, delegate() { return(ctx.ValueStack.Evaluate(paramValue, null)); }); } else { a.AddParameter(paramName, ctx.ValueStack.Evaluate(paramValue, null)); } } else { a.AddParameter(paramName, paramValue); } n++; } } actionList.Add(a); } for (int i = 0; i < actionList.Count - 1; i++) { actionList[i].nextAction = actionList[i + 1]; } ctx.Workflow.RegisterAction(actionList[0]); return(actionList[0]); }