/// <summary> /// Creates the business process activity info. /// </summary> /// <param name="businessProcess">The business process.</param> /// <param name="scope">The scope.</param> /// <param name="parentActivity">The parent activity.</param> /// <param name="activityInfoItems">The activity info items.</param> private static void CreateBusinessProcessActivityInfo(BusinessProcessInfo businessProcess, WorkflowChangesScope scope, EntityObject[] assignments, CompositeActivity parentActivity, ActivityInfoCollection activityInfoItems) { foreach (Activity activity in parentActivity.Activities) { if (activity is CreateAssignmentAndWaitResultActivity) { CreateAssignmentAndWaitResultActivity asgActivity = (CreateAssignmentAndWaitResultActivity)activity; PropertyValueCollection properties = asgActivity.AssignmentProperties; ActivityInfo activityInfo = new ActivityInfo(); activityInfoItems.Add(activityInfo); activityInfo.Name = activity.Name; activityInfo.Type = ActivityType.Assignment; AssignmentEntity assignment = FindAssignmentByActivityName(assignments, activity.Name); if (assignment != null) { activityInfo.State = (AssignmentState)assignment.State; activityInfo.Subject = assignment.Subject; activityInfo.TimeStatus = (AssignmentTimeStatus?)assignment.TimeStatus; activityInfo.PlanStartDate = assignment.ActualStartDate; activityInfo.PlanFinishDate = assignment.PlanFinishDate; activityInfo.ActualStartDate = assignment.ActualStartDate; activityInfo.ActualFinishDate = assignment.ActualFinishDate; activityInfo.Comment = assignment.Comment; activityInfo.UserId = assignment.UserId; activityInfo.ClosedBy = assignment.ClosedBy; activityInfo.ExecutionResult = (AssignmentExecutionResult?)assignment.ExecutionResult; } else { activityInfo.State = businessProcess.State == BusinessProcessState.Closed? AssignmentState.Closed: AssignmentState.Pending; if (asgActivity.AssignmentProperties.Contains(AssignmentEntity.FieldSubject)) { activityInfo.Subject = (string)asgActivity.AssignmentProperties[AssignmentEntity.FieldSubject]; } if (asgActivity.AssignmentProperties.Contains(AssignmentEntity.FieldUserId)) { activityInfo.UserId = (int?)asgActivity.AssignmentProperties[AssignmentEntity.FieldUserId]; } // Resolve Plan Time //if (activityInfo.State == AssignmentState.Pending && // businessProcess.State == BusinessProcessState.Active && // businessProcess.PlanFinishDate.HasValue) //{ // //CalculatePlanFinishDate(businessProcess, parentActivity, activity, activityInfo); //} //if (activityInfo.PlanStartDate.HasValue && // activityInfo.PlanStartDate.Value < DateTime.Now) // activityInfo.TimeStatus = AssignmentTimeStatus.OverStart; //if (activityInfo.PlanFinishDate.HasValue && // activityInfo.PlanFinishDate.Value < DateTime.Now) // activityInfo.TimeStatus = AssignmentTimeStatus.OverDue; } // 2008-07-07 Added Assignment Properties activityInfo.AssignmentProperties.AddRange(asgActivity.AssignmentProperties); // } else if (activity is BlockActivity) { // Create Block Info ActivityInfo blockInfo = new ActivityInfo(); activityInfoItems.Add(blockInfo); blockInfo.Name = activity.Name; blockInfo.Type = ActivityType.Block; blockInfo.State = businessProcess.State == BusinessProcessState.Closed ? AssignmentState.Closed : AssignmentState.Pending; CreateBusinessProcessActivityInfo(businessProcess, scope, assignments, (BlockActivity)activity, blockInfo.Activities); if (blockInfo.State == AssignmentState.Pending) { if (blockInfo.Activities.Count > 0) { foreach (ActivityInfo childActivitiInfo in blockInfo.Activities) { if (childActivitiInfo.State == AssignmentState.Active) { blockInfo.State = AssignmentState.Active; break; } else if (childActivitiInfo.State == AssignmentState.Closed) { blockInfo.State = AssignmentState.Closed; } } } else { int blockIndex = activityInfoItems.IndexOf(blockInfo); if (blockIndex == 0) { blockInfo.State = AssignmentState.Closed; } else { blockInfo.State = activityInfoItems[blockIndex - 1].State == AssignmentState.Active? AssignmentState.Pending: activityInfoItems[blockIndex - 1].State; } } } if (blockInfo.Activities.Count > 0 && (blockInfo.State == AssignmentState.Active || blockInfo.State == AssignmentState.Closed)) { blockInfo.PlanStartDate = blockInfo.Activities[0].PlanStartDate; blockInfo.PlanFinishDate = blockInfo.Activities[0].PlanFinishDate; } } } }
/// <summary> /// Inits the assignment fields. /// </summary> /// <param name="assignment">The assignment.</param> /// <param name="strPrototypeId">The STR prototype id.</param> private void InitAssignmentFields(WorkflowInstanceEntity ownerWfInstance, AssignmentEntity assignment, PropertyValueCollection properties) { // Init Workflow Properties assignment.WorkflowInstanceId = (PrimaryKeyId)this.WorkflowInstanceId; assignment.WorkflowActivityName = this.Name; // Copy Owner From assignment.OwnerDocumentId = ownerWfInstance.OwnerDocumentId; if (properties != null) { foreach (PropertyValue prop in properties) { if (prop.IsDynamicValue) { assignment[prop.Name] = ((DynamicValue)prop.Value).EvaluateValue(this); } else { assignment[prop.Name] = prop.Value; } } } }
private static void ProcessActivity(WorkflowDescription wfDescription, Activity activity, DataTable dt, int level) { DataRow row = dt.NewRow(); row["Id"] = activity.QualifiedName; row["Number"] = dt.Rows.Count + 1; if (activity is SequentialWorkflowActivity) { row["Subject"] = wfDescription.Name; row["IsBlock"] = true; } else if (activity is StateMachineWorkflowActivity) { row["Subject"] = wfDescription.Name; row["IsBlock"] = true; } else if (activity is BlockActivity) { if (((BlockActivity)activity).Type == BlockActivityType.All) { row["Subject"] = "{IbnFramework.BusinessProcess:BlockActivityTypeAll}"; } else { row["Subject"] = "{IbnFramework.BusinessProcess:BlockActivityTypeAny}"; } row["IsBlock"] = true; } else if (activity is CreateAssignmentAndWaitResultActivity) { PropertyValueCollection properties = ((CreateAssignmentAndWaitResultActivity)activity).AssignmentProperties; row["Subject"] = properties[AssignmentEntity.FieldSubject].ToString(); row["User"] = (int)properties[AssignmentEntity.FieldUserId]; if (properties[AssignmentEntity.FieldPlanFinishDate] != null) { row["DueDate"] = (DateTime)properties[AssignmentEntity.FieldPlanFinishDate]; } row["IsBlock"] = false; } if (row["Subject"] == DBNull.Value) { row["Subject"] = "{IbnFramework.BusinessProcess:NoSubject}"; } row["State"] = GetActivityStatus(wfDescription, activity); row["Level"] = level; dt.Rows.Add(row); level++; if (activity is SequentialWorkflowActivity) { SequentialWorkflowActivity block = (SequentialWorkflowActivity)activity; foreach (Activity child in block.Activities) { ProcessActivity(wfDescription, child, dt, level); } } else if (activity is StateMachineWorkflowActivity) { StateMachineWorkflowActivity block = (StateMachineWorkflowActivity)activity; foreach (Activity child in block.Activities) { ProcessActivity(wfDescription, child, dt, level); } } else if (activity is BlockActivity) { BlockActivity block = (BlockActivity)activity; foreach (Activity child in block.Activities) { ProcessActivity(wfDescription, child, dt, level); } } }
/// <summary> /// Initializes a new instance of the <see cref="ActivityInfo"/> class. /// </summary> public ActivityInfo() { this.Activities = new ActivityInfoCollection(this); this.AssignmentProperties = new PropertyValueCollection(); }