用友nc65 uap开发参照节点数据拉单之二----直接通过调用查询模版查询上游单据

本文主要是介绍用友nc65 uap开发参照节点数据拉单之二----直接通过调用查询模版查询上游单据,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

用友nc65 uap开发参照节点数据拉单之二----直接通过调用查询模版查询上游单据
前面一篇博客讲了利用查询模版并显示在弹窗面板上的拉单方法。此次是直接通过调用查询模版查询上游所有单据。如图所示:
按钮调用查询面板

将符合条件的所有数据直接显示在编辑状态的面板上:



代码如下:
xml代码:
<bean id="refAction" class="nc.ui.fdc_pr.h303201570.ace.action.ReferAction"><property name="model"><ref bean="bmModel" /></property><property name="editor" ref="billForm" /><!--当前单据类型编码 --><property name="currBilltype" value="H338" /><!-- 来源单据类型编码 --><property name="sourceBillType" value="H345" /><!-- 来源单据类型名称 --><property name="sourceBillName" value="参照收费清单" /><property name="exceptionHandler"><ref bean="exceptionHandler" /></property><property name="defaultUIF2RefEditor"><ref bean="defaultUIF2RefEditor" /></property></bean><!-- 导入编辑器 --><bean id="defaultUIF2RefEditor" class="nc.itf.fdc.pub.DefaultUIF2RefEditor"><property name="addAction" ref="addAction" /><property name="billcardPanelEditor" ref="billForm" /><property name="appModel" ref="bmModel" /></bean>
按钮代码类:
package nc.ui.fdc_pr.h303201570.ace.action;import java.awt.Container;
import java.awt.event.ActionEvent;import nc.bs.framework.common.NCLocator;
import nc.bs.pf.pub.BillTypeCacheKey;
import nc.itf.fdc.pub.DefaultUIF2RefEditor;
import nc.itf.fdc_pr.IH303201525Maintain;
import nc.md.data.access.NCObject;
import nc.ui.ml.NCLangRes;
import nc.ui.pf.pub.PfUIDataCache;
import nc.ui.pr.H30301.LogonBO_Client;
import nc.ui.pub.beans.UIDialog;
import nc.ui.pub.bill.BillStatus;
import nc.ui.pubapp.uif2app.actions.AbstractReferenceAction;
import nc.ui.pubapp.uif2app.model.BillManageModel;
import nc.ui.querytemplate.IBillReferQuery;
import nc.ui.querytemplate.QueryConditionDLG;
import nc.ui.uif2.UIState;
import nc.ui.uif2.editor.IBillCardPanelEditor;
import nc.vo.fdc_pr.h303201525.Bill;
import nc.vo.fdc_pr.h303201570.AggDjzb;
import nc.vo.fdc_pr.h303201570.Djfb;
import nc.vo.fdc_pr.h303201570.Djzb;
import nc.vo.pub.BusinessException;
import nc.vo.pub.VOStatus;
import nc.vo.pub.lang.UFBoolean;
import nc.vo.pub.lang.UFDouble;
import nc.vo.pub.pf.BillStatusEnum;
import nc.vo.pubapp.AppContext;
import nc.vo.querytemplate.TemplateInfo;
import nc.vo.uap.pf.PFBusinessException;
import nc.vo.uif2.LoginContext;import org.apache.commons.lang.StringUtils;public class ReferAction extends AbstractReferenceAction {private static final long serialVersionUID = -7167526730230052116L;// 卡片面板private IBillCardPanelEditor editor;// modelprivate BillManageModel model;private String currBilltype;private IBillReferQuery dlg;private DefaultUIF2RefEditor defaultUIF2RefEditor = null;public ReferAction() {super();}@Overridepublic void doAction(ActionEvent e) throws Exception {LoginContext context = this.getModel().getContext();String funNode = PfUIDataCache.getBillType(new BillTypeCacheKey().buildBilltype(getSourceBillType()).buildPkGroup(context.getPk_group())).getNodecode();if (funNode == null || funNode.equals(""))throw new PFBusinessException(NCLangRes.getInstance().getStrByID("pfworkflow1", "PfUtilClient-000001", null,new String[] { getSourceBillType() })/* 请注册单据{0}的功能节点号 */);// 1.构造查询对话框if (dlg == null) {dlg = setConditionClient(null, context.getEntranceUI(),context.getPk_loginUser(), funNode, context.getPk_group());}if (dlg.showModal() != UIDialog.ID_OK) {return;}//not exists ( select 1 from fdc_pr_FareType ft where nvl(ft.dr,0)=0 and nvl(ft.reserve1,'N')='Y' and ft.pk_head = fdc_pr_Bill.pk_faretypeid )StringBuffer strWhere = new StringBuffer();if(dlg.getWhereSQL()==null||dlg.getWhereSQL().trim().length()==0){strWhere.append(" 1=1 ");}else{strWhere.append(dlg.getWhereSQL());}strWhere.append( " and isnull(fdc_pr_Bill.dr,0)=0 and isnull(fdc_pr_Bill.bisarap,'N')='N' ");strWhere.append( " and not exists ( select 1 from fdc_pr_FareType ft where isnull(ft.dr,0)=0 and isnull(ft.reserve1,'N')='Y' and ft.pk_head = fdc_pr_Bill.pk_faretypeid )  ");strWhere.append( " and isnull(fdc_pr_Bill.bclose,'N')='N'" );//关闭的数据不参照过来// 2.根据查询条件得到收费清单:// 2. 1 根据单据类型,利用元数据查询 :前提要求上游元数据,实现了IHeadBodyQueryItf接口// IPFConfig pfConfig = (IPFConfig)// NCLocator.getInstance().lookup(IPFConfig.class.getName());// CircularlyAccessibleValueObject[] tmpHeadVo =// pfConfig.queryHeadAllData(getSourceBillType(), tmpWhere);// 2. 2 调用上游查询接口IH303201525Maintain maint = NCLocator.getInstance().lookup(IH303201525Maintain.class);//查询模板查询条件查询收费清单*(已经收完款的不用查出来)NCObject[] bills = maint.querybillbywhere(strWhere.toString());
//		Bill[] bills = maint.query(strWhere);if (bills == null || bills.length == 0) {throw new BusinessException("未查询到收费清单数据.");}// 3. 转换数据:可以代码 硬编码转换,也可以调用单据转换规则。AggDjzb bill = chg(bills);//生成单据// 4. 设置编辑状态数据getDefaultUIF2RefEditor().addNew();getDefaultUIF2RefEditor().setValue(bill);}/*** 生成“财务应收单”* */private AggDjzb chg(NCObject[] bills) {AggDjzb bill = new AggDjzb();Djzb zb = chgHead(bills);bill.setParentVO(zb);bill.setChildrenVO(chgBodys(bills));return bill;}/*** 设置表头数据* */public Djzb chgHead(NCObject[] bills) {Djzb head = new Djzb();head.setPk_group(AppContext.getInstance().getPkGroup());//集团head.setDbilldate(AppContext.getInstance().getBusiDate());//单据日期head.setAttributeValue("approvestatus", BillStatusEnum.FREE.value());//单据状态String pk_org = getModel().getContext().getPk_org();if (StringUtils.isBlank(pk_org)) {if (bills != null && bills.length > 0) {pk_org = (String) bills[0].getAttributeValue("pk_org");}getModel().getContext().setPk_org(pk_org);}head.setPk_org(pk_org);//组织//是否传会计平台head.setFisvoucher(UFBoolean.TRUE);//计财务应收日期head.setDrecordapdate(AppContext.getInstance().getBusiDate());//制单人head.setCreator(AppContext.getInstance().getPkUser());//制单日期head.setMaketime(AppContext.getInstance().getServerTime());//单据状态head.setVbillstatus(BillStatus.FREE);//服务中心
//		head.setPk_managementsecid();//经办人head.setPk_psndoc(AppContext.getInstance().getPkUser());//单据类型head.setBilltype("H338");//创建人head.setBillmaker(AppContext.getInstance().getPkUser());//币种head.setVdef1("");//head.setStatus(VOStatus.NEW);head.setPk_managementsecid(LogonBO_Client.getManageUnit());//服务中心head.setPk_psndoc(AppContext.getInstance().getPkUser());//经办人	return head;}/*** 生成表体数据 * * */public Djfb[] chgBodys(NCObject[] bills) {if (bills == null) {return null;}Djfb[] bodys = new Djfb[bills.length];for (int i = 0; i < bodys.length; i++) {Bill head = (Bill) bills[i].getModelConsistObject();if(head.getSrnmny()==null||head.getSrnmny().doubleValue()<=0){continue;}/*if(head.getSrnrevmny()!=null&&head.getSrnrevmny().doubleValue()>0&&head.getSrnmny().sub(head.getSrnrevmny()).doubleValue()==0D){continue;}*/Djfb body = new Djfb();body.setVsourcebillid(head.getPk_head());//来源单据ID == 收费清单主键body.setReserve5(head.getReserve1());//合同编号body.setPk_pact(head.getPk_pact());if(head.getPk_currency()!=null){body.setPk_currency(head.getPk_currency());//币种}else{body.setPk_currency("1002Z0100000000001K1");//币种,人民币}body.setPk_faretypeid(head.getPk_faretypeid());//收费项目body.setReserve1(head.getPk_allhouses());//单元body.setReserve2(head.getPk_customer());//租户body.setDbegin(head.getDbegin());//收费开始日期body.setCostbelongmonth(head.getCostbelongmonth());//费用所属月body.setDend(head.getDend());//费用截至日期body.setDshpay(head.getDshpay());//应收款日期body.setBusreceivemonth(head.getBusreceivemonth());//业务应收月body.setReserve3(head.getPk_faretypeid());//收费项目//应收金额信息(原币/本币)UFDouble srnmny = new UFDouble(0);if(null != head.getSrnmny())srnmny =head.getSrnmny();UFDouble srnrevmny = new UFDouble(0);if(null != head.getSrnrevmny())srnrevmny =head.getSrnrevmny();//			body.setSrnmny(srnmny.sub(srnrevmny));//应收金额 == 总应收 - 已收金额body.setSrnmny(srnmny);//应收金额 body.setNmny(srnmny.sub(srnrevmny));
//			body.setNyarapverifmny(nyarapverifmny);//核销金额//收费清单的来源源单据类型body.setSrc_bill_type(head.getVsourcebilltype());// 来源单据信息body.setVsourcebillid(head.getPrimaryKey());//来源单据号body.setSrc_bill_code(head.getVbillcode());//租约类型body.setPk_pacttype(head.getPk_pacttype());body.setStatus(VOStatus.NEW);//上游单据主键body.setVlastbillrowid(head.getPk_head());bodys[i] = body;}return bodys;}/*** 构造一个查询对话框,并为其设置查询模板* * @param templateId* @param parent* @param isRelationCorp* @param pkOperator* @param funNode*/private IBillReferQuery setConditionClient(String templateId,Container parent, final String pkOperator, final String funNode,String pkCorp) {TemplateInfo ti = new TemplateInfo();ti.setTemplateId(templateId);ti.setPk_Org(pkCorp);ti.setUserid(pkOperator);ti.setCurrentCorpPk(pkCorp);ti.setFunNode(funNode);ti.setNodekey("qt");QueryConditionDLG qcDlg = new QueryConditionDLG(parent, ti);qcDlg.setVisibleNormalPanel(true);return qcDlg;}public IBillCardPanelEditor getEditor() {return this.editor;}/*** @return model*/public BillManageModel getModel() {return this.model;}public void setEditor(IBillCardPanelEditor editor) {this.editor = editor;}/*** @param model*            要设置的 model*/public void setModel(BillManageModel model) {this.model = model;model.addAppEventListener(this);}public String getCurrBilltype() {return currBilltype;}public void setCurrBilltype(String currBilltype) {this.currBilltype = currBilltype;}/*** 父类方法重写* * @see nc.ui.uif2.NCAction#isActionEnable()*/@Overrideprotected boolean isActionEnable() {return UIState.NOT_EDIT == this.getModel().getUiState();}/*** 转单是否根据流程过滤* * @return*/protected boolean isBusiness() {return true;}public DefaultUIF2RefEditor getDefaultUIF2RefEditor() {return defaultUIF2RefEditor;}public void setDefaultUIF2RefEditor(DefaultUIF2RefEditor defaultUIF2RefEditor) {this.defaultUIF2RefEditor = defaultUIF2RefEditor;}}
导入编辑器类
package nc.itf.fdc.pub;import nc.ui.pub.bill.BillData;
import nc.ui.uif2.NCAction;
import nc.ui.uif2.editor.IBillCardPanelEditor;
import nc.ui.uif2.model.AbstractUIAppModel;
import nc.vo.pub.AggregatedValueObject;public  class DefaultUIF2RefEditor  {private NCAction addAction = null;private Exception ex;    //保存过程中通过拦截器将异常抛出 private IBillCardPanelEditor billcardPanelEditor = null;private AbstractUIAppModel appModel = null;protected NCAction createAddAction(){return null;}protected NCAction createSaveAction(){return null;} protected NCAction createCancelAction(){return null;}protected IBillCardPanelEditor createBillCardPanelEditor(){return null;}protected AbstractUIAppModel createAppModel(){return null;}/*** 新增操作* * @see nc.itf.trade.excelimport.IImportableEditor#addNew()*/public void addNew() {try {getAddAction().actionPerformed(null);} catch (Exception e) {nc.bs.logging.Logger.error(e.getMessage());}} /*** 设值操作* * 标准的操作步骤如下:* 1,转型VO为ExtendedAggregatedValueObject* 2,根据转换规则处理VO的相关属性值* 3,将处理后的VO值设置到界面上*/public void setValue(Object obj) {if(getBillcardPanelEditor() != null){BillData bd = getBillcardPanelEditor().getBillCardPanel().getBillData();bd.setBillValueVO((AggregatedValueObject)obj);}}/*** 返回AddAction对象*/public NCAction getAddAction() {if(addAction == null)addAction = createAddAction();return this.addAction;}public void setAddAction(NCAction addAction) {this.addAction = addAction;}public IBillCardPanelEditor getBillcardPanelEditor() {if(billcardPanelEditor == null)billcardPanelEditor = createBillCardPanelEditor();return billcardPanelEditor;}public void setBillcardPanelEditor(IBillCardPanelEditor billcardPanelEditor) {this.billcardPanelEditor = billcardPanelEditor;}public AbstractUIAppModel getAppModel() {if(this.appModel == null)appModel = createAppModel();return appModel;}public void setAppModel(AbstractUIAppModel model) {this.appModel = model;}public int getExportCount() {return 1;}public Exception getEx() {return ex;}public void setEx(Exception ex) {this.ex = ex;}
}




这篇关于用友nc65 uap开发参照节点数据拉单之二----直接通过调用查询模版查询上游单据的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/642870

相关文章

大模型研发全揭秘:客服工单数据标注的完整攻略

在人工智能(AI)领域,数据标注是模型训练过程中至关重要的一步。无论你是新手还是有经验的从业者,掌握数据标注的技术细节和常见问题的解决方案都能为你的AI项目增添不少价值。在电信运营商的客服系统中,工单数据是客户问题和解决方案的重要记录。通过对这些工单数据进行有效标注,不仅能够帮助提升客服自动化系统的智能化水平,还能优化客户服务流程,提高客户满意度。本文将详细介绍如何在电信运营商客服工单的背景下进行

基于MySQL Binlog的Elasticsearch数据同步实践

一、为什么要做 随着马蜂窝的逐渐发展,我们的业务数据越来越多,单纯使用 MySQL 已经不能满足我们的数据查询需求,例如对于商品、订单等数据的多维度检索。 使用 Elasticsearch 存储业务数据可以很好的解决我们业务中的搜索需求。而数据进行异构存储后,随之而来的就是数据同步的问题。 二、现有方法及问题 对于数据同步,我们目前的解决方案是建立数据中间表。把需要检索的业务数据,统一放到一张M

这15个Vue指令,让你的项目开发爽到爆

1. V-Hotkey 仓库地址: github.com/Dafrok/v-ho… Demo: 戳这里 https://dafrok.github.io/v-hotkey 安装: npm install --save v-hotkey 这个指令可以给组件绑定一个或多个快捷键。你想要通过按下 Escape 键后隐藏某个组件,按住 Control 和回车键再显示它吗?小菜一碟: <template

关于数据埋点,你需要了解这些基本知识

产品汪每天都在和数据打交道,你知道数据来自哪里吗? 移动app端内的用户行为数据大多来自埋点,了解一些埋点知识,能和数据分析师、技术侃大山,参与到前期的数据采集,更重要是让最终的埋点数据能为我所用,否则可怜巴巴等上几个月是常有的事。   埋点类型 根据埋点方式,可以区分为: 手动埋点半自动埋点全自动埋点 秉承“任何事物都有两面性”的道理:自动程度高的,能解决通用统计,便于统一化管理,但个性化定

Hadoop企业开发案例调优场景

需求 (1)需求:从1G数据中,统计每个单词出现次数。服务器3台,每台配置4G内存,4核CPU,4线程。 (2)需求分析: 1G / 128m = 8个MapTask;1个ReduceTask;1个mrAppMaster 平均每个节点运行10个 / 3台 ≈ 3个任务(4    3    3) HDFS参数调优 (1)修改:hadoop-env.sh export HDFS_NAMENOD

使用SecondaryNameNode恢复NameNode的数据

1)需求: NameNode进程挂了并且存储的数据也丢失了,如何恢复NameNode 此种方式恢复的数据可能存在小部分数据的丢失。 2)故障模拟 (1)kill -9 NameNode进程 [lytfly@hadoop102 current]$ kill -9 19886 (2)删除NameNode存储的数据(/opt/module/hadoop-3.1.4/data/tmp/dfs/na

异构存储(冷热数据分离)

异构存储主要解决不同的数据,存储在不同类型的硬盘中,达到最佳性能的问题。 异构存储Shell操作 (1)查看当前有哪些存储策略可以用 [lytfly@hadoop102 hadoop-3.1.4]$ hdfs storagepolicies -listPolicies (2)为指定路径(数据存储目录)设置指定的存储策略 hdfs storagepolicies -setStoragePo

Hadoop集群数据均衡之磁盘间数据均衡

生产环境,由于硬盘空间不足,往往需要增加一块硬盘。刚加载的硬盘没有数据时,可以执行磁盘数据均衡命令。(Hadoop3.x新特性) plan后面带的节点的名字必须是已经存在的,并且是需要均衡的节点。 如果节点不存在,会报如下错误: 如果节点只有一个硬盘的话,不会创建均衡计划: (1)生成均衡计划 hdfs diskbalancer -plan hadoop102 (2)执行均衡计划 hd

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

嵌入式QT开发:构建高效智能的嵌入式系统

摘要: 本文深入探讨了嵌入式 QT 相关的各个方面。从 QT 框架的基础架构和核心概念出发,详细阐述了其在嵌入式环境中的优势与特点。文中分析了嵌入式 QT 的开发环境搭建过程,包括交叉编译工具链的配置等关键步骤。进一步探讨了嵌入式 QT 的界面设计与开发,涵盖了从基本控件的使用到复杂界面布局的构建。同时也深入研究了信号与槽机制在嵌入式系统中的应用,以及嵌入式 QT 与硬件设备的交互,包括输入输出设