《DB3502∕T 056.4-2020 政务信息共享协同平台 第4部分:二次开发.docx》由会员分享,可在线阅读,更多相关《DB3502∕T 056.4-2020 政务信息共享协同平台 第4部分:二次开发.docx(47页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、ICS35.240CCSL773502/T福建省厦门市地方标准DB3502/T056.42020政务信息共享协同平台第4部分:二次开发ThesharingandcollaborativeplatformofgovernmentinformationPart4:Secondarydevelopment2020-12-31发布2021-01-01实施厦门市市场监督管理局发布DB3502/T056.42020目次前言.II引言.III1范围.12规范性引用文件.13术语和定义.14缩略语.25业务流程开发.2流程脚本.2数据空间.116功能插件开发.13支持语言.13Java插件开发.13Pytho
2、n插件开发.14附录A(资料性)业务流程脚本与数据空间示例.15A.1流程脚本代码示例.15A.2数据空间代码示例.28附录B(资料性)Java插件代码示例.40B.1说明.40B.2Java插件源代码.40B.3平台流程调用.40附录C(资料性)Python插件代码示例.41C.1说明.41C.2Python插件源代码.41C.3平台流程调用.42参考文献.43IDB3502/T056.42020前言本文件按照GB/T1.12020标准化工作导则第1部分:标准化文件的结构和起草规则的规定起草。本文件为DB3502/T056政务信息共享协同平台的第4部分。DB3502/T056已发布了以下部分
3、:第1部分:总体设计;第2部分:资源管理;第3部分:接入要求;第4部分:二次开发。本文件是在DB3502/Z033.42016政务信息共享协同平台技术规范第4部分:平台二次开发的基础上,根据技术和需求变化,重新立项并制定的。与DB3502/Z033.42016相比,除结构性调整和编辑性改动外,主要技术变化如下:a)更新所支持开发语言版本(见6.2.1.3、6.3.1.3,DB3502/Z033.42016的6.1.1.3、6.2.1.3);b)更新二次开发示例代码(见附录B、附录C,DB3502/Z033.42016附录A、附录B、附录C)。请注意本文件的某些内容可能涉及专利。本文件的发布机构
4、不承担识别专利的责任。本文件由厦门市工业和信息化局提出。本文件由厦门市工业和信息化局归口。本文件起草单位:厦门市信息中心、厦门畅享信息技术有限公司、厦门市标准化研究院。本文件主要起草人:吕志仁、赖炜炜、巫晓强、杨远军、朱永上、彭明剑、郭劲军、郭望、傅楚隆、揭英杰、吴宸勖、陈尚峰、卢淼先、闫焕友、张金梅、刘姗姗、李童、蔡跃华。IIDB3502/T056.42020引言DB3502/T056政务信息共享协同平台旨在确立政务信息共享协同平台总体设计、资源管理、接入要求、二次开发的技术标准,拟由四个部分构成。第1部分:总体设计。目的在于确立平台关键技术路线和软件系统的组织形式,确保平台总体架构满足国家
5、对政务信息交换与共享的要求,明确平台内主要功能模块和模块间的逻辑关系,避免“过度建设”并确保“必要建设”。第2部分:资源管理。目的在于规范平台所支持的多种资源类型、协议标准、提供方式,为平台对外服务的兼容性提供保障;明确平台不同类型资源的属性,统一属性分类,为平台对外服务的通用性提供保障;针对资源生产、资源注册、资源测试、资源申请、资源调用、资源目录、资源检索、资源版本、资源安全等操作提出全生命周期管理要求,为平台对外服务的可用性提供保障。第3部分:接入要求。目的在于将平台对外接口标准化,明确接口在安全性、完备性、一致性、易用性、稳定性方面要求,进一步提升平台对外提供服务的能力和质量,并从网络
6、接入、平台资源生产方、平台资源消费方、区级平台接入等方面,明确接入的实现方式,为保障平台建设质量及拓展平台应用范围提供技术支撑。第4部分:二次开发。目的在于规范平台提供二次开发的工作方式、对扩展模块管理方式,为后续平台业务流程及插件的完善提供统一标准,既避免了平台直接耦合上层各类业务,又允许不同部门结合特定业务需要,在授权范围内扩展平台功能。IIIDB3502/T056.42020政务信息共享协同平台第4部分:二次开发1范围本文件规定了政务信息共享协同平台的业务流程开发和功能插件开发。本文件适用于政务信息共享协同平台功能扩展,软件开发人员基于本平台进行新功能的扩展开发时参照使用。2规范性引用文
7、件下列文件中的内容通过文中的规范性引用而构成本文件必不可少的条款。其中,注日期的引用文件,仅该日期对应的版本适用于本文件;不注日期的引用文件,其最新版本(包括所有的修改单)适用于本文件。DB3502/T056.12020政务信息共享协同平台第1部分:总体设计DB3502/T056.22020政务信息共享协同平台第2部分:资源管理DB3502/T056.32020政务信息共享协同平台第3部分:接入要求3术语和定义DB3502/T056.12020、DB3502/T056.22020、DB3502/T056.32020界定的以及下列术语和定义适用于本文件。变量variable由一个标识符、一组数据
8、属性、一个或多个地址和各数据值(地址与数据值间的联系可变)组成,通过声明或隐式声明建立的四元组。注:在某些编程语言中,地址可变,因而所结合的数据值可变,在其他编程语言中,地址固定不变,但所结合的数据值在执行期间可以改变。来源:GB/T5271.152008,定义15.03.03局部local修饰或说明某一语言构造:所具有的作用域仅在对其声明的声明区域内。来源:GB/T5271.152008,定义15.02.11全局global修饰或说明某一语言构造:处于所在程序中所有模块的作用域内。来源:GB/T5271.152008,定义15.02.12数组array1DB3502/T056.42020一种
9、作为某一数组型的一个数据实例,其中各元素或适当的元素组都可以随机而独立的加以引用的聚合。来源:GB/T5271.152008,定义15.03.08数据结构datastructure数据单元间的物理联系或逻辑联系和数据本身。来源:GB/T5271.152008,定义15.03.01同步synchronous用来修饰两个或两个以上的过程,他们取决于特定事件(如公用定时信号)的发生。来源:GB/T5271.12000,定义01.01.28异步asynchronous用来修饰两个或两个以上的过程,他们不取决于特定事件(如公用定时信号)的发生。来源:GB/T5271.12000,定义01.01.29并发
10、concurrency并发是指两个或多个线程(程序)在同一时间间隔内发生。并发性是指在一段时间内宏观上有多个程序在同时运行。4缩略语下列缩略语适用于本文件。BPEL:业务流程执行语言(BusinessProcessExecutionLanguage)ID:唯一编码(IdentityDocument)WSDL:Web服务器描述语言(WebServiceDescriptionLanguage)XML:扩展性标识语言(eXtensibleMarkupLanguage)XSD:文档结构描述(XMLSchemaDefinition)5业务流程开发流程脚本5.1.1总则5.1.1.1流程结构流程应支持以下
11、流程结构:空语句、条件分支流程、循环流程、并发流程、流程中断。5.1.1.2应用调用方式流程应支持以下应用调用方式:同步调用应用、异步调用应用。5.1.1.3流程脚本示例代码流程脚本示例代码见附录A。2DB3502/T056.420205.1.1.4流程脚本XSD描述流程脚本的XSD描述见图1。图1流程总结构5.1.1.5流程固有属性流程固有属性应包含“INFORMATION”、“GLOBAL_DATA”和“REQUESTER”:a)INFORMATION节点:描述流程名称、流程备注、流程版本、流程作者等信息;3DB3502/T056.42020b)GLOBAL_DATA节点:定义流程的入参和
12、返回结果,同时包含帐户设计器自动列出的本流程使用的全局变量;c)REQUESTER节点:用于在流程每次运行时,自动采集本次请求方的信息。5.1.2流程信息/INFORMATION节点流程信息/INFORMATION节点结构见图2,包括:a)flow_id:流程在管理平台上注册所获得的全局唯一ID;b)flow_name:流程可读名称;c)version:流程当前版本号,通常为一数值;d)author:流程作者,可选;e)DESCRIPTION:流程说明,可选;f)FLOWTIME:流程超时。流程将在运行时长超出该数值后,自动退出。格式为一整数,单位为秒;或者使用d表示天数、h表示小时数,m表示
13、分钟数,如:2d3h,表示超时时长为两天又三小时。图2流程信息/INFOMATION节点结构5.1.3流程全局数据/GLOBALDATA节点流程全局数据/GLOBAL_DATA节点结构见图3,包含流程入参列表、出参列表、和全局变量列表:a)流程入参列表应包含0到多个入参,值均为字符串,对应数据空间中的具体变量名;b)流程出参列表应包含0到多个出参,值均为字符串,对应数据空间中具体的变量名;c)全局变量列表由设计器自动生成,开发人员通常无须关注。图3流程全局数据/GLOBAL_DATA节点结构4DB3502/T056.420205.1.4流程请求方/REQUESTER节点流程请求方/REQUES
14、TER节点结构见图4。流程在运行期自动采集到的请求方信息,包括“requester_id/请求方ID”和“requester_name/请求方名称”。前者用以在识别同时一刻发起请求的不同请求方。图4流程请求方/REQUESTER节点结构5.1.5活动节点/ACTIVITY节点活动节点/ACTIVITY节点结构见图5。ACTIVITY是流程的语句,每一个ACTIVITY节点代表发起一次对功能活动的调用。可调用的功能活动包括外部平台服务资源、流程引擎自带的内核函数、或插件服务,统称为“活动”。ACTIVITY内部包含三个子语句:a)INIT:语句集,代表在调用当前活动之前执行的语句;b)INVOK
15、E:含PARAMETER和RESULT两个子语句:1)PARAMETER为本次活动所需入参,包括直接入参和表达式入参,其中,直接入参指特定变量,表达式指需进行计算后以求出入参值,比如1+2;2)RESULT为本次活动出参;c)FINI:语句集,代表在调用当前活动之后执行的语句。图5活动/ACTIVITY节点结构5DB3502/T056.420205.1.6异步活动/ASYNACTIVITY节点异步活动/ASYNACTIVITY节点结构见图6。该结构与ACTIVITY相同,但在调用上为异步调用,即无需等待活动返回结果,流程应继续向前执行,直到流程后续通过BRANCHEWAIT节点主动等待之前发起
16、的异步操作结果。图6异步活动/ASYNACTIVITY节点结构图7ASYNACTIVITY属性中的asyn_seed等信息6DB3502/T056.42020流程可在等待之前多次发起异步操作,为方便在等待时识别具体哪一次的异步调用,应在调用ASYNACTIVITY之前,通过ASYNSEED语句获得全局唯一的“异步种”数据,填写在ASYNACTIVITY节点的attributes(属性)中,见图7。其中:a)asyn_seed_id为异步种子数据,每一个ASYNACTIVITY语句都拥有不同的该值;b)asyn_invoke_id为系统自动产生的异步调用种子数据,即使同一异步调用语句,多次调用也
17、会产生不同的该值。5.1.7异步活动种子/ASNSEED节点异步活动种子/ASYNSEED节点结构见图8。该节点用于产生异步调用所需的异步种,包括获得“asyn_seed_id/异步种ID”及本次异步的超时、后台检查时间时隔等配置。图8异步活动种子/ASYNSEED节点结构5.1.8并发等待/BRANCHWAIT节点并发等待/BRANCHWAIT节点结构见图9。BRANCHWAIT语句既用于等待并发,也用于等多个(次)异步执行的结果。应在属性中填写所需要等待的异步种。图9并发等待/BRANCHWAIT节点结构BRANCHWAIT包含三个子语句,三者均为语句集:7DB3502/T056.4202
18、0a)CONVERGE:在有新的异步或并行运行结果到来时,触发调用,以执行其内部语句,通常流程在此实现多次异步运行结果或多个并发分支的数据合并。系统应保障每一时刻,仅会有一次并发或异步运行流程进入该合并节点;b)INTERRUP:由后台线程周期性执行;c)TIMEOUE:在指定异步种所对应的并发或异步操作超时后触发。5.1.9并发/CONCURRENCE节点并发/CONCURRENCE节点结构见图10。CONCURRENCE应满足以下条件:a)包含零或多个分支子语句BRANCH,和一个BRANCHWAIT语句,后者用以等待前面所有分支持的运行结束;b)包含INIT和FINI语句,分别在所有并发
19、开始之前,和BRANCHWAIT结束之后执行。图10并发/CONCURRENCE节点结构5.1.10结束并发等待/ENDWAIT节点结束并发等待/ENDWAIT节点结构见图11。该节点用于在BRANCHWAIT中,中途放弃等待,直接运行BRANCHWAIT之后的语句。图11结束并发等待/ENDWAIT节点结构5.1.11条件分支/IF节点8DB3502/T056.42020条件分支/IF节点结构见图12。IF节点包含一个CONDITION节点和一个ELSE节点,以及其它语句子集。CONDITION本身也是语句子集,并带有“conclusion”属性。CONDITIONS内部语句执行过程用以确定
20、该属性的值为TRUE或FALSE。如果为TRUE,则运行其后除ELSE之后的所有子语句,否则直接运行ELSE语句。图12条件分支/IF节点结构5.1.12条件未命中/ELSE节点条件未命中/ELSE节点结构见图13。该节点不作为流程的一级节点出现,仅作为IF语句的子节点,在IF语句中条件为假时执行其内部的子语句。图13。图13条件未命中/ELSE节点结构5.1.13空语句/PASS节点空语句,仅作为占位符,不执行任何操作,见图14。图14空语句/PASS节点结构9DB3502/T056.420205.1.14多分支/SWITCH节点多分支/SWITCH节点结构见图15。SWITCH语句提供多分
21、支支持。每个分支为一个CASE语句。CASE语句应符合5.2.15的要求。如果没有任何CASE语句中的条件成立,则执行DEFAULT语句。图15多分支/SWITCH节点结构5.1.15多分支入口/CASE节点多分支入口/CASE节点结构见图16。CASE语句不是流程的一级语句,只准许出现在SWITCH语句中,提供case_index属性,用于决定SWITCH语句判断各CASE语句的次序。判断CASE语句的条件为其内的CONDITIONS语句。CONDITIONS语句的执行应符合5.2.11的相关要求。注:执行某一CASE语句之后,不会像C/C+语言的一样执行后续CASE,无需BREAK语句即可
22、自动跳出。图16多分支入口/CASE节点结构5.1.16流程中断/TERMINATE节点流程中断/TERMINATE节点结构见图17。TERMINATE语句用于中途结束整个流程。使用该语句,流程将异常退出。图17流程中断/TERMINATE节点结构5.1.17循环/WHILE节点循环/WHILE节点结构见图18。WHILE在其内部的CONDITION语句条件成立时,将反复执行其内的子语句,直到条件不成立或遇到BREAK语句。10DB3502/T056.42020图18循环/WHERE节点结构5.1.18循环跳出/BREAK节点BREAK语句将向上寻找所有父语句,直到遇到第一个WHILE循环,将
23、中途结束该循环,继续执行WHILE之后的语句,见图19。图19循环跳出/BREAK节点结构5.1.19循环继续/CONTINUE节点CONTINUE语句将向上寻找所有父语句,直到遇到第一个WHILE循环,将中途跳出该循环的本次迭代,直接进入下一遍循环。见图20。图20循环继续/CONTINUE节点结构数据空间5.2.1数据结构类型5.2.1.1政务信息共享协同平台支持三类数据结构:简单型、结构型、数组型。其中结构型和数组同为复杂结构型,二者可组合,如:结构中含有数组数据,或数组的元素是结构类型。数组在理论上应支持无限维度。5.2.1.2数据空间示例代码见附录A.2。5.2.2简单数据/Simp
24、leItem简单数据/SimpleItem结构见图21。简单数据包含“名称/name”、“类型/type”和“域/domain”属性,分别对应该变量的变量名、变量类型和变量可见范围。支持的简单数据类型包括四种类型:字符串/string、布尔型/boolean、整型/integer和双精度浮点数/double。11DB3502/T056.42020图21简单数据/SimpleItem5.2.3数组数据/ArrayItem数组数据/ArrayItem结构见图22。ArrayItem应符合以下要求:a)提供DEF节点,以定义其元素的结构类型。如:在DEF中定义的类型是SimpleItem结构,且数据
25、类型为string,则得到一个字符串类型的数组;在DEF中定义的类型是一个一维数组,则得到一个一维数组的数组,即二维数组。b)DEF节点之后,为具体的元素数组。5.2.4结构数据/StructItem图22数组数据/ArrayItem结构化数据/StructItem结构见图23。StructItem是多个相同或不同类型数据的组合,应符合以下要求:a)支持结构嵌套子结构的多级结构;b)支持包含数组的数据。12平台数据类型Java数据类型转换过程备注简单类型的stringString简单类型integerint简单类型booleanboolean简单类型doubledoubleStructItem
26、Object平台结构转换Java对象,该对象的class定义应存在。ArrayItemArrayListDB3502/T056.42020图23结构化数据/StructItem6功能插件开发支持语言当前平台支持基于Java语言和Python语言的插件开发。Java插件开发6.2.1Java插件基本要求6.2.1.1插件提供形式:Java插件应提供.java的源文件以进行插件代码审查。审查通过后再由平台运行环境编译为.class文件。6.2.1.2插件部署位置:插件固定部署在平台部署目录的bin/plugin/java作为类起始目录,不同插件项目宜在其下创建不同的子目录。6.2.1.3Java运
27、行环境:支持1.8.0.x版本,未来视平台持续改进,宜使用更高版本。6.2.1.4流程脚本中调用方法:通过ACITIVITY或ASYNACTIVITY,指定其所调用的活动类型为java_plugin,并指定路径为“core/java/路径名/类名/静态方法名”。6.2.1.5插件功能调用入口:类似Java项目的Main方法,仅允许使用静态方法作为入口。6.2.1.6Java插件开发与使用示例,见附录B。6.2.2Java插件数据结构对应关系Java插件数据结构对应关系见表1。表1Java插件数据结构对应关系13平台数据类型Python数据类型转换过程备注简单类型的stringstring简单类
28、型integerint简单类型booleanbool简单类型doublefloatStructItemdict平台结构转换Python对象,该对象的class定义应存在。ArrayItemlistDB3502/T056.42020Python插件开发6.3.1Python插件基本要求6.3.1.1插件提供形式:Python插件应提供.py的源文件以进行插件代码审查。6.3.1.2插件部署位置:插件固定部署在平台部署目录的bin/plugin/python作为python文件起始目录,不同插件项目宜在其下创建不同的子目录。6.3.1.3Python运行环境:支持2.6.x及2.7.x版本,未来随
29、平台持续改进,宜升级至新版本Python运行环境。6.3.1.4流程脚本中调用方法:通过ACITIVITY或ASYNACTIVITY,指定其所调用的活动类型为python_plugin,并指定路径为“core/java/路径名/py文件名”。其中py文件名不含扩展名。6.3.1.5插件功能调用入口:仅允许以自由函数作为入口。6.3.1.6Python插件开发与使用示例,见附录C。6.3.2Python插件数据结构对应关系Python插件数据结构对应关系见表2。表2Python插件数据结构对应关系14DB3502/T056.42020AA附录A(资料性)业务流程脚本与数据空间示例A.1流程脚本代
30、码示例CreatedbyCollaGENFlowDesigner.Copyright3600s$/XM$/SFZH$/SHBXH$/hcjgjy$/_OUT_PARAMETERS_REGISTER_$/_FLOW_EXCEPTION_$/_BRANCHTASKS_$/_REQUESTER_INFORMATION_$/_FLOW_INFORMATION_$/_NET_FAILD_DISPOSE_$/_SERVICE_FAILD_DISPOSE_$/_REQUESTER_SESSION_ID_$/_REQUESTER_CONNECTION_ID_15DB3502/T056.42020$/_REQUESTER_PORTAL_ID_$/_LAST_APP_EXCEPTION_$/_PARENT_CHILD_RELATION_$/_RUNTIME_TASK_ID_$/XM$/SFZH$/SHBXH$/hcjgjyGLOBA