套打二开审批路线示例
需求背景:客户需要打印单据历史的审批路线。
示例说明:提供套打审批路线的二开思路代码。本示例基于表单插件。
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 workFlowDataObj = new DynamicObject(approveType);
//第一次添加审批明细的时候在节点的同一行记录里,剩余的在新增行添加
if (!AddedActivityId.Contains(approveRouteInfo.ActivityId))
{
workFlowDataObj["ac_approve_FActivityName"] = approveRouteInfo.ActivityName;
workFlowDataObj["ac_approve_FActivityStatu"] = approveRouteInfo.StatuDesc;
workFlowDataObj["ac_approve_FStartActivity"] = approveRouteInfo.SourceActivityName;
workFlowDataObj["ac_approve_FTargetActivity"] = approveRouteInfo.ActivityName;
AddedActivityId.Add(approveRouteInfo.ActivityId);
}
workFlowDataObj["ac_approve_FActionName"] = approveRouteInfo.Title;
workFlowDataObj["ac_approve_FReceiverName"] = approveRouteInfo.ReceiverName;
workFlowDataObj["ac_approve_FActionResult"] = approveRouteInfo.ActionResult;
workFlowDataObj["ac_approve_FDisposition"] = approveRouteInfo.DisPosition;
workFlowDataObj["ac_approve_FCompletedTime"] = approveRouteInfo.CompletedTime;
workFlowDataObj["ac_approve_FConsignNames"] = approveRouteInfo.ConsignNames;
ApproveResult.Add(workFlowDataObj);
}
approveRouteInfoList.Clear();
}
}
return ApproveResult;
}
else
{
return null;
}
}
private void RegisterApproveLine(DynamicObjectType type, string[] approveFields)
{
string key = string.Empty;
foreach (var actField in approveFields)
{
key = "approve_" + actField;
string name = "ac_" + key;
if (type.Properties.Contains(actField) == false)
{
type.RegisterSimpleProperty(
name,
typeof(string),
attributes: new SimplePropertyAttribute() { Alias = key }
);
}
}
}
private List<string> GetProcInstIdByBillInst(string formId, string pkValue)
{
List<string> procInsIds = new List<string>();
string sql = string.Format(@"SELECT PIBI.FPROCINSTID FROM V_WF_PIBIMAPALL PIBI
INNER JOIN {0} PROCINST ON PIBI.FPROCINSTID = PROCINST.FPROCINSTID
WHERE FOBJECTTYPEID = @FOBJECTTYPEID AND FKEYVALUE = @FKEYVALUE",
Kingdee.BOS.Workflow.Models.Const.WorkFlowTableConst.V_WF_PROCINSTMG);
var dataObject = DBUtils.ExecuteDynamicObject(this.Context, sql, paramList: new SqlParam[]
{
new SqlParam("@FOBJECTTYPEID",KDDbType.AnsiString,formId),
new SqlParam("@FKEYVALUE",KDDbType.AnsiString,pkValue)
});
if (!dataObject.IsEmpty())
{
foreach (var obj in dataObject)
{
procInsIds.Add(ObjectUtils.Object2String(obj["FPROCINSTID"]));
}
}
return procInsIds;
}
}
套打二开审批路线示例
本文2024-09-23 04:13:56发表“云星空知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-k3cloud-163979.html
- 鼎捷EAI整合規範文件V3.1.07 (集團).pdf
- 鼎捷OpenAPI應用場景說明_基礎資料.pdf
- 鼎捷OpenAPI應用場景說明_財務管理.pdf
- 鼎捷T100 API設計器使用手冊T100 APIDesigner(V1.0).docx
- 鼎新e-GoB2雲端ERP B2 線上課程E6-2應付票據整批郵寄 領取.pdf
- 鼎新e-GoB2雲端ERP B2 線上課程A4使用者建立權限設定.pdf
- 鼎新e-GoB2雲端ERP B2 線上課程C3會計開帳與會計傳票.pdf
- 鼎新e-GoB2雲端ERP B2 線上課程E6-1應付票據.pdf
- 鼎新e-GoB2雲端ERP B2 線上課程A5-1進銷存參數設定(初階篇).pdf
- 鼎新e-GoB2雲端ERP B2 線上課程D2帳款開帳與票據開帳.pdf