当前位置: 首页 > news >正文

docker版jxTMS使用指南:自动生成代码

本文讲解4.0版jxTMS的自动生成代码功能,
整个系列的文章请查看:docker版jxTMS使用指南:4.0版升级内容

docker版本的使用,请参考:docker版jxTMS使用指南

任何一个管理系统都需要对管理对象进行管理,包括最基本的的增删改查,而这每一个功能都需要制作界面、书写代码,由于需要大量设置、修改各种名称【控件名、数据名、变量名等等】,这些工作非常简单却异常繁琐,很容易出错。

所以4.0版jxTMS提供了自动生成代码的功能,通过简单描述管理对象的基本界面,然后就可以自动生成基本的增删改查定制文件。

自动生成代码功能需要在模块所在目录下建立一个codeSource文本文件,其中以分号为分隔符来定义一个个的管理对象的访问界面。其语法为:

VARIABLE VARIABLE 'TITLE' VARIABLE webDivData webDivRow+ webDivSearch?

可参考【/var/chroot/home/demoOrg_2255/codeDefine/demo2/test/codeSource】。

codeSource的语法中所有以单引号括起来的全大写的文字,都是关键字,在语法定义中是需要用单引号括起来的,但实际定义时自然不需要的。

第一个变量是管理对象的类属名【即该管理对象属于哪个门类】,jxTMS会为该管理对象自动生成两个快捷栏中的入口:【添加xx】和【xx查询】。而这两个入口所在的第一级的快捷栏名称,就是此处的类属名。如第一个变量是【演示】,则就会在快捷栏的【演示】菜单中新增两个入口:【添加xx】和【xx查询】。

第二个变量是该管理对象的英文名,笔者习惯以大写字母开头。

第三个变量是该管理对象的中文名。

示例如:

安全管理 User TITLE 用户

即对User的管理,会在快捷栏中生成两个入口:【安全管理->添加用户】、【安全管理->用户查询】。

webDivData是定义本管理对象的访问语义词与保存数据的数据表中列的对应关系的:

webDivData//变量名就是保存数据的数据表名,也是数据类名: 'DATA' VARIABLE webDivDataVar+  
;
//webDivDataVar的定义是
webDivDataVar//语义词=数据表中的列名: VARIABLE ASSIGN VARIABLE  
;

示例如:

DATA AuthuserID=IDuserCreateTime=CreateTimeuserSpecial=SpecialuserName=NameuserState=StateuserDescr=Descr

意为,User的数据放在数据表Auth中,userID保存在Auth表的ID列、userName保存在Auth表的Name列,等等。

定义完DATA后,以后只需要用语义词来访问数据即可,不再需要直接使用数据字段名,而语义词则绑定到所生成界面的相应控件的bind上。

webDivRow描述了该管理对象的详情界面,而此界面将被新增、查看、修改三界面所复用:

webDivRow//描述了一行,由多个表意格组成: 'ROW' webDivCol+  
;
webDivCol//每个表意格包括两个控件:文本提示、输入输出数据【新增、修改时是输入,查看、修改时是输出】: VARIABLE STRING webDivColTitleAttr? VARIABLE? TYPE type webDivColAttr  
;
webDivColTitleAttr  : webControlAttr (Comma webControlAttr)*  
;
webDivColAttr  : webControlAttr (Comma webControlAttr)*  
;
webControlAttr  //属性名=属性值  : name ASSIGN value  
;
value  : NUMBER #numberValue  | STRING #stringValue  | (TRUE | FALSE) #booleanValue  | VARIABLE #variableValue  | json #jsonValue  
;

jxTMS将根据webDivRow中的定义,自动生成一个详情界面,然后被新增、查看、修改三界面所引用,然后再分别为新增界面增加【增加】按钮、为编辑界面增加【修改】按钮。

示例如:

ROWuserSpecial '标识号:' type input width=150userName '名称:' type input width=150
ROWuserState '状态:' type combobox values=[{'text':'正常'},{'text':'停用'},{'text':'异常'}],useText=true,width=150onLineState '实时状态:' type text width=150
ROWuserDescr '说明:' type textarea width=750

就定义了一个三行的详情界面,其生成的界面为:

