金蝶云苍穹技术点

技术点


一.页面开发

1.单据设计

基于动态表单,继承了动态表单的全部特性;
增加了数据存储、查询功能;
预置编码、组织等常用字段,预置新增、保存、删除等操作,自带表单、列表、移动表单、移动列表框架逻辑;
一般用于保存业务流水数据等场景。

插件基类 : AbstractBillPlugIn

视图模型 : 接口 IBillView 实现类 BillView

数据模型 : IBillModel -> BillModel

主实体模型 BillEntityType,派生自动态表单主实体模型MainEntityType,增加了单据特别属性:

2.基础资料设计

基础资料实际上是一种特殊的单据,是在F7中能够引用的企业基本资料,常见的物料、币别、科目都是基础资料的典型代表。
基于单据,继承了动态表单、单据的全部特性;
能以一个编码代表某个业务对象,数据能作为企业的基础资料被其他表单引用;
基础资料也是一种单据,预置编码、名称、组织等常用字段,预置新增、保存、删除等操作,自带表单、列表、移动表单、移动列表框架逻辑;
带组织的基础资料模板支持按组织进行基础资料管控;
不带组织的基础资料模板,无需按组织隔离,无需进行基础资料管控。

插件基类 : AbstractBasePlugIn

数据模型 : IBaseModel,派生自单据界面数据模型接口IBillModel。

3.列表设计

以表格列表形式展示单据的数据。很多属性和单据上是一样的列表中特有的属性有:
此处分为两种形式
列表设计器,列表的映射实体是确定的,就是当前的单据实体,不需要配置单据实体和字段映射关系。
单据列表控件,表单中使用列表,需要配置单据实体和字段映射关系。

插件基类 : AbstractListPlugin

视图模型 :

表单视图模型IFormView:据此访问表单各种信息;
列表视图模型IListView:据此访问单据列表控件的各种信息。

数据模型 :

表单数据模型IDataModel:据此访问列表控件所在的表单数据,在动态表单章节介绍:
列表界面,除了单据列表控件,还可以增加自定义字段,需通过表单数据模型IDataModel访问这些自定义字段的值;
列表数据模型IListModel:据此访问单据列表控件中的数据。

4.动态表单设计

动态表单是一种基本的页面单据类型,能提供最高灵活度、同时也是最高代码的开发模板,是诸多其他类型页面单据的基础模板。
与单据、基础资料等业务单据的区别在于:
数据存储上,单据和基础资料提供数据的存储与查询功能,而动态表单不提供直接的数据库存储操作,需要通过插件自行完成存储和查询。
业务使用上,单据和基础资料有特定的业务场景与实际含义,而动态表单常用来做弹框等个性化页面。事实上,作为其他页面类型的扩展基础,动态表单适用于一切不适用于其他页面类型的场景。

插件基类 : AbstractFormPlugin

视图模型 : 接口 IFormView 实现类 FormView

数据模型 :

1.数据模型接口/实现类 IDataModel FormDataModel
2.主实体模型 getDataEntityType,获取运行时表单实体元数据对象,又称为主实体模型;通过表单主实体模型,可以或者界面上包含了那些单据体、字段
3.数据包:
①createNewData 根据表单主实体模型,创建表单新的数据包,字段填写好默认值
②getDataEntity 获取表单数据包

在这里插入图片描述
在这里插入图片描述

5.移动页面(移动表单,移动列表)

移动端页面为了适应在移动端展示。

一.移动端表单界面插件:

1.插件基类 : AbstractMobFormPlugin
2.视图模型 : IMobileView -> MobileFormView
3.数据模型 :
1.数据模型接口/实现类 IDataModel FormDataModel
2.主实体模型 getDataEntityType,获取运行时表单实体元数据对象,又称为主实体模型;通过表单主实体模型,可以或者界面上包含了那些单据体、字段
3.数据包:
①createNewData 根据表单主实体模型,创建表单新的数据包,字段填写好默认值
②getDataEntity 获取表单数据包

二.移动端基础资料插件:

