NC57开发常用取值/赋值常用方法及常见问题解决办法

一、取值
1、获取当前公司和用户
String pk_corp = ClientEnvironment.getInstance().getCorporation().getPk_corp();//当前登录公司主键
String user = ClientEnvironment.getInstance().getUser().getPrimaryKey();//当前用户主键
2、获取单据号
String vbillcode = new BillcodeGenerater().getBillCode("LLJY",pk_corp, null, null);//LLJY为单据类型编码
3、获取界面/当前聚合VO、主表VO、子表VO
AggVO aggVO = (AggVO) this.getBillUI().getVOFromUI();    //聚合VO
AggVO aggVO = (AggVO) this.getBufferData().getCurrentVO();    //聚合VO
HVO hvo = (HVO)aggVO.getParentVO();    //主表VO
BVO[] bvos = (BVO[])aggVO.getChildrenVO();    //子表VO数组
BVO[] bvos= (BVO[])disAggVO.getTableVO("tabCode");    //子表VO数组
4、单页签/多页签取表体行数
int count = this.getBillCardPanel().getBillModel().getRowCount();
int count = this.getBillCardPanel().getBillTable("tabCode").getRowCount();    //tabCode为页签编码
说明:获取CardPanel时也可能是这个方法:this.getBillCardPanelWrapper().getBillCardPanel();
5、获取当前选择行
int row = this.getBillManageUI().getBillListPanel().getHeadBillModel().getRowCount();    //表头
int row =this.getBillCardPanel().getBillTable("tabCode").getSelectedRow();    //tabCode为页签编码
6、获取表头/表体字段值
String value = this.getBillCardPanel().getHeadItem("customercontract").getValue();    //表头
Object value = this.getBillCardPanel().getBillModel("tabCode").getValueAt(row,"fieldName");
Object value = this.getBillCardPanel().getBodyItem("tabCode","fieldName").getValueObject();
7、获取当前页签编码
String tableCode =  this.getBillCardPanel().getBodyTabbedPane().getSelectedTableCode();
二、赋值
1、给表体字段赋值
this.getBillCardPanel().setBodyValueAt(value,row,"fieldName"," tabCode");
2、给某一个页签通过VO赋值
this.getBillCardPanel().getBillModel("tabCode").setBodyDataVO(bvos);    //bvos为该页签表体vo数组
三、常见问题及代码
1、表体增加行
getBillCardPanel().getBillModel("tabCode").addLine();        // 表体增加一行

2、表体删除行
this.getBillCardPanel().getBodyPanel("tabCode").delLine(new int [] {0});    //参数为行号数组
3、模版配置必填项不生效解决
@Override
protected void onBoSave() throws Exception {
    //保存校验必填项
    this.getBillCardPanelWrapper().getBillCardPanel().dataNotNullValidate();
    super.onBoSave();
}
4、自制单据显示工时不生效
public boolean isLoadCardFormula() {
    return true;
}
5、单据增加按钮,控制按钮的可用状态不生效
btnVO.setBusinessStatus(new int[] { IBillStatus.CHECKPASS});    //控制按钮审核通过可用
在单据界面的Controller方法中返回true即可解决
public boolean isExistBillStatus() {
    return true;
}
6、单据新增默认赋值
@Override
public void setDefaultData() throws Exception {
    String vbillcode = new BillcodeGenerater().getBillCode(getUIControl().getBillType(), 
        ClientEnvironment.getInstance().getCorporation().getPk_corp(),null, null);    //单据号
    String[] fields = new String[] { "vbillstatus",
                    "pk_billtype",
                    "pk_corp", 
                    "vbillcode", 
                    "voperatorid", 
                    "dbilldate",
                    "scheduletime", 
                    "createtime" };
    String[] values = new String[] {
              new Integer(IBillStatus.FREE).toString(),
                getUIControl().getBillType(),
                ClientEnvironment.getInstance().getCorporation().getPrimaryKey(), 
                vbillcode,
                ClientEnvironment.getInstance().getUser().getPrimaryKey(),
                new UFDate().toString(), 
                new UFDate().toString(),
                new UFDateTime(System.currentTimeMillis()).toString() };
    for (int i = 0; i < fields.length; i++) {
        BillItem item = null;
        item = getBillCardPanel().getHeadItem(fields[i]);
        if (item == null)
            item = getBillCardPanel().getTailItem(fields[i]);
        if (item != null)
            item.setValue(values[i]);
    }
}

7、调用脚本
IPFBusiAction service = (IPFBusiAction)NCLocator.getInstance().lookup(IPFBusiAction.class);
        Object obj = service.processAction("WRITE", "4I", new UFDate().toString(), null, genAggVO,null, null);//WRITE是脚本类型,4I为单据类型
        //调用脚本保存聚合VO时保存失败时优先检查表头表体VO赋值,新增表头表体VO的status均需赋值 vo.setStatus(2);

8、联查单据
步骤:
(1)单据增加“联查”按钮。
(2)联查按钮执行linkQuery()方法逻辑:
        private void linkQuery() {
                int row = this.getBillCardPanelWrapper().getBillCardPanel()
                    .getBillTable("kd_purify_schedule_pgmx").getSelectedRow();
            if (row < 0) {
                MessageDialog.showHintDlg(this.getBillUI().getParent(), "提示",
                        "请先选择一行已派工的排工明细,再联查打开派工单!");
                return;
            }
            Object value = this.getBillCardPanelWrapper().getBillCardPanel()
                    .getBillModel("kd_purify_schedule_pgmx").getValueAt(row, "ypg");
                if (value == null | value == UFBoolean.FALSE) {
                MessageDialog.showHintDlg(this.getBillUI().getParent(), "提示",
                        "该排工计划未派工!");
                return;
            }
            try {
                Object pk_schedule = this.getBillCardPanelWrapper()
                        .getBillCardPanel().getBillModel("kd_purify_schedule_pgmx")
                        .getValueAt(row, "pk_purify_schedule_pgmx");
                LinkQuery linkQuery = new LinkQuery(new String[] { pk_schedule
                    .toString() });
                SFClientUtil.openLinkedQueryDialog("502302", this.getBillUI(),
                        linkQuery);
            } catch (Exception e) {
                e.printStackTrace();
            }
    }
(3)被联查到的单据ClientUI类implements IlinkQuery
        public void doQueryAction(ILinkQueryData querydata) {
            String[] billid = (String[]) ((Object[]) querydata.getUserObject())[0];
            try {
                chDispatchHVO[] queryVos = (chDispatchHVO[]) HYPubBO_Client
                        .queryByCondition(chDispatchHVO.class, " csourcebillid='"
                                + billid[0] + "'");
                getBufferData().clear();
                // 增加数据到Buffer
                chPurifyBillVO aggVO = null;
                chPurifyBillVO[] aggVOs = new chPurifyBillVO[queryVos.length];
                for (int i = 0; i < queryVos.length; i++) {
                    aggVO = new chPurifyBillVO();
                    aggVO.setParentVO(queryVos[i]);
                    aggVOs[i] = aggVO;
                }
                getBufferData().addVOsToBuffer(aggVOs);
                if (getBufferData().getVOBufferSize() != 0) {
                    this.setListHeadData(getBufferData().getAllHeadVOsFromBuffer());
                    this.setBillOperate(IBillOperate.OP_NOTEDIT);
                    getBufferData().setCurrentRow(0);
                } else {
                    this.setListHeadData(null);
                    this.setBillOperate(IBillOperate.OP_INIT);
                    getBufferData().setCurrentRow(-1);
                    this.showHintMessage("没有查到任何满足条件的数据!");
                }
            } catch (Exception e) {
                e.printStackTrace();
            }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值