//基本信息
web UserInfo type div;
web UserInfo_T1 parent UserInfo type table title='用户信息',width=900,alone=true;
with UserInfo_T1 row 0 col c0 web n type text text='标识号:',width=150;
with UserInfo_T1 row 0 col c1 web n bind userSpecial type input width=150;
with UserInfo_T1 row 0 col c2 web n type text text='名称:',width=150;
with UserInfo_T1 row 0 col c3 web n bind userName type input width=150;
with UserInfo_T1 row 1 col c0 web n type text text='状态:',width=150;
with UserInfo_T1 row 1 col c1 web n bind userState type combobox values=[{'text':'正常'},{'text':'停用'},{'text':'异常'}],useText=true,width=150;
with UserInfo_T1 row 1 col c2 web n type text text='实时状态:',width=150;
with UserInfo_T1 row 1 col c3 web n bind onLineState type text width=150;
with UserInfo_T1 row 2 col c0 web n type text text='说明:',width=150;
with UserInfo_T1 row 2 col c1 web n bind userDescr type textarea width=150;

同时还创建了三个界面:

//查看
web viewUser type div;
web viewUser_D1 parent viewUser ref UserInfo width=900;//新增
web newUser type div;
web newUser_D1 parent newUser ref UserInfo width=900;
web newUser_D2 parent newUser type div width=900;
web newUser_OPBtn parent newUser_D2 type button width=150,text='增加',motion=cmd,demand=newUser;//编辑
web editUser type div;
web editUser_D1 parent editUser ref UserInfo width=900;
web editUser_D2 parent editUser type div width=900;
web editUser_OPBtn parent editUser_D2 type button width=150,text='修改',motion=cmd,demand=editUser;

大家对照看一下就能理解了。

webDivSearch是可选的带条件的分页查询表。其语法为:

webDivSearch//VARIABLE是查询的条件的语义词,必须在ROW中定义过,jxTMS会使用这些定义来生成查询条件: 'SEARCH' VARIABLE (Comma VARIABLE)* webDivList  
;
webDivList  : 'LIST' webDivListCol+  
;
webDivListCol  //bind的语义词、head : 'COL' VARIABLE VARIABLE? webDivColAttr  
;

大家可以对照【/var/chroot/home/demoOrg_2255/codeDefine/demo2/demo/codeSource】文件,以及其所生成的代码文件,同时运行一下查看相关界面来理解上述语法的效果。

参考资料:

jxTMS设计思想

jxTMS编程手册

下面的系列文章讲述了如何用jxTMS开发一个实用的业务功能:

如何用jxTMS开发一个功能

下面的系列文章讲述了jxTMS的一些基本开发能力:

jxTMS的HelloWorld

相关文章:

docker版jxTMS使用指南:自动生成代码

本文讲解4.0版jxTMS的自动生成代码功能, 整个系列的文章请查看:docker版jxTMS使用指南:4.0版升级内容 docker版本的使用,请参考:docker版jxTMS使用指南 任何一个管理系统都需要对管理对象进行管理,包括最…...

聚观早报 | 小冰启动GPT克隆人计划;ofo创始人在美创业改做咖啡

今日要闻:小冰启动“GPT克隆人计划”;ofo创始人在美创业改做咖啡;OpenAI正准备新的开源AI模型;青年失业率首破20%创新高;微软收购动视暴雪获批 小冰启动“GPT克隆人计划” 5 月 16 日,小冰公司…...

面试造航母,入职拧螺丝,工资离了个大谱...

有粉丝跟我吐槽说:金三银四去面试软件测试岗,真的是面试造航母,入职拧螺丝,工资还低 这种现象很正常,因为找一个测试员,当然希望他能做的业务越多越好,最好像机器猫一样,啥事儿都能…...

Python+selenium自动化元素定位防踩坑

在自动化UI测试过程中常常会在元素定位阶段就踩坑,碰到困扰已久的问题。 以下是个人整理元素定位报错原因和解决方法。 踩坑一:StaleElementReferenceException selenium.common.exceptions.StaleElementReferenceException: Message: stale element re…...

【计算机组成原理】实验一

文章目录 实验一 数据传送实验1. 实验目的2. 实验仪器3. 原理概述4. 实验内容步骤4.1 手动实验环境的建立4.2 手控传送实验 5. 实验结论及问题讨论 实验一 数据传送实验 1. 实验目的 2. 实验仪器 3. 原理概述 4. 实验内容步骤 4.1 手动实验环境的建立 1)初始待令状态 上电或…...

前端022_广告模块_修改功能

广告模块_修改功能 1、需求分析2、Mock添加查询数据3、Mock修改数据4、Api调用回显数据5、提交修改后的数据6、效果1、需求分析 需求分析 当点击 编辑 按钮后,弹出编辑窗口,并查询出分类相关信息进行渲染。修改后点击 确定 提交修改后的数据。 2、Mock添加查询数据 请求URL…...

