套打二开打印工作流节点处理人对应的部门示例

第一步:套打模板绑定数据源,先绑定节点的审批意见,然后导出模板,再把审批意见字段名称改成部门(自定义,本例子用FDepartment),修改后后导入模板。截图如下:


第二步:表单插件,本例以表单插件为例,代码如下:
public class NotePrintDepartment : AbstractBillPlugIn
{
private string[] activityFields = { "ReceiverNames", "Disposition", "Result", "CompletedTime", "ReceiverESignature", "FDepartment" };
public override void OnPrepareNotePrintData(Core.DynamicForm.PlugIn.Args.PreparePrintDataEventArgs e)
{
base.OnPrepareNotePrintData(e);
if (e.DataSourceId.Equals("workflow.5534d341bc132e", StringComparison.OrdinalIgnoreCase))
{
var aa = GetQueryData(this.View.Model.GetPKValue().ToString(), e.DataSourceId);
e.DataObjects = aa.ToArray();
e.DynamicObjectType = aa[0].DynamicObjectType;
}
}
private DynamicObjectCollection GetQueryData(string billId, string dataSourceId)
{
string[] dataSourceArgs = dataSourceId.Split('.');
if (dataSourceArgs.Length < 2)
return null;
string procDefId = dataSourceArgs[1];
return GetWorkFlowData(procDefId, billId);
}
private DynamicObjectCollection GetWorkFlowData(string procDefId, string billId)
{
string formId = this.View.BusinessInfo.GetForm().Id;
string processId = WorkflowChartServiceHelper.GetProcInstIdByBillInst(Context, formId, billId);
if (processId.IsNullOrEmptyOrWhiteSpace())
return null;
return GetWorkflowData(billId, procDefId, processId);
}
private DynamicObjectCollection GetWorkflowData(string billId, string procDefId, string processId)
{
bool isHisProcInst = WorkflowChartServiceHelper.HasHisProcInst(Context, processId);
NotePrintProcessInstance[] procInstArray = LoadWorkflowInstance(billId, this.View.BusinessInfo.GetForm().Id, procDefId, isHisProcInst);
NotePrintProcessInstance procInst = null;
if (procInstArray == null)
{
return null;
}
foreach (var ins in procInstArray)
{
if (procInst == null)
{
procInst = ins;
}
else if (ins.CreateTime > procInst.CreateTime)
{
procInst = ins;
}
}
if (procInst == null)
{
return null;
}
//支持终止状态的工作流普通节点取数
var activityIDs = new List<string>();
foreach (var assign in procInst.Assigns)
{
if (!activityIDs.Contains(assign.ActivityId.ToString()))
{
activityIDs.Add(assign.ActivityId.ToString());
}
}
DynamicObjectType type = new DynamicObjectType("tempObject");
foreach (var actId in activityIDs)
{
foreach (var actField in activityFields)
{
string key = actId + "_" + actField;
string name = "ac_" + key;
if (type.Properties.Contains(name) == false)
{
if (actField.Equals("ReceiverESignature"))
{
type.RegisterSimpleProperty(
name,
typeof(byte[]),
attributes: new SimplePropertyAttribute() { Alias = key }
);
}
else
{
type.RegisterSimpleProperty(
name,
typeof(string),
attributes: new SimplePropertyAttribute() { Alias = key }
);
}
}
}
}
DynamicObject workFlowDataObj = new DynamicObject(type);
foreach (var actID in activityIDs)
{
NotePrintAssign lastActivityAssign = procInst.GetLastActivityAssign(int.Parse(actID));
if (lastActivityAssign == null)
{
continue;
}
Type t = lastActivityAssign.GetType();
foreach (var actField in activityFields)
{
foreach (PropertyInfo pi in t.GetProperties())
{
if (!actField.EqualsIgnoreCase(pi.Name))
continue;
string propKey = string.Format("ac_{0}_{1}", actID, actField);
object value = pi.GetValue(lastActivityAssign, null);
if (actField.Equals("ReceiverESignature"))
workFlowDataObj[propKey] = value;
else
{
if (value != null)
{
workFlowDataObj[propKey] = value.ToString();
}
else
{
workFlowDataObj[propKey] = string.Empty;
}
}
if (actField == "ReceiverNames")
{
var receiverIds = lastActivityAssign.ApprovalAssigns[0].ApprovalItems.Select(p => p.ReceiverId).ToArray();
workFlowDataObj[string.Format("ac_{0}_FDepartment", actID)] = GetDepartmentByUserIds(receiverIds);
}
}
}
}
DynamicObjectCollection result = new DynamicObjectCollection(type);
result.Add(workFlowDataObj);
return result;
}
private NotePrintProcessInstance[] LoadWorkflowInstanc
套打二开打印工作流节点处理人对应的部门示例
声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。



