/** 消息内容 */ private String m_message = null; /** 发送人PK */ private String m_sender = null;
/** 接收人pk */ private UserNameObject[] m_receiver = null; /** 发送时间 */ private UFDateTime m_sendDate = null; /** 标题 */ private String m_title = null;
/**消息优先级*/ private int priority = MessagePriority.PRI_NORMAL(另外两个常量是 PRI_LOW;PRI_HIGH); } 使用说明
该方法前后台均可使用,用于向指定的用户发送业务消息。执行效果为在消息中心的 待办事务中插入一条普通消息,双击时弹出消息内容对话框。 public class MessageTypes { /**
* 公告消息,可由任何人看到的消息 */
public final static int MSG_TYPE_PUBLIC = -1; /**
* 预警消息,预警平台产生的预警消息 */
public static final int MSG_TYPE_PA = 0; /**
* 对发消息,某人向另外一人直接发送的消息 */
public static final int MSG_TYPE_P2P = 1; /**
* 业务流消息,业务流平台产生的需要业务处理的推式消息 */
public final static int MSG_TYPE_BUSIFLOW_PUSH = 3; /**
* 业务流消息,业务流平台产生的需要业务处理的拉式消息 */
public final static int MSG_TYPE_BUSIFLOW_PULL = 4; /**
* 业务流消息 */
public final static int MSG_TYPE_BUSIFLOW = 5; /**
* 普通消息,一般的通知消息 */
public static final int MSG_TYPE_INFO = 6; /**
* 后台消息,类同于预警但又不同于预警 */
public static final int MSG_TYPE_BG = 10;
第 11 页 / 共 19 页
1.4.2 保存后推送审批流消息
//如果有审批流,则发消息
if(billstatus == IBillStatus.CHECKGOING){
PuTool.sendMessageToMen(voUI.getHeadVO().getCoperator(), //制单人 }
voUI.getHeadVO().getCapproverid(), voUI.getHeadVO().getPrimaryKey(), voUI.getVBillCode(),
ScmConst.PO_MaterialAppBill);
1.4.3 手工发送消息
String pk_wf_task = null;
// IPFMessage ipfmsg = (IPFMessage) NCLocator.getInstance() // .lookup(IPFMessage.class.getName());
// ipfmsg.insertBizMsgs(new WorkflownoteVO[] { noteVO }); UFDateTime now = new UFDateTime(new Date());
noteVO.setActiontype(WorkflownoteVO.WORKITEM_TYPE_APPROVE);
// 发送业务消息到待办事务 给制单人
WorkflownoteVO noteVO = new WorkflownoteVO(); noteVO.setBillid(parentVO.getPrimaryKey()); noteVO
.setBillno((String) parentVO
.getAttributeValue(\
String corp_user = (String) parentVO
.getAttributeValue(\
noteVO.setCheckman(corp_user.substring(5));
noteVO.setMessagenote(parentVO.getAttributeValue(\
+ \已补单。\
.getAttributeValue(\
noteVO.setPk_billtype((String) parentVO noteVO.setPk_corp(corp_user.substring(0, 4));
noteVO.setSenderman(ClientEnvironment.getInstance().getUser()
.getPrimaryKey());
+ (String) parentVO.getAttributeValue(\+ \
String sql = \
ResultSetProcessor rs = new ArrayListProcessor();
ArrayList al = (ArrayList) DBCacheFacade.runQuery(sql, rs); if (al != null && al.size() > 0) { }
Object[] ob = (Object[]) al.get(1); pk_wf_task = (String) ob[0];
第 12 页 / 共 19 页
String pk = billUpd.insertVO(noteVO);
noteVO.setIscheck(\
noteVO.setReceivedeleteflag(UFBoolean.FALSE); noteVO.setSenddate(now);
noteVO.setApprovestatus(WFTask.STATUS_Start); if (noteVO.getPk_businesstype() == null)
noteVO.setPk_businesstype(IPFConfigInfo.STATEBUSINESSTYPE);
1.5 文件操作 1.5.1 文件目录创建方法
//获得NC_HOME绝对路径
//目录如果不存在,则创建目录
java.io.File srcDir = new java.io.File(srcPath); java.io.File clsDir = new java.io.File(outPath); if (!srcDir.exists())
srcDir.mkdirs(); clsDir.mkdirs(); if (!clsDir.exists())
String nchome = RuntimeEnv.getInstance().getNCHome();
nchome = new File(nchome).getAbsoluteFile().getCanonicalFile().toString(); String moduleHome = nchome + \ + module; //System.out.println(\ //获得编译前后Java文件目录和Class文件目录 String outPath = \; if (isBSClass) else
outPath = moduleHome + \; String srcPath = moduleHome + \;
outPath = moduleHome + \;
1.5.2 单据导出
@Override
protected void onBoExport() throws Exception { ()
._getModuleCode(),((BillManageUI) getBillUI
()).getBillListPanel());
nc.ui.pub.print.PrintEntry print = new nc.ui.pub.print.PrintEntry print.setTemplateID(getBillUI()._getCorp().getPrimaryKey(),
._getModuleCode(), getBillUI()._getOperator(),
(null, dataSource); getBillUI()
nc.ui.pub.print.IDataSource dataSource = new ListPanelPRTS(getBillUI
第 13 页 / 共 19 页
getBillUI() }
.getBusinessType(), getBillUI().getNodeKey());
ScmPrintTool.exportExcelByPrintTemplet(print,null);
1.6 脚本 1.6.1 自定义脚本类
可以自定义自己的脚本类型及脚本类,只要在pub_busiclass表中将 actiontype(脚本类 型) 与 classname(脚本类) 对应上即可,然后再脚本类中通过执行脚本类将参数 传递进去即可,如下:
retObj = bsBusiAction.processAction(\自定义脚本类型\
\单据类型\dmakedate.toString(), null,
vo.m_preValueVo, null, null);
系统会根据【单据类型】和【自定义脚本类型】在pub_busiclass表中查找对应的脚 本类。
1.6.2 调用其他脚本
// 获取业务动作类
IPFBusiAction bsBusiAction = (IPFBusiAction)
NCLocator.getInstance().lookup(IPFBusiAction.class.getName());
// 调用其他单据类型的动作脚本(参数1:操作类型,比如;参数2:单据 类型;参数3:日期字符串;参数4:审批流、工作流执行过程中需要与用户 交互的上下文VO;参数5:聚合vo;参数6: 用户对象;参数7:环境参数) retObj = bsBusiAction.processAction(\RMBBillType.RMF_OUTBILL,
dmakedate.toString(),null,vo.m_preValueVo,null,
null);
1.7 事件监听
1.7.1 移除字段的参照监听添加新的监听类
示例代码如下:
BillItem headItem = billData.getHeadItem(“LOANBILLNO”);
if (headItem != null) {
UIRefPane loanRef = (UIRefPane) headItem.getComponent(); if (loanRef != null) { }
loanRef.getUIButton().removeActionListener(
loanRef.getUIButton().getListeners(
ActionListener.class)[0]);
loanRef.getUIButton().addActionListener(
new LoanBillListener(this));
loanRef.setAutoCheck(false);
第 14 页 / 共 19 页
}
1.7.2 页签转换事件监听
UI工厂生成的代码,如果是多页签(表头或表体),那么监听页签之间转换事件的方法如下: 在ClientUI类的initSelfData()中实现如下代码即可: //卡片表头增加页签转换事件监听
getBillCardWrapper().getBillCardPanel().getHeadTabbedPane().addChangeListener(new ChangeListener(){
public void stateChanged(ChangeEvent e) {
int index = getBillCardPanel().getHeadTabbedPane().getSelectedIndex(); String saleid = getBillCardPanel().getHeadItem(\getBillCardPanel().getHeadItem(\} });
//卡片表体增加页签转换事件监听
getBillCardWrapper().getBillCardPanel().getHeadTabbedPane().addChangeListener(new ChangeListener(){
public void stateChanged(ChangeEvent e) { } });
//列表表体增加页签转换事件监听
getBillListPanel().getBodyTabbedPane().addChangeListener(new ChangeListener(){ public void stateChanged(ChangeEvent e) { } });
1.8 NC常用开发技巧
1.8.1 得到表体某一列合计值
getBillListPanel().getBodyScrollPane(\getBillListPanel().getParentListPanel().setTotalRowShow(true); getBillCardPanel().setTatolRowShow(true); 然后获取获取合计行的值
getBillCardPanel().getTotalTableModel().getValueAt(\行号\列字段\
设置合计的模式
getHeadBillModel().setRowSelectMode(false);设置为false后,合计行为所有的的合计,默认的是合计选择行的合计
1.8.2 NC加锁
public void updateForEx(CubasdocVO cubasdoc) throws BusinessException,
DbException { // 获取锁
boolean islock = false;
islock = PKLock.getInstance().acquireBatchLock
第 15 页 / 共 19 页