应用办公生活信息教育商业
投稿投诉
商业财经
汽车智能
教育国际
房产环球
信息数码
热点科技
生活手机
晨报新闻
办公软件
科学动态
应用生物
体育时事

OneCode开源低代码引擎白皮书

  一,背景
  随着低代码概念的火热,相关的技术及产品也是层出不穷,不管是老牌行业软件厂商还是开放平台厂商,不论是互联网行业企业SAAS软件新动向还是新兴的低代码创新产品服务,都在第一时间打出了低代码这张牌。各个平台虽然各有优势,但大多又是自成体系,真正在企业方面进行选择时却一时难以抉择。对于低代码平台的功能评价,以及各平台组件间的互联互通则成为了市场上迫切需求。
  在刚刚过去的2022年,在平台互联互通的方面,阿里在第二季度推出开源引擎LowCodeEngin,国家队信通院也应市场需求在第四季度推出了《低代码开发平台通用技术要求》,针对低代码相关概念以及功能点新型了进一步的规范和梳理。
  在全面开放的大背景下,CodeBee团队,推出了基于开源LGPL协议低代码引擎(LowCodeEngine)。
  二,产品组成
  低代码引擎,由界面设计器、OneCode通码框架以及,DSM领域建模工具三部分支撑体系相互支撑的部分来组成,通过开放标准的组件协议完成相互继承支持。
  (1)视图设计器引擎
  设计器,采用的是拖拽引擎插件的构造模型,用户可以通过开放的低代码协议编写插件。支持JS和JAVA两种扩展语言。样式构建提供了标准CSS3编辑器,支持事件动作以及函数动态扩展。支持自定义函数库扩展,支持阿里字体图片等资源库。
  (2)OneCode通码编辑器:
  OneCode,是一款为低代码语言定制的统一语法体系,采用Java语言作为原生语言,运行在JVM环境中,用户可以通过Java语言与低代码应用进行交互,也可以通过Java语言完成引擎插件,调用代码引擎完成编译部署应用。
  (3)DSMEngine领域建模:
  DSMEngine是独立于设计器的OneCode建模工具,平台采用领域建模模型,支持仓储管理、聚合应用,以及CodeFactory输出为OneCode代码编译输出。
  DSM模型支持三种建模模式:
  (1)CodeFrist代码优先模式
  通过Java语言OneCode模式原生撰写。
  (2)ViewFrist视图优先
  通过视图引擎拖拽完成前期的交互模型,反向完成DSM模型。
  (3)ModuleFrist模型优先
  通过数据库,微服务接口等模式,构建基础模型。
  DSM逆向转换
  通过不同方式完成的DSM模型,可以通过OneCode在视图、Code、以及Module三种方式之间自由切换,利用相关工具完成仿真调试以及部署运行。
  DSM第三方语言转换
  DSM出码模块采用了独立的模板架构,除了可以以OneCode形式存在,还可以支持独立的出码模块定制独立的第三方语言模型输出。
  三,设计器引擎介绍(1)功能概览
  (2)设计器布局
  设计器引擎是低代码引擎前端的SDK,面向开发人员,他本身不是一套可以适应所有人的低代码平台,而是技术开发人员可以通过扩展插件,周边生态,完成自身业务的定制,实现协同办公,CRM客户管理、物联网平台等通过低代码能力赋能业务系统(3)物料库
  物料:低代码引擎的核心目的之一是建设跨行业的低代码框架,而每个行业由于其应用的领域不同,使用的人员以及方法方式不同,在一些底层组件方面会有会有加大差距。比如:政府业务中会大量使用的非规则表单元素,企业应用中各个行业自有的图标体系,物联网行业大量的设备图标图片以及实时联网图。(4)组件库
  组件定义:可以用于低代码平台的组件,包含了搭建体验增强配置,可以在设计器中进行拖拽、配置等操作。有两种分类方式:按照场景可以分为基础组件、业务组件、图表组件、布局组件和复合组件等。通常用户可以自主完成相关设定,并根据业务特点在视图引擎中进行自行扩展(后续章节中会演示实际注册示例)
  组件通常是一组完成特定功能的可交互组件,根据不同的引擎模式,在引擎中完成加载渲染配置。
  配置示例
  Code转换
  组件调试导入
  (5)支撑管理
  公共资源导入
  (6)样式体系
  DOM树透视样式盒
  DOM树透视
  添加图片注释,不超过140字(可选)
  配图示例代码{alias:BuildTreeTreeView,key:xui。UI。TreeView,host:this,properties:{name:BuildTreeTreeGrid,items:〔{borderType:none,caption:JAVA树,dynDestory:false,hidden:false,id:getBuildTree,imageClass:bpmfontbpmgongzuoliuxitongpeizhi,tagVar:{}}〕,iniFold:false,dynDestory:true},CS:{KEY:{color:000000,fontweight:lighter,borderradius:0px2px0px0px},BAR:{fontfamily:tahoma,geneva,sansserif}}}
  动态样式盒
  添加图片注释,不超过140字(可选)
  代码配置示例{alias:xuiuicssbox1,key:xui。UI。CSSBox,host:this,properties:{className:xuicssame,normalStatus:{color:eeeeee,borderradius:6px,boxshadow:inset0px1px0px87C1DD,textshadow:01px0297192,gradient:{stops:〔{pos:0,clr:4BA3CC},{pos:70,clr:3289B2}〕,type:linear,orient:T},cursor:pointer,bordertop:solid3899C61px,borderright:solid3899C61px,borderbottom:solid3899C61px,borderleft:solid3899C61px},hoverStatus:{borderradius:0px3px0px0px}}}(7)事件框架
  添加图片注释,不超过140字(可选)
  配置代码示例:{alias:BuildTreeTreeView,key:xui。UI。TreeView,host:this,properties:{name:BuildTreeTreeGrid,items:〔{borderType:none,caption:JAVA树,dynDestory:false,hidden:false,id:getBuildTree,imageClass:bpmfontbpmgongzuoliuxitongpeizhi,tagVar:{}}〕,iniFold:false,dynDestory:true},events:{获取数据onGetContent:{actions:〔{args:〔{page。ReloadChild。setQueryData()},null,null,{args〔1〕。tagVar},〕,desc:设置扩展参数,method:setQueryData,redirection:other:callback:call,target:ReloadChild,type:control}〕},数据项选择onItemSelected:{actions:〔{args:〔{args〔1〕。id}〕,conditions:〔{symbol:nonempty,right:,conditionId:nonempty{args〔1〕。className},left:{args〔1〕。className}}〕,desc:删除存在页,method:removeItems,target:BuildTreeTab,type:control}〕}}}(8)动作调用
  功能概览
  添加图片注释,不超过140字(可选)
  添加图片注释,不超过140字(可选)
  配置实例代码:{args:〔{page。ReloadChild。setQueryData()},null,null,{args〔1〕。tagVar},〕,desc:设置扩展参数,method:setQueryData,redirection:other:callback:call,target:ReloadChild,type:control},{args:〔{page。ReloadChild。invoke()},temp,null,{args〔2〕}〕,desc:子节点装载,method:invoke,redirection:other:callback:call,return:false,target:ReloadChild,type:control}〕}(9)插件体系
  插件是嵌入到设计器的内置管理功能,不同于业务组件,插件更多的是系统极的扩展功能。在实际应用中也比较常见,如系统运行期我们要根据用户不同显示不同内容数据,这就需要权限插件来完成,而业务用户在使用过程也会涉及到大量的业务和数据的流转功能而这些功能则需要动态的来管理页面的属性,甚至动态生成注入页面。这就需要流程插件来辅助完成。在实际开发过程中特别是真实项目的工程开发时,我们往往要针对工程方面的进行很多的宏操作比如批量的修改特定组件样式,按特定条件检索复制组件特性,自动添加动作等等。这些都需要类似的宏插件来完成,OneCode在整合后端运行以及服务部署方面也是按插件体系来规范的。分别针对,DSM建模提供了DSM插件,发布管理及运行提供了OPS插件,API整合方面提供了代理服务器插件,系统插件部分采用全开源方式共有需要的用户自行修改方便用户后期可以参照插件体系来修改自身的插件体系。
  添加图片注释,不超过140字(可选)
  添加图片注释,不超过140字(可选)
  四,OneCode中后台
  OneCode本身基于JAVA语言体系,是在JavaSpring注解基础上的一套扩展子集,可以在普通额Java程序中通过添加注解,来实现前后台与低代码引擎的交互处理。(1)渲染原理
  (2)示例展示
  添加图片注释,不超过140字(可选)(3)完整模块OneCode
  添加图片注释,不超过140字(可选)
  添加图片注释,不超过140字(可选)ControllerRequestMapping(adminorgperson)MethodChinaName(cname人员管理,imageClassspafontspaiconlogin)Aggregation(sourceClassPersonService。class)publicclassPersonAPI{RequestMapping(methodRequestMethod。POST,valuePersons)GridViewAnnotation()ModuleAnnotation(caption人员列表)APIEventAnnotation(autoRuntrue,bindMenu{CustomMenuItem。reload})ResponseBodypublicListResultModelListPersonGridViewgetPersons(StringorgId){ListResultModelListPersonGridViewresultModelnewListResultModelListPersonGridView();ListPersonpersonListnewArrayList();try{personListgetService()。getPersons(orgId);resultModelPageUtil。getDefaultPageList(personList,PersonGridView。class);}catch(Exceptione){e。printStackTrace();}returnresultModel;}MethodChinaName(cname人员信息)RequestMapping(methodRequestMethod。POST,valuePersonInfo)NavGroupViewAnnotation()APIEventAnnotation(callback{CustomCallBack。ReloadParent,CustomCallBack。Close},bindMenu{CustomMenuItem。editor})DialogAnnotationModuleAnnotation(caption编辑人员信息,width800,height550)ResponseBodypublicResultModelPersonNavgetPersonInfo(StringpersonId){ResultModelPersonNavresultModelnewResultModelPersonNav();returnresultModel;}MethodChinaName(cname添加人员)RequestMapping(methodRequestMethod。POST,valueAddPersonView)FormViewAnnotationAPIEventAnnotation(bindMenu{CustomMenuItem。add},autoRuntrue)DisabledModuleAnnotation(caption添加人员信息,width370,height260)ResponseBodypublicResultModelAddPerson(StringorgId){ResultModelresultModelnewResultModel();CtPersonpersonnewCtPerson();person。setOrgId(orgId);resultModel。setData(newAddPerson(person));returnresultModel;}MethodChinaName(cname保存成员信息)RequestMapping(value{savePerson},method{RequestMethod。GET,RequestMethod。POST})APIEventAnnotation(callback{CustomCallBack。ReloadParent,CustomCallBack。Close},bindMenuCustomMenuItem。save)publicResponseBodyResultModelBooleansavePerson(RequestBodyCtPersonperson){ResultModelBooleanuserStatusInfonewResultModelBoolean();getService()。savePerson(person);returnuserStatusInfo;}MethodChinaName(cname删除人员)RequestMapping(value{delPerson},method{RequestMethod。GET,RequestMethod。POST})APIEventAnnotation(callback{CustomCallBack。Reload,CustomCallBack。ReloadParent},bindMenuCustomMenuItem。delete)publicResponseBodyResultModelBooleandelPerson(StringiD){ResultModelBooleanuserStatusInfonewResultModelBoolean();getService()。delPerson(iD);returnuserStatusInfo;}PersonServicegetService(){returnEsbUtil。parExpression(PersonService。class);}}PageBarGridAnnotation(eventCustomGridEvent。editor,customServicePersonService。class,customMenu{GridMenu。Add,GridMenu。Delete,GridMenu。Reload})publicclassPersonGridView{CustomAnnotation(pidtrue,hiddentrue)StringorgId;CustomAnnotation(pidtrue,hiddentrue)StringroleId;CustomAnnotation(uidtrue,hiddentrue)StringiD;CustomAnnotation(caption用户名称,requiredtrue)Stringname;CustomAnnotation(caption账户信息,requiredtrue)Stringaccount;CustomAnnotation(caption邮箱)Stringemail;InputAnnotation(inputTypeInputType。password)CustomAnnotation(caption密码,requiredtrue)Stringpassword;CustomAnnotation(caption手机)Stringmobile;CustomAnnotation(caption部门名称)StringorgName;publicPersonGridView(Personperson){this。iDperson。getID();this。orgIdperson。getOrgId();this。nameperson。getName();this。accountperson。getAccount();this。passwordperson。getPassword();this。mobileperson。getMobile();this。emailperson。getEmail();Orgorgnull;try{orgOrgManagerFactory。getOrgManager()。getOrgByID(person。getOrgId());this。orgNameorg。getName();}catch(OrgNotFoundExceptione){e。printStackTrace();}}}BottomBarMenuFormAnnotation(bottombarMenu{CustomFormMenu。Save,CustomFormMenu。Close},customServicePersonService。class,col1)publicclassAddPerson{CustomAnnotation(uidtrue,hiddentrue)StringiD;CustomAnnotation(caption用户名称,requiredtrue)Stringname;CustomAnnotation(pidtrue,hiddentrue)StringorgId;CustomAnnotation(pidtrue,hiddentrue)StringroleId;CustomAnnotation(caption账户信息,requiredtrue)Stringaccount;CustomAnnotation(caption邮箱)Stringemail;InputAnnotation(inputTypeInputType。password)CustomAnnotation(caption密码,requiredtrue)Stringpassword;CustomAnnotation(caption手机)Stringmobile;publicAddPerson(Personperson){this。iDperson。getID();this。orgIdperson。getOrgId();this。nameperson。getName();this。accountperson。getAccount();this。passwordperson。getPassword();this。mobileperson。getMobile();this。emailperson。getEmail();}}
  (五)DSM建模工具
  DSM建模,百度百科是这样定义的:
  特定域建模(Domainspecificmodeling,DSM),是一种设计和开发系统(如电脑软件)的软件工程方法学。它系统使用图形化特定域语言(DSL),表现系统的各个方面。DSM的语言倾向于支持比通用建模语言更高级别的抽象,因此需要较少的努力和更少的底层细节来描述特定系统。
  低代码技术应用可以通过提供更强的工具,提升程序员的代码效率。但其本质上也是一种特定场景下的软件描述方法,这个层面上低码技术和DSM思想是有其相通相同之处的,产品在设计之初就将DSM建模语言的构建以及工具支撑作为了底层支撑设计,将应用中积累的建模应用采用DSM的思想进行重构整合在底层打通。
  我们将现有的资源类的工具,统一到仓库应用中,包括统一的物料库导入,统一的数据源(数据库,外部存储)管理。并通代码工厂的辅助构建统一到Contenxt(OneCode)的当前环境技术模型中。在各个特定的业务模型中,完成独立的聚合实体整合,以及相应的服务管理,并为相关的方法模型透视管理服务。在OneCode的基础之上,摆脱传统的代码模板与生成机制。实现代码向模型的逆向能力。将DSM设计能贯穿整个项目开发实施管理过程,打造结余真实的代码之上的建模语言。(1)仓储建模
  (2)聚合应用
  (3)视图工厂
  (4)支撑域
  添加图片注释,不超过140字(可选)(5)流程建模
  添加图片注释,不超过140字(可选)六,应用集成(1)内核最小集合集成(JS离线应用)
  设计器内核完全采用JS脚本完成,是独立的前端框架。内核版本包括:RAD页面设计编辑器,xui运行运行脚本两部分。
  添加图片注释,不超过140字(可选)
  最小集合仅包含,页面设计及器以及插件框架。
  设计界面集成:
  下载开源包后,运行debug。html即可打开编辑器。
  添加图片注释,不超过140字(可选)
  集成到自由应用时只需要,引入两个关键的jslib包即可集成到自有的应用。(2)团队协作版
  团队协作版是独立的服务器部署版,在官网上申请账号后,可以在独立的服务器上运行。启动后通过浏览器访问http:demoserver:83用管理员sysadmin登录:
  首次登录会进入默认的工程配置界面
  配置工程
  关联API
  设定团队管理员