makefile 学习(3):C++的编译及库文件的生成与链接

1. 介绍 C语言的相关后缀 .a 文件是一个静态库文件.c,.c ,.cp,.cpp,.cc,.cxx 这几种后缀都可以表示c的源文件.h ,.hpp c语言的头文件.i 是c预处理文件.o 目标文件.s汇编语言的文件.so 动态库或者共享库或者称为运行时库 2. C编译 2.1 预处理 g -E helloworld.cpp # 虽…...

Ceph crush运行图

Crush map介绍 ceph集群中由monitor负责维护的运行图包括: Monitor map:监视器运行图osd map:osd运行图PG map:PG运行图Crush map:crush运行图Mds map:mds运行图 crush map是ceph集群物理拓扑的抽象&…...

【分布族谱】泊松分布和二项分布、正态分布的关系

文章目录 泊松分布和二项分布的关系和正态分布的关系 泊松分布 如果在有限时间 ( 0 , 1 ) (0,1) (0,1)内进行 n n n次伯努利实验,那么每次伯努利实验所占用的时间为 1 n \frac{1}{n} n1​,按照自然规律,一件事情肯定是时间越长越容易发生&am…...

关于QTreeWidget的setData函数

当使用 Q T r e e W i d g e t I t e m QTreeWidgetItem QTreeWidgetItem 的 s e t D a t a setData setData 方法时,需要传递三个参数,分别是列索引、角色和数据。 列索引:表示要设置数据的列的索引。 Q T r e e W i d g e t I t e m QTre…...

Microsoft Office 2003的安装

哈喽,大家好。今天一起学习的是office2003的安装,这个老版本的office可是XP操作系统的老搭档了,有兴趣的小伙伴也可以来一起试试手。 一、测试演示参数 演示操作系统:Windows XP 不建议win7及以上操作系统使用 系统类型&#xff…...

使用Spring Boot和Spring Cloud实现多租户架构:支持应用多租户部署和管理

使用Spring Boot和Spring Cloud实现多租户架构:支持应用多租户部署和管理 一、概述1 什么是多租户架构?2 多租户架构的优势3 实现多租户架构的技术选择 二、设计思路1 架构选型1.1 Spring Boot1.2 Spring Cloud 2 数据库设计3 应用多租户部署3.1 应用隔离…...

智聚北京!相约全球人力资源数智化峰会

人力资源是推动经济社会发展的第一资源。作为我国经济压舱石的中央企业在对标世界一流企业和管理提升方面的持续创新,各行业领军企业围绕组织变革、管理升级、全球化发展走深走实。人力资源管理正从传统职能管理与管控,向紧贴业务战略实现、组织边界和人…...

工业缺陷检测数据及代码(附代码)

介绍 目前,基于机器视觉的表面缺陷检测设备已广泛取代人工视觉检测,在包括3C、汽车、家电、机械制造、半导体与电子、化工、制药、航空航天、轻工等多个行业领域得到应用。传统的基于机器视觉的表面缺陷检测方法通常采用常规图像处理算法或人工设计的特征加分类器。一般而言…...

CentOS 安装MongoDB 6.0

一、安装依赖 yum install libcurl openssl xz-libs 二、下载安装包 安装包下载地址https://www.mongodb.com/try/download/community这里我选择的是 选择RedHat / CentOS 7.0平台的原因是我的操作系统使用的是CentOS 7.0的,需要下载与操作系统匹配的安装包 三、…...

美团面试,被拷打了一小时....

刚从美团走出来,被拷打了一小时…越想越觉得可惜,回想面试经过,好好总结了几个点,发现面试没过的主要原因是在几个关键的问题没有给到面试官想要的答案。从而失去了这次宝贵的机会。 根据你的工作经历,说说你对质量保证…...

017+C语言中函数栈帧的创建与销毁(VS2022环境)

0.前言 您好,这里是limou3434的一篇个人博文,感兴趣的话您也可以看看我的其他文章。本次我将和您一起学习在C语言中函数栈帧的概念。 1.学习函数栈帧的意义 局部变量是怎么穿创建的?为什么局部变量的值是随机的函数是怎么传参的&#xff1…...

马斯克们叫停 GPT-5,更像是场行为艺术

目录 01 联名信说了什么? 02 发起方是谁? 03 谁签署了联名信? 04 联名信有哪些问题?三巨头的另外两位 Sam Altman 的表态 其他值得关注的署名者 比如马斯克。 另一个位于前列的署名者是 Stability AI 的创始人 Emad Most…...

