`
sanyecao2314
  • 浏览: 135755 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

NC开发常用代码

 
阅读更多

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.2 VO的获取和赋值及更新 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实例中。

第二章 基础篇

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对象,然后再调用EventHandlergetBufferData()获取缓存数据。

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 通过VOclassName

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);   billVOAggregatedValueObject类型

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()

表体字段:

其中参数mmii是表体的行和列

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 获取列表多条记录的方法

1int[] selectRows = ((BillManageUI) getBillUI()).getBillListPanel().getHeadTable().getSelectedRows();

2、 ((BillManageUI) getBillUI()).getBillListPanel().getHeadBillModel().getBodySelectedVOs(DemoYsHVO.class.getName());

其中,方法1只在CtrlShift多选时能取到多条记录的行号。方法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);

//设置列表CtrlShift多选

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 后台:

1nc.bs.pub.billcodemanage.BillcodeGenerater gene  = new nc.bs.pub.billcodemanage.BillcodeGenerater ();String billcode  = gene.getBillCode (单据类型,公司ID,null,null)

2String 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.setBodyMenuShowfalse);

 

第三章 高级篇

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开发常用代码.txt

    NC开发常用代码,调用接口,弹出询问窗口,判断模板状态,打开另一个节点,可以自行选择弹窗的样式,当前选中树的数据,前界面显示的子表名称.......

    用友NC二次开发指导手册

    - **详细说明**:在Eclipse中配置NC开发环境,包括安装必要的插件(如用友NC开发工具包),设置项目结构,配置编译路径等。这些步骤有助于提高开发效率,便于后续代码编写与调试。 - **1.1.5 产品参数,档案初始化...

    NC二次开发指南

    NC开发中的一些基本概念**:讲解了NC开发过程中常用的概念,如数据模型、界面组件等。 - **2.1.3. NC的开发模型**:介绍了NC支持的几种不同的开发模式,例如MVC(Model-View-Controller)模式。 - **2.1.4. 开发...

    用友内部NC二次开发培训文档

    - **知识点**:MDE插件是用友NC开发的重要工具之一,主要用于辅助开发过程中的一些复杂操作。 - **实践步骤**: 1. 下载MDE插件; 2. 在Eclipse中安装插件; 3. 配置插件参数。 - **2.2.2 Eclipse中JRE设置** ...

    用友uap开发nc65模式化开发详细文档

    根据提供的文档内容,我们可以深入探讨用友UAP平台下的NC65模式化开发技术的关键知识点。这主要包括UI模式化的基本概念、模式化的必要性、如何实现模式化开发、UI控件与布局的设计方法以及UI逻辑控制等内容。 ### ...

    用友NCC NC bip二开idea开发插件

    4. **模板支持**:提供常用的代码模板,一键生成常见的业务逻辑代码,提高开发速度。 5. **集成文档**:可能包含对用友NCC NC API的在线文档集成,方便开发者随时查阅,减少查找资料的时间。 使用这个插件,开发者...

    用友NC常用表

    "用友NC5X 常用表用途资料"这一主题深入探讨了用友NC(Nucleus Commerce)系统中的核心数据表及其功能,这对于系统管理员、开发者以及业务分析师而言,是不可或缺的知识点。下面,我们将详细解析这些表格的功能和...

    NC客户化开发进阶培训教程

    - 介绍NC开发中常用的数据库操作类。 - 解释这些类的功能和作用。 - **JdbcSession几种参数语法** - 介绍JdbcSession类的使用方法。 - 展示如何设置不同的参数来优化查询性能。 - **结果集合操作** - 学习...

    NC65开发常见API(内含代码 适合新手)

    本文将详细介绍NC65开发常见API的使用场景、方法和代码实现。 一、获取选中的表体行数、列数等内容 在NC65开发中,经常需要获取当前选中的表体行数、列数等内容。这可以通过使用`getSelectedRow()`和`...

    NC客户化开发全书(第三版)-nc56.doc

    本节介绍了NC开发的一些基本概念,如组件、服务、模型等,这些都是理解NC开发框架的基础。 1. **组件**:NC中的组件是指能够独立运行的最小单元,它可以是一个服务或一组相关的功能。 2. **服务**:服务是组件对外...

    NC 转 dxf 工具

    【标题解析】 ...综上所述,"NC 转 dxf 工具"是一个实用的软件工具,能够帮助用户将CNC编程中的G代码转换成CAD设计常用的DXF格式,便于在不同软件之间进行数据交互和视觉检查,从而提升设计和制造流程的效率。

    NC开发指南(入门到精通).pdf.zip

    2. **编程语言基础**:书中的"java"可能指的是Java语言,它是NC开发的常用语言之一。Java具有跨平台性,强大的类库支持,尤其适合大规模的网络应用开发。学习Java的基本语法、面向对象编程、异常处理以及多线程是...

    用友集团ERP客户化开发系列丛书-NC全册.pdf

    - **辅助开发工具**:介绍了几款常用的辅助开发工具,如BO生成和部署工具、代码生成工具CodeSeed等,以提高开发效率。 - **代码生成工具CodeSeed**:特别讲解了CodeSeed的使用方法,它是用友提供的一款用于自动生成...

    NC-UAP客户化开发培训实例教程V5.X

    - **2.2.1 加入NC开发所需的MDE插件** - MDE(Model Driven Engineering)插件是NC-UAP开发的关键工具之一。 - 介绍如何获取并安装MDE插件。 - 展示MDE插件的主要功能及其在开发过程中的作用。 - **2.2.2 ...

    用友NC客开人员培训专用教程最全教程

    - **2.2.1 加入NC开发所需的MDE插件** - 介绍MDE插件的功能及其对开发的重要性。 - 提供获取MDE插件的途径,并指导如何将其集成到开发环境中。 - **2.2.2 Eclipse中JRE设置** - 说明Java运行环境(JRE)的设置...

    2019年12月份培训资料--NCCloud全流程开发体系(1).pdf

    - **VSCode(Visual Studio Code)**:一个轻量级但功能强大的源代码编辑器,支持语法高亮、代码补全、Git控制等特性,是前端开发者的常用开发环境。 - **Node.js**:一个基于Chrome V8引擎的JavaScript运行时环境,...

    NC 方法总结

    在软件开发领域,"NC"通常指的是Non-Clone方法,这是一个与代码复用相关的概念。NC方法是指那些在代码库中没有找到相似或可复用代码片段的方法,它们是独一无二的,不含有任何重复的代码结构。在进行代码分析、优化...

    nc单据开发

    不熟悉系统内部类间的关系和接口规范,以及开发中的统一规则,可能会影响开发效率和代码质量。解决这些问题需要持续学习和实践,以及团队间的良好沟通。 #### 四、NC系统常用查询表 - `Pub_query_templet`:查询...

    用友NC移动审批,NC待办集成,NCC移动审批

    1. **无需安装APP**:移动审批H5应用基于web网页开发,用户可以直接通过浏览器点击链接进行审批,简化了使用过程,降低了对设备存储空间的需求。 2. **全面覆盖审批类型**:支持审批用友NC系统中的所有类型单据,...

    NCV6开发常用知识与功能代码实现

    ### NCV6开发常用知识与功能代码实现 #### 一、网络编程与域名解析 **知识点**: 在网络编程中,经常需要通过域名来获取其对应的IP地址,这涉及到DNS(Domain Name System)域名解析的过程。 **示例代码**: 通过...

Global site tag (gtag.js) - Google Analytics