NC客户化开发手册
本手册是北京齐力创辉科技发展有限公司(TTS)内部培训资料,只限于公司内部应用,任何人未经过书面许可不得扩大本教程的使用范围。严禁任何非法传播、翻印或仿制,违者必究!
©本手册的著作权属于北京齐力创辉科技发展有限公司
目录
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 类、方法注释
类、方法开始必须要加上注释,标注方法或者类的用途、作者、时间。如果是方法注释必须加上方法的参数说明(注释每个参数代表的实际意义),
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 代码中异常处理
代码中异常处理必须遵循NC平台的异常处理,禁止在自己写的方法中进行异常的扑捉、打印异常信息,如果在自己的代码中必须做异常的处理的话就进行异常的throw,由最外层的异常捕获机制进行捕获和用户的交互。
1.4.1 SVN使用规范
1) SVN服务器的使用规范,每个人必须使用自己的用户,每天早上上班时进行代码的更新,每天下班前对已经完工的功能进行代码的提交。
2) 代码在提交前必须先进行更新,预防自己本地的代码覆盖他人并发修改的代码。
1.4.2 数据库服务器使用规范
在还原用户数据库到服务器上时,如果客户的数据库文件超过5G,必须建立单独的实例。如果不超过5G就可以还原到公用的orcl实例中。
F 卡片
UI端:getBillCardPanelWrapper().getBillCardPanel()或者getBillCardPanel()
EventHandler:getBillCardPanelWrapper().getBillCardPanel()
F 列表
UI端:getBillCardPanelWrapper().getBillListPanel()或者getBillListPanel()
EventHandler:getBillCardPanelWrapper().getBillListPanel()
getBillManageUI().isListPanelSelected()
getBillUI().setBillOperate(intnewBillOperate);
getBillUI().getBillOperate()
getBillTreeCardUI().getBillTreeSelectNode();
getBillTreeCardUI().getBillTreeSelectNode().getData();
isSingleDetail() true:为单表体;false:为单表头;(在校验类里)
((nc.ui.pub.bill.BillCardLayout)getBillCardPanel().getLayout()).setHeadScale(80);
F 显示状态:getBillCardPanel().getBodyPanel("").setVisible(false);
F 可用状态:getBillCardPanel().getBillModel("subbillb").setEnabled(false);
F 获取当前页签编码:getBillCardPanelWrapper().getBillCardPanel().getCurrentBodyTableCode()
nc.vo.pub.bill.BillTempletBodyVO[] tbodyvos =
(nc.vo.pub.bill.BillTempletBodyVO[]) billCardPanel.getTempletData().getChildrenVO();
1.4.11 列表启用表头多选对话框
getBillListPanel().setParentMultiSelect(true);
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.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);
取值
F getBillCardPanel().getHeadItem("strKey").getValueObject()
F 表头VO.getAttributeValue('"字段名");
赋值
F 表头VO.setAttributeValue("字段名" ,值); 聚合VO.setHeaderValue("字段名" ,值);
F getBillCardPanel().setHeadItem("字段名" ,值);
获取
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();
getBillCardPanel().getBodyItem("字段名").setEdit(true);
getBillCardPanel().hideBodyTableCol("bodyitem");
代码设置卡片状态下表头和表体某一字段的编辑状态:
// 表头
getBillCardPanel().getHeadItem("").setEdit(false);
// 表体
getBillCardPanel().getBillModel().setCellEditable(row,"nqichunum",false);
// 先获取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位,并“四舍五入”
表头字段:
getBillCardPanel().getHeadItem("jobname").getComponent().requestFocus()
表体字段:
其中参数mm和ii是表体的行和列
getBillCardPanel().getBillTable().setColumnSelectionInterval(m,m); getBillCardPanel().getBillTable().setRowSelectionInterval(i,i);
F getBillCardPanel().execHeadFormula(formula),其他方法请参照getBillCardPanel().或getBillListPanel()中的针对公式的方法。
F 参照红皮书《NCV5-公式技术红皮书》
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。
F getBillCardPanel().getBillTable().setSortEnabled(false);
F 卡片和列表下的排序方法(TRUE:升序;FALSE:降序)
列表:getBillListWrapper().getBillListPanel().getBodyBillModel().setSortColumn("vdef21");
卡片:getBillCardPanelWrapper().getBillCardPanel().getBillModel().sortByColumn("reserve6", true);
F 锁定页面排序:
getBillTable().setSortEnabled(false);
F getBillCardPanelWrapper().getBillCardPanel().getBillModel().setRowEditState(true)
F 设置表格为行不可编辑状态:
getBillCardPanelWrapper().getBillCardPanel().getBillModel().setNotEditAllowedRows(rows);
rows是一个INT类型的数组
F 终止编辑getBillCardPanel().stopEditing();
BillCardPanel card = getBillCardPanel();
card.getBillTable("uap_quotarev_b").selectAll();
//设置列表多选框
getBillListPanel().setMultiSelect(true);
//设置列表Ctrl、Shift多选
getBillListWrapper().getBillListPanel().getHeadTable().
setSelectionMode(javax.swing.ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
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);
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();
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);
getBillCardPanelWrapper().getBillCardPanel().dataNotNullValidate()
在UI类中:showWarningMessage(“提示消息”);showHintMessage(“状态栏上的消息”);
在EventHandler类中:getBillUI().showErrorMessage(“提示消息”);
判断是不是对表体进行的编辑: e.getPos()==IBillItem.BODY或者e.getPos()==0
判断是不是对表体进行的编辑: e.getPos()==IBillItem.HEAD或者e.getPos()==1
判断是对单据上哪个字段进行的编辑: “字段名“.equals(e.getKey());
BillCardPanel.setBodyMenuShow(false);
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:审批流接口方法:实现逐级弃审时匹配的接口方法。
1.4.36 后台预警插件开发方法
新增加的业务插件类必须继承IBusinessPlugin接口,在implementReturnObject方法中构造自己的预警方法体,需要预警的时候再返回一个非空的P2PAlartMessage对象。
1.4.37 后台任务插件开发方法
新增加的后台任务类必须继承IBackgroundWorkPlugin接口,在executeTask这个方法中添加后台任务的具体逻辑。返回一个字符串类型的任务处理信息。
1)消息的存储表在pub_workflownote
相关推荐
NC开发常用代码,调用接口,弹出询问窗口,判断模板状态,打开另一个节点,可以自行选择弹窗的样式,当前选中树的数据,前界面显示的子表名称.......
- **详细说明**:在Eclipse中配置NC开发环境,包括安装必要的插件(如用友NC开发工具包),设置项目结构,配置编译路径等。这些步骤有助于提高开发效率,便于后续代码编写与调试。 - **1.1.5 产品参数,档案初始化...
NC开发中的一些基本概念**:讲解了NC开发过程中常用的概念,如数据模型、界面组件等。 - **2.1.3. NC的开发模型**:介绍了NC支持的几种不同的开发模式,例如MVC(Model-View-Controller)模式。 - **2.1.4. 开发...
- **知识点**:MDE插件是用友NC开发的重要工具之一,主要用于辅助开发过程中的一些复杂操作。 - **实践步骤**: 1. 下载MDE插件; 2. 在Eclipse中安装插件; 3. 配置插件参数。 - **2.2.2 Eclipse中JRE设置** ...
根据提供的文档内容,我们可以深入探讨用友UAP平台下的NC65模式化开发技术的关键知识点。这主要包括UI模式化的基本概念、模式化的必要性、如何实现模式化开发、UI控件与布局的设计方法以及UI逻辑控制等内容。 ### ...
4. **模板支持**:提供常用的代码模板,一键生成常见的业务逻辑代码,提高开发速度。 5. **集成文档**:可能包含对用友NCC NC API的在线文档集成,方便开发者随时查阅,减少查找资料的时间。 使用这个插件,开发者...
"用友NC5X 常用表用途资料"这一主题深入探讨了用友NC(Nucleus Commerce)系统中的核心数据表及其功能,这对于系统管理员、开发者以及业务分析师而言,是不可或缺的知识点。下面,我们将详细解析这些表格的功能和...
- 介绍NC开发中常用的数据库操作类。 - 解释这些类的功能和作用。 - **JdbcSession几种参数语法** - 介绍JdbcSession类的使用方法。 - 展示如何设置不同的参数来优化查询性能。 - **结果集合操作** - 学习...
本文将详细介绍NC65开发常见API的使用场景、方法和代码实现。 一、获取选中的表体行数、列数等内容 在NC65开发中,经常需要获取当前选中的表体行数、列数等内容。这可以通过使用`getSelectedRow()`和`...
本节介绍了NC开发的一些基本概念,如组件、服务、模型等,这些都是理解NC开发框架的基础。 1. **组件**:NC中的组件是指能够独立运行的最小单元,它可以是一个服务或一组相关的功能。 2. **服务**:服务是组件对外...
【标题解析】 ...综上所述,"NC 转 dxf 工具"是一个实用的软件工具,能够帮助用户将CNC编程中的G代码转换成CAD设计常用的DXF格式,便于在不同软件之间进行数据交互和视觉检查,从而提升设计和制造流程的效率。
2. **编程语言基础**:书中的"java"可能指的是Java语言,它是NC开发的常用语言之一。Java具有跨平台性,强大的类库支持,尤其适合大规模的网络应用开发。学习Java的基本语法、面向对象编程、异常处理以及多线程是...
- **辅助开发工具**:介绍了几款常用的辅助开发工具,如BO生成和部署工具、代码生成工具CodeSeed等,以提高开发效率。 - **代码生成工具CodeSeed**:特别讲解了CodeSeed的使用方法,它是用友提供的一款用于自动生成...
- **2.2.1 加入NC开发所需的MDE插件** - MDE(Model Driven Engineering)插件是NC-UAP开发的关键工具之一。 - 介绍如何获取并安装MDE插件。 - 展示MDE插件的主要功能及其在开发过程中的作用。 - **2.2.2 ...
- **2.2.1 加入NC开发所需的MDE插件** - 介绍MDE插件的功能及其对开发的重要性。 - 提供获取MDE插件的途径,并指导如何将其集成到开发环境中。 - **2.2.2 Eclipse中JRE设置** - 说明Java运行环境(JRE)的设置...
- **VSCode(Visual Studio Code)**:一个轻量级但功能强大的源代码编辑器,支持语法高亮、代码补全、Git控制等特性,是前端开发者的常用开发环境。 - **Node.js**:一个基于Chrome V8引擎的JavaScript运行时环境,...
在软件开发领域,"NC"通常指的是Non-Clone方法,这是一个与代码复用相关的概念。NC方法是指那些在代码库中没有找到相似或可复用代码片段的方法,它们是独一无二的,不含有任何重复的代码结构。在进行代码分析、优化...
不熟悉系统内部类间的关系和接口规范,以及开发中的统一规则,可能会影响开发效率和代码质量。解决这些问题需要持续学习和实践,以及团队间的良好沟通。 #### 四、NC系统常用查询表 - `Pub_query_templet`:查询...
1. **无需安装APP**:移动审批H5应用基于web网页开发,用户可以直接通过浏览器点击链接进行审批,简化了使用过程,降低了对设备存储空间的需求。 2. **全面覆盖审批类型**:支持审批用友NC系统中的所有类型单据,...
### NCV6开发常用知识与功能代码实现 #### 一、网络编程与域名解析 **知识点**: 在网络编程中,经常需要通过域名来获取其对应的IP地址,这涉及到DNS(Domain Name System)域名解析的过程。 **示例代码**: 通过...