1.插件基类 : AbstractMobBasePlugIn
2.数据模型 : IBaseModel,派生自单据界面数据模型接口IBillModel。

三.移动端单据插件

1.插件基类 : AbstractMobBillPlugIn
2.视图模型 : IMobileBillView-> MobileBillView
3.数据模型 : IBillModel -> BillModel

四.移动端单据列表插件

1.插件基类 : AbstractMobListPlugin
2.视图模型 : IMobileListView
3.数据模型 :
表单数据模型IDataModel:据此访问列表控件所在的表单数据,在动态表单章节介绍:
列表界面,除了单据列表控件,还可以增加自定义字段,需通过表单数据模型IDataModel访问这些自定义字段的值;
列表数据模型IListModel:据此访问单据列表控件中的数据

五.单据操作插件

插件基类 AbstractOperationServicePlugIn

六.单据转换插件

插件基类 AbstractConvertPlugIn

七.打印插件

插件基类 AbstractPrintPlugin

八.单据反写插件

插件基类 AbstractWriteBackPlugIn

9.工作流插件

插件基类 IWorkflowPlugin

二.插件开发

1.表单视图模型、控件编程模型

插件可以通过系统封装的视图模型接口IFormView,间接的访问、控制前端界面,通过this.getView()方法,获取表单的视图模型接口实例;
通过系统封装的各种控件代理对象,间接的访问、控制前端界面上的控件,通过this.getView().getControl(String key)方法,获取到控件编程模型实例。

2.表单数据模型

界面显示–在客户端浏览器或者移动端,
在服务端,系统封装了视图模型及控件编程模型来间接控制前端界面及前端控件;
数据存储–在服务端,在服务端,系统封装了数据模型,来控制界面上的数据;

表单的数据模型,提供各种方法访问界面数据,并且持有:

主实体模型:MainEntityType,表单运行时元数据对象,包含:

	子实体:EntityType,对应单据体、子单据体等;

	属性:DynamicProperty,对应字段;

	界面数据包:DynamicObject,基于主实体模型构建的一个数据字典,存储单据体、字段值

3. 确定应用场景,选择插件基类

根据 业务对象类型及应用场景,选择对应插件基类

4.确定事件源与控件

没有交互界面的应用场景(如单据操作、单据转换、关联反写、生产凭证等),不会与用户发生交互,其插件事件是由服务引擎按顺序触发的。这些应用场景,不需要关注事件源、控件;只需要根据业务需求,捕获合适的插件事件即可。

表单、控件、字段等事件源

5.响应(捕捉)插件事件

无交互界面的场景

package kd.bos.metadata.botp;
 
import kd.bos.entity.plugin.AbstractOperationServicePlugIn;
import kd.bos.entity.plugin.args.BeforeOperationArgs;
 
public class WriteBackRuleOpPlug extends AbstractOperationServicePlugIn {
    
    
    @Override
    public void beforeExecuteOperationTransaction(BeforeOperationArgs e) {
    
    
        // TODO : 在此添加业务逻辑
    }
}

插件基类AbstractOperationServicePlugIn已经实现业务操作插件接口,插件直接重写需要响应的事件方法即可。

有交互界面的场景

有交互界面的应用场景,插件基类实现了表单界面支持的插件接口,但没有实现各种控件的插件接口。如果只是要捕获表单界面事件,则扩展插件基类,重写表单事件方法即可。

如果要捕获各种控件事件,则需要:

在插件类定义,实现控件支持的插件事件接口,例如树形控件支持的节点勾选插件事件接口TreeNodeCheckListener;(实现接口)

实现控件的插件事件接口中的方法,完成事件的捕捉;(实现接口方法)

在表单界面插件registerListener事件,向控件实例注册本插件实例,完成控件与插件实例的绑定:控件事件发生时,即触发其所绑定的插件事件。(监听事件)
package kd.bos.plugin.sample.dynamicform.pcform.control.template;
import java.util.EventObject;
import java.util.List;
import kd.bos.dataentity.utils.StringUtils;
import kd.bos.form.control.TreeView;
import kd.bos.form.control.events.TreeNodeCheckEvent;
import kd.bos.form.control.events.TreeNodeCheckListener;
import kd.bos.form.plugin.AbstractFormPlugin;
 
