下面是一些界面常用代码说明
ListUI
1) getSelectedKeValue:单行选择时,获取当前选中行的主键值,返回ID
2) getSelectedIdValues:多行选择时,获取选中行的主键集合,返回List
3) checkSelected:判断是否有选中行。做业务处理的时候一般先调用一下此方法
4) refreshList:刷新当前序时薄
5) prepareUIContext:ListUI到EditUI的值传递
EditUI
1) createNewData:为界面赋初始值,一般情况下,设置界面的控件默认值可以通过在这个方法中对控件对应的属性设置初始值即可。
2) initListener:注册界面控件的监听事件
3) verifyInput:提交或者保存的时候做校验,这个方法中直接对当前的editData的值做校验即可
4) loadFields:将editData的值赋值到控件上,一般有以下几种情况会扩展此方法:
a)某控件没有做数据绑定,在界面加载的时候,需要写代码手工赋值;
b)一些控件需要显示某些实体属性之外的值,在界面加载的时候,需要写代码手工赋值;
5) storeFields:将控件的值赋值给editDta中的属性,一般某控件没有做数据绑定,但是又需要保存的话,需要在这个方法中将控件值赋值给editData
6) setDataObject:一般在BOTP下推的时候会被调用,在这个方法中,会自动根据botp转换关系生成目标单据,某些botp无法配置的值,可以再这个方法中重新设置。即可以再这个方法中对botp转换之后的editData做数据加工,加工完成的数据就是最终显示到界面上的数据
7) initWorkButton:给自定义按钮增加图标,一般针对Action设置
8) initDataStatus:这个方法中通过当前对象(调用getDataObject获取当前对象)的属性值来设置控件的使能属性,即是否可用,是否可见等
其他
分录新增行删除行的响应事件:一般是EditUI实现接口IdetailPanelListener,然后在initListener方法中在表格对应的detailpanel上注册对应的事件,示例代码如下
- protected void initListener() {
- super.initListener();
- Container pnlPlaceCirc = kdtGoods.getParent().getParent();
- if (pnlPlaceCirc instanceof DetailPanel) {
- DetailPanel cc = (DetailPanel) pnlPlaceCirc;
- cc.addAddListener(this);
- cc.addInsertListener(this);
- cc.addRemoveListener(this);
- }
- }
实现IdetailPanelListener接口中定义的两个方法
- public void afterEvent(DetailPanelEvent e) throws Exception {
- IObjectValue vo = e.getObjectValue();
- if (vo instanceof XXXInfo) {
-
-
- }
- }
-
- public void beforeEvent(DetailPanelEvent e) throws Exception {
- IObjectValue vo = e.getObjectValue();
- if (vo instanceof BigContractGoodInfo) {
-
-
- }
- }
获取表格选中行:
KDTableUtil.getSelectedRows(tblMain);返回int数组,代表选中的行的索引
KDTableUtil.getSelectedRow(tblMain);然会IRow,即选中的行
2) 为表格F7控件设置固定的过滤条件,一般先获取到表格中的F7,然后增加willshow事件,
- KDBizPromptBox f7Factory = (KDBizPromptBox) tbl.getColumn("factory").getEditor().getComponent();
- f7Factory.addSelectorListener(new SelectorListener() {
- public void willShow(SelectorEvent e) {
- try {
- factory_willShow(e);
- } catch (Exception exc) {
- handUIException(exc);
- }
- }
- });
在willshow中增加过滤条件
- private void factory_willShow(SelectorEvent e) {
-
- EntityViewInfo view = new EntityViewInfo();
- FilterInfo filter = new FilterInfo();
- filter.getFilterItems().add(new FilterItemInfo("gwgys",Boolean.TRUE));
- filter.getFilterItems().add(new FilterItemInfo("gngys",Boolean.TRUE));
- filter.setMaskString("#0 or #1");
- view.setFilter(filter);
-
- KDBizPromptBox f7 = (KDBizPromptBox) tbl.getColumn("factory").getEditor().getComponent();
- f7.setEntityViewInfo(view);
- f7.getQueryAgent().resetRuntimeEntityView();
- }
为界面上的F7设置过滤条件
- EntityViewInfo evi = new EntityViewInfo();
- FilterInfo filter = new FilterInfo();
- filter.getFilterItems().add(new FilterItemInfo("gwgys", Boolean.TRUE));
- filter.getFilterItems().add(
- new FilterItemInfo("wmBizStatus", new Integer(
- WMBizBillStatusEnum.AUDIT_VALUE)));
- evi.setFilter(filter);
-
- prmtsupplier.setEntityViewInfo(evi);
- prmtsupplier.getQueryAgent().resetRuntimeEntityView();
根据ID生成IobjectPK:IObjectPK objectUuidPK = newObjectUuidPK(id);
根据ID生成BosUUID:BOSUuid read = BOSUuid.read(id);
客户段远程调用写法:XXXFactory.getRemoteInstance()
根据ID获取Info:
- XXXFactory.getRemoteInstance().getXXXInfo(IObjectPKpk);
-
- XXXFactory.getRemoteInstance().getXXXInfo(IObjectPKpk, SelectorItemCollection selector);
-
- SelectorItemCollectionsic = new SelectorItemCollection();
-
-
-
- sic.add(newSelectorItemInfo("*"));
-
-
-
- sic.add(newSelectorItemInfo("creator.*"));
-
-
-
- sic.add(new SelectorItemInfo("auditor.id"));
-
- sic.add(newSelectorItemInfo("auditor.number"));
-
- sic.add(newSelectorItemInfo("auditor.name"));
上面的写法表示需要查询Info所有的属性,以及info上creator这个关联属性所有的属性和info上auditor这个关联属性的id,name和number三个属性
服务端常用代码(服务端代码只能写在XXXControllerBean中,XXX为实体的名字)
服务端代码一般带下划线的是供业务重载或者覆盖的方法,不带下划线的方法中处理了权限,工作流等功能,一般情况下不要覆盖或者重载
protectedIObjectPK _addnew(Context ctx, IObjectValue model):新增单据会调用这个方法,如果在新增后有某些业务处理可以扩展这个方法,然后再后面加上自己的逻辑
protected void_delete(Context ctx, IObjectPK pk):删除单据会调用这个方法,如果在删除后有某些业务处理可以扩展这个方法,然后再后面加上自己的逻辑
protected void _update(Context ctx, IObjectPKpk, IObjectValue model)::修改单据会调用这个方法,如果在修改后有某些业务处理可以扩展这个方法,然后再后面加上自己的逻辑
重载的时候一定要先调用super.XXX,然后再调用自己的逻辑,以覆盖_delete为例,一般写成:
- protected void _delete(Context ctx, IObjectPK pk) throws BOSException,
- EASBizException {
-
- super._delete(ctx, pk);
-
- afterDelete(ctx,pk)
- }
对于自己在实体上新增方法后发布出来的方法也是一样,抽象类中都会生成两个方法,一个带下划线的,一个不带下划线的,一般情况下只能去覆盖带下划线的那个方法,比如实体Test中增加方法method1,那么在实体的控制Bean(即TestControllerBean)的基类就生成两个方法,一个是method1,一个是_ method1,只需要在_ method1写业务逻辑代码即可。