金蝶EAS开发笔记(理论篇)
1.界面介绍
1. 新建业务单位,若无需求,默认选用财务组织。
2. 在项目路径下的\metadata\com\kingdee\eas\custom\bill 可改单据名称。
3. 标准:默认先在用户自定义下面建立报表(rpt)、基础资料(basedata)和业务单据(bill),即在业务组别下面建业务单元,然后再在下面建业务组别,最后再建业务单元。总共四层结构。
rpt里面建一个项目名,再下面自建app和client。
4. 规范布局按钮,位于页面的上方,可一键规范布局。
5. 主要的元数据:
1)entity(实体):设计开发视图->app->entity->属性。
有两种类型,钥匙图标和园点图标。前者表示自有属性,后者表示关联属性,类似于数据库中的外键。也可以在属性右边的方法里面,添加自定义的方法。
2)table(数据表):可直接理解为数据库里面的表,在此可以查看对应的字段名称、类型和长度等等。
3)query(查询): 主要就是SQL语句。 在子对象(主对象下面的属性)里面可以选择连接方式,若连接方式为默认类型就相当于于内连接,父对象所有行<---->左连接,子对象所有行<---->右连接。
6. 修改了单据的属性,一定要记得发布业务单元,发布完业务单元之后,接着一定要刷新Java代码。
7.info对象:类似于一般开发中的,POJO对象或者叫entity对象。
8.ListUI和EditUI属于前端页面,ControllerBean.java是负责处理后台的业务逻辑的。前后端所使用的代码不相同。
2.单据
1. 使用钢铁基类后添加组织需要加上的代码:
EditUI编辑界面:
public KDBizPromptBox getMainOrgUnit() {return prmtFICompany;// 主业务组织控件}protected OrgType getMainBizOrgType() {return OrgType.Company;// 组织类型}
ListUI序时簿界面:
protected OrgType getMainBizOrgType() {return OrgType.Company;}protected String getPropertyOfBizOrg(OrgType orgType) {return "FICompany.id";}
2.取值和设值
(1)控件:
获取值:
this.控件名称.getValue或get类型(如getText),
设置值:
this.控件名称.setValue或set类型(如setText)。
(2)分录(kdtEntry):
获取值:
先获取单元格,再定位到列。
this.kdtEntry.getCell(rowIndex, kdtEntry.getColumnIndex("RowName")).getValue(值);
或者
this.kdtEntry.getCell(rowIndex, "RowName").getValue(值);
设置值:
this.kdtEntry.getCell(rowIndex, kdtEntry.getColumnIndex("RowName")).setValue(值);
或者
this.kdtEntry.getCell(rowIndex, "RowName").setValue(值);
3.方法
onload():类加载后调用此方法,在方法里面设置监听事件,设置初始值。操作的是控件。
onshow():绑定控件。
createNewDate(): 在UI页面添加控件后会进入此方法,用于设置默认值。不能在onload()设置默认值,会被覆盖。操作的是对象。使用字段名称。
createNewDetailData():操作分录,也是用来设置默认值。
基本用法:
//此例子为DEP的采购订单
@Override
public IObjectValue createNewDetailData(KDTable arg0) {//获取到控件final KDFormattedTextField rate = (KDFormattedTextField)DEPUtils.findComponetByName(this, "控件名称");PurOrderEntryInfo vo = (PurOrderEntryInfo)super.createNewDetailData(arg0);vo.put("控件名称", rate.getValue());return vo;
}
storeField() : 将控件的值绑定到数据库,方法触发的时机是在保存前、提交前、窗体关闭前。
beforeStoreFields(): 用于绑定前的事件处理。
verifyInput(): 校验数据,方法里面写保存和提交的操作。
4.事件
最常用的就两个事件:editStarted和editStopped。如果是在分录上,则为kdtEntry_editStarted和kdtEntry_editStopped。
还有mouseClicked、properyChange。
添加事件的步骤:在UI界面的事件里面找到对应的事件名称,双击点进去,然后保存事件,将事件的名称复制到相应的Java代码里面
5.监听器
(1)addDataChangeListener:
用法:
控件名称.addDataChangeListener(new DataChangeListener(){@Overridepublic void dataChanged(DataChangeEvent arg0){......}});
(2)addActionListener:
用法:
控件名称.addActionListener(new ActionListener(){@Overridepublic void actionPerformed(ActionEvent e) {......}});
6. F7
F7类型的控件命名为:pk+自定义的控件名称
F7过滤:
EntityViewInfo viewInfo = new EntityViewInfo();//视图
FilterInfo filterInfo = new FilterInfo(); //过滤设置过滤条件
filterInfo.getFilterItems().add(new FilterItemInfo("xxx"='yyyy'));//相当于where1
filterInfo.getFilterItems().add(new FilterItemInfo("zzz"='kkkk'));//相当于where2
new FilterItemInfo("number","11111",CompareType.EQUALS);//比较,相当于苍穹的QFilter
filterInfo.setMaskString("#0 or #1");//将and替换成or,下表从0开始viewInfo.setFilter(filterInfo);
this.控件名称.setEntityViewInfo(viewInfo);
7. 序时簿的常用方法
refreshList:刷新页面
refresh:刷新操作
getSeletedValue:获取单据的id
getSeletedList:获取下标
8.Factory
在app下面的ControlBean.java下面操作数据库,在对应的介入点写代码( _save() 增加 、 _submit 提交、_audit 审核、_unAudit 反审核和 _delete 删除 ),只有要上下文关系,就能调用其它的Factory。
Factory:调用指定的属性,在entity里面查询方法,子类没有去父类查找。
服务端通过工厂获取本地Controller实例:
IProject iproj = ProjectFactory.getLocalInstance(ctx);
客户端通过工厂获取远程Controller实例:
IProject iproj = ProjectFactory.getRemoteInstance();
9.Experience
获取分录的行数:this.kdtEntry.getRowCount()
获取枚举类型的值:this.枚举类型的字段名称.getSelectedIndex(),返回的是int型,需要和自定义的枚举值比较是否相等。
4.常用API类
DbUtil:见在线开发文档。
5.异常处理
EASBIzException:业务异常。
throw new EASBizException(new NumericExceptionSubItem("error","提示信息的内容"));
BOSException:编程时的异常,SQL,空指针......
throw new BOSException(e);
handleException:在前端抛出的异常,在createNewDate方法里面,因为其父类没有抛出异常。
ps:在处理异常时,不能e.printStackTrace(),除非自己确保语句没有异常。
也可以用如下方法,来弹出提示信息:
MsgBox.error("warning", "提示内容", this);
或者
MsgBox.info("warning", "提示内容", this);
不过此方法有局限性。
6.SQL
查询数据:
SelectorItemCollection sic = new SelectorItemCollection();
sic.add("id");
sic.add("name");
XXXXXXFactory.getLocalInstance(ctx).getXXXXXXInfo(new ObjectUuidPK(),sic);
XXXXXXFactory.getLocalInstance(ctx).getXXXXXXInfo("此处填写少了from条件的SQL语句,因为已经确定了表对象");
或者
XXXXXXFactory.getLocalInstance(ctx).getXXXXXXInfo("where name = ");
//过滤
EntityViewInfo viewInfo = new EntityViewInfo();//视图
FilterInfo filterInfo = new FilterInfo(); //过滤
XXXXXXFactory.getLocalInstance(ctx).getXXXXXXCollection(viewInfo);
说明:XXXXXX为自命名的单据名称
7.标准改造(DEP)
用user登录系统,在动态扩展平台高级版。
在实体类里面添加字段,不会在页面上显示出来,适合开发人员。
在元数据校验或元数据检查里面复制PK(全类名),新建Java类,命名为:名称+CTEx。新建的类会自动进入继承的类的子类的onload方法。
标准扩展类:
命名:名称+Ex
以CF开头的列名为自添加的,以F开头的列名为本来就有。
拿到控件名称:
DEPUtils.findComponentByName(this,"控件名称")
获取类型为KDCheckBox的值 :
int xxx = 控件名称.getSelected();
ps:当值为32时, KDCheckBox为勾选状态。
8.WebSocket接口:
添加方法:在entity里面的方法里声明一个方法。
创建接口也类似,但是命名+Facade,然后发布websocket,在runtime文件夹里面打开资源目录,把生成的文件拉到资源目录里面。
localhsot:56898/ormrpc/services,本地的地址,用来查看暴露的接口。部署到服务器后,记得要改成对应订单服务器地址和端口号。
9.手工报表
继承检行分析的包。
_createTempTable方法,得到临时表,查询的列和显示的列要一致。
_query方法(四个参数),查询临时表。
新建用户页面,自建一个UI界面。
自定义弹窗:
说明:UrgentMaterial和Cause为分录的某一个列名,UrgentMaterialsUI为自定义的UI界面。aaaa为自定义的key值,get和put时,名称要保持一致。
int rowIndex = e.getRowIndex();
int colIndex = e.getColIndex();
if(colIndex == kdtEntry.getColumnIndex("UrgentMaterial")){//判断单元格是否为空ICell cell = this.kdtEntry.getCell(rowIndex,"UrgentMaterial");if(cell != null){//判断列是否为空Boolean value = (Boolean)this.kdtEntry.getCell(rowIndex,"UrgentMaterial").getValue();if(value){UIContext context = new UIContext(ui);context.put("aa","bb");//可往 UIContext 类的实例里 put 参数,这些参数可以带到被打开的界面上IUIWindow uiWindow = null;try {uiWindow = UIFactory.createUIFactory(UIFactoryName.MODEL).create(com.kingdee.eas.custom.bill.client.UrgentMaterialsUI.class.getName(), context, null, OprtState.VIEW);uiWindow.show();} catch (UIException uException) {handUIException(uException);}this.kdtEntry.getCell(rowIndex, "Cause").setValue(uiWindow.getUIObject().getUIContext().get("aaaa"));}else {this.kdtEntry.getCell(rowIndex, "Cause").setValue("");}}}
自定义弹窗的Java代码:
@Override
public void ConfirmButton_mouseClicked(java.awt.event.MouseEvent e) {getUIContext().put("aaaa", this.kDTextArea.getText());//获取文本里面的内容this.disposeUIWindow();//关闭窗体
}
10.修改客户端地址
参考路径如上图所示,更改配置文件里面的服务器地址即可,适用于IP地址发生改变时。
11.常用快捷键
ctrl + e:查看详细的报错信息。
alt + shift + d:打开debug panel 加上 ctrl + f 查找结点,查看返回值类型。
ctrl + shift + q :分析执行器。
ctrl + alt + ] :选中要查询的SQL语句,点击录制,暂停,然后就能SQL查看SQL的运行时间。
12.查询分析器
删除查询分析器里面的内容只要删除下面这个文件里面的内容即可:
金蝶EAS开发笔记(理论篇)相关推荐
- 金蝶EAS开发 第二弹:了解开发工具与基本使用(下)
承接上一篇:金蝶EAS开发 第一弹:了解开发工具与基本使用(上) ,我们继续! 3.3. client目录是客户端相关的:里面可以配置各种功能的UI: 3.3.1. UI配置文件: 3.3.2. UI ...
- 微信小程序开发笔记 进阶篇④——getPhoneNumber 获取用户手机号码(小程序云)
文章目录 一.前言 二.前端代码wxml 三.前端代码js 四.云函数 五.程序流程 一.前言 微信小程序开发笔记--导读 大部分微信小程序开发者都会有这样的需求:获取小程序用户的手机号码. 但是,因 ...
- 微信小程序开发笔记 进阶篇⑤——getPhoneNumber 获取用户手机号码(基础库 2.21.2 之前)
文章目录 一.前言 二.前端代码wxml 三.前端代码js 四.后端java 五.程序流程 六.参考 一.前言 微信小程序开发笔记--导读 大部分微信小程序开发者都会有这样的需求:获取小程序用户的手机 ...
- Google Map 开发笔记——基础篇(Javascript )
Google Map 开发笔记--基础篇 说明: 一.使用入门: 1.在您需要显示地图的 html 页面嵌入这段 script 2.地图 DOM 元素 3.初始化地图 二.地图画点.线.面 1.标记( ...
- 微信小程序开发笔记 进阶篇⑥——getPhoneNumber 获取用户手机号码(基础库 2.21.2 之后)
文章目录 一.前言 二.前端代码wxml 三.前端代码js 四.后端java 五.程序流程 六.参考 一.前言 微信小程序开发笔记--导读 大部分微信小程序开发者都会有这样的需求:获取小程序用户的手机 ...
- 【QT开发笔记-基础篇】| 第二章 常用控件 | 2.12 表格控件 QTableWidget
本节对应的视频讲解:B_站_链_接 QTableWidget 是 Qt 中的表格控件,可以行列的形式来展示数据 1. 属性和方法 QTableWidget 有很多属性和方法,完整的可查看帮助文档. 在 ...
- 【 持续更新 】Android开发笔记汇总篇,爬各种坑,敲高效代码,各种奇难杂症,有您要治的病 。
[持续更新]Android开发笔记汇总篇,爬各种坑,敲高效代码,各种奇难杂症,有您要治的病 . 一.AndroidStudio 开发工具的那些事 . 问题 1: AndroidStudio2.2以上在 ...
- AIR移动(Starling)开发笔记基础篇
AIR移动(Starling)开发笔记基础篇 ---------kiddyPs:文档写的不是很好,欢迎指正和扩展 Starling相关 自定义移动动画 A.自定义函数 var tw:Tween = n ...
- 金蝶EAS开发 第一弹:了解开发工具与基本使用(上)
毕业前夕,我来到了一家物流公司实习,为本公司做系统.我被分配的是用金蝶做财务系统的二次开发,没有文档的帮助真的让我头皮发麻,还好同事很热心,一直在帮助我,不然要上手这玩意还真的很有难度.入职已经两个星 ...
最新文章
- SAP MM 采购发票上的价格与采购订单上价格的差异
- DIV+CSS如何设置字体间距
- Linux复习资料(一)、VM虚拟机安装教程
- Allegro 关闭与显示网络飞线
- 编译内核,busybox,dropbear组装linux小系统
- windows mobile开发循序渐进(6)windows mobile device center 使用问题
- php快速学习方法,php快速入门学习方法
- 基于Docker搭建GitLab代码管理
- 聊天室程序python_Python聊天室程序(基础版)
- 联想,寻找下一个时代的联想
- 程序转换实验程序流程图_智能化实验室 | # 自动智能化实验室的5大系统 #
- 瑞萨RX23T开发板一键设置库文件说明
- python中怎么取小数点后两位函数_python中round函数保留两位小数的方法
- h2数据库文件.mv.db
- CCF GitLink开源编程夏令营 · 学生开放报名!
- 友盟社会化分享之判断是否安装了QQ、微信、新浪微博客户端
- 911报警电话数据分析
- 群晖挂载玩客云网络磁盘
- 日活100wAPP一天的广告收益有多少?
- PMML 预测模型教程