public class TreeViewTreeNodeCheck extends AbstractFormPlugin implements TreeNodeCheckListener {
    
    
    
    private final static String KEY_TREEVIEW1 = "treeviewap1";
 
    @Override
    public void registerListener(EventObject e) {
    
    
        super.registerListener(e);
        
        // 侦听树节点勾选事件
        TreeView treeView = this.getView().getControl(KEY_TREEVIEW1);
        treeView.addTreeNodeCheckListener(this);
    }
 
    @Override
    public void beforeBindData(EventObject e) {
    
    
        super.beforeBindData(e);
        TreeView treeView = this.getView().getControl(KEY_TREEVIEW1);
        treeView.setMulti(true);    // 支持多选
    }
 
    @Override
    public void treeNodeCheck(TreeNodeCheckEvent arg0) {
    
    
        TreeView treeView = (TreeView) arg0.getSource();
        if (StringUtils.equals(treeView.getKey(), KEY_TREEVIEW1)){
    
    
            List<String> selectNodeIds = treeView.getTreeState().getCheckedNodeIds();
            // TODO 在此添加业务逻辑
        }
    }
}

三.控件

1.通用控件

与字段类控件不同,通用控件不会生成主实体中的属性对象,不会在数据模型中存储数据,仅用于用户在界面上交互操作,如按钮、锚点、HTML链接、进度条等。

2.通用字段

通用字段作为苍穹平台内最基础的字段类控件,能满足绝大部分业务场景中常见业务型数据的存储,如:文本、整数、小数、日期、时间、下拉列表等。

3.单据体

单据体类控件,可用来在界面上显示、录入多行多列的分录数据,与单据主实体构成父子(孙)关系,包含标准单据体控件/卡片分录、子单据体控件/子卡片分录、树形单据体,其下可放置多个列字段(即:字段类控件)。

4.表格控件

通常用于浏览数据,包含单据列表、F7已选列表(基础资料)等。

5.导航控件(附件控件)

用于显示导航路径,包含:工具栏、树型菜单、浮动菜单、浮动菜单容器、浮动菜单项、首页导航控件等。

6.过滤控件

过滤控件作为PC端列表页面最常用的控件之一,可供开发者通过简单地添加字段实现对单据列表控件中的业务数据进行过滤。

7.图表控件

图表控件,通常采用图表进行数据可视化展示,直观地显示数据、对比数据、分析数据,包含条型图、柱状图、饼图、点线图、雷达图、通用图、仪表盘等控件。

8.容器控件 (自定义控件)

容器控件作为苍穹平台内控制界面布局的控件,可通过配置其“样式属性”和“布局属性”灵活设计出各种复杂的前端页面。

四.规则配置

1.界面规则

① 界面规则中的“条件成立时执行”&“条件不成立时执行”需成对配置。

② 单据头&单据体的界面分开配置,且必须先选择根节点or单据体控件节点。

2.业务规则

单据头&单据体的业务规则需分开配置,且必须先选择根节点or单据体控件节点。

3.配置操作校验规则

对控件的操作进行校验

五.服务

1.套打

企业在业务过程中经常需要在线打印凭证、采购单、出入库单据等等,基本的打印需求可以通过打印打印模板配置完成,而对于一些复杂页面打印例如动态修改打印的数据源等则需要插件实现。

2.引入引出(Excel)

在跨表单跨环境的时候,需要利用引入引出的功能实现数据的批量导入和导出

3.单据转换/BOTP (Business Object TransformPlatform 业务对象转换平台)

BOTP本身提供了强大的转换和反写引擎

4.后台任务

后台任务的应用场景主要是实现需要周期性地执行业务功能,除了可以直接配置后台任务的调度周期,也可以通过代码生成调度作业及调度任务

六.集成服务云

猜你喜欢

转载自blog.csdn.net/weixin_47360129/article/details/131720186