套打二开审批路线示例

需求背景:客户需要打印单据历史的审批路线。
示例说明:提供套打审批路线的二开思路代码。本示例基于表单插件。
using Kingdee.BOS.Core.Bill.PlugIn;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Kingdee.BOS.Util;
using Kingdee.BOS.Workflow.ServiceHelper;
using Kingdee.BOS.Orm.Metadata.DataEntity;
using Kingdee.BOS.Orm.DataEntity;
using Kingdee.BOS.Core.NotePrint;
using Kingdee.BOS.Workflow.Models.Chart;
using Kingdee.BOS.Workflow.Kernel;
using Kingdee.BOS.Core.Bill;
using Kingdee.BOS.App.Data;
public class WorkFlowNotePrintBillPlugIn : AbstractBillPlugIn
{
/// 审批路线字段
private static string[] approveLineFields = { "FActivityName", "FActivityStatu", "FStartActivity", "FTargetActivity", "FActionName", "FReceiverName", "FActionResult", "FDisposition", "FCompletedTime", "FConsignNames" };
public override void OnPrepareNotePrintData(Core.DynamicForm.PlugIn.Args.PreparePrintDataEventArgs e)
{
base.OnPrepareNotePrintData(e);
if (e.DataSourceId.Contains("workflow."))
{
string procDefId = e.DataSourceId.Split('.')[1];
var newData = GetProcessRouter(procDefId);
e.DataObjects = newData.ToArray();
}
}
private DynamicObjectCollection GetProcessRouter(string procDefId)
{
string formID = this.View.BusinessInfo.GetForm().Id;
object pkValue = (this.View.Model as IBillModel).GetPKValue();
//返回这个单据的所有流程实例ID
List<string> processIds = GetProcInstIdByBillInst(formID, pkValue.ToString());
//选一个实例ID去打印
string processID = processIds[0];
if (procDefId.Equals("approveLine") && !processID.IsNullOrEmpty())
{
List<ChartActivityInfo> routeCollection = WorkflowChartServiceHelper.GetProcessRouter(this.View.Context, processID);
DynamicObjectType approveType = new DynamicObjectType("tempObject");
RegisterApproveLine(approveType, approveLineFields);
DynamicObjectCollection ApproveResult = new DynamicObjectCollection(approveType);
int state;
string stateDesc;
List<ApproveRouteInfo> approveRouteInfoList = new List<ApproveRouteInfo>();
foreach (ChartActivityInfo activityDetail in routeCollection)
{
state = (int)activityDetail.ActivityStateType;
if (state == 1 || state == 3)
{
stateDesc = Kingdee.BOS.Resource.ResManager.LoadKDString("完成", "002426030027703", Kingdee.BOS.Resource.SubSystemType.BOS);
}
else if (state == 2)
{
stateDesc = Kingdee.BOS.Resource.ResManager.LoadKDString("当前", "002426030027704", Kingdee.BOS.Resource.SubSystemType.BOS);
}
else
{
stateDesc = Kingdee.BOS.Resource.ResManager.LoadKDString("出错", "002426030027705", Kingdee.BOS.Resource.SubSystemType.BOS);
}
ApproveRouteInfo approveRouteInfoMain = new ApproveRouteInfo();
approveRouteInfoMain.ActivityName = activityDetail.ActivityName;
approveRouteInfoMain.StatuDesc = stateDesc;
approveRouteInfoMain.SourceActivityName = activityDetail.SourceActivityName;
approveRouteInfoMain.ActivityName = activityDetail.ActivityName;
approveRouteInfoMain.ActivityId = activityDetail.ActivityId;
for (int j = 0; j < activityDetail.ActionDetails.Count; j++)
//第一次添加审批明细的时候在节点的同一行记录里,剩余的在新增行添加
{
//已完成节点里面只展现已完成的待办任务信息
if (activityDetail.ActivityStateType != MapStateResult.Idled && !activityDetail.ActionDetails[j].IsCompleted)
{
continue;
}
ChartActionInfo action = activityDetail.ActionDetails[j];
ApproveRouteInfo approveRouteInfo = new ApproveRouteInfo();
approveRouteInfo = (ApproveRouteInfo)ObjectUtils.CreateCopy(approveRouteInfoMain);
approveRouteInfo.Title = action.Title;
approveRouteInfo.ReceiverName = action.ReceiverName;
approveRouteInfo.ActionResult = action.ActionResult;
approveRouteInfo.DisPosition = action.DisPosition;
approveRouteInfo.CompletedTime = action.CompleteTime;
approveRouteInfo.ConsignNames = action.ConsignNames;
approveRouteInfoList.Add(approveRouteInfo);
}
if (approveRouteInfoList != null)
{
List<int> AddedActivityId = new List<int>();
foreach (var approveRouteInfo in approveRouteInfoList)
{
DynamicObject workFl
套打二开审批路线示例
声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。



