/// <summary> /// 查询流程实体数据 /// </summary> /// <param name="processInstanceId"></param> /// <returns></returns> public WfWorkflowInstanceData GetWorkflowInstance(int processInstanceId) { using (BizDataContext context = new BizDataContext()) { var piCache = new ProcessInstanceCacheFactory(context); //实例信息 SysProcessInstance pi = piCache.GetProcessInstanceCache(processInstanceId); SysProcess process = pi.Process; //定义信息 WfWorkflowInstanceData data = new WfWorkflowInstanceData(); data.Process = process.ConvertTo <WfProcess>(); if (data.Process.TemplateId != null) { data.Process.ProcessTemplate = Convert.ToBase64String(data.Process.TemplateId); data.Process.TemplateId = null; } data.ActivityList = process.Activities.ConvertTo <WfActivity>(); data.TransitionList = process.Transitions.ConvertTo <WfTransition>(); data.ProcessInstance = pi.ConvertTo <WfProcessInstance>(); data.ActivityInstanceList = pi.ActivityInstances.ConvertTo <WfActivityInstance>(); //加载活动实体信息 foreach (var ai in data.ActivityInstanceList) { LoadActivityEntityData(context, process, ai, data); } //连接线实例,这里表中少了个字段ProcessInstanceId,所以只能用这种方式来获取 data.TransitionInstanceList = new List <WfTransitionInstance>(); foreach (var ai in pi.ActivityInstances) { var tempList = ai.FromTransitionInstances.ConvertTo <WfTransitionInstance>(); data.TransitionInstanceList = data.TransitionInstanceList.Union(tempList).ToList(); } piCache.ClearCache(processInstanceId); return(data); } }
/// <summary> /// 活动实体的内容 /// </summary> /// <param name="process"></param> /// <param name="activityInstance"></param> /// <param name="data"></param> private void LoadActivityEntityData(BizDataContext context, SysProcess process, WfActivityInstance activityInstance, WfWorkflowInstanceData data) { //实体名 string entityName = process.ActivityEntity.EntityName; var es = IEntitySchemaHelper.Get(entityName); //主键名 string keyFieldName = es.KeyName;// process.ActivityEntity.GetKeyFieldName(); //字段列表 var fieldList = process.ActivityEntity.Fields.ToList(); //签核流程 bool isApprove = process.ProcessCategory == (int)ProcessCategory.Approve; if (isApprove) { SysApproveActivityData ad = context.FirstOrDefault <SysApproveActivityData>(p => p.ActivityInstanceId == activityInstance.ActivityInstanceId); if (ad != null) { WfActivityEntityInstance entity = GetApproveEntityData(context, ad); activityInstance.ActivityEntityInstance = entity; } } else { //标哥说普通流程活动实例ID和活动实体ID是一样的…… int id = activityInstance.ActivityInstanceId; dynamic entityData = (new OrgManager(context)).GetEntity(entityName, id); if (entityData != null) { Type entityType = entityData.GetType(); WfActivityEntityInstance entity = new WfActivityEntityInstance() { ActivityEntityInstanceId = id, }; //属性的键值对 entity.ActivityEntityInstanceData = entityType.GetProperties() .Where(i => i.Name != keyFieldName && !IgnoreList.Contains(i.Name)) .ToDictionary(i => i.Name, i => { var pValue = new WfActivityFieldData(); try { pValue.Value = Convert.ToString(i.GetValue(entityData, null)); } catch { } return(pValue); }); //加上DisplayText foreach (var i in entity.ActivityEntityInstanceData) { var field = fieldList.FirstOrDefault(q => q.FieldName.Contains(i.Key)); if (field != null) { i.Value.DisplayText = field.DisplayText; } else { i.Value.DisplayText = i.Key; } } activityInstance.ActivityEntityInstance = entity; } } }