当前位置: 首页 > 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是一类嵌入式通用可编程微处理器,主要用于实现对信号的采集、识别、变换、增强、控制等算法处理,是各类嵌入式系…...

保姆级教程:在ROS2 Humble/Foxy的Gazebo中配置RGB-D相机(附解决点云颜色/坐标问题)

ROS2 Humble/Foxy中Gazebo深度相机仿真全攻略:从配置到点云问题解决在机器人仿真开发中,深度相机(RGB-D)是不可或缺的传感器之一。它能够同时提供彩色图像和深度信息,为SLAM、物体识别、避障等任务提供关键数据支持。本…...

物理引导的机器学习工作流:气候建模的融合创新与实践

1. 项目概述:当气候建模遇见机器学习如果你像我一样,在气候模拟这个领域摸爬滚打超过十年,就会深刻体会到一种“甜蜜的负担”:我们构建的地球系统模型(ESM)越来越精细,物理过程越来越复杂&#…...

ParaView时间戳设置全攻略:从基础标注到自定义格式(5.8.0实测)

ParaView时间戳设置全攻略:从基础标注到自定义格式(5.8.0实测) 在科学可视化领域,时间戳不仅是数据演变的见证者,更是研究成果呈现的专业语言。ParaView作为开源可视化工具链的标杆,其时间标注功能在学术论…...

DeepSeek系统设计辅助:如何在48小时内完成可审计、可回滚、可压测的AI服务架构图?

更多请点击: https://intelliparadigm.com 第一章:DeepSeek系统设计辅助 DeepSeek系统设计辅助模块面向架构师与后端工程师,提供模型能力调用、接口契约生成、异步任务编排等核心支撑能力。该模块不替代人工设计决策,而是通过结构…...

苏州创新药20年,站上全球产业洗牌暴风眼

一个城市的创新药产业集群如何从无到有,又如何在全球化临界点寻找自己的位置。文|徐鑫编|任晓渔过去一年多,苏州是全球创新药产业版图中一个绕不过去的城市。大额海外授权交易频繁传出,在中国高端制造走出去的背景下&a…...

2027考研全套资料免费分享

备战27考研最全备考资料整理完毕,一路走来深知备考搜集资料耗费大量时间,浪费不少精力。特意整理2027考研全科完整版资源,全部打包汇总,零基础考生直接拿来就能使用,省去四处搜集资料的烦恼。资料内含:&…...

用Azure Kinect DK和Body Tracking SDK,5分钟实现一个实时人体骨骼点检测Demo(C++版)

5分钟实战:用Azure Kinect DK实现实时人体骨骼点追踪(C版) 当你第一次拿到Azure Kinect DK时,最令人兴奋的莫过于它强大的人体追踪能力。这款深度相机不仅能捕捉高清彩色图像,更能通过AI算法实时重建人体骨骼关节点。本…...

风控系统如何全维度识别爬虫:IP、账号与行为的协同决策机制

1. 这不是“反爬失败”,而是风控系统在对你做全维度画像你写完一段 requests BeautifulSoup 的代码,本地跑通了,开开心心部署到服务器,结果第二天早上发现:所有请求返回 403,日志里全是空响应;…...

PrediPrune:机器学习驱动的编译器超级优化候选剪枝策略

1. 项目概述与核心挑战在编译器优化的世界里,我们总在追求极致的性能。传统的编译器优化器,比如LLVM的Pass,依赖于一系列预定义的、经过验证的转换规则。它们很高效,但想象力也受限于这些规则。超级优化器(Superoptimi…...

OpenClaw 源码解析(六):openclaw agent 如何触发一次 Agent 运行?

1. 本期要解决的问题 前几期我们已经从项目整体结构、CLI 命令体系、配置加载、Gateway 运行机制等角度理解了 OpenClaw 的基础框架。到了这一期,可以进一步进入 OpenClaw 最核心的使用动作:用户在终端中执行一条 openclaw agent --message "...&q…...