美国选择躺平,中国坚持动态清零隔千里兮共明月但愿人长久,千里共婵娟这几天的出行状况是比较拥堵的,在这个丰常时期,还是有大多数人都喜欢出行游玩,回家过中秋的也不少,对于绝大多的人来说,这是一个欢乐……NK(自然杀伤)异常是反复流产的元凶吗?NK多高需要用药?如果你混迹在一个比较活跃的保胎群,可能没有几分钟就会有姐妹来问关于NK的问题,仿佛它就是免疫性反复流产最核心的问题。以前很多研究把NK细胞定义为胚胎杀手,认为就是因为NK……18分大逆转!没有乔治,没有小卡!32分4记三分,这才是快船在客场不敌篮网队后,开拓者队重振旗鼓回到主场,迎来了快船队的挑战,而本场比赛无疑成为了西部的一场焦点之战!开拓者队方面,利拉德作壁上观,此役开拓者队想要捍卫主场,安芬尼西……关于女性公共厕所里面的秘密,有多少是你想象不到?我们有的时候针对男同进女厕所的事件引起很多人的讨论,我个人觉得如果有这样事情的时候还是很能理解的。毕竟自己作为父母来说,真的可以得知一个人带孩子的时候不易,特别是妈妈自己……上海开放首批自动驾驶高速公路(第五届进博会)上海开放首批自动驾驶高速公路中新社上海11月7日电(浦帆)第二届智能交通上海论坛7日在第五届中国国际进口博览会上举行。论坛上,上海首批自动驾驶高速公路正式……vue3动态组件使用技巧动态组件有两种常用场景:一是动态路由:动态路由exportconstasyncRouterMap:ArrayRouteRecordRaw〔{path:,name:inde……人生的最好心境始于自我,终于无我什么是无我的境界呢?隐隐约约之间好像触摸到了那一丝丝的无我状态,心生欢喜,却又不太确定是否就是传说中的无我之境。也许是脱离自我的一次小小的顿悟吧!好像悟了,又好像什么也没……1600亿锂王又有大动作中国基金报记者文夕市值逾1600亿的赣锋锂业(002460)打出一套组合拳。11月23日,赣锋锂业公告披露,公司拟对控股子公司赣锋锂电增资不超过20。9亿元,公司员……东部格局已变已诞生八支豪强,骑士全面升级,六队难进季后赛随着杜兰特宣布继续为篮网效力,犹他爵士另一名全明星球员米切尔加盟骑士,骑士队送走塞克斯顿,联盟最值得关注的大交易已尘埃落定。因此,NBA东部联盟大局已定,而且豪强并起,新赛季必……可怕!到底是什么摧毁了孩子的纯阳之体,让中国孩子越来越寒湿?分享:文小叔说1、乱给孩子补充营养,伤害了孩子的脾胃,脾胃可是免疫力的大本营啊现在是一个孩子被过度喂养的时代,小孩子绝大多数的病都是被过度喂养喂出来的。小孩子没有多……用户协议长达万字APP如何套路你的隐私?你是否经常收到莫名机构的骚扰电话短信?是否经常被推送搜索过的产品和附近的商家?如果答案是肯定的,你的网络隐私可能已经被泄露。2021年3月22日,国家网信办、工信部、公安……估值100亿!汽车狂人李书福的第5个IPO要来了网约车领域或将诞生一个新的IPO。投资家网获悉,吉利汽车母公司吉利控股考虑分拆其网约车公司曹操出行赴港IPO,最快于明年启动IPO,集资数亿美元,以进一步扩大业务。……
碧桂园集团莫斌积极发展科技建造,推动行业转型升级我们的转型升级是在自身产业链上进行的,也就是做建筑机器人。在1月28日下午召开的全省高质量发展大会推动房地产业平稳健康发展会议上,碧桂园集团总裁莫斌表示,在做好主营地产业务,尤……张本智和怒吼晋级!31淘汰国乒新星,中国男队4人出局仅剩3人北京时间3月2日晚,乒乓球WTT印度球星赛迎来了一场焦点对决,国乒新星梁俨苧登场,迎战男队头号对手、日本世界亚军张本智和在上一轮的较量中,梁俨苧发挥出色,31战胜了韩国主力赵胜……最担心的事情发生了俄飞船找不到明显泄漏点,设计或存在严重问题2月18日,对接于国际空间站的进步MS21飞船脱离空间站,为后续MS23飞船腾出对接口,原计划该飞船在脱离国际空间站后将在受控的条件下减速进入大气层,它的最终归宿将会是南太平洋……起夜频繁夜尿频多?多是肾阳不足!大家好,我是武医生。最近呢,有患者给我私信,说自己呢,晚上总想起夜,每次呢尿的也不多,搞得自己啊,一晚上一次又一次地醒,睡也睡不好,说自己常年这样,非常苦恼。其实呢,这是肾阳不……关注可收看高清画质电视,现代摩比斯宣布车载广播技术验证成功文:懂车帝原创刘艺伟〔懂车帝原创行业〕2月15日,懂车帝从官方获悉,现代摩比斯宣布,与美国广播集团辛克莱(Sinclair)携手在北美市场开展车载广播平台试点项目,开发符……老李退休了!苍松傲雪,操碎下一代人心老李是一位今年5月份退休的同事,没退休时经常会找我聊天,来单位有些事,完事找我聊聊天,聊了很多,很是感慨,可能与找那年轻人办事有关系,以前是家和单位两点一线,退休后两点就变成了……索约信用合约案例宠物猫咖!OneMoreTime猫咖位于杭州,是宠物行业一家连锁猫咖。在接入索约平台系统两天的时间内,就用索约信用平台的分期功能成交了9单,获得9万多的额外收益!索约信约分段……请问空腹可以吃饭吗?奇葩问答第五期!各位亲爱的朋友们,你们有没有在早上起床的时候感到饥饿?那么,你们有没有在心中默念空腹不吃饭的口号呢?那么,今天我就来和大家聊聊这个话题空腹可以吃饭吗?对我们的影响大不大?……小i机器人在美国纳斯达克挂牌上市【环球网科技综合报道】3月10日消息,小i机器人日前正式在美国纳斯达克正式上市敲钟,股票代码为AIXI,发行价为每股6。8美元。小i机器人方面表示,在纳斯达克上市后,将展……斯帕莱蒂迪洛伦佐配得上队长袖标若非梅雷特比赛最后会很复杂直播吧1月22日讯在今日凌晨进行的一场意甲联赛中,那不勒斯客场20击败萨勒尼塔纳。赛后在接受DAZN采访时,那不勒斯主帅斯帕莱蒂表示,球队未来需要更加努力,加快速度。关于……甘肃皋兰民企一哥买断集体企业,年入95。87亿,老板福建人2月财经新势力兰州,古称金城,是甘肃省辖地级市,地处中国西北地区、中国大陆陆域版图的几何中心。自古为丝绸之路重镇,有西北咽喉之称,是全国唯一黄河穿城而过的省会城市。……从ETL到EtLT架构的演进历程ETL到EtLT架构演进为了更好地理解,我们先来介绍一下数仓从ETL到EtLT的架构演进。回顾过去,我们会发现其实整个数仓在1990年到2015年都是ETL的架构,……
友情链接:快好找快生活快百科快传网中准网文好找聚热点快软网