result.add((KDTreeNode) bulitTree(tn)); } else {
result.add(new KDTreeNode(((DefaultKingdeeTreeNode) tn).getUserObject())); } }
return result; }
用户没有分配到某个操作的权限,但是却可以直接操作,权限设置无效。
解决:
权限项设置要与按钮的Action直接关联。会出现上面的问题是因为(举例说明) Action A调用了Action B,然后在写引用属性的时候直接把方法B给写上了,没有用Action A,然后就出现了那个问题。Action B不是按钮的直接触发Action。要直接写上按钮的Action。
如何加监听?
解决: 示例代码
this.tblMain.addKDTSelectListener(new
com.kingdee.bos.ctrl.kdf.table.event.KDTSelectListener() { public void
tableSelectChanged(com.kingdee.bos.ctrl.kdf.table.event.KDTSelectEvent e) { try {
tblMain_tableSelectChanged(e); } catch (Exception exc) { handUIException(exc); } finally { } } });
触发监听事件是在KDTSelectManager类中的fireTableSelectChanged方法,可以看到一共触发了多少个监听器。
2008-12-18 问题:
工作流无法跑通
分析:
跟踪了代码发现在WfBizEventListener类中executeAfter方法里面的代码 String boId =
EventUtils.getBoPK(eventInfo.getEventMethods().get(operationPK.toString()), args);
取得的boId为空,使工作流无法走通。
解决:
这是BOS工作流的一个bug,需要在实体里面上设置
这里的业务对象主键的id为空。在
如何在消息中心可以批量处理单据?
解决:
在对应的实体对象中需要设置一下扩展属性ListUI,将对应的ListUI配置进去。
2008-12-19 问题:
工作流批量处理报错
java.lang.NullPointerException: null at:
com.kingdee.eas.base.multiapprove.client.MultiApproveListUI.onLoad(MultiApproveListUI.java:299)
分析:
跟踪代码,发现
String fstBoId = ((AssignmentInfo) approveAssignInfos.get(0)).getBizObjectIds(); 这里的fstBoId为空,导致空指针错误。
解决:
没有在工作流环境中的提交节点进行配置,没有正确生成单据。 正确配置如下:
进行设置后,将会在提交到工作流的时候正确生成单据。只有在工作流环境中重新正确配置提交节点的任务之后才会生效,对之前错误的单据没有影响,需要重新进行操作流程 新增-〉提交,新的单据不会报错。
2008-12-19 问题:
重新定义了实体事件,在工作流环境中无法找到。
分析:
已经打上补丁并且生成了子系统树,但是还是无法在工作流环境中找到。
解决:
需要将工作流环境重启,即使重新连接登陆都不能够刷新的,只有将环境重启了才行。(郁
闷)
2008-12-20 问题:
如何判断该单据已经处在工作流中。
解决:
在Context中有这个属性。用这个判断this.getUIContext().get(\。
2008-12-21 问题:
消息中心打回修改重新提交的时候报“已在工作流处理中,当前任务或执行人不匹配”
解决:
一般是实体或者功能配置错误,查看对应的处理事件。
这个错误是因为在参数与映射中对应的事件参数没有设置进去。修改后即可。
如何获得所需的对象?包括过滤,获取指定的某些关联对象。
解决:
一个对象里面可能有些属性关联到其他的对象,可以通过以下写法获得。(注释文字为自己理解,并非标准)
EntityViewInfo viewInfo = new EntityViewInfo();//建立一个实体封装对象。 FilterInfo fi = new FilterInfo();//建立一个过滤对象。
fi.getFilterItems().add(new FilterItemInfo(\
//设置过滤条件为contractId这个字段的值等于contractIds。 viewInfo.setFilter(fi);
SelectorItemCollection sic = new SelectorItemCollection(); //建立一个选择器。
sic.add(new SelectorItemInfo(\实体本身的所有属性。 sic.add(new SelectorItemInfo(\为对应实体的属性,意思是获得关联对象entrys的所有属性。
sic.add(new SelectorItemInfo(\为entrys的属性。
viewInfo.setSelector(sic); payRequestBillCols =
PayRequestBillFactory.getRemoteInstance().getPayRequestBillCollection(viewInfo)
备注:
BudgetInfo info = budget.getBudgetInfo(arrayPK[i]);
SelectorItemCollection sic = new SelectorItemCollection(); sic.add(new SelectorItemInfo(\
sic.add(new SelectorItemInfo(\
sic.add(new SelectorItemInfo(\ sic.add(new SelectorItemInfo(\
BudgetInfo info2=budget.getBudgetInfo(arrayPK[i],sic); Info与info2的不同之处在于,info会拿出所有关联的对象,而info2只会拿出所指定的某些关联对象。
2008-12-30
问题:鼠标右键没有选项,添加导入导出等选项。
解决:
关键在于onShow方法。在重写onShow方法的时候要super一下。还有就是右键按钮的加载在于CoreUI类的initUserConfig方法,会初始化表格设置。而这个方法只在onShow方法中调用。
备注:
如果要自己添加导入导出选项的时候,需要做以下操作。enableExportExcel(kdtPaymentDetail); checkTableCommonMenu(kdtPaymentDetail);
这两句代码是设置导入导出功能是否要实现,并且检查右键的有效性。 kdtPaymentDetail则为KDTable。
其实还有另外一个实现方法,就是在页面上重写getTableForCommon(),返回一个KDTable就行了。