private void CreateWorkflow(DocX body) { for (int i = 0; i < _activities.Count; i++) { ActivityChainModel classData = _activities[i]; body.DocumentWorkflow(classData.WorkflowType.Name, null); BuildActivities(body, classData.ActivityTree); } }
private void GetActivitiesInAssembly() { _activitiesInAssembly = new List <ActivityChainModel>(); try { Type[] types = _assemblyResolver.InputAssembly.GetTypes(); int len = types.Length; string typeNames = types.Select(x => x.Name).ToArray().ToCsv(); SendMessage("Activity search started found " + types.Length + " " + typeNames, EventType.Output); for (int x = 0; x < len; x++) //Parallel.For(0, len, x => { SendMessage("Processing activity: " + types[x].FullName, EventType.Output); try { var model = new ActivityChainModel { WorkflowType = types[x] }; model.Workflow = Activator.CreateInstance(model.WorkflowType); IEnumerable <FieldInfo> innerFields = model.WorkflowType.GetFields(BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Public); innerFields = innerFields.Where(current => current.ReflectedType.IsDerivativeOf(_typeActivity)); Parallel.ForEach(innerFields, currentField => { Activity activityCreated = null; try { activityCreated = (Activity)currentField.GetValue(model.Workflow); if (activityCreated != null) { SendMessage(activityCreated.ToString() + activityCreated, EventType.Output); model.AddActivity(activityCreated); } else { model.Errors.Add(new CouldNotCreateInstanceException(CouldNotCreateInstanceException.CreateMessage(currentField))); SendMessage("Could not create instance of field " + currentField.Name, EventType.Error); } } catch (Exception ex) { model.Errors.Add(ex); if (activityCreated != null) { SendMessage(activityCreated.Name + " " + ex.Message, EventType.Error); } else { SendMessage(ex.Message, EventType.Error); } } }); _activitiesInAssembly.Add(model); } catch (Exception exActivity) { SendMessage(types[x].FullName + " " + exActivity.Message, EventType.Error); } } SendMessage("Activity search completed", EventType.Output); } catch (Exception ex) { SendMessage(ex.Message, EventType.Error); } }