金蝶云星空协同开发云——新增业务对象金蝶云星空生态与平台开发支持部Content01协同开发平台开发规范02创建新的业务对象(基础资料)项目组织、研发过程、研发质量、项目交付、业务对象开发、代码编写、脚本编写规范基础资料属性、权限控制、导出权限项脚本、网络控制、发布菜单3项目组织规范•所有二次开发项目必须基于协同开发平台,以应用方式进行二次开发,开发内容包含但不限于业务对象开发,插件开发,配置文件,第三方组件,自定义客户端等•二次开发所建的应用名必须由项目负责人建立,应用名称与客户正式名称一致。•所有项目实施,开发等干系人都必须以参与者方式加入应用中。•对于并发许可及特殊环境的客户二次开发,需要申请集成开发平台二次开发权限,批准后才给予开通。•所有开发商代码必须是由协同开发平台分配的3-4位开发商代码,不允许私自设置与系统不兼容的开发商代码。•行业产品的开发应用建立必须使用企业开发商码,项目交互的应用可以选择个人或企业的开发商代码。•二次开发代码不允许上传至GitHub等开源代码托管平台。、4研发过程规范•需求任务管理,需求是项目二次开发必须达到的目标与能力。通过需求分析,任务分解,制定对应迭代开发/测试计划,并以此评估项目进度和风险。推荐使用云之家在线文档,对需求任务进行统一管理与跟进。•开发与实施人员的开发过程均在协同开发平台上进行,不允许以其他方式进行。•独立开发与测试环境部署,开发成果以在线构建安装包提供给测试环境。非特殊情况,不允许直接修改测试环境。•关键功能实现需要编写设计文档,编写单元测试代码。•关键功能需要编写测试用例,进行单元测试,以及性能测试。必要时,需要建立自动化测试方案。•测试问题需要以BUG管理方式进行跟踪,推荐使用云之家在线文档。5研发质量管理•业务对象开发必须遵守业务对象开发规范。•C#插件代码开发必须遵守代码开发规范。•代码中的Sql语句与预置Sql脚本文件中的Sql语句,必须遵守脚本编写规范。•第三方系统对接星空产品,必须使用星空标准OpenAPI,不允许使用直接数据库对接或是WebService等其他方式,必须遵守OpenAPI开发规范。•在线构建完成后,会有对应的应用分析报告,汇报规范质量相关问题,需要开发责任人关注质量问题,并持续改进。•在质量问题未能解决时,不允许进行正式上线以及公有云上线。6项目交付规范•私有云上线规范:必须使用协同开发平台在线构建安装包进行上线,安装包必须是通过测试验证,经过质量检测的产品。严禁直接往生产服务器替换组件、在正式数据中心执行Sql等操作。•公有云上线规范:必须使用协同开发平台在线构建安装包进行上线,安装包必须是通过测试验证,经过质量检测的产品。二次开发都需要走二开上线流程,要求开发者通过协同开发平台提交上线申请。7业务对象开发规范命名规范•扩展或新增业务对象时(含转换规则、报表等动态领域模型),其业务对象Key可以选择系统生成的GUID。•如果需要自定义业务对象Key,必须以开发商代码加下划线排头(如:PAAB_xxxxx),且Key长度不允许超过30字符,只能使用字母、下划线。•扩展的字段标识和属性必须以开发商代码加下划线排头(如:PAAB_xxxxx),字段名必须包含开发商代码(如:F_PAAB_xxxxx)。•扩展的任何元素,例如标签控件、页签控件、面板控件等,标识必须以开发商代码加下划线排头(如:PAAB_LableXXX,PAAB_TabXXX等)。设计规范•不允许对一个业务对象或是单据转换,进行多个平级扩展,如果因为多个安装包,或是多个行业产品导致的平行扩展,必须显式指定设置平行扩展加载顺序。•一个单据的字段总数原则上不要超过50个字段(含隐藏字段)。•框架布局下,停靠上,下,左,右的元素小于等于1个,中间停靠的等于1个,同时,停靠元素的同级上不允许存在绝对布局元素。•字段的默认属性按需设置,例如单据列表默认显示、支持引出、支持引入等需要按照业务进行默认的设置。•网控必须配置,防止并发修改数据导致数据错误。•基础资料表单主键设计建议使用整型,否则不支持单据转换。8代码编写规范命名规范•工程名称必须以下述标准进行命令,{开发商标识}.{项目}.{工程归类}(如:PPAB.K3Cloud.PrintingSystem.cscproj)。•如果存在细分模块,可以使用四级命名空间,如:{开发商标识}.{项目}.{工程归类}.{模块名}(如:PPAB.K3Cloud.PrintingSystem.ProductionOrder.cscproj)。•命名空间必须与工程名、生成的程序集名称一致。•工程命名遵守大驼峰法则,除了用以分隔的‘.’外,仅允许使用26个大小写英文字母或辅助数字命名。•表单插件工程命名规则:{开发商标识}.{项目}.{工程归类}[.{模块名}].XxxxxBusinessPlugIn(如:PPAB.K3Cloud.PrintingSystem.SaleOrderBusinessPlugIn.cs或PPAB.K3Cloud.PrintingSystem.ProductionOrder.SaleOrderBusinessPlugIn.cs)。•服务操作插件工程命名规则:{开发商标识}.{项目}.{工程归类}[.{模块名}].XxxxxServicePlugIn(如:PPAB.K3Cloud.PrintingSystem.SaleOrderServicePlugIn.cs或PPAB.K3Cloud.PrintingSystem.ProductionOrder.SaleOrderServicePlugIn.cs)。•其他类、方法名、变量等遵守大驼峰、小驼峰命名规则。禁止使用的代码•禁止所有一切可能威害服务器运行安全的代码,代码标准平台会动态调整,当前已包含的规则:•禁止任何使用进程的代码:(如:Process、ProcessStartInfo、System.Diagnostics…)。•禁止任何读取操作系统用户信息的操作:(如:ProductEnvironmentService、IEnvironmentDetectService、EnvironmentDetect、ProductEnvironment、Environment…)。•禁止使用本地文件操作(网络流操作,平台规定的临时目录除外):(如:System.IO、FileStream、StreamWriter、TextWriter、BufferedStream、MemoryStream、BinaryWriter、File.Create、Directory.CreateDirectory…)。•禁止任何Socket侦听的代码:(如:Socket、System.Net.Sockets、SocketAsyncEventArgs、SocketServiceManager、SocketClientManager…)。•禁止调用管理中心或其他BOS禁用调用接口:(如:GetManagementDataCenterContext、Kingdee.BOS.MC.ServiceHelper、Kingdee.BOS.MC、Kingdee.BOS.MC.App、Kingdee.BOS.MC.ServiceFacade…)。•禁止UnSafe代码使用。设计规范•禁止在大批量循环中,执行低性能或是高数据量SQL,会导致严重性能问题。•代码中Sql脚本使用KSql规范。9脚本编写规范KSQL规范•金蝶云星空Sql脚本使用KSql编写。DDL规范(数据库定义语言alter/drop……)•表名视图名必须以开发商标识加下划线排头[{ISV标识符}_T_{名称}](如:ABC_T_USER)。•字段名必须以F下划线加开发商标识加下划线排头[F_{ISV标识符}_{名称}](如:F_ABC_USERNAME)。•表必须有物理主键,建立聚集索引。•主键原则上使用整型(不允许用自增长主键),数据量较小的表可以使用字符型。•禁止修改标准产品视图。•禁止删除物理表(临时表除外)。•不建议使用存储过程。•主键和索引字段的值不允许为null。•GUID字段不允许建立为聚集索引。•主从关系表,从表需要引用主表中某个字段,字段名称要求一致,外键字段考虑建立非聚集索引。•一般数量、金额类型:必须使用精确数值类型,如:Decimal,禁止为空,指定默认值为0;禁止使用Double、Float、Money等非精确类型,对这种类型固定为Decimal(23,10)、Decimal(19,6),必须明确指定小数精度。•字符类型,统一使用nvarchar数据类型。•Notnull属性的字段,必须设置缺省值。•多语言字段单独放在一张表中,外键字段必须建立非聚集索引。•使用ntext数据类型替代text数据类型。•临时表必须显式地创建,使用完毕后必须显式地删除。DML规范(数据库操纵语言insert/delete/update/select……)•任何查询都要带查询条件。•查询条件必须使用参数化查询。•保持事务简短并处于一个批处理中。•使用较低的隔离级别。如对于查询报表和序时簿等查询,设置较低的事务隔离级别,提高并发能力。•必须使用join语句进行表间连接,禁止使用where条件进行表连接。•Join表数量数量控制在10个以内,如果超出,需要考虑其他实现方案。•预插数据insert前必须按主键匹配删除再插入。•一次批量提交SQL的语句不应该超过500条,如果超过,需要分几次提交。•可以关联物理表实现的SQL语句,不要关联视图。•SQL脚本中禁止使用外部联接运算符“*=”和“=*”。•ORDERBY子句中的字段别名禁止使用表别名作为前缀。[SQLSERVER2005下执行中断]。•不要在where子句中的“=”左边进行函数、算术运算或其他表达式运算,否则系统将可能无法正确使用索引。•不要在where条件中使用函数,否则将不能利用索引。•在where条件中使用明确的字段类型值,避免由于隐式转换而不能正确使用索引。•where子句中不要使用case条件。•对于where条件中查询连续的数值,使用between替代in。•如果in子句中需要查询的值较多(大于30个),必须使用表函数方式实现。•不允许使用fidin(selectfidfrom…),必须采用exist(select1from…wherev.fid=fid)的方式。Content01协同开发平台开发规范02创建新的业务对象(基础资料)项目组织、研发过程、研发质量、项目交付、业务对象开发、代码编写、脚本编写规范创建基础资料、权限控制、导出权限项脚本、网络控制、发布菜单、基础资料属性11创建新基础资料•基础资料是系统运行需要的基础数据,例如员工、物料等•在对应子系统-基础资料-普通基础资料,右键菜单,点击新增12创建基础资料你可以选择新增/复制/继承三种方式来新增业务对象•新建:创建全新的业务对象,所有业务逻辑及界面属性需要定义,实现按需设计、自由度高;•复制:复制现有的业务对象,创建出新的业务对象,复制现有对象的界面及业务逻辑。实现快速设计,快速上线;原对象的改动、增加字段,新对象不会感知并体现出来;•继承:继承原对象的元数据、界面元素以及相关属性,创建出新的业务对象;原对象的改动、增加字段,新对象会感知并体现出来;13基础资料与组织隔离•基础资料支持组织隔离;•创建组织下建立的基础资料,分配到使用组织,使资源共享;•使用组织可以有效实现数据隔离,用户只能查看有权限组织下的资料,保障信息安全;14基础资料实现组织隔离的方式•属性配置实现组织隔离;•相关属性说明;15继承基类模板,实现组织隔离推荐使用继承BOS-基对象模板中预置的模板进行业务对象的创建:•不同功能的业务对象有不同的功能模板,可以快速完成原型的建立•可以直接使用标准的菜单/事件/插件功能,不需要手动再次添加•基础的字段已经添加,可以支持基础信息与基础流程,不需要额外的处理•未来标准产品界面新功能添加后,二次开发的内容可以直接使用•你也可以通过继承基础模板之后,创建自己的业务对象模板继承16基础资料设计界面业务对象编辑主界面-工具箱1、工具箱包含:常规字段、通用控件、业务字段和HTML控件;2、常规字段中,目前支持62种字段类型;3、通用控件中,有40种控件类型;4、字段指有一些语义的逻辑元素,如日期、小数;控件主要用于界面布局,如分割容器、面板;5、业务字段就是一定有业务含义的常规字段;6、字段与控件,都有对应的属性设置;工具箱及属性配置•业务对象支持添加多种类型字段、控件;•也支持表格、以及表格列的元素属性编辑;•业务对象能够添加哪些元素,一目了然;•通过调整元素的属性,实现个性化的需求;19创建权限对象•一般情况,我们会为每一个需要权限控制的业务对象创建权限对象•Administrator登录星空产品,在权限对象菜单创建新的权限对象,并设置基础操作权限项•如果有特殊权限,需要先创建特殊权限项,然后与权限对象关联20关联权限对象•打开编辑-权限控制设置,关联当前业务对象的权限对象•你可以取消业务对象的权限控制•也可以选择对应的权限对象进行权限控制•设置完成后,退出界面,保存业务对象21导出权限对象预置数据•点击当前业务对象节点,右键菜单->导出权限对象,可以在安装脚本->SQL脚本节点下自动生成对应权限对象预置脚本•通过构建部署,可以将权限对象数据准确/快捷部署到测试/正式环境中•如果权限对象有改动,可以再次导出获取,生成更新的脚本22发布菜单•点击安装脚本-主控菜单,右键发布菜单,可以发布新菜单•新增菜单明细,关联当前业务对象,设置权限[查看]与发布类型[列表]•如果当前业务对象不进行权限控制,则不需要设置权限项•你也可以选择其他业务领域,或是自己创建自己的菜单分组来发布菜单•发布成功后会自动生成脚本,修改菜单信息会自动重新生成脚本•在星空产品中为用户设置角色/关联权限对象之后,就可以进入菜单,查看新增业务对象实际效果23网络控制系统中各类业务会同时进行中,有些模块、单据之间是存在依赖关系的,为了确保业务的准确性,系统通过网络控制来实现对冲突业务的管控。注:可以通过【冲突操作列表】清除异常的网络控制•系统独占:选择系统独占,开启系统独占表示该系统下用户A进入任何单据、报表时,其他人不能打开该系统下的单据、报表等业务对象,例如:供应链、生产制造、财务会计就属于系统。•子系统独占:选择子系统,开启子系统独占表示该子系统下用户A进入任何单据、报表时,其他人不能打开该子系统下的单据、报表等所有业务对象,例如,供应链下的采购管理、库存管理、销售管理等属于子系统。与独占系统类似,只能控制到系统下面一个层级(子系统)。•子系统互斥:标识当前子系统被人占用后,其他的子系统不允许同时进入•子功能明细互斥:可以设置每个发布的入口与其他功能入口之间互斥•业务操作互斥:表示同一张单据上哪些操作之间是互斥。这是比较常用的,系统单据也有进行预置。24基础资料介绍•基础资料特指基础资料类单据;根据业务场景应用,单独抽象的一种业务对象。如供应商、联系人、物料等;•从业务角度讲基础资料分三类:主档资料、基本资料、辅助资料;•主档资料:就是主数据,包括:部门、员工、供应商、客户及物料;•辅助资料:就是业务应用上简单基础资料,按领域显示,以便于区分和使用;•基本资料:就是除主档和辅助资料之外的资料,包括:岗位信息、币别、记录单位、费用项目、会计政策等公共资料;可视化基础资料设计基础资料的属性说明代码字段名称字段选择基础资料上的文本字段作为存储展示基础资料编码的字段,配置编码规则后,自动生成编码选择基础资料上的文本字段作为存储展示基础资料名称的字段列表F8查询过滤条件列表固定过滤条件基础资料字段F8列表查询的默认条件,打开F8界面时默认以此条件查询并展示F8数据作为列表过滤查询时的默认条件,打开列表界面默认以此条件查询,列表过滤界面条件在此基础上进行过滤查询基础资料分配关系表允许单元格切换事件存储基础资料组织分配关系的物理表支持切换基础资料字段单元格执行事件,需配合插件支持批量插入单据体基础资料字段录入时,支持批量返回插入多条基础资料数据勾选后基础资料受基础资料控制策略管控是否基础资料控制策略管理基础资料字段属性描述26基础资料控制类型•基础资料控制类型:私有,共享,分配•私有型:就是基础资料只能在创建组织维护和使用,其他组织不能维护和使用;•共享型:就是基础资料可以在定义的创建组织维护和使用,其他组织只能使用;•分配型:就是基础资料可以在定义的创建组织维护和使用,通过分配操作分配到定义的目标组织下进行受限制维护和使用;•【不可修改】选项=勾选,则不能调整策略类型•【不可修改】选项=不勾选,则可以调整策略类型27编码规则–代码字段–名称字段•设置业务对象的单据编号生成规则,运行时单据保存时,可根据既定的规则自动生成单据编码,编码经过唯一性校验后,可展示在单据编号字段上•允许修改:支持手工输入编号•默认规则:设置默认的一套规则•自动补号:保存时自动补号•编码规则设置好后,【代码字段】属性选择基础资料文本字段作为存储展示基础资料编码的字段(例如:编号)•【名称字段】属性选择基础资料文本字段作为存储展示基础资料名称的字段28列表F8查询过滤条件单据上绑定该基础资料基础资料F8过滤条件配置FNUMBER=‘KD1’单据上基础资料选择数据时,只出现过滤的条件注:“列表固定过滤条件”与“列表F8查询过滤条件”主要区别是,该属性不仅对F8弹框过滤生效,也会对费用项目列表生效。29单据状态•单据状态:暂存、创建、审核中、已审核、重新审核•禁用状态:是、否•作废状态:未作废、已作废•BOS设计器,封装字段控件为【单据状态】,通过该字段控件及一些应用管控规则,实现了单据状态、禁用状态、作废状态、关闭状态等各类标识状态的场景。•简单的来说,可以将单据状态字段看做一个特殊的有选项的控件,系统可以通过暂存、保存、提交、审核、反审核、禁用、作废等各类操作,触发对应状态字段的状态值更新变化。•属性【单据状态字段】,默认FDocumentStatus对应的就是系统标准封装的单据状态字段,属性的含义是填写对应状态字段标识进行绑定。•被绑定的单据状态字段其标识=FDocumentStatus,该状态字段的状态列表对状态值有强制要求。30单据状态_状态列表•单据状态对应字段标识,对应前面的属性•点击【状态列表】属性,打开状态列表•暂存=Z,创建=A,审核中=B,已审核=C,重新审核=D,注意:不得更改状态的值,不得新增新的状态的值目的是标准产品统一暂存、保存、提交、审核、反审核操作调用时的状态值变化,形成操作与状态流转的闭环;以及不同单据之间过滤、F8列表、插件等统一。下方可以设置不同状态下,字段锁定不可编辑、单据界面菜单按钮锁定不可使用。31单据状态_操作列表•操作列表中选择需要的操作名称去绑定单据的状态•操作状态字段:设置保存操作绑定的状态字段•操作状态名称:设置要将指定的状态字段更新为哪个状态值名称•提交、审核、反审核等操作都是同理设置的。32常见属性•列表固定过滤条件:作为列表过滤查询时的默认条件,打开列表界面默认以此条件查询,列表过滤界面条件在此基础上进行过滤查询•基础资料分配关系表:存储基础资料组织分配关系的物理表•允许单元格切换事件:支持切换基础资料字段单元格执行事件,需配合插件支持批量插入:需基础资料引入引出权限,单据体基础资料字段录入时,支持批量返回插入多条基础资料数据Thanksterimakasih感謝谢谢ありがとうขอบคุณ