#使用技巧#只有全员应用组用户,如何打印付款申请单
一、业务背景
公司自2020年在集团下属27家子公司上线了星空人人报销模块,全员用户组350人。不同组织加起来涉及200多条审批流程。整过程最大程度压榨系统的标准功能外加部分开发,算是圆满上线。
二、问题
因为部分业务付款流程的特殊情况,需要利用到系统标准功能的“付款申请单”,但是大部分用户是没有并且不需要专业应用组许可的。现在内部业务情况,又需要用户自己把这个付款申请单打印出来附上纸质票据流转。
最不合理的地方就是,系统标准功能居然支持能让全员组许可用户生成付款申请单。就该问题提过数次工单,希望总部能让全员应用组许可的用户可以使用付款申请单,被婉拒。
三、解决思路
在系统标准功能的“生成付款申请单”这个动态表单上找到突破,“动态表单”既然可以让全员用户组使用,那么挂一个表单插件,直接在数据库把付款申请单读出来赋值到表单上不就好了,然后再配置套打模板。
1.首先扩展标准表单,单独加一个面板,把必要的字段、功能按钮先加好,如下图:
2.新建套打模板,把字段标识根据表单字段标识设置好
3.获取付款申请单数据并在表单上赋值,代码写的丑,请各位大佬多指教。
public override void BarItemClick(BarItemClickEventArgs e) { base.BarItemClick(e); var tabControl = this.View.GetControl<TabControl>("F_PAEZ_Tab"); if (e.BarItemKey.Equals("tbQueryApplyPay")) { this.View.Model.DeleteEntryData("FAppPayEntity"); string userId = this.View.Context.UserId.ToString(); //当然,只能让当前用户只能查自己账号生成的付款申请单,不然全集团的都查出来了,那就嗝屁了。 DynamicObjectCollection cxfksq = DBUtils.ExecuteDynamicObject(this.Context, @"/*dialect*/select FID from T_CN_PAYAPPLY where FCREATORID = '" + userId + "'"); int j = 0; foreach (DynamicObject obj in cxfksq) { this.View.Model.CreateNewEntryRow("FAppPayEntity"); string billFormId = "CN_PAYAPPLY"; string billId = obj["FID"].ToString(); FormMetadata meta = MetaDataServiceHelper.Load(this.Context, billFormId) as FormMetadata; this._billObj = BusinessDataServiceHelper.LoadSingle(this.Context, billId, meta.BusinessInfo.GetDynamicObjectType()); this.View.Model.SetValue("FBillNo", _billObj["FBillNo"],j); this.View.Model.SetValue("FPAYAPPLYAMOUNTFOR_H", _billObj["FPAYAPPLYAMOUNTFOR_H"], j); this.View.Model.SetValue("FCREATORID", _billObj["FCREATORID"], j); this.View.Model.SetValue("FAppDate", _billObj["FDate"], j); this.View.Model.SetValue("FNote", _billObj["FNote"], j); this.View.Model.SetValue("FAPPID", _billObj["Id"], j); this.View.Model.SetValue("FRECTUNIT", _billObj["FRECTUNIT"], j); j++; } this.View.UpdateView("FAppPayEntity"); tabControl.SelectedTabItemKey = "F_PAEZ_Tab_P1".ToUpper(); } }
4.套打数据部分处理,打印这部分代码,参考了论坛各路大神的帖子。
public override void BarItemClick(BarItemClickEventArgs e) { base.BarItemClick(e); if (e.BarItemKey.EqualsIgnoreCase("tbPrint")) { //获取用户选择的行数据 int[] selectedIndexsR = this.View.GetControl<EntryGrid>("FAppPayEntity").GetSelectedRows(); foreach (var p in selectedIndexsR) { string userId = this.View.Context.UserId.ToString(); string billFormId = "CN_PAYAPPLY"; try { //获取用户选择行的付款申请单内码ID string billId = this.View.Model.GetValue("FAPPID", p).ToString(); // 加载单据数据包,放在缓存中,以被后续事件使用 FormMetadata meta = MetaDataServiceHelper.Load(this.Context, billFormId) as FormMetadata; this._billObj = BusinessDataServiceHelper.LoadSingle(this.Context, billId, meta.BusinessInfo.GetDynamicObjectType()); // 下达打印预览指令 List<PrintJobItem> printInfoList = new List<PrintJobItem>(); PrintJobItem printInfoItem = new PrintJobItem(); printInfoItem.BillId = billId; printInfoItem.FormId = billFormId; printInfoItem.TemplateId = "89df562a-1f76-45e9-9da2-4186d455d58a"; printInfoItem.SortString = ""; printInfoList.Add(printInfoItem); string key = Guid.NewGuid().ToString(); this.View.Session[key] = printInfoList; JSONObject jsonObj = new JSONObject(); jsonObj.Put("pageID", this.View.PageId); jsonObj.Put("printJobId", key); jsonObj.Put("action", "preview");//预览--printType赋值为"preview";打印--printType赋值为"print" string action = "printPreview"; jsonObj.Put("printBarName", null); this.View.AddAction(action, jsonObj); } catch(Exception ex) { throw new Exception("请先查询付款申请单!" + ex.Message); } } } private DynamicObject _billObj = null; public override void OnPrepareNotePrintData(PreparePrintDataEventArgs e) { //构建新数据包并提供给系统 if (e.DataSourceId.Equals("FBillHead", StringComparison.OrdinalIgnoreCase)) { // 基于套打要求的ORM数据模型,构建数据包,取单据头的字段值 // 特别注意:e.DynamicObjectType,仅包含了套打会用到的单据头字段 DynamicObject notePrintHeadObj = new DynamicObject(e.DynamicObjectType); // 为字段赋值 notePrintHeadObj["FBillNo"] = _billObj["FBillNo"]; DynamicObject fcurrencyId = _billObj["FCURRENCYID"] as DynamicObject; notePrintHeadObj["FCURRENCYID_FName"] = fcurrencyId["Name"].ToString(); DynamicObject fpurchasedeptId = _billObj["FPURCHASEDEPTID"] as DynamicObject; notePrintHeadObj["FPURCHASEDEPTID_FName"] = fpurchasedeptId["Name"].ToString(); DynamicObject fcreatorId = _billObj["FCREATORID"] as DynamicObject; notePrintHeadObj["FCREATORID_FName"] = fcreatorId["Name"].ToString(); DynamicObject fsettleOrgId = _billObj["FSETTLEORGID"] as DynamicObject; notePrintHeadObj["FSETTLEORGID_FName"] = fsettleOrgId["Name"].ToString(); notePrintHeadObj["FDate"] = _billObj["FDate"]; notePrintHeadObj["FNote"] = _billObj["FNote"]; e.DataObjects = new DynamicObject[] { notePrintHeadObj }; } if (e.DataSourceId.Equals("FPAYAPPLYENTRY", StringComparison.OrdinalIgnoreCase)) { // 基于套打要求的ORM数据模型,构建数据包,取单据体的字段值 // 特别注意:e.DynamicObjectType,仅包含了套打会用到的单据体字段 List<DynamicObject> notePrintEntryRows = new List<DynamicObject>(); DynamicObjectCollection billRows = _billObj["FPAYAPPLYENTRY"] as DynamicObjectCollection; foreach (var billRow in billRows) { DynamicObject notePrintEntryRow = new DynamicObject(e.DynamicObjectType); // 为字段赋值 notePrintEntryRow["FEACHCCOUNTNAME"] = billRow["FEACHCCOUNTNAME"]; notePrintEntryRow["FEACHBANKNAME"] = billRow["FEACHBANKNAME"]; notePrintEntryRow["FEACHBANKACCOUNT"] = billRow["FEACHBANKACCOUNT"]; DynamicObject fsettleTypeId = billRow["FSETTLETYPEID"] as DynamicObject; notePrintEntryRow["FSETTLETYPEID_FName"] = fsettleTypeId["Name"].ToString(); notePrintEntryRow["FAPPLYAMOUNTFOR"] = billRow["FAPPLYAMOUNTFOR"]; notePrintEntryRows.Add(notePrintEntryRow); } e.DataObjects = notePrintEntryRows.ToArray(); } }
四、总结
至此该需求功能就实现了。上面贴出的大部分代码基本都来自于论坛大神分享,我仅是提供一个思路分享。感谢各位大佬的无私奉献。
#使用技巧#只有全员应用组用户,如何打印付款申请单
一、业务背景 公司自2020年在集团下属27家子公司上线了星空人人报销模块,全员用户组350人。不同组织加起来涉及200多条审批流...
点击下载文档
本文2024-09-16 17:15:15发表“云星空知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-k3cloud-14523.html
您需要登录后才可以发表评论, 登录登录 或者 注册
最新文档
热门文章