CN103246733A - 一种基于元数据的动态表单***及其生成方法 - Google Patents
一种基于元数据的动态表单***及其生成方法 Download PDFInfo
- Publication number
- CN103246733A CN103246733A CN2013101743469A CN201310174346A CN103246733A CN 103246733 A CN103246733 A CN 103246733A CN 2013101743469 A CN2013101743469 A CN 2013101743469A CN 201310174346 A CN201310174346 A CN 201310174346A CN 103246733 A CN103246733 A CN 103246733A
- Authority
- CN
- China
- Prior art keywords
- metadata
- list
- properties
- business entity
- property
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明涉及计算机***开发或维护过程中的业务数据处理技术领域,特别涉及一种基于元数据的动态表单***及其生成方法。本发明的一种基于元数据的动态表单***包括:基于业务字段的表单元数据模型,设计时套件和运行时工具集。通过该***及方法可以在软件中实现动态表单的功能。
Description
技术领域
本发明涉及计算机***开发或维护过程中的业务数据处理技术领域,特别涉及一种基于元数据的动态表单***及其生成方法。
背景技术
在计算机应用***开发或维护过程中,经常会碰到以下需求或问题:
1、业务单据需要在运行时进行扩展,如工资表,不同企业、工种的工资项目都是实施时才能确定的,再如设备、费用单据等都是根据类别有不同的项目。
2、现有的表单平台也可以实现运行时定制,但是大部分解决方案是把数据存到一张大表里,这样有几个限制:其一,数据库一行的字节数是有限制的,就是单据项目不能无限制扩展;其二,所有项目在一张大表里,造成大量的数据冗余;其三,大表严重影响查询性能。
3、现有的表单开发平台,其表单设计器,大部分是不能与IDE(集成开发环境)软件集成的,不能充分利用IDE的丰富的功能。
4、现有的表单开发平台,其元数据模型,大都没有抽取到业务字段这一级别,既缺乏对业务字段的信息的重用和业务操作的规范,又不能自动识别业务实体之间的联系。
发明内容
为了解决现有技术的问题,本发明提供了一种基于元数据的动态表单***及其生成方法,通过该***及方法可以在软件中实现动态表单的功能。
本发明所采用的技术方案如下:
一种基于元数据的动态表单***,其包括,
基于业务字段的表单元数据模型,包括业务实体元数据,用于描述业务***中实现的业务实体信息;界面布局元数据设计,用于描述业务实体的界面布局信息;
设计时套件,包括表单用户界面控件及其控制器、业务实体和接口描述、服务端逻辑处理组件;
运行时工具集。
表单元数据模型还包括:
业务字段元数据,用于描述业务***中关心的业务字段信息;
属性组元数据,用于描述业务***中包含的属性组信息;
属性组属性元数据,用于描述属性组包含的项目信息;
属性组引用关系元数据;
编码规则元数据;
表单打印设置元数据。
设计时套件具体包括:
表单容器控件;
工具条、菜单按钮;
表单列表控件;
智能帮助控件;
树形列表控件;
自定义编辑控件。
运行时工具集包括:
业务字段定义工具,用来定义***关心的业务字段,分为通用业务字段和非通用业务字段,定义其数据类型、长度、精度、用户界面控件;
属性组及属性定义工具,定义***中用到的数据逻辑结构,包括表、视图,及其主键列、编号列、名称列;并设置属性组包含的项目;若有引用的项目,还需设置引用属性组;
业务实体定义工具;定义***中的业务实体及其包含的扩展属性组和拥有的子业务实体;
界面布局调整工具,用来进行表单的界面布局调整;
打印设置及打印工具,根据表单元数据设置其打印格式;
编码规则定义工具,用来定义编码规则。
一种基于元数据的动态表单***的生成方法,其包括以下步骤:
A、根据需求设计定义表单元数据;
B、生成表单元数据模型
C、在集成开发环境软件中,选择业务实体元数据,生成表单;
D、添加工具条按钮,与表单容器绑定;
E、添加客户端或服务器端扩展代码;
F、编译并发布到运行框架。
步骤C具体包括把业务实体的不同业务属性进行分组管理,每个属性组对应不同的数据库存储表,并且根据业务实体的类别设置该业务实体对应不同的属性组集合的步骤。
本发明的一种基于元数据的动态表单***,在生成表单时抽取业务字段,便于规范业务操作,并且可以使***自动识别各个业务实体和属性组之间的关系,便于自动实现实体间数据转换和统计分析。
业务字段的规则信息包括:标识、编号、名称、父字段、原始属性组、原始属性组项目、***预制否、分级否、分级结构、数据类型、长度、精度、默认值、编辑器类型(通用控件、帮助、帮助取值列、枚举类型、自定义控件)等;
业务字段支持分级,自动继承上级业务字段信息,并且其数据类型、长度、精度等不允许与上级不同。
业务字段对应的原始属性组项目,是指业务字段来源的字典属性组元数据里的项目,如财务***核算单位编号业务字段,来源于核算单位字典属性组里的单位编号项目。
可根据业务字段更新所有引用此业务字段的属性组对应的数据库表列信息。
属性组的规则信息包括:标识、编码、名称、数据库表或视图名、主键列、编号列、名称列、序号列、分级码列、单据状态列、审批流实例列、***预制否、分年度存放否。
属性组包含一组属性(属性组项目),包括本属性组实有的、虚拟的(含引用自其它属性组的)。因而一个属性组需要设置零到多个引用属性组。
属性组项目的规则信息包括:标识、对应业务字段、列名、列描述、***预制否、允许空值否、隐藏否、默认值、虚拟列否、引用属性组、引用属性、过滤表达式、只读表达式、计算表达式、验证表达式、依赖项、帮助编号列、帮助显示列等;
属性组项目必须设置对应业务字段。
业务实体的规则信息包括:标识、编码、名称、主属性组、属性划分依据、编码规则、表单窗体信息、***预制否;一个业务实体可以拥有零到多个非主属性组;一个业务实体可以拥有零到多个子业务实体。
表单设计器集成于IDE(集成开发环境)开发工具,如VS Studio,便于编写扩展代码和调整默认的UI(用户界面)属性,添加或更换原生或表单工具提供的UI控件;
提供根据表单元数据自动生成表单功能,生成的表单风格保持一致,并可以随时调整;
提供表单的常用功能,如增删改查等,并支持灵活扩展。如数据权限、功能权限等规则可以统一扩展,而某业务单据的个性化处理,可以单独扩展;
提供表单开发常用的控件,如表单列表、树型列表、帮助选择框等,并支持自定义控件扩展;
提供丰富的机制(如事件、接口配置等),便于分别在客户端和服务端进行扩展。
业务实体元数据维护工具,提供与数据库***的交互能力,可以根据数据库结构生成或调整元数据,也可以根据元数据影响数据库结构;
表单界面布局调整工具,可以根据业务实体的类别等依据,设置不同的界面布局样式。
单据打印格式设置及打印工具,根据业务实体元数据进行打印格式的设置及打印。
本发明实施例提供的技术方案带来的有益效果是:
1、元数据模型基于业务字段,可以起到良好的规范、重用作用,比如所有编号、名称的长度,金额的精度可以统一规范、调整,字段的编辑控件统一设置等;业务字段作为不同属性组甚至业务实体之间联系的纽带,可以用于一些统一处理,如删除检查,按业务字段统计查询不同属性组数据,不同业务实体之间进行数据转换,数据权限的处理等。
2、具有良好的灵活性,业务实体有一个主属性组,可以包含零到多个特性属性组及子业务实体,每个属性组都是单独存储的,可以随时增加属性。一个业务实体可以根据某个主属性组属性设置不同的属性组,如资产卡片,可以根据资产类别不同,设置不同的特性属性组。
3、数据高效存储,如上所述,我们可以把属性分组存放,这样可以有效减少数据冗余,如房屋土地资产的特性属性与交通工具、生产设备的特性属性存到不同表里。
4、提高性能,按照属性组的方式存储数据,有效地把一个大表按照属性的相关性拆分成多个表,能够大幅减少数据库输入输出操作,从而提高性能。
5、表单设计器集成于IDE软件中,大大提高了开发效率。
附图说明
图1为本发明的一种基于元数据的动态表单***的表单***框图;
图2为本发明的一种基于元数据的动态表单***的生成方法流程图;
图3为本发明的一种基于元数据的动态表单***的表单打开的处理流程图。
图4为本发明的具体实施的典型单据的数据结构图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施方式作进一步地详细描述。
实施例一
如附图1所示,本发明的一种基于元数据的动态表单***可以分为三大块:1)表单元数据部分,是用来对表单进行数据建模的,描述了表单数据的业务逻辑结构,并包含表单的编码规则、打印格式和UI布局信息,这部分是整个表单***的基础;2)表单设计时套件,是辅助开发人员进行表单开发的工具集,包括一系列基础控件和可扩展的实体类及表单管理类,该部分是集成到IDE中的,便于开发人员使用;3)运行时工具集,是开发人员或用户管理员对表单进行扩展、维护的一套工具,包括表单元数据维护工具、编码规则维护工具、界面布局调整工具、打印设置及打印工具。
下面对本发明的一种基于元数据的动态表单***作出详细描述:
1、表单元数据模型设计:
1.1、业务字段,用来抽取带有业务含义的属性信息,如字典ID、单据标识等,如上所述,业务字段是业务实体(属性组)之间关联的纽带,是整个元数据模型的基础。
其结构如下表:
序号 | 模型元素 | 说明 |
1 | 业务字段ID | 业务字段唯一标识,36位GUID |
2 | 编号 | 业务字段编号 |
3 | 名称 | 业务字段名称 |
4 | 属性组ID | 业务字段所属属性组ID(原始来源属性组) |
5 | 属性组项目ID | 对应在原始来源属性组里的属性 |
6 | ***预制 | 是否***预制,预制的不允许修改 |
7 | 是否分级 | |
8 | 分级结构 | |
9 | 数据类型 | |
10 | 长度 | |
11 | 精度 | |
12 | 控件类型 | |
13 | 默认值 | 表单创建时,自动据此赋默认值 |
14 | 上级业务字段 | 指明上级业务字段,继承的部分属性不允许修改 |
15 | 枚举类型 | 选择预制的枚举类型,以便在表单上编辑或显示 |
16 | 帮助ID | 智能帮助标识,是智能帮助类型的编辑器,需要指定具体哪个帮助 |
17 | 自定义控件信息 | 是自定义控件,需要指明自定义控件的调用方式 |
1.2属性组,对应数据库表或视图,其结构如下表:
序号 | 模型元素 | 说明 |
1 | 属性组ID | 属性组唯一标识,36位GUID |
2 | 编号 | 属性组编号 |
3 | 名称 | 属性组名称 |
4 | 表名 | 对应数据库表名 |
5 | 主键列 | 指明哪个属性是主键列 |
6 | ***预制 | 是否***预制,预制的只允许修改名称等次要信息,只允许增加属性。 |
7 | 是否分年度存放 | 表是否分年度存放 |
8 | 年度列 | 该表存放年度的列 |
9 | 父ID列 | 分级的数据,指定存放父ID的属性 |
10 | 编号列 | 该列可以设置编码规则 |
11 | 名称列 | |
12 | 序号列 | 显示批量数据时,根据此列排序 |
13 | 单据状态列 | 审批流用到 |
14 | 审批流程实例ID列 | 审批流用到 |
15 | 分级列 | 分级码列 |
1.3、属性组项目,存放具体的属性组属性信息,其结构如下表:
序号 | 模型元素 | 说明 |
1 | 属性组ID | 属性组唯一标识,36位GUID |
2 | 属性ID | 属性唯一标识,36位GUID |
3 | 业务字段ID | 属性对应的业务字段 |
4 | 列名 | 对应数据库表列名,在同一属性组不允许重复 |
5 | 列描述 | 属性的描述 |
6 | ***预制 | 是否***预制,预制的只允许修改名称等次要信息 |
7 | 是否允许为空 | 是否允许空值 |
8 | 是否隐藏 | 在表单上是否显示 |
9 | 默认值 | 自动继承业务字段默认值,可修改 |
10 | 引用关系ID | 虚拟列时,指定引用的属性组关系 |
11 | 引用属性ID | 引用其它属性组的属性 |
12 | 依赖项 | 输入时依赖的其他属性 |
13 | 是否虚拟列 | 虚拟列保存时不处理 |
14 | 过滤表达式 | 计算帮助时的过滤条件 |
15 | 只读表达式 | 计算是否只读的条件 |
16 | 隐藏表达式 | 计算是否隐藏的条件 |
17 | 验证表达式 | 计算输入值是否正确的表达式 |
18 | 计算表达式 | 根据其他属性自动计算本属性值的表达式 |
1.4、业务实体,描述表单信息,其结构如下表:
序号 | 模型元素 | 说明 |
1 | 业务实体ID | 业务实体唯一标识,36位GUID |
2 | 编号 | 业务实体编号 |
3 | 名称 | 业务实体名称 |
4 | 版本 | 业务实体维护时,版本自动加1 |
5 | 主属性组ID | 主属性组标识 |
6 | ***预制 | 是否***预制,预制的只允许修改名称等次要信息,只允许增加属性。 |
7 | 属性划分依据 | 根据哪些属性,分配扩展属性组;可以不设置 |
8 | 表单窗体信息 | 表单窗体的调用信息 |
9 | 编码规则 | 用来自动生成编号 |
1.5、业务实体关系,用来描述,业务实体之间的上下级关系,其结构如下表:
序号 | 模型元素 | 说明 |
1 | 业务实体关系ID | 业务实体关系唯一标识,36位GUID |
2 | 父业务实体ID | 父业务实体标识 |
3 | 子业务实体ID | 子业务实体标识 |
4 | 关系 | 一对零到一、一对零到多、一对一、一对一到多 |
5 | 外键列 | 子属性组某属性 |
6 | 序号 | 表单UI元素生成时,据此确定子业务实体UI元素的顺序 |
1.6、扩展属性组,存放业务实体除主属性组外的扩展属性组,其结构如下表:
序号 | 模型元素 | 说明 |
1 | ID | 唯一标识,36位GUID |
2 | 业务实体ID | 业务实体标识 |
3 | 属性划分依据值 | 根据业务实体的属性划分依据设置,确定是否有值 |
4 | 序号 | 顺序号,维护时或生成UI元素时排序用 |
5 | 属性组ID | 扩展属性组标识 |
1.7、属性组引用关系,存放各属性组的引用关系,其结构如下表:
序号 | 模型元素 | 说明 |
1 | ID | 唯一标识,36位GUID |
2 | 属性组ID | 属性组标识 |
3 | 引用属性组ID | 引用属性组标识 |
4 | 关联条件 | 属性组之间的关联条件 |
1.8、枚举类型,存放***内相对固定的值域类型,如性别、数据类型、编辑控件等,此数据一般是预制的,其结构如下表:
序号 | 模型元素 | 说明 |
1 | 编码 | 类型编码 |
2 | 名称 | 类型名称 |
3 | 数据类型 | |
4 | 版本号 |
1.9、枚举值,根据枚举类型,存放值域数据,通过预制SQL增加,其结构如下表:
序号 | 模型元素 | 说明 |
1 | 枚举类型 | 类型编码 |
2 | 序号 | 顺序号 |
3 | 枚举值 | |
4 | 名称 |
1.10、表单布局信息,存放表单界面布局数据,其结构如下表:
序号 | 模型元素 | 说明 |
1 | ID | 唯一标识,36位GUID |
2 | 业务实体ID | 业务实体标识 |
3 | 基准划分依据值 | |
4 | 布局名称 | |
5 | 界面布局 | 界面布局的XML数据 |
界面布局数据,以XML组织,包括表单各界面元素的字体、位置、颜色等信息,存放于数据库二进制字段内,其示例片段如下所示:
<property name="Item5" isnull="true" iskey="true">
<property name="OptionsToolTip" isnull="true" iskey="true">
<property name="IconToolTipTitle" />
<property name="IconToolTipIconType">None</property>
<property name="EnableIconToolTip">true</property>
<property name="IconToolTip" />
<property name="ToolTip" />
<property name="ToolTipTitle" />
<property name="ToolTipIconType">None</property>
</property>
<property name="CustomizationFormText">****预制:</property>
<property name="OptionsCustomization" isnull="true" iskey="true">
<property name="AllowDrop">Default</property>
<property name="AllowDrag">Default</property>
</property>
<property name="TextLocation">Left</property>
<property name="MinSize">3,Width=1222,Height=23</property>
<property name="Visibility">Always</property>
<property name="Location">3,X=3242,Y=75</property>
<property name="Text">****预制:</property>
<property name="TextToControlDistance">4</property>
<property name="TextSize">2,Width=912,Height=14</property>
<property name="Padding">2, 2, 2, 2</property>
<property name="Spacing">0, 0, 0, 0</property>
<property name="TextVisible">true</property>
<property name="ShowInCustomizationForm">true</property>
<property name="Name">AMEncodingRule_IsSysItem</property>
<property name="ParentName">GroupAMEncodingRule</property>
<property name="Size">3,Width=3252,Height=23</property>
<property name="MaxSize">1,Width=02,Height=23</property>
<property name="TypeName">LayoutControlItem</property>
<property name="Image" isnull="true" />
<property name="AllowHtmlStringInCaption">false</property>
<property name="ControlName">AMEncodingRule_IsSysCtl</property>
<property name="TextAlignMode">UseParentOptions</property>
<property name="SizeConstraintsType">Default</property>
<property name="ImageIndex">-1</property>
<property name="ImageAlignment">MiddleLeft</property>
<property name="ImageToTextDistance">5</property>
<property name="AppearanceItemCaption" isnull="true" iskey="true">
<property name="Font">Tahoma, 9pt</property>
<property name="BackColor2" />
<property name="BackColor" />
<property name="ForeColor" />
<property name="BorderColor" />
<property name="GradientMode">Horizontal</property>
</property>
</property>
1.11、界面布局分配,针对根据不同类别有不同属性组的情况,一个界面布局可能同时应用于不同的类别,所以要进行分配,其结构如下表:
序号 | 模型元素 | 说明 |
1 | ID | 唯一标识,36位GUID |
2 | 属性划分依据 | |
3 | 界面布局ID |
1.12、单据编码规则,存放编码规则主信息:
序号 | 模型元素 | 说明 |
1 | ID | 唯一标识,36位GUID |
2 | 业务实体ID | 业务实体标识 |
3 | 编码依据 | 如根据单位+年度+月份编码 |
4 | 允许手工输入 | 是否允许手工输入 |
5 | 是否分级 | 编码是否分级 |
6 | 分级结构 | 编码分级结构 |
7 | ***预制 |
1.13单据编码规则明细信息,把编码分成多个段,分别描述,其结构如下表:
序号 | 模型元素 | 说明 |
1 | ID | 唯一标识,36位GUID |
2 | 编码规则ID | 编码规则标识 |
3 | 序号 | 顺序号 |
4 | 类型 | 常量、表达式、顺序号 |
5 | 是否参与顺序号生成 | |
6 | 固定长度 | 是否固定长度 |
7 | 长度 | |
8 | 常量字符 | |
9 | 表达式 |
1.14单据打印格式,其结构如下表:
序号 | 模型元素 | 说明 |
1 | ID | 唯一标识,36位GUID |
2 | 业务实体ID | 业务实体标识 |
3 | 属性依据值 | |
4 | 编码 | 打印格式编码 |
5 | 名称 | 打印格式名称 |
6 | 打印格式 | 打印格式数据,以XML形式组织,二进制存放 |
7 | 首选格式 | 是否首选打印格式,直接打印时使用 |
1.15、打印格式分配,其结构如下表:
序号 | 模型元素 | 说明 |
1 | ID | 唯一标识,36位GUID |
2 | 属性依据值 | |
3 | 打印格式ID | 打印格式标识 |
4 | 首选格式 | 是否首选打印格式,直接打印时使用 |
2、设计时套件,主要是开发人员开发使用的资源:
2.1、集成于IDE的一套控件,可以跟开发数据库连接,根据数据库里的元数据自动生成表单,并提供表单的常用操作逻辑处理,如增、删、改、查、打印、审批、取消审批等。下边主要介绍下核心控件--表单容器控件(BillLayoutControl)的实现描述:
2.1.1、属性、成员:
public Genersoft.AM.Pub.BillSPI.IBillManager BillManager { get; }//单据管理对象
public Genersoft.AM.Pub.BillSPI.Entity.BizObject BizObject { set; get; }//单据业务对象
public Genersoft.AM.Pub.BillSPI.Entity.BillDataSource DataSource { set; get; }//单据数据源
public string DelimitStandonValue { set; get; }//属性划分依据值
public virtual bool IsChanged { get; }//是否变化
public bool IsEditing { get; }//是否编辑状态
public bool IsEnterToTab { set; get; }//是否回车焦点转移
public bool IsNew { get; }//是否新单据
public bool Readonly { set; get; }//只读属性
2.1.2、接口:
public virtual void AddChild()//增加子项
public virtual void AppendixManage()//文档(附件)管理
public virtual void CreateBill(string year)// 创建新单据
public virtual void DeleteBill()//删除单据
public virtual void DeleteChild()//删除子项
public virtual void DerictPrintBill()//直接打印
public virtual void DisSubmitAudit()//取消提交审批
public virtual void EditBill()//编辑单据
public virtual void ExitBill()//关闭表单
public virtual TreeLayoutItem GetFocusedChildListItem() //当前焦点所在的子列表
public virtual void InsertChild()//***子项
public virtual void LoadBill()//表单加载
public virtual void LoadBill(string year, string pid)// 表单加载
public virtual void LoadBillLayout()//加载布局
public virtual void MoveDown()//下移子项
public virtual void MoveUp()//上移子项
public virtual void PrintBill()//打印单据
public virtual void PrintPreviewBill()//打印预览.
public virtual void QueryBill()//查看单据
public virtual void SaveBill()//保存单据
public virtual void SetFocus()//设置焦点
public virtual void SubmitAudit()//提交审批
public virtual void UnloadBill()//表单退出时处理
public void UpdateEditor() //更新界面元素
public virtual bool ValidCheck() //有效性检查
2.1.3、事件:
[Description("表单创建前事件")]
public event EventHandler<EventArgs> BillCreating;
[Description("空表单创建后事件")]
public event EventHandler<EventArgs> BillCreated;
[Description("表单删除前事件")]
public event EventHandler<EventArgs> Deleting;
[Description("表单删除后事件")]
public event EventHandler<EventArgs> Deleted;
[Description("表单加载前事件")]
public event EventHandler<EventArgs> Loading;
[Description("表单数据加载后事件")]
public event EventHandler<EventArgs> Loaded;
[Description("表单数据编辑前事件")]
public event EventHandler<EventArgs> Editing;
[Description("表单数据保存前事件")]
public event EventHandler<EventArgs> Saving;
[Description("表单数据保存后事件")]
public event EventHandler<EventArgs> Saved;
[Description("表单数据打印前事件")]
public event EventHandler<EventArgs> Printing;
[Description("表单数据打印后事件")]
public event EventHandler<EventArgs> Printed;
[Description("表单关闭前事件")]
public event EventHandler<EventArgs> Unloading;
[Description("表单取消编辑事件")]
public event EventHandler<EventArgs> CancelEdited;
[Description("数据源改变后事件")]
public event EventHandler<EventArgs> DataSourceChanged;
[Description("增加子项前事件")]
public event EventHandler<CancelEventArgs> ChildItemAdding;
[Description("删除子项前事件")]
public event EventHandler<CancelEventArgs> ChildItemDeleting;
[Description("增加子项后事件")]
public event EventHandler<ChildItemEventArgs> ChildItemAdded;
[Description("打开文档管理前事件")]
public event EventHandler<DocumentManageEventArgs> DocumentManaging;
[Description("提交审批前事件")]
public event EventHandler<SubmitAuditingEventArgs> SubmitAuditing;
[Description("提交审批后事件")]
public event EventHandler<SubmitAuditedEventArgs> SubmitAudited;
[Description("取消提交审批后事件")]
public event EventHandler<DisSubmitAuditedEventArgs> DisSubmitAudited;
2.2、实体类、接口和表单管理类:
实体类主要是上边元数据的软件实现,在此不再赘述,下边主要是介绍下表单管理接口,其在客户端和服务端均有实现类,其实现可以继承扩展,并把其扩展类配置为表单的管理类:
//表单管理接口
public interface IBillManager
{
// 增加
object Add(object billData);
// ***
object Insert(object curBill, object newBillData);
// 删除
object Delete(object bill);
// 修改前
object BeforeModify(object bill);
// 修改
object Modify(object bill, object billData);
// 停用/作废
object Pause(object bill, string year);
// 重新启用
object Reuse(object bill);
// 取单据模型
BizObject GetDataModel(string bizCode, string delimitStandonValue);
// 取单据模型
BizObject GetDataModel(string bizCode, string delimitStandonValue, int version);
// 获取单据列表
DataSet GetBillList(string tableName, string filter);
// 获取单据数据
DataSet GetBillData(string bizCode, string delimitStandonValue, string year, string billID);
// 获取单据数据
DataSet GetBillData(string bizCode, string year, string billID);
// 获取单据数据
DataSet GetBillData(BizObject bizObject, string year, string billID);
// 单据有效性检查
bool Validate(object bill);
// 表单通用操作
object CommonOperate(object param);
// 取顺序编号
string GetBillOrderNum(string bizCode, string standonValue, string prefix, string suffix);
// 保存时取顺序号
string GetBillOrderNumForSave(string bizCode, string standonValue, string prefix, string suffix, string billTable, string codeCol, string cond, bool allowEdit, string curNum, string curOrderNum, int fixedLen);
// 权限管理接口
IAmAuManager AMAuManager{get;}
}
3、运行时工具,主要是表单元数据、编码规则、打印格式、界面布局的维护工具。
实施例二:
如附图2所示,本发明的一种基于元数据的动态表单***的生成方法,具体包括以下步骤:首先根据需求设计文档,抽取表单的数据结构,即使用元数据维护工具定义本表单对应的业务字段、属性组及属性、业务实体数据;使用元数据维护工具的数据库同步功能生成表单数据结构;打开IDE开发环境,创建表单窗口,联接开发数据库,选择上边定义的业务实体,自动生成表单界面;添加必要的工具条及按钮,并关联至表单,也可以添加其它辅助UI元素;根据需要添加服务端或客户端代码;编译并发布到产品的运行框架。如上所述,设计器集成于IDE,可以充分利用IDE强大功能,开发人员使用和扩展非常方便,而目前国产表单工具都单独提供设计器,代码的扩展还需要单独到IDE里编写,这样导致界面和代码分别在不同工具里维护,大大降低了开发效率。
如附图3所示,附图3列示了在运行时,表单打开的处理流程:首先,产品运行框架打开表单窗口,自动加载表单发布时的默认界面(编译的运行时代码里的);表单控件根据当前表单元数据版本询问是否有新版本元数据;如果有新版本元数据,则读取新版本元数据,并据此动态更新表单UI元素(创建、删除或修改属性);查看表单元数据里是否有界面布局信息,如有,据此调整表单界面布局(UI元素的位置、显示隐藏、Tab页分布等);如果是显示一个表单,则获取表单数据并绑定到表单控件。这个过程可以看出,表单的固化部分是编译到可执行文件,仅仅是变化部分动态处理,可以有效提高性能;而目前表单平台基本都是解释执行的,性能必然降低。
图4列示了根据本发明实现的一个典型单据的数据结构:一个表单对应一个业务实体;一个业务实体有一个主属性组;一个业务实体可以根据主属性组某些属性,拥有零到多个扩展属性组;一个业务实体可以拥有零到多个子业务实体;子业务实体也可以拥有扩展属性组和下级业务实体。通过本元数据模型,可以描述绝大多数表单的结构,并且具有良好的灵活性和性能。
以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (6)
1.一种基于元数据的动态表单***,其包括,
基于业务字段的表单元数据模型,包括业务实体元数据,用于描述业务***中实现的业务实体信息;界面布局元数据设计,用于描述业务实体的界面布局信息;
设计时套件,包括表单用户界面控件及其控制器、业务实体和接口描述、服务端逻辑处理组件;
运行时工具集。
2.根据权利要求1所述的一种基于元数据的动态表单***,其特征在于,所述的表单元数据模型还包括:
业务字段元数据,用于描述业务***中关心的业务字段信息;
属性组元数据,用于描述业务***中包含的属性组信息;
属性组属性元数据,用于描述属性组包含的项目信息;
属性组引用关系元数据;
编码规则元数据;
表单打印设置元数据。
3.根据权利要求1所述的一种基于元数据的动态表单***,其特征在于,所述的设计时套件具体包括:
表单容器控件;
工具条、菜单按钮;
表单列表控件;
智能帮助控件;
树形列表控件;
自定义编辑控件。
4.根据权利要求1所述的一种基于元数据的动态表单***,其特征在于,所述的运行时工具集包括:
业务字段定义工具,用来定义***关心的业务字段,分为通用业务字段和非通用业务字段,定义其数据类型、长度、精度、用户界面控件;
属性组及属性定义工具,定义***中用到的数据逻辑结构,包括表、视图,及其主键列、编号列、名称列;并设置属性组包含的项目;若有引用的项目,还需设置引用属性组;
业务实体定义工具;定义***中的业务实体及其包含的扩展属性组和拥有的子业务实体;
界面布局调整工具,用来进行表单的界面布局调整;
打印设置及打印工具,根据表单元数据设置其打印格式;
编码规则定义工具,用来定义编码规则。
5.一种基于元数据的动态表单***的生成方法,其包括以下步骤:
A、根据需求设计定义表单元数据;
B、生成表单元数据模型
C、在集成开发环境软件中,选择业务实体元数据,生成表单;
D、添加工具条按钮,与表单容器绑定;
E、添加客户端或服务器端扩展代码;
F、编译并发布到运行框架。
6.根据权利要求5所述的一种基于元数据的动态表单***的生成方法,其特征在于,所述的步骤C具体包括把业务实体的不同业务属性进行分组管理,每个属性组对应不同的数据库存储表,并且根据业务实体的类别设置该业务实体对应不同的属性组集合的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2013101743469A CN103246733A (zh) | 2013-05-13 | 2013-05-13 | 一种基于元数据的动态表单***及其生成方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2013101743469A CN103246733A (zh) | 2013-05-13 | 2013-05-13 | 一种基于元数据的动态表单***及其生成方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN103246733A true CN103246733A (zh) | 2013-08-14 |
Family
ID=48926253
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2013101743469A Pending CN103246733A (zh) | 2013-05-13 | 2013-05-13 | 一种基于元数据的动态表单***及其生成方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103246733A (zh) |
Cited By (33)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103593443A (zh) * | 2013-11-18 | 2014-02-19 | 南京新模式软件集成有限公司 | 一种电子文件元数据扩展的方法 |
CN103886085A (zh) * | 2014-03-28 | 2014-06-25 | 浪潮软件集团有限公司 | 一种通用的可行列变换交叉报表方法 |
CN103927323A (zh) * | 2014-02-26 | 2014-07-16 | 浪潮软件股份有限公司 | 一种信息***值域数据管理方法 |
CN104063495A (zh) * | 2014-07-04 | 2014-09-24 | 用友软件股份有限公司 | 表单扩展方法与表单扩展装置 |
CN104573969A (zh) * | 2015-01-21 | 2015-04-29 | 浪潮软件股份有限公司 | 一种事项管理***的生成方法及装置 |
CN104679793A (zh) * | 2013-12-03 | 2015-06-03 | 航天信息股份有限公司 | 一种基于动态***模板的***开具*** |
CN105183450A (zh) * | 2015-07-28 | 2015-12-23 | 武汉驼峰信息技术有限公司 | 一种前后台分离的电子政务表单模型配置化*** |
CN105224377A (zh) * | 2015-10-08 | 2016-01-06 | 广州华旻信息科技有限公司 | 一种通过元数据自动生成软件项目编码文件的方法及装置 |
CN105706084A (zh) * | 2013-09-06 | 2016-06-22 | 超级医疗***公司 | 元数据自动化*** |
CN105955680A (zh) * | 2016-04-25 | 2016-09-21 | 浪潮通用软件有限公司 | 一种支持动态附加扩展信息的单据打印方法 |
CN106843891A (zh) * | 2017-02-06 | 2017-06-13 | 浪潮通用软件有限公司 | 一种基于增量的表单分层扩展方法 |
CN106843835A (zh) * | 2016-12-21 | 2017-06-13 | 中国电子科技网络信息安全有限公司 | 一种元数据定制的应用***软件构建***、***构建方法 |
CN107193579A (zh) * | 2017-03-29 | 2017-09-22 | 武汉斗鱼网络科技有限公司 | 计划任务的实现方法及装置 |
CN107301044A (zh) * | 2017-06-09 | 2017-10-27 | 广州慧扬健康科技有限公司 | 用于代谢病电子病历表单的多页控件 |
CN107608747A (zh) * | 2017-09-22 | 2018-01-19 | 携程旅游信息技术(上海)有限公司 | 表单***的构建方法、装置、电子设备、存储介质 |
CN108196921A (zh) * | 2017-12-26 | 2018-06-22 | 金蝶软件(中国)有限公司 | 单据开发方法、装置、计算机设备和存储介质 |
CN108509246A (zh) * | 2018-04-08 | 2018-09-07 | 重庆满惠网络科技有限公司 | 一种网页表单自定义验证方法和*** |
CN108664604A (zh) * | 2018-05-09 | 2018-10-16 | 四川华创世纪科技有限公司 | 一种实现数据最小拆分储存和业务调用呈现的方法 |
CN109408494A (zh) * | 2018-11-01 | 2019-03-01 | 北京京航计算通讯研究所 | 基于表单自定义功能的型号生产履历生成方法 |
CN109445794A (zh) * | 2018-11-12 | 2019-03-08 | 北京中电普华信息技术有限公司 | 一种页面构造方法及装置 |
CN109472015A (zh) * | 2018-11-01 | 2019-03-15 | 北京京航计算通讯研究所 | 基于表单自定义功能的型号生产履历生成*** |
CN109634606A (zh) * | 2018-12-10 | 2019-04-16 | 山东浪潮通软信息科技有限公司 | 一种定义功能菜单的方法及装置 |
CN110222047A (zh) * | 2019-04-28 | 2019-09-10 | 深圳易伙科技有限责任公司 | 一种动态表单生成方法和装置 |
CN110287219A (zh) * | 2019-06-28 | 2019-09-27 | 北京九章云极科技有限公司 | 一种数据处理方法及*** |
CN110377603A (zh) * | 2019-06-28 | 2019-10-25 | 中信百信银行股份有限公司 | 数据存储方法和装置 |
CN110750683A (zh) * | 2019-09-20 | 2020-02-04 | 平安普惠企业管理有限公司 | 数据修改方法、装置、计算机设备及存储介质 |
CN111241785A (zh) * | 2019-12-31 | 2020-06-05 | 中华人民共和国天津海事局 | 基于要素变量动态编码的船舶数据模型 |
CN111897801A (zh) * | 2020-08-05 | 2020-11-06 | 上海伯俊软件科技有限公司 | 基于元数据层的自主表单配置方法 |
CN111933228A (zh) * | 2020-08-11 | 2020-11-13 | 上海亿锎智能科技有限公司 | 用于临床研究中的项目分发与管理***的实现方法和装置 |
CN112286999A (zh) * | 2020-08-12 | 2021-01-29 | 北京海致网聚信息技术有限公司 | 基于mysql和mongodb的动态表单实现方法 |
CN114356252A (zh) * | 2021-12-27 | 2022-04-15 | 金蝶软件(中国)有限公司 | 动态字段打印方法、***及相关装置 |
CN115983232A (zh) * | 2023-03-21 | 2023-04-18 | 青岛诺亚信息技术有限公司 | 一种基于视图、数据一体化设计的表单*** |
TWI799920B (zh) * | 2021-07-21 | 2023-04-21 | 玉山商業銀行股份有限公司 | 具深度彈性的動態表單生成方法與表單系統 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20080126396A1 (en) * | 2006-06-26 | 2008-05-29 | Perceptive Software, Inc. | System and method for implementing dynamic forms |
CN101359290A (zh) * | 2008-09-11 | 2009-02-04 | 中兴通讯股份有限公司 | 一种基于元数据的定制业务单据的方法及装置 |
CN101661508A (zh) * | 2009-09-29 | 2010-03-03 | 金蝶软件(中国)有限公司 | 一种应用于多技术平台的生成表单的方法及装置 |
CN101968800A (zh) * | 2010-09-21 | 2011-02-09 | 北京空间飞行器总体设计部 | 基于元数据驱动的动态表单方法 |
-
2013
- 2013-05-13 CN CN2013101743469A patent/CN103246733A/zh active Pending
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20080126396A1 (en) * | 2006-06-26 | 2008-05-29 | Perceptive Software, Inc. | System and method for implementing dynamic forms |
CN101359290A (zh) * | 2008-09-11 | 2009-02-04 | 中兴通讯股份有限公司 | 一种基于元数据的定制业务单据的方法及装置 |
CN101661508A (zh) * | 2009-09-29 | 2010-03-03 | 金蝶软件(中国)有限公司 | 一种应用于多技术平台的生成表单的方法及装置 |
CN101968800A (zh) * | 2010-09-21 | 2011-02-09 | 北京空间飞行器总体设计部 | 基于元数据驱动的动态表单方法 |
Cited By (45)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105706084A (zh) * | 2013-09-06 | 2016-06-22 | 超级医疗***公司 | 元数据自动化*** |
CN105706084B (zh) * | 2013-09-06 | 2019-08-06 | 超级医疗***公司 | 元数据自动化*** |
CN103593443A (zh) * | 2013-11-18 | 2014-02-19 | 南京新模式软件集成有限公司 | 一种电子文件元数据扩展的方法 |
CN104679793A (zh) * | 2013-12-03 | 2015-06-03 | 航天信息股份有限公司 | 一种基于动态***模板的***开具*** |
CN103927323A (zh) * | 2014-02-26 | 2014-07-16 | 浪潮软件股份有限公司 | 一种信息***值域数据管理方法 |
CN103886085B (zh) * | 2014-03-28 | 2018-01-09 | 浪潮软件集团有限公司 | 一种通用的可行列变换交叉报表方法 |
CN103886085A (zh) * | 2014-03-28 | 2014-06-25 | 浪潮软件集团有限公司 | 一种通用的可行列变换交叉报表方法 |
CN104063495A (zh) * | 2014-07-04 | 2014-09-24 | 用友软件股份有限公司 | 表单扩展方法与表单扩展装置 |
CN104573969A (zh) * | 2015-01-21 | 2015-04-29 | 浪潮软件股份有限公司 | 一种事项管理***的生成方法及装置 |
CN105183450A (zh) * | 2015-07-28 | 2015-12-23 | 武汉驼峰信息技术有限公司 | 一种前后台分离的电子政务表单模型配置化*** |
CN105224377A (zh) * | 2015-10-08 | 2016-01-06 | 广州华旻信息科技有限公司 | 一种通过元数据自动生成软件项目编码文件的方法及装置 |
CN105955680B (zh) * | 2016-04-25 | 2018-09-25 | 浪潮通用软件有限公司 | 一种支持动态附加扩展信息的单据打印方法 |
CN105955680A (zh) * | 2016-04-25 | 2016-09-21 | 浪潮通用软件有限公司 | 一种支持动态附加扩展信息的单据打印方法 |
CN106843835A (zh) * | 2016-12-21 | 2017-06-13 | 中国电子科技网络信息安全有限公司 | 一种元数据定制的应用***软件构建***、***构建方法 |
CN106843891A (zh) * | 2017-02-06 | 2017-06-13 | 浪潮通用软件有限公司 | 一种基于增量的表单分层扩展方法 |
CN107193579A (zh) * | 2017-03-29 | 2017-09-22 | 武汉斗鱼网络科技有限公司 | 计划任务的实现方法及装置 |
CN107193579B (zh) * | 2017-03-29 | 2021-04-27 | 武汉斗鱼网络科技有限公司 | 计划任务的实现方法及装置 |
CN107301044A (zh) * | 2017-06-09 | 2017-10-27 | 广州慧扬健康科技有限公司 | 用于代谢病电子病历表单的多页控件 |
CN107608747A (zh) * | 2017-09-22 | 2018-01-19 | 携程旅游信息技术(上海)有限公司 | 表单***的构建方法、装置、电子设备、存储介质 |
CN108196921A (zh) * | 2017-12-26 | 2018-06-22 | 金蝶软件(中国)有限公司 | 单据开发方法、装置、计算机设备和存储介质 |
CN108196921B (zh) * | 2017-12-26 | 2021-03-16 | 金蝶软件(中国)有限公司 | 单据开发方法、装置、计算机设备和存储介质 |
CN108509246A (zh) * | 2018-04-08 | 2018-09-07 | 重庆满惠网络科技有限公司 | 一种网页表单自定义验证方法和*** |
CN108664604A (zh) * | 2018-05-09 | 2018-10-16 | 四川华创世纪科技有限公司 | 一种实现数据最小拆分储存和业务调用呈现的方法 |
CN108664604B (zh) * | 2018-05-09 | 2021-08-24 | 四川华创世纪科技有限公司 | 一种实现数据最小拆分储存和业务调用呈现的方法 |
CN109472015A (zh) * | 2018-11-01 | 2019-03-15 | 北京京航计算通讯研究所 | 基于表单自定义功能的型号生产履历生成*** |
CN109408494B (zh) * | 2018-11-01 | 2022-07-19 | 北京京航计算通讯研究所 | 基于表单自定义功能的型号生产履历生成方法 |
CN109408494A (zh) * | 2018-11-01 | 2019-03-01 | 北京京航计算通讯研究所 | 基于表单自定义功能的型号生产履历生成方法 |
CN109445794A (zh) * | 2018-11-12 | 2019-03-08 | 北京中电普华信息技术有限公司 | 一种页面构造方法及装置 |
CN109445794B (zh) * | 2018-11-12 | 2022-01-28 | 北京中电普华信息技术有限公司 | 一种页面构造方法及装置 |
CN109634606A (zh) * | 2018-12-10 | 2019-04-16 | 山东浪潮通软信息科技有限公司 | 一种定义功能菜单的方法及装置 |
CN110222047A (zh) * | 2019-04-28 | 2019-09-10 | 深圳易伙科技有限责任公司 | 一种动态表单生成方法和装置 |
CN110287219A (zh) * | 2019-06-28 | 2019-09-27 | 北京九章云极科技有限公司 | 一种数据处理方法及*** |
CN110377603A (zh) * | 2019-06-28 | 2019-10-25 | 中信百信银行股份有限公司 | 数据存储方法和装置 |
CN110287219B (zh) * | 2019-06-28 | 2020-04-07 | 北京九章云极科技有限公司 | 一种数据处理方法及*** |
CN110750683A (zh) * | 2019-09-20 | 2020-02-04 | 平安普惠企业管理有限公司 | 数据修改方法、装置、计算机设备及存储介质 |
CN111241785A (zh) * | 2019-12-31 | 2020-06-05 | 中华人民共和国天津海事局 | 基于要素变量动态编码的船舶数据模型 |
CN111897801A (zh) * | 2020-08-05 | 2020-11-06 | 上海伯俊软件科技有限公司 | 基于元数据层的自主表单配置方法 |
CN111933228A (zh) * | 2020-08-11 | 2020-11-13 | 上海亿锎智能科技有限公司 | 用于临床研究中的项目分发与管理***的实现方法和装置 |
CN111933228B (zh) * | 2020-08-11 | 2024-04-09 | 上海太美星云数字科技有限公司 | 用于临床研究中的项目分发与管理***的实现方法和装置 |
CN112286999A (zh) * | 2020-08-12 | 2021-01-29 | 北京海致网聚信息技术有限公司 | 基于mysql和mongodb的动态表单实现方法 |
TWI799920B (zh) * | 2021-07-21 | 2023-04-21 | 玉山商業銀行股份有限公司 | 具深度彈性的動態表單生成方法與表單系統 |
CN114356252A (zh) * | 2021-12-27 | 2022-04-15 | 金蝶软件(中国)有限公司 | 动态字段打印方法、***及相关装置 |
CN114356252B (zh) * | 2021-12-27 | 2024-03-19 | 金蝶软件(中国)有限公司 | 动态字段打印方法、***及相关装置 |
CN115983232A (zh) * | 2023-03-21 | 2023-04-18 | 青岛诺亚信息技术有限公司 | 一种基于视图、数据一体化设计的表单*** |
CN115983232B (zh) * | 2023-03-21 | 2023-07-04 | 青岛诺亚信息技术有限公司 | 一种基于视图、数据一体化设计的表单*** |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103246733A (zh) | 一种基于元数据的动态表单***及其生成方法 | |
US10706221B2 (en) | Method and system operable to facilitate the reporting of information to a report reviewing entity | |
CN103177068B (zh) | 按照生存规则合并源记录的***和方法 | |
US7673282B2 (en) | Enterprise information unification | |
US8020144B2 (en) | Metadata-based application deployment | |
CN101706716B (zh) | 基于vo的表单定制配置与解析运行方法 | |
CN105849726B (zh) | 用于高效地支持通过分层标记数据的即席查询的通用索引 | |
CN101794226B (zh) | 一种适应多业务抽象层次的服务化软件构造方法和*** | |
Karnitis et al. | Migration of relational database to document-oriented database: structure denormalization and data transformation | |
CN102779040B (zh) | 一种生成自定义表单的方法和装置 | |
Bonifati et al. | Schema validation and evolution for graph databases | |
CN105144080B (zh) | 用于元数据管理的*** | |
CN108153897B (zh) | 一种plsql程序代码生成方法及*** | |
CN103593443A (zh) | 一种电子文件元数据扩展的方法 | |
CN110543303B (zh) | 一种可视化业务平台 | |
US8341191B2 (en) | Methods and structures for utilizing reusable custom-defined nestable compound data types to permit product variations within an existing taxonomy | |
CN101539855A (zh) | 一种业务基础软件平台 | |
US8510341B2 (en) | System, method and structures for a reusable custom-defined nestable compound data type for construction of database objects | |
CN101971176A (zh) | 用于建立可扩展业务应用的类型*** | |
CN101901265B (zh) | 一种虚拟试验数据对象化管理*** | |
CN103778107A (zh) | 一种基于excel快速动态生成表单的方法与平台 | |
US20090049064A1 (en) | Data and application model for configurable tracking and reporting system | |
CN101226573A (zh) | 一种控制电子文档的访问权限的方法 | |
CN103914290A (zh) | 一种操作命令处理方法及装置 | |
US20090055341A1 (en) | Regulatory Survey Automation System (RSAS) |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
WD01 | Invention patent application deemed withdrawn after publication | ||
WD01 | Invention patent application deemed withdrawn after publication |
Application publication date: 20130814 |