#使用技巧#只有全员应用组用户,如何打印付款申请单

栏目:云星空知识作者:金蝶来源:金蝶云社区发布:2024-09-16浏览:1

#使用技巧#只有全员应用组用户,如何打印付款申请单

一、业务背景    

        公司自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多条审批流...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息