一、取值
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();
}