事务基础知识

第13章 事务基础知识 1. 数据库事务概述 1.1 基本概念 **事务:**一组逻辑操作单元,使数据从一种状态变换到另一种状态。 **事务处理的原则:**保证所有事务都作为一个工作单元来执行,即使出现了故障,都不能改变这种…...

国产高性能DSP音频处理芯片的工作原理以及应用领域

DSP芯片是数字信号处理器的简称,它是一种专门用于数字信号处理的微处理器,它可以对数字信号进行高速运算和处理。DSP是一类嵌入式通用可编程微处理器,主要用于实现对信号的采集、识别、变换、增强、控制等算法处理,是各类嵌入式系…...

以下是对华为 HarmonyOS NETX 5属性动画(ArkTS)文档的结构化整理,通过层级标题、表格和代码块提升可读性:

一、属性动画概述NETX 作用:实现组件通用属性的渐变过渡效果,提升用户体验。支持属性:width、height、backgroundColor、opacity、scale、rotate、translate等。注意事项: 布局类属性(如宽高)变化时&#…...

Swift 协议扩展精进之路:解决 CoreData 托管实体子类的类型不匹配问题(下)

概述 在 Swift 开发语言中,各位秃头小码农们可以充分利用语法本身所带来的便利去劈荆斩棘。我们还可以恣意利用泛型、协议关联类型和协议扩展来进一步简化和优化我们复杂的代码需求。 不过,在涉及到多个子类派生于基类进行多态模拟的场景下,…...

如何将联系人从 iPhone 转移到 Android

从 iPhone 换到 Android 手机时,你可能需要保留重要的数据,例如通讯录。好在,将通讯录从 iPhone 转移到 Android 手机非常简单,你可以从本文中学习 6 种可靠的方法,确保随时保持连接,不错过任何信息。 第 1…...

k8s业务程序联调工具-KtConnect

概述 原理 工具作用是建立了一个从本地到集群的单向VPN,根据VPN原理,打通两个内网必然需要借助一个公共中继节点,ktconnect工具巧妙的利用k8s原生的portforward能力,简化了建立连接的过程,apiserver间接起到了中继节…...

大语言模型(LLM)中的KV缓存压缩与动态稀疏注意力机制设计

随着大语言模型(LLM)参数规模的增长,推理阶段的内存占用和计算复杂度成为核心挑战。传统注意力机制的计算复杂度随序列长度呈二次方增长,而KV缓存的内存消耗可能高达数十GB(例如Llama2-7B处理100K token时需50GB内存&a…...

Docker 本地安装 mysql 数据库

Docker: Accelerated Container Application Development 下载对应操作系统版本的 docker ;并安装。 基础操作不再赘述。 打开 macOS 终端,开始 docker 安装mysql之旅 第一步 docker search mysql 》〉docker search mysql NAME DE…...

使用LangGraph和LangSmith构建多智能体人工智能系统

现在,通过组合几个较小的子智能体来创建一个强大的人工智能智能体正成为一种趋势。但这也带来了一些挑战,比如减少幻觉、管理对话流程、在测试期间留意智能体的工作方式、允许人工介入以及评估其性能。你需要进行大量的反复试验。 在这篇博客〔原作者&a…...

五子棋测试用例

一.项目背景 1.1 项目简介 传统棋类文化的推广 五子棋是一种古老的棋类游戏,有着深厚的文化底蕴。通过将五子棋制作成网页游戏,可以让更多的人了解和接触到这一传统棋类文化。无论是国内还是国外的玩家,都可以通过网页五子棋感受到东方棋类…...

Neko虚拟浏览器远程协作方案:Docker+内网穿透技术部署实践

前言:本文将向开发者介绍一款创新性协作工具——Neko虚拟浏览器。在数字化协作场景中,跨地域的团队常需面对实时共享屏幕、协同编辑文档等需求。通过本指南,你将掌握在Ubuntu系统中使用容器化技术部署该工具的具体方案,并结合内网…...

WebRTC调研

WebRTC是什么,为什么,如何使用 WebRTC有什么优势 WebRTC Architecture Amazon KVS WebRTC 其它厂商WebRTC 海康门禁WebRTC 海康门禁其他界面整理 威视通WebRTC 局域网 Google浏览器 Microsoft Edge 公网 RTSP RTMP NVR ONVIF SIP SRT WebRTC协…...