用友 NC客户化开发手册
来源:互联网 发布:大学英语教材听力软件 编辑:程序博客网 时间:2024/06/13 04:04
NC客户化开发手册
本手册是北京齐力创辉科技发展有限公司(TTS)内部培训资料,只限于公司内部应用,任何人未经过书面许可不得扩大本教程的使用范围。严禁任何非法传播、翻印或仿制,违者必究!
©本手册的著作权属于北京齐力创辉科技发展有限公司
前言
目录
前言 1
第一章规范篇 2
1.1代码规范 2
1.2注释规范 2
1.3异常规范 2
1.4其他规范 2
第二章基础篇 3
2.1单据信息 3
2.1.1获取卡片和列表容器(Panel) 3
2.1.2当前界面卡片/列表状态 3
2.1.3获取/设置当前单据的操作状态: 3
2.1.4获取选择的树节点 3
2.1.5是否单表体 3
2.1.6设置单据卡片表头区域比例 3
2.1.7设置表体页签状态 3
2.1.8获取单据模板上定义的所有字段 3
2.2VO的获取和赋值及更新 3
2.2.1 VO的获取 3
2.2.2 VO的操作 4
2.3字段处理 5
2.3.1表头字段值 5
2.3.2表体字段值 5
2.3.3字段设置可编辑: 5
2.3.4隐藏字段 5
2.3.5设置数度 5
2.3.6设置字段焦点 6
2.4公式 6
2.4.1执行、设置公式: 6
2.4.2公式解析器: 6
2.5单据行操作 6
2.5.1获取表体选择行 6
2.5.2删除表体的自动排序 6
2.5.3行编辑状态: 6
2.5.4选中表体所有行 6
2.5.5列表下,表头行可多选的实现 7
2.5.6行操作(删除,增行等) 7
2.6获取系统相关 7
2.6.1常量的获取(公司,操作员,时间) 7
2.6.2单据号的获取 7
2.7程序健壮性及易用性 8
2.7.1单据保存时强制调用非空验证方法: 8
2.7.2弹出消息框代码: 8
2.7.3在编辑事件中常用的判断 8
2.7.4设置表体没有右键菜单方法 8
第三章高级篇 8
3.1审批流 8
3.2后台预警 8
3.3后台任务 8
3.4消息 8
3.5错误定位(日志分析) 8
第一章 规范篇
1.1 代码规范
1.1.1 程序中代码规范
1.1.1.1 常量命名
所有的字符都必须大写。采用有意义的单词组合表达,单词与单词之间以“_”下划线隔开。
Ø 命名尽量简短,不要超过16个字符。
程序开发中最好不要直接对literal进行工作,最好引入常量方式应用;只有在特别的情况下才能使用, 如在for循环中初始化变量时可直接用-1,0,1这些常量。
例如:public final int MAX_SIZE = 120;
public final int MAX_WIDTH = 100;
public final String PROPERTY_NAME= "menu" ;
1.1.1.2 变量命名
变量的命名包括实例变量,静态变量,函数参数的命名。
Ø 避免在命名中采用数字,除非命名意义明确,程序更加清晰,对实例变量的命名中不应该有数字。
Ø 变量名称是名词意义。
Ø 采用有符合问题域意义的单词或单词组合。第一个单词全部小写,后续的每个单词采用首字母大写,其余小写(特殊单词除外,如URL)。
Ø 命名尽量简短,不要超过16个字符。
Ø 除了生命周期很短的临时变量外,避免采用单字符作为变量名,实例变量的命名不要用单字符。常用的单字符变量如整型用 i、j、 k、 m、 n字符型用c、d、 e,坐标用x、y、z。
Ø 在某些情况下,变量可能需要加上类型前缀,所有的类型前缀必须是小写,他与变量名称的实体部分没有任何间隔,实体部的每个单词都是首字母大写,其余字母小写(特殊单词除外如URL),类的全局变量强烈建议使用,一般的类型前缀如下:
类型前缀
类型
例子
b
Boolean、boolean
bsingle
f
浮点数
fsize
d
UFDouble
dmoney
dt
Date
dtToday
c
Character,、char
cinput
obj
OBJECT变量
ObjUser
str
字符串(String, StringBuffer)
strFileName
i
整型数
iCount
ary
数组
aryName
conn
连接
ConnActiveConnection
stmt
Statement
StmtFindUser
rs
Resultset
RsUsers
al
ArrayList
alData
map
Map
map_key_value
set
Set
setValue
col
Collection
colNames
msg
消息
msgText
err
错误
errCode
btn
按钮
btnSubmit
Ø 不在特别的情况下,Java中不推荐采用前缀,而是推荐保持名称的语义
例如:public int width;
public String fileName;
public static ApplicationContext context;
1.1.1.3 方法、类和接口的命名和规范
命名多数为动词结构。
Ø 采用有符合问题域意义的单词或单词组合。第一个单词采用小写,后续的每个单词采用首字母大写,其余小写(特殊字除外如URL),没有特别理由不用下划线作为分隔符。
一般功能性的方法不允许方法的代码长度超过200行,如果方法实现逻辑比较复杂就拆分类若干个小方法,每个方法添加功能注释。
一个类文件最好不要超过2000行。
1.1.1.4 包的命名
采用逻辑上的层次结构,从而减少依赖。
Ø 产品模块对外的接口定义放在nc.itf.模块名.xx。
Ø 服务的实现类nc.impl.模块名.xx。
Ø 后台业务类代码nc.bs.xx。
Ø 值对象命名:nc.vo.模块名。
Ø UI层命名:nc.ui.模块名。
Ø 命名简短,常采用缩写。
Ø 包名所有字符都为小写。
Ø 不要用java, javax作为自定义包的前缀。
1.1.2 数据库设计规范
1.1.2.1 sql书写规范
1) SQL语句全部使用小写。
2) 连接符或运算符or、in、and、=、<=、>=, +,- 等前后加上一个空格。
3) 严禁使用select * …….形式的语句,必须指出select的具体字段,即select col1, col2,… from tablea where …。★。
4) 严禁使用 insert into table values(?,?,?),必须指出具体要赋值的字段,即 insert into tablea (col1, col2,…) values(?,?,…)。
5) SQL语句包含多表连接时,建议对每个表命名别名,对每个字段的使用都要带上表别名,即 select a.col1, a.col2, b.col3 from tablea a, tableb b where a.col4=b.col5。
1.1.2.2 性能规范
1) 在进行多条记录的增加、修改、删除时,建议使用批处理功能,批处理的次数以整个SQL语句不超过相应数据库的SQL语句大小的限制为准。
2) 禁止使用or 超过 500,如 xx =’123’ or xx=’456’,禁止在SQL 语句中in中的元素个数在50以上。
3) 禁止在一条SQL语句中使用3层以上的嵌套查询,如果有,请考虑使用临时表或中间结果集。
4) 如果有多表连接时,应该有主从之分,并尽量从一个表取数。
1.1.2.3 数据库字段级表名的命名规范
模块名称规则表,一般数据库表设计的前缀默认采用以下规则,以下表的详细信息请参考NC规范中的NC产品形态文档:
模块名称
系统规则名
模块名称
系统规则名
模块名称
系统规则名
UAP
系统管理
sm
UAP
pub
财务会计平台
dap
基础数据
bd
外部交换平台
xx
管理会计平台
dmp
报表&BPM
报表
iufo
BI平台
bi
BPM
bpm
财务
总账管理
gl
收付报
arap
固定资产
fa
存货核算
ia
项目成本
jc
资金
资金结算
fts
资金监控
fvm
资金计划
fp
票据管理
fbm
信贷管理
fi
资金预测
fi
资金计息
fi
网上银行
ebank
预算
预算管理
ntb
人力资源
人力资源规划
HRP
职务职能管理
OM
员工信息管理
HI
招聘甄选管理
RM
员工调配管理
HI
员工离职管理
HI
政策制度管理
HRPM
劳动合同管理
HRCM
培训开发管理
TRM
考勤管理
TBM
出差管理
HRBT
休假管理
HRLM
加班管理
HROM
绩效管理
PE
薪酬管理
WA
福利管理
BM
经理自助
MSS
基础设置
HR
人力资源取数函数
RPT
员工自助
ESS
供应链
采购管理
po
销售/分销管理
so
库存管理
ic
销售价格
prm
内部交易
to
供应商管理
vrm
合同管理
ct
委外加工
sc
发运管理
dm
供应链公共
scm
制造
设备管理
fm
成本管理
cm
制造基础数据
pd
需求管理
mm
生产计划
mm
生产定单
mm
车间作业
sf
能力计划
crp
装配计划
mm
检修管理
er
质量管理
质量管理
qc
其他
cdm
pm
2)所有表、视图、触发器、索引、函数、约束、主外键必须指定名称,规则如下:
对于各种数据库对象的命名规则,目前的NC系统中存在两种风格,采用拼音和采用英文的,目前这两种规范都可以,但是注释一定要清楚。
数据库对象
规则
最大长度
例子
表
系统规则名_名称
18
sm_firm
字段名
18
acc_code, acc_name
视图
v_系统规则名_名称(*)
18
ac_accsub
触发器
t_表名_名称(*)
18
t_firm
函数
f_名称
18
f_fun()
Check
ck_表名_字段名(*)
18
ck_gl_accsub_code
主键
pk_表名
18
pk_gl_accsub
外键
fk_表名_字段名(*)--此处超过18位处理
18
fk_gl_vouch_accsub_code
索引
i_表名_字段名(*)
18
i_gl_accsub_code
表空间
ts_名称
18
ts_sys
(*)注:由于数据库对象之间的命名规则与最大长度限制可能造成命名存在冲突。如存在,可以通过缩减表名或字段字符来实现;
1) 所有的外键、约束、索引、函数、触发器、存储过程名不允许重复;
4)业务中主子表的命名规则:
系统规则名_名称 或 主表:系统规则名_名称_h 子表:系统规则名_英文名称_b。
5)业务中主子子表的命名规则:
主表:系统规则名_英文名称_h
子表:系统规则名_英文名称_b
子子表:系统规则名_英文名称_bs
1.1.2.4 业务数据类型规范
类型
规则(使用SQL Server描述)
编码类
字符型。依据规则确定用char还是varchar。
名称类
字符型。依据规则确定用char还是varchar。
布尔类
Char(1),Y/N
状态类
Smallint,用0,1,2,3……表示
级次类
16位整型Smallint
金额类
精确数值型,一般为decimal(20,8)
大金额
32,10
系统标识类
估计可能最大值<32,767: 16位整型smallint
估计可能最大值>32,767: 32位整型 smallint
摘要备注类
可变字符型。需要定义几种:200,1000
价格数量类
精确数值型,一般为decimal(20,8)
单价类
精确数值型,一般为decimal(20,8)
比率类
精确数值型,一般为decimal(20,8)
3)不要用SQL 保留字来命名表、视图、字段、索引。数据库的保留字见各数据库厂商规范;
4)字符型字段的确定。长度固定用char,不固定用varchar;
5)不要将Null 与 空串“”视为相同。在不同的数据库中对这两者的理解是不相同的。在
Oracle中空串与Null理解一样。如果碰到这种情况统一用Null;
6)空值问题:
所有经常用来做为查询条件的字段都不允许使用空值,引用基础档案的,在基础档案增加表示空值的档案,其他使用N/A表示。
1.2 注释规范
1.2.1 类、方法注释
类、方法开始必须要加上注释,标注方法或者类的用途、作者、时间。如果是方法注释必须加上方法的参数说明(注释每个参数代表的实际意义),
1.2.2 主要算法注释
算法描述指在实现级别的描述注释,如在方法内的注释,对类实现的注释,这样使得程序更加易懂,方便程序算法的修改和BUG的修复。一般采用块/行注释,对于简短的描述采用行注释,不要用文档注释。注释的主要内容包括:
Ø 1)某些局部变量的意义和用途;
Ø 2)复杂的控制结构的注释,如循环、分枝、条件表达式,说明控制所要达到的目标;
Ø 3)复杂的代码段的描述,说明代码完成的功能,以及为什么这样做。
1.2.3 修改原有产品或者其他人代码注释
如果是修改产品或者其他人代码时必须加上注释
1) 如果是单行修改代码,注释要加上修改的目的、时间、修改人。
例如://edit by 张三 增加此行代码目的 2012-03- 05
2) 如果是块修改代码必须在要修改的代码开始和结尾做标记
例如://edit by 张三 增加参照入库单生单的额外条件 2012-03- 05 begin
中间部分添加修改的代码块
//edit by 张三 增加参照入库单生单的额外条件 2012-03- 05 end
3) 如果是单行增加代码,注释要加上增加的目的、时间、修改人。
例如://add by 张三 增加此行代码目的 2012-03- 05
4) 如果是块修改代码必须在要修改的代码开始和结尾做标记
例如:/add by 张三 增加参照入库单生单的额外条件 2012-03- 05 begin
中间部分添加修改的代码块
// add by 张三 增加参照入库单生单的额外条件 2012-03- 05 end
1.2.4 整体代码注释
比较长的代码,规定必须每行或者每隔一行必须有逻辑上的注释(即:代码思路的注释)。
1.3 异常规范
1.3.1 代码中异常处理
代码中异常处理必须遵循NC平台的异常处理,禁止在自己写的方法中进行异常的扑捉、打印异常信息,如果在自己的代码中必须做异常的处理的话就进行异常的throw,由最外层的异常捕获机制进行捕获和用户的交互。
1.4 其他规范
1.4.1 SVN使用规范
1) SVN服务器的使用规范,每个人必须使用自己的用户,每天早上上班时进行代码的更新,每天下班前对已经完工的功能进行代码的提交。
2) 代码在提交前必须先进行更新,预防自己本地的代码覆盖他人并发修改的代码。
1.4.2 数据库服务器使用规范
在还原用户数据库到服务器上时,如果客户的数据库文件超过5G,必须建立单独的实例。如果不超过5G就可以还原到公用的orcl实例中。
第二章 基础篇
1
2
2.1 单据信息
1.4.3 获取卡片和列表容器(Panel)
F 卡片
UI端:getBillCardPanelWrapper().getBillCardPanel()或者getBillCardPanel()
EventHandler:getBillCardPanelWrapper().getBillCardPanel()
F 列表
UI端:getBillCardPanelWrapper().getBillListPanel()或者getBillListPanel()
EventHandler:getBillCardPanelWrapper().getBillListPanel()
1.4.4 当前界面卡片/列表状态
getBillManageUI().isListPanelSelected()
1.4.5 获取/设置当前单据的操作状态:
getBillUI().setBillOperate(intnewBillOperate);
getBillUI().getBillOperate()
1.4.6 获取选择的树节点
getBillTreeCardUI().getBillTreeSelectNode();
getBillTreeCardUI().getBillTreeSelectNode().getData();
1.4.7 是否单表体
isSingleDetail() true:为单表体;false:为单表头;(在校验类里)
1.4.8 设置单据卡片表头区域比例
((nc.ui.pub.bill.BillCardLayout)getBillCardPanel().getLayout()).setHeadScale(80);
1.4.9 设置表体页签状态
F 显示状态:getBillCardPanel().getBodyPanel("").setVisible(false);
F 可用状态:getBillCardPanel().getBillModel("subbillb").setEnabled(false);
F 获取当前页签编码:getBillCardPanelWrapper().getBillCardPanel().getCurrentBodyTableCode()
1.4.10 获取单据模板上定义的所有字段
nc.vo.pub.bill.BillTempletBodyVO[] tbodyvos =
(nc.vo.pub.bill.BillTempletBodyVO[]) billCardPanel.getTempletData().getChildrenVO();
1.4.11 列表启用表头多选对话框
getBillListPanel().setParentMultiSelect(true);
2.2 VO的获取和赋值及更新
1.4.12 VO的获取
1.4.12.1 getBufferData():
EventHandler中可以直接调用,可以获取单据对应的缓存数据,getBufferData().getCurrentVO()卡片下为获取当前单据的VO对象,列表下则为获取当前选择行的VO对象。UI类当和EventHandler类在同一个包下时,也可以直接调用该方法。当UI类与EventHandler类不在同一个包下时,可以通过getManageEventHandler()获取EventHandler对象,然后再调用EventHandler的getBufferData()获取缓存数据。
1.4.12.2 界面取值
F 得到单据表体当前被选中的VO:
getBillCardPanelWrapper().getSelectedBodyVOs(); //如果没有被选择的行那么返回NULL
F 从界面上得到VO
getBillCardPanelWrapper().getBillVOFromUI();//得到界面上全部数据的VO
getBillListWrapper().getVOFromUI()//被选择行的VO
F 得到界面变化数据的VO
(ClientUI)getChangedVOFromUI()或者getBillListWrapper().getChangedVOFromUI()
1.4.12.3 通过VO的className
F 卡片
getBillCardPanel().getBillData().getBillValueVO(billVOName, headVOName, bodyVOName)
getBillCardPanel().getBillData().getBillValueChangeVO(billVOName, headVOName, bodyVOName)
F 列表
getBillListPanel().getBillListData().getBillSelectValueVO(billVOName, headVOName, bodyVOName)
getBillListPanel().getBillListData().getBillSelectValueVOs(billVOName, headVOName, bodyVOName)
getBillListPanel().getBillListData().getBillValueVO(row, billVOName, headVOName, bodyVOName)
1.4.12.4 通过PK值查询
InvbasdocVOinvbasdocVO = (InvbasdocVO)HYPubBO_Client.queryByPrimaryKey(InvbasdocVO.class, pk_inv);
1.4.13 VO的操作
1.4.13.1 界面VO操作
F 设置Buffer中的TS到当前设置VO:
setTSFormBufferToVO(billVO); billVO为AggregatedValueObject类型
F 得到当前VO的一个副本:getBufferData().getCurrentVOClone()
F 刷新某一行的VO
BillManageUI.getBillListWrapper().updateListVo(hvo, selectedRows[i]);
1.4.13.2 VO的数据库操作
1.4.13.2.1 SuperVO
针对SuperVO,通用的方式为下面两种。如果是特殊的单据如供应链等需要特殊的操作,不能使用下面的方法
F 前台:HYPubBO_Client
F 后台:BaseDAO
1.4.13.2.2 (供应链)的GeneralBillHelper类
ret = GeneralBillHelper.queryBills(单据类型, (QryConditionVO)voCond);
2.3 字段处理
1.4.14 表头字段值
取值
F getBillCardPanel().getHeadItem("strKey").getValueObject()
F 表头VO.getAttributeValue('"字段名");
赋值
F 表头VO.setAttributeValue("字段名" ,值); 聚合VO.setHeaderValue("字段名" ,值);
F getBillCardPanel().setHeadItem("字段名" ,值);
1.4.15 表体字段值
获取
F getBillCardPanelWrapper().getBillCardPanel().getBodyValueAt(rowIndex, "strKey")。其中rowIndex为要获取字段所在的行。
F 卡片下获取表体相应页签下的字段:getBillCardPanel().getBodyItem("plh_topics_b2", "nitemmny")
F 获取单据模板上定义的所有字段
nc.vo.pub.bill.BillTempletBodyVO[] tbodyvos = nc.vo.pub.bill.BillTempletBodyVO[]) billCardPanel.getTempletData().getChildrenVO();
赋值
为表体某行某个字段赋值:
F 聚合VO.setItemValue(行索引值, “字段名”, 值);
F getBillCardPanel().setBodyValueAt(aValue, row, strKey);
aValue:为要赋的值; row:为所在的行;strKey:为字段名;
注意:
得到表体上的值,得到的类型是object类型的。要进行一下转换(),但是不能直接转:如下getBillCardPanel().getHeadItem(“字段名”).getValueObject().toString();这样转是容易出错。正确定的转换方式为:Object obj = getBillCardPanel().getHeadItem("pk_npic_schedule_id").getValueObject();
String pk_contract=obj==null?"":obj.toString();
1.4.16 字段设置可编辑:
getBillCardPanel().getBodyItem("字段名").setEdit(true);
1.4.17 隐藏字段
getBillCardPanel().hideBodyTableCol("bodyitem");
代码设置卡片状态下表头和表体某一字段的编辑状态:
// 表头
getBillCardPanel().getHeadItem("").setEdit(false);
// 表体
getBillCardPanel().getBillModel().setCellEditable(row,"nqichunum",false);
1.4.18 设置精度
// 先获取BillModel
nc.ui.pub.bill.BillModelbm = getReportBase().getBillModel();
// 通过以下方法设置精度
bm.getItemByKey(key).setDecimalDigits(3);
1.4.19 将UFDouble显示为小数点后2位的操作
UFDouble().setScale(2, UFDouble.ROUND_HALF_UP); //保留小数点后2位,并“四舍五入”
1.4.20 设置字段焦点
表头字段:
getBillCardPanel().getHeadItem("jobname").getComponent().requestFocus()
表体字段:
其中参数mm和ii是表体的行和列
getBillCardPanel().getBillTable().setColumnSelectionInterval(m,m); getBillCardPanel().getBillTable().setRowSelectionInterval(i,i);
2.4 公式
1.4.21 执行、设置公式:
F getBillCardPanel().execHeadFormula(formula),其他方法请参照getBillCardPanel().或getBillListPanel()中的针对公式的方法。
1.4.22 公式解析器:
F 参照红皮书《NCV5-公式技术红皮书》
2.5 单据行操作
1.4.23 获取表体选择行
F 获取表体的选中行的行号getBillCardPanelWrapper().getBillCardPanel().getBillTable().getSelectedRow();或getBillCardPanelWrapper().getBillCardPanel().getBodyPanel().getTable().getSelectedRow();
F 获取编辑行getBillCardPanelWrapper().getBillCardPanel().getBillTable().getEditingRow()
F 获取总行数getBillCardPanelWrapper().getBillCardPanel().getBillTable().getRowCount()
F 获取列表多条记录的方法
1、int[] selectRows = ((BillManageUI) getBillUI()).getBillListPanel().getHeadTable().getSelectedRows();
2、 ((BillManageUI) getBillUI()).getBillListPanel().getHeadBillModel().getBodySelectedVOs(DemoYsHVO.class.getName());
其中,方法1只在Ctrl、Shift多选时能取到多条记录的行号。方法2都能取到多选记录的VO。
1.4.24 删除表体的自动排序
F getBillCardPanel().getBillTable().setSortEnabled(false);
F 卡片和列表下的排序方法(TRUE:升序;FALSE:降序)
列表:getBillListWrapper().getBillListPanel().getBodyBillModel().setSortColumn("vdef21");
卡片:getBillCardPanelWrapper().getBillCardPanel().getBillModel().sortByColumn("reserve6", true);
F 锁定页面排序:
getBillTable().setSortEnabled(false);
1.4.25 行编辑状态:
F getBillCardPanelWrapper().getBillCardPanel().getBillModel().setRowEditState(true)
F 设置表格为行不可编辑状态:
getBillCardPanelWrapper().getBillCardPanel().getBillModel().setNotEditAllowedRows(rows);
rows是一个INT类型的数组
F 终止编辑getBillCardPanel().stopEditing();
1.4.26 选中表体所有行
BillCardPanel card = getBillCardPanel();
card.getBillTable("uap_quotarev_b").selectAll();
1.4.27 列表下,表头行可多选的实现
//设置列表多选框
getBillListPanel().setMultiSelect(true);
//设置列表Ctrl、Shift多选
getBillListWrapper().getBillListPanel().getHeadTable().
setSelectionMode(javax.swing.ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
1.4.28 行操作(删除,增行等)
F 删行 getBillCardPanel().delLine();getBillCardPanel().getBodyPanel("plh_presstask_b6").delLine();
F 增行getBillCardPanel().addLine();getBillCardPanel().getBodyPanel("plh_presstask_b6"). addLine ();
F 行操作不可用:getButtonManager().getButton(IBillButton.Line).setVisible(false);
F 更新行操作按钮:getBillUI().updateButton(getButtonManager().getButton(IBillButton.Line));
F 清空表体行:
getBillCardPanel().getBillTable().selectAll();
getBillCardPanel().delLine();
F 列表多行选择: getBillListPanel().setMultiSelect(true);
F BillListPanel.setParentMultiSelect(true);
F 单据列表支持选中多行:
getBillListPanel().getHeadTable().setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
2.6 获取系统相关
1.4.29 常量的获取(公司,操作员,时间)
F 得到当前登录公司的主键(UI):
ClientEnvironment.getInstance().getCorporation().getPrimaryKey();
getClientEnvironment().getCorporation().pk_corp.toString();
F 得到当前登录用户的主键(UI):
ClientEnvironment.getInstance().getUser().getPrimaryKey();
F 公司主键:ClientEnvironment.getInstance().getCorporation().getPrimaryKey();
getBillUI()._getCorp().getPrimaryKey();
F 操作员主键:ClientEnvironment.getInstance().getUser().getPrimaryKey();
getBillUI()._getOperator();
F 服务端时间:ClientEnvironment.getServerTime();
getBillUI().getServerTime();
SFServiceFacility.getServiceProviderService().getServerTime().toString()
F 客户端日期:ClientEnvironment.getInstance().getDate();
getBillUI().getDate();
1.4.30 单据号的获取
F 前台:billNo = HYPubBO_Client.getBillNo(单据类型, 公司ID, null, null);
F 后台:
1、nc.bs.pub.billcodemanage.BillcodeGenerater gene = new nc.bs.pub.billcodemanage.BillcodeGenerater ();String billcode = gene.getBillCode (单据类型,公司ID,null,null)
2、String billNo = new nc.bs.trade.business.HYPubBO().getBillNo(单据类型, 公司ID,null,null);
2.7 程序健壮性及易用性
1.4.31 单据保存时强制调用非空验证方法:
getBillCardPanelWrapper().getBillCardPanel().dataNotNullValidate()
1.4.32 弹出消息框代码:
在UI类中:showWarningMessage(“提示消息”);showHintMessage(“状态栏上的消息”);
在EventHandler类中:getBillUI().showErrorMessage(“提示消息”);
1.4.33 在编辑事件中常用的判断
判断是不是对表体进行的编辑: e.getPos()==IBillItem.BODY或者e.getPos()==0
判断是不是对表体进行的编辑: e.getPos()==IBillItem.HEAD或者e.getPos()==1
判断是对单据上哪个字段进行的编辑: “字段名“.equals(e.getKey());
1.4.34 设置表体没有右键菜单方法
BillCardPanel.setBodyMenuShow(false);
第三章 高级篇
3
3.1 审批流
1.4.35 审批流开发注意事项
1) 开发带审批流单据,单据上必须包含以下字段
字段编码
中文名
数据类型
是否必输
说明
pk_corp
公司ID
char(4)
N
vbillno
单据号
varchar(20)
Y
dbilldate
单据日期
char(10)
N
voperatorid
操作人
char(20)
N
pk_billtype
单据类型
varchar(4)
pk_busitype
业务类型
char(20)
vbusicode
业务编码
varchar(20)
vbillstatus
单据状态
smallint
vapproveid
审核人
char(20)
dapprovedate
审核日期
char(10)
vapprovenote
审核批语
varchar(100)
vmodifiid
修改人
char(20)
dmodifidate
修改日期
char(10)
tlastmodifitime
修改时间
char(19)
dr
删除标志
smallint
N
ts
时间戳
char(19)
N
2) 单据如果要在审批过程中进行一些回写和其他逻辑必须指定一个审批后台类,指定审批后台类的放入如下:
图中那个画圈的DMO类就是后天审批流的检查类,里面提供了审批流执行中各个环节的方法。审批中要处理的逻辑就在这个类中写。
如果某个单据要在审批中做业务处理,就参照产品的其他单据的DMO类仿写一个类在自己的单据类型上进行指定,然后在相应的方法中写具体的业务代码。
DMO类的主要几个方法说明如下:
1) checkPass: 流程结束,整个单据审批通过。
2) checkNoPass:流程结束,整个单据审批不通过。
3) checkGoing: 流程运行中,单据审批进行中。
4) checkCommit: 单据提交方法。
5) backNoState:单据弃审方法。
6) backGoing:审批流接口方法:实现逐级弃审时匹配的接口方法。
3.2 后台预警
1.4.36 后台预警插件开发方法
新增加的业务插件类必须继承IBusinessPlugin接口,在implementReturnObject方法中构造自己的预警方法体,需要预警的时候再返回一个非空的P2PAlartMessage对象。
3.3 后台任务
1.4.37 后台任务插件开发方法
新增加的后台任务类必须继承IBackgroundWorkPlugin接口,在executeTask这个方法中添加后台任务的具体逻辑。返回一个字符串类型的任务处理信息。
3.4 消息
1)消息的存储表在pub_workflownote
3.5 错误定位(日志分析)
- 用友 NC客户化开发手册
- 用友nc
- 用友NC开发 相关封装类解释
- 用友NC开发:保存时报错argument type mismatch
- 用友NC环境搭建
- 用友NC学习笔记
- 用友NC简介
- 用友NC单据模板公式
- 用友NC开发本地启动客户端时界面空白问题的解决
- Linux命令手册 - nc
- 用友ERP/NC--张丹(转自用友网站)
- 抛砖引玉:是谁害了 用友NC?
- 用友NC查询引擎另类处理
- 用友U8与NC的区别?
- 用友NC二次开发问题汇总【转】
- 用友NC单据UI基本代码示例
- [转] 用友NC二次开发问题汇总【转】
- 用友NC房地产行业V5.75助力商业地产
- opengl+vs2010+win7环境搭建
- Android地图开发之OpenStreetMap基础教程
- Linux平台基于S3C2440的MPlayer的移植
- Run-Time Check Failure #2 - Stack around the variable 'dlg1' was corrupted.
- UVa 572/POJ 1562/HDU 1241 Oil Deposits(DFS,两种写法)
- 用友 NC客户化开发手册
- 快速安装PHP-Mysql
- 常用查询入口[保持更新ing]{请善待Ctrl+F}
- JSONP跨域访问
- T-SQL循环语句
- 博客开通
- 初学者如何查阅自然语言处理(NLP)领域学术资料
- android sdcard创建使用
- 8G服务器磁盘控制卡识别及Windows 2003驱动制作