// 联查直接费用确认单,自定义按钮的实现方法
protected void onQueryLmoneyButton() throws BusinessException {
// 获得主键
String StrpkCostcard = getUI().getBillCardPanel().getHeadItem(
HpCostcardVO.PK_COSTCARD).getValueObject().toString();
String[] spkcostbesure = nc.ui.hp.pub.ServiceFactory.getIHPPubService()
.queryCostbesurePk(StrpkCostcard);
// IHPCostBillType.COSTDISTRBUTE_BILL_TYPE 为单据类型,比如TP10 BilltypeVO billTypeVO = PfUIDataCache
.getBillType(IHPCostBillType.COSTDISTRBUTE_BILL_TYPE);
SFQryLinkData linkQueryData = new SFQryLinkData(spkcostbesure); SFClientUtil.openLinkedQueryDialog(billTypeVO.getNodecode(), getUI(),
linkQueryData);
}
5.2联查存货:
protected void onQuerycunhuoButton() throws BusinessException {
if (Toolkit.isEmpty(getUI().getBillCardPanel().getHeadItem(
\).getValueObject())) {
MessageDialog.showErrorDlg(getUI(), \错误\, \该成本卡没有存货,不能进行联查!存货
档案\);
}
SFQryLinkData data = new SFQryLinkData(new String[] { getUI()
.getBillCardPanel().getHeadItem(\).getValueObject().toString() }); return;
}
HPClientUtil.linkQueryInvManDoc(getUI().getParent(), data);
6. 一些按钮
6.1 文档管理按钮
protected void onQueryWordButton() throws Exception { \); }
一些平台提供的方法:nc.ui.am.common.command.support.*
return; String str_corp = \;
str_corp = getUI()._getCorp().getPk_corp(); String strpk_costcard = \;
if (getUI().getBillCardPanel().getHeadItem(\).getValueObject() != null) { }
if (strpk_costcard.equals(\)) {
MessageDialog.showWarningDlg(getUI(), \提示\, \请选择一张成本卡后再使用文档管理! strpk_costcard = getUI().getBillCardPanel().getHeadItem(
\).getValueObject().toString();
} else { }
FileManageUI.showInDlg(getUI(), \成本卡文档管理\/** @res* \文档管理\ */
, \成本卡管理_\ + str_corp + \ + strpk_costcard);
7. 加锁问题
7.1主表字段加锁
在动作脚本中添加 方法的调用
public Object runComClass(PfParameterVO vo) throws BusinessException {
try {
super.m_tmpVo = vo;
// ####本脚本必须含有返回值,返回DLG和PNL的组件不允许有返回值#### Object retObj = null;
// ####重要说明:生成的业务组件方法尽量不要进行修改#### // 方法说明:公共保存方法 // 生成单据号
nc.bs.pub.billcodemanage.BillcodeGenerater gene = new
nc.bs.pub.billcodemanage.BillcodeGenerater();
if (nc.vo.jcom.lang.StringUtil.isEmpty(((String) vo.m_preValueVo }
//保存前先进行加锁判断
runClass(\
\
.getParentVO().getAttributeValue(\)))) {
String billno = gene.getBillCode(vo.m_billType, vo.m_coId,
null, null);
vo.m_preValueVo.getParentVO().setAttributeValue(\,
billno);
}
m_methodReturnHas);
retObj = runClass(\, \,
\, vo, m_keyHas, m_methodReturnHas);
// ################################################# //保存后释放锁
runClass(\
\ m_methodReturnHas);
return retObj;
} catch (Exception ex) { }
if (ex instanceof BusinessException)
throw (BusinessException) ex;
else
throw new PFBusinessException(ex.getMessage(), ex);
被调用的方法如下:
private String[] lockPKs = null;
/**
* @date:2009-3-13
* @see nc.bs.hp.hp020101.CostCardDAO#ISOnelock(nc.vo.pub.AggregatedValueObject) * @author:ZJH
* @TODO:成本卡在保存时先对产品主键加锁,再检查数据库中是否存在相同未结转产品,避免并行
时的重复保存
* @param vo * @throws Exception */
public void ISOnelock(AggregatedValueObject vo) throws BusinessException {
HpCostcardVO item = (HpCostcardVO) vo.getParentVO(); lockPKs = new String[1];
lockPKs[0] = item.getPk_invmandoc(); //如果申请锁失败
if (!PKLock.getInstance().acquireBatchLock(lockPKs,
InvocationInfoProxy.getInstance().getUserCode(), InvocationInfoProxy.getInstance().getUserDataSource()))
throw new BusinessException(\该存货已经存在了一张未结转的成本卡,同一存货只能存
在一张未结转的成本卡!\);
//申请锁成功
else {
if (!(this.ISOne(vo))) {//普通条件判断
PKLock.getInstance().releaseBatchLock(lockPKs,
InvocationInfoProxy.getInstance().getUserCode(), InvocationInfoProxy.getInstance().getUserDataSource());
throw new BusinessException(
\该存货已经存在了一张未结转的成本卡,同一存货只能存在一张未结转
的成本卡!\);
} /**
}
}