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();
			}
		}

  • 6
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值