本文是关于金蝶云星空BOS中级课-App插件开发的介绍,包括课程回看地址、PPT课件下载链接、案例代码下载、以及直播答疑汇总。答疑内容涵盖插件部署、性能影响、架构设计、事务处理、开发环境设置、权限验证、批量处理、数据库操作优化、事务隔离级别、Web服务安全、代码开发规范等多个方面,详细解答了学员在插件开发过程中遇到的问题。
一、课程主题:金蝶云星空BOS中级课-App插件开发
二、回看地址:
https://vip.kingdee.com/school/liveCourse/67977383596474368
三、PPT课件:
https://vip.kingdee.com/school/69180211434048000
四、案例代码(可在文末附件压缩包进行下载)
五、直播答疑汇总(部分问题已在直播答疑环节进行解答,文字简答版可参考以下答复)
1、 写插件,除了将插件编译成DLL文件,并注册后,还是更新什么文件到服务器吗?
答复:需要将编译的插件DLL文件放在服务器的website/bin目录下,重启IIS以生效。也推荐使用我们的快速启动工具:https://vip.kingdee.com/article/39960
2、检验器弹出后,如果选是,还会在执行一遍beforesave这个是不是会影响性能?
答复:有一定的性能影响,您可以在插件代码中稍加控制,比如填充主键,第一次调用时填充完后,第二次再调用时可以直接跳过。
3、提问:插件里面能支持IOC吗?
答复:IOC是一种设计模式 与插件无关。
4、APP层是手机应用吗?
答复:APP层不是手机应用,而是星空系统架构的分层,展示层、Web层、App层、DB层。
5、如果app不是移动端的话,我写的插件在移动端还起作用吗?
答复:起作用,移动端在进行数据交互时也会调用APP层的服务,进而执行APP插件。
6、交互和验证器有啥区别?
答复:
(1)执行时机不同:校验器在操作开始前执行,而交互异常可以在校验器,表单服务,插件事件中发起。
(2)影响范围不同:校验器校验失败,是正常退出代码逻辑,而交互异常,其本质上还是一种异常,会立即中断当前代码块的执行。
(3)交互界面可编程性不同:校验器只能按指定格式输出交互内容,交互异常可以输出完全自定义的复杂交互界面。
7、事务失败,实体类不会自动回滚到初始状态吗?
答复:不会,事务只解决了数据库的脏数据问题。但是内存中的实体对象有可能在插件内被修改了,这个需要通过rollback事件里写反向值来还原到初始状态。
8、二开插件必须本地电脑安装整个k3cloud产品么
答复:如果只是开发插件,引用对应版本的K3Cloud组件即可。如果还需要调试插件,就必须安装K3CLoud产品,或者使用协同开发平台自动搭建对应版本的开发环境。
9、现在得架构支持有内置 IOC 支持吗?比如我要获取自己定义得一些业务服务组件,需要解决依赖关系?
答复:目前尚未提供件支持。
10、SubmitService 好像不校验用户。ISubmitService 这个好像校验用户?例如administrator执行
答复:Submit操作会验权,但是SubmitService不验权。
11、事务超时的时间是多长时间?
答复:默认10分钟。
12、用户操作不保存,直接提交,保存中的插件会执行吗?
答复:直接提交时,如果Model中的数据包有发生变化,会自动调用保存操作,此时保存操作绑定的服务插件会执行。
13、刚刚说可以不用密码直接调用 web service?这样安全吗?
答复:安全。因为是从执行计划中发起的调用,本质上就是程序集调用,执行计划以administrator身份运行在应用服务器上。
14、一个单据同时对一个接口写几个DDL,调用有先后顺序吗?
答复:插件调用没有严格的先后顺序,缺省按照其在元数据中对应的插件集合中的顺序执行。
15、(1)接口里对批量个单个处理是否有区别,如何区别,课程开始时,提单参数设置批量处理,这个怎么处理?(2)不同的操作使用同一个插件,代码里如何区分不同操作?
答复:
(1)有区别,批量处理性能更好。PrepareOperationServiceOption事件的SurportBatchTransaction参数可以设置是否启用批量处理。
(2)在插件事件中,访问this.FormOperation.Operation属性可以知道当时执行的是哪个操作。
16、老师,数据库读取操作不能在循环里执行,那么如果列表中选择了100条数据,每一条数据都需要执行数据库读取操作,那应该怎么写?
答复:可以将100次查询,通过查询条件合并的方式,合并为一次查询。
17、事物requireNew是会回滚自身创建的事物,而不受环境事物影响吧
答复:requireNew可以理解成开启一个全新的事务块,不受环境事务的影响。
18、webservice dll 里有所有的webapi接口吗?
答复:有的。
19、代码前面大概10行 using kingdee.bos.xxxx,这些是元数据嘛?怎么知道要调用哪些?
答复:这些是代码中使用到的类所在的命名空间,这些不是元数据,通常您需要提前知道您要使用的类所在的程序集和命名空间,并在代码最上面提前引入命名空间,否则会编译失败。
20、协同开发是不是可以直接用公有云的管理中心?
答复:不可以,公有云的管理中心未开放给外网访问。
21、问个其他问题:上下游单据的关联关系是记录在_LK表吧,多级下推的情况是否要一级一级关联找到目的单:比如销售订单->采购申请->采购订单->采购入库,找销售订单对应的采购入库是否需要一级一级关联对应的LK查找?
答复:lk表只能查询到直接上下关联关系, 所有关联关系都记录在t_bf_instanceEntry表。
22、老师,请问单据转换,复制一个单据转换,不启动原有插件,目标单选原单,对目标单流程单的流程有影响?
答复:只要插件不干预关联数据包的,就不会有影响。
示例代码.rar(19.93KB)
推荐阅读