コード例 #1
0
        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);
            }
        }
コード例 #2
0
        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);
            }
        }