Skip to main content

平台基础相关问题

1. 升级之后启动服务报错 Error: create table BA_COMP_META_ANNOTA?

场景:

如果您是在 2022-3-8 ~ 2022.4.15时间段,没升级过服务都会有问题。

例如,之前的执行系统服务是2022-2-2的,然后在2022-5-1升级的话,跨过了时间段。

在升级完成后,启动服务可能会出现表初始化异常问题。

img

原因:

在时间段升级时做了字段数据备份,时间段后的升级做了改变字段长度。

解决方案:

(一)独立服务

  1. 关闭服务

  2. 在数据库中,手动执行以下6个脚本。

insert into md_tablescolumn values('Annotation0001013','Annotation0001','BizId','业务唯一标识','Annotation0001013',1,0,512,NULL,0,null,null,NULL)
insert into md_tablescolumn values('Annotation0002005','Annotation0002','BizId','业务唯一标识','Annotation0002005',1,0,512,NULL,0,null,null,NULL)
ALTER TABLE BA_COMP_META_ANNOTATION add BizId varchar(512)
ALTER TABLE BA_COMP_META_ANNOTATION_PROPS add BizId varchar(512)
UPDATE BA_COMP_META_ANNOTATION set bizId = id, id = newid()
UPDATE BA_COMP_META_ANNOTATION_PROPS set bizId = id, id = newid()
  1. 启动服务

(二)一体化测试服务

因为连接的是 H2 数据库,无法执行脚本。

  1. 关闭一体化测试服务。

  2. 在开发系统目录下 ..\V3Dev\Runtime\conf\setting ,删除 h2database 文件夹。

    img

  1. 启动一体化测试服务,访问配置中心 → 系统高级配置 → 系统诊断 → 业务构件发布状态查询,全选构件后,开始批量重新发布构件。

img

2. 查询条件面板这个控件,是怎么使用的?

通用控件类型:选择表字段,进行查询条件设置,集合成一个带有快速搜索的查询面板。

img

(一)窗体定义

  1. 在窗体里,添加一个 “查询条件面板” 控件。

img

  1. 设置属性 “查询条件配置” 。

img

  1. 对所选字段,设置操作符、是否折叠等。

img

(二)规则配置

  1. 设置属性 “查询过滤事件” 。

img

  1. 添加规则“从数据库获取数据到实体”,在条件设置处,勾选:关联查询条件面板。

img

(三)运行结果

总共4条数据。

img

可以在查询面板上,进行查询。

img

(四)其他设置

  1. 其他设置折叠条件

img

img

  1. 通栏显示

img

img

  1. 快速搜索:勾选目标字段,选中的字段将在快速搜索中执行模糊查询。

img

img

下载:查询条件面板.zip

3. 列表中实现,布尔类型单选功能?

问题描述:

勾选某一条记录后,把其他记录变成不勾选。

始终保持,只有一条记录被勾选的状态。

img

解决方案:

  1. 在列表中,布尔类型列,增加「值改变事件」。

img

  1. 增加一个文本类型的方法变量。

img

配置逻辑:当对布尔列进行操作的时候,不管是勾选,还是取消勾选的动作,触发值改变事件。

  1. 判断:当前记录的布尔值,是否为true。(勾选状态)

  2. 给方法变量idd赋值,实体的id值。

  3. Foreach循环开始。

  4. 判断:循环变量id字段值,不等于方法变量idd的值。

  5. 给循环变量布尔字段赋值false(不勾选)。

img

下载:列表的选中状态.zip

4. 列表新增时,出现一个none,不知道是什么?

问题描述:

img

解决方案:

是因为你的列表属性,设置了 “分组字段” 。

新增时这个分组字段是null值,所以显示 -none-

img

5. WebAPI 和规则链不是同一个事务?

场景

在一个方法中:

  1. 在规则链中,有一个事务规则,对 表A 的数据进行了操作。

    img

  2. 后面又调用了一个WebAPI,也对 表A 进行了数据操作。

    img

    img

分析

上述方法中,有规则和 WebAPI 对同一张 表A 进行了数据操作。

因为 WebAPI 和规则链不是同一个事务,所以在配置方法的时候,避免这种情况出现。

如果配置中心里的配置项 statementTimeout 使用默认的30秒。

img

在执行期,看到的情况就是,点击按钮执行方法后:

  1. 先执行了保存规则,操作表A,这里没问题。(注:此时第一个事务开启后还在执行中,并没有结束
  2. 接着调用 WebAPI,修改表A的时候,发现第一个的事务还没有结束,表A锁住,第二个事务等待开启。
  3. 在等待30秒,第一个的事务超时后,继续进行 WebAPI 里的操作表A数据。

用户在使用时,感觉就是点击按钮后,系统卡住30秒钟,然后就好了。

解决方案:

在一个方法中的规则和WebAPI,不要对同一张表做事务操作。

6. 联动下拉应该怎么实现?

提供一个省市联动下拉的demo构件,可以下载了参考。

img

下载:省市联动下拉.zip

7. 页签2里的组件容器没有打开设置的窗体?

问题描述:

页签1里是加载数据到列表。

页签2里放了一个组件容器,打开另外的一个窗体。

现在的情况是,页签1里的列表数据加载正确,页签2的窗体没有打开到容器里。

img

img

原因:

加载列表数据规则,以及打开窗体到容器的规则,都配置在「窗体加载事件」里了。

  1. 列表在页签1中,加载数据规则放在「窗体加载事件」里是没问题的。

  2. 后面的页签,就不能使用「窗体加载事件」,因为执行期打开页签控件时,除页签1的其他页签里的控件都没有被激活。

解决方案:

需要使用到页签控件的「页签切换事件」。

设置 IF 条件,当前选中页 == 对应页签的页码,然后再触发对应的规则。

img

表达式中,选择属性:当前选中页。

注:页签控件中,页签页码按顺序从零开始,依次累加,所以页签2的页码为 1。

img

处理好之后,在执行期,窗体打开时加载页签1中的列表数据。

当选择页签2时,触发「页签切换事件」执行打开窗体的规则。

img

8. 服务启动成功了,但是部署的时候报服务未找到是什么情况?

问题描述:

img

解决方案:

有一个可能,如果是集群的服务,要先启动主服务才行,不启动主服务,是部署不了的。

9. 列表可以实现类似excel锁定某行或者某列内容不动吗?

列表,无法锁定行。

目前,列表只有这个属性「冻结列数」,保持头 N 列可见。

img

10. 列表导出数据的功能,如果是多页,可以所有的数据一起导出吗?

有2个导出Excel的规则。

  1. 【导出表格数据到Excel】只导出已显示的数据。

  2. 【导出数据库数据到Excel】规则,它可以导出表中所有数据。

    img

11. 页签页面的列表的高度可以自适应吗?

问题描述:

在列表里,出现了滚动条。

img

解决方案:

  1. 把列表的高度属性,设置为 “按空间自适应” 。

img

  1. 保存部署,预览效果。

img

12. 预览窗体时发现四周会有边距?

问题描述:

普通窗体内置了一个15px的边距,取消不了。

解决方案:

如果不想要这个边距,可以改用网页窗体。

img

13. 同一个项目中,怎么引用其他构件输出的表?

(一)构件1输出

在目标表上点击鼠标右键,选择 「输出」 。

img

(二)构件2引用

  1. 在「引用」 菜单点击鼠标右键,选择 「从当前项目选址添加引用构件」 。

    img

  2. 在 「添加引用构件」 窗体中,勾选构件1,确定。

    img

  3. 构件1的表,就被引用到构件2中了。

    img

14. 旧版平台的分组控件,新版没了呢,我要怎么实现那个效果?

旧版的分组效果,在新版中可以通过编组,然后添加 “分组标题” 实现。

img

15. VSQL预览使用多表联查就报错是什么情况呀?

问题描述:

查单个表就可以出数据。

img

原因:

以发送带sql数据体的url请求去请求后台结果,这种方式不符合网络安全要求,被认为是sql注入,会被网络管理员设置的安全机制拦截。

正常使用,执行系统访问窗体,查询都是后台处理,是没问题的。

解决方案:

  1. 在配置中心-配置管理中,增加加密配置项,对查询请求的参数进行 aes 加密。
  2. 设置路径:配置中心 → 系统高级设置 → 系统维护 → 配置管理 → 请求分发配置。
  3. 默认为false,如需要加密请在用户值输入true,保存。
  4. 此配置项修改,无需重启服务。

img

16. 服务器能ping通数据库,但是连接测试失败呢?

问题描述:

服务器和数据库两台机器相互能ping通,但是按照服务连接数据库测试连接的时候报连接失败。

分析:

ping 通,只能代表网络通,不能代表数据库连接通。

解决方案:

可以在本机,用数据库连接工具试试(例如Navicat),是否可以连上数据库。1、如果也是连接不上数据库,那么就有可能是数据库的端口没开权限。2、如果可以连接,那么请连接客服人员,具体分析。

17. 执行平台默认存多少天的日志?

日志文件保留的天数为30天,超过30天前的日志文件将会被彻底删除,回收站里也找不回。

img

18. VSQL预览查到有数据,但是不显示出来?

问题描述:

只显示共 22 条记录,但是不显示数据。

img

解决方案:

因为这段VSQL里,有表或者查询,注册了数据权限,开发系统里预览VSQL要过权限,所以不显示。

19. 自定义窗体使用深度选择器?

使用场景

在自定义窗体的开发中,经常会用到外部组件库,例如 iview,当使用 iview 组件库中的某一个组件的时,可能会希望有一些定制的地方,通常的做法是用CSS覆盖。

然而在自定义窗体中,样式定义默认带上了作用域,无法做到CSS覆盖。

为了解决此问题,平台提供深度选择器变量使用。

使用样例

template 脚本样例:

<div>
<buttin class="btnCls">平台深度选择器验证</buttin>
</div>

theme.less 脚本样例:

@import "../theme.less";
@import "./var.less";
@{v-deep-selector} .btnCls{
margin:16px;
color:red;
width:100px;
height:100px;
}

预览效果:

img

html脚本:

img

css脚本:

img

20. 服务的进程 java.exe 内存爆了怎么办?

这个可以分三种情况来处理。

(一)新版平台,直接升级执行系统服务到最新版本即可

(二)新版平台,项目上不能升级执行系统服务

  1. 查看:配置中心 → 系统高级配置 → 系统维护 → 配置管理,搜索 com.toone.v3.platform-webconsole_plugin_sysRuntimeStatistics(服务运行时统计数据收集的配置)

    collectCpuAndMemory(是否收集cpu和内存的信息,默认为true) 用户值改成 false

    img

    如果没有 collectCpuAndMemory 配置项,说明版本较低,可以设置 interval(每隔多长时间收集一次统计数据,单位为毫秒) 用户值改成 1000000000000

    img

  2. 查看:配置中心 → 系统高级配置 → 构件管理 → 本地构件管理,搜索 webconsole_plugin_cpuMemoryMonito 构件,停止该构件。

    img

  3. 立即生效,无需重启服务。

(三)旧版平台

操作步骤同(二)新版平台,项目上不能升级执行系统服务

注:如果已经发生大量堆外内存的情况,则建议设置以上配置后重启一下执行系统,释放堆外内存。如果服务还未产生堆外内存,此配置可以减缓堆外内存的产生,基本不会造成物理内存过高问题。

21. 在VSQL中如何引用查询?

现在有查询 query1 和 query2,查询 query2 中引用 query1,则引用方式为查询编码 query1。

且 query1 中用到的查询参数,在 query2 中也要存在。

注1:如跨构件引用,则需要写明 query1 所在构件编码.query1。注2:此方式仅限VSQL中。

举例:table1 表,数据4条。

img

1. query1

  • 参数:amount

  • 调试值:200

  • where:字段amount的值大于200

  • 结果:满足条件的3条记录

img

2. query2

  • 参数:amount

  • 调试值:200

  • 引用:query1

  • 使用:引用的查询,可以跟物理表一样正常使用,如关联表查询等

  • 结果:满足条件的3条记录(query1的name字段,table1的amount字段)

img

3. 修改调试值

  • 调试值:300

  • 结果:满足条件的2条记录

img

下载:引用查询demo.zip

22. VSQL中 like 条件支持多个?

语法:字段 like '%'|| 查询参数 ||'%'

规范:传入多个条件时,使用分号“;”或者逗号“,”隔开。其中分号表示“或”,逗号表示“与”。

举例:给下图的VSQL加 like 条件。

img

1. 或

  • 使用分号来实现。
  • 字段:name
  • 调试值:香;果
  • 结果:在name字段值中的任意位置,包含“香”或者“果”的记录。

img

2. 与

  • 使用逗号来实现。
  • 字段:name
  • 调试值:香,果
  • 结果:在name字段值中的任意位置,包含“香”并且同时包含“果”的记录。

img

23. 原生SQL中 in 条件的查询参数命名规则?

在原生SQL中,如果想要跟VSQL一样时用 in 条件,且条件来源为查询参数时,需要按照指定的规则命名查询参数,以"vsqlParamIN__"开头,否则查询不到预期的结果。

举例给下图的原生SQL加 in 条件。

img

1. 不正确的查询参数命名

  • 查询参数:name

  • 调试值:张三,王五

  • 结果:预览无数据

img

2. 正确的查询参数命名

  • 查询参数:vsqlParamIN__name

  • 调试值:张三,王五

  • 结果:预览数据正确

img

24. VSQL在使用 union all 时报错?

问题描述:

写法和报错如下。

img

解决方案:

由于VSQL的算法逻辑原因,在使用 union all 的时候,需要在外面再包一层查询。

注:union all 的子查询,请不要写 select * ,因为 select * 查出来的字段顺序无法控制,导致前后子查询的结果集字段无法一一对应。

img

25. VSQL在使用 distinct 时报错?

问题描述:

这种情况,一般是在使用 select distinct 时,字段使用了别名,并且别名和原字段名称不一致的时候。

img

解决方案:

处理方式也很简单,就是在外面再包一层查询。

注:order by 语句要放到最外层。

img

26. 在只有id和PID字段的情况下,如何生成树形结构的其他字段?

除了 id 和PID,树形结构的字段还有:InnerCode(层级码字段)、IsLeaf(叶子节点字段)、OrderNo(排序字段)。

逻辑

  1. 使用规则「保存实体到数据库」,勾选“树形实体”,并选择好树结构字段。

  2. 触发保存后,系统会根据实体中已有的 id 和 PID ,自动生成InnerCode、IsLeaf、OrderNo字段。

举例

  1. 获得树形结构的第三方数据,字段3个:id、name、PID

    img

  2. 复制到一个已有树形结构字段的实体中。

    img

  3. 保存数据到表,勾选 “树形实体” ,并选择好树结构字段。

    img

  4. 当重新加载这张表的数据后,就发现InnerCode、IsLeaf、OrderNo字段,已经补充完整。

    img

数据的来源
  • 可以是从其他实体复制来,如上例。

  • 可以是Excel导入到实体(服务端规则【Excel导入到数据库表或实体】,选择实体)。

  • 可以是API返回值到实体。

  • 其他任何方式到实体。

若使用客户端规则「Excel导入到数据库表」,先把Excel里的数据,导入到表里,然后再加载出来,再使用勾选“树形实体”的保存,这种方式是错误的

因为,表中已经存在相同id的数据,无法生成InnerCode、IsLeaf、OrderNo字段值。

结论

所有数据的id,不存在表中时,使用勾选 “树形实体” 的保存,才能生成InnerCode、IsLeaf、OrderNo字段值。

下载:生成树字段demo.zip

27. 树形数据出现层级码字段InnerCode重复问题排查?

排查一

树形数据的业务表,是否使用了树过滤字段,存在有多棵树的情况。

排查二

是否使用了加载条件,只加载部分树形数据的情况下做树形操作。

注:多颗树是指使用了树过滤字段,表数据中存在多条层级码字段InnerCode相同的数据。

28. 树形实体里的树过滤字段,是做什么用的?

例如一个系统中,存在多个项目的树形数据,比如组织机构、清单等,树过滤字段就是为了把各项目的树形数据区分开

这多个项目的树形数据,同时保存在一张表中。

操作步骤:

  1. 添加树过滤字段。

    img

  2. 在使用加载规则、保存规则等与树形操作相关的规则时,需要勾选“树形实体”,并选择过滤字段。

    img

  3. 在使用时,加载规则新增条件:树过滤字段 = 项目标识

举例:

以2个项目举例:项目A、项目B

注:为了演示清晰,项目值填的固定值,实际使用可以使用变量。

img

树过滤字段存入正确的数据,如下图。

注:不管是在系统里增加的数据,还是使用Excel导入的数据,树过滤字段每一条记录都需要有值。

加载 “项目A” 的数据后,可对 “项目A” 的树形数据进行编辑。

img

加载 “项目B” 的数据后,可对 “项目B” 的树形数据进行编辑。

img

“项目A”和“项目B”的数据,保存在同一张表中。

可以看到,它们2个项目树形数据的层级码字段是重复的。

img

按上述配置之后,则实现了根据登录账号的所属项目,显示所属项目的树形数据。

下载:树过滤字段demo.zip

29. 如何实现在执行服务的cmd窗口里,打印自定义的日志信息?

1. 前提

登录配置中心,设置路径:配置中心 → 系统高级配置 → 系统维护 → 配置管理菜单

设置配置项 com.toone.v3.platform-Serverfunc_LogFunc (后端日志函数配置) 用户值为 true ,控制台输出信息。

img

2. 函数

使用服务端函数 LogFunc() 来输出。

img

3. 样例

实现一个打印日志内容:登录人在何时进行了保存的操作。

(1)构件方法

  1. 建立一个服务端方法 printLog(打印日志)

    img

  2. 新增方法输入参数 log

    img

  3. 使用规则「执行函数/表达式」,执行函数 LogFunc(BR_IN_PARENT.log,"info")

    img

(2)窗体

  1. 新增窗体输入参数 name,用来获取登录人姓名信息。

    注:具体如何获取登录人信息,不在文中叙述。使用默认值代替。

    img

  2. 在“保存”按钮的点击事件,保存的规则后面,添加「执行方法」规则, 执行服务端方法 printLog, 给方法输入参数 log 赋值。

    img

(3)预览

当用户登录后,在操作业务窗体时,每次点击保存按钮,触发保存规则,都会在后台打印日志信息。

img

下载:打印自定义的日志demo.zip

30. 按钮组控件的动态数据源怎么配置?

  1. 数据源类型:选择“实体”。

  2. 实体:选择已经定义按钮组所需字段的实体。

    img

  3. 实体的字段设置,如下:

    注:字段编码和类型,需要和下图中的保持一致。

    img

执行类型:

  • rule:执行规则

  • win:打开窗体

打开窗体方式:

  • newWindow:新窗口

  • currentWindowRedirection:当前窗口重定向(可以返回原窗体)

  • currentWindow:当前窗口(无法返回)

  • dialogWindow:对话框窗口

  • homePageTabControl:首页页签

入参:

  • 格式为:参数编码=内容

  • 如果有多个参数: 参数编码1=内容1&参数编码2=内容2&……

举例

(1)按钮组格式设置

  • 树型结构:根据id和pid的关系来实现

  • 按钮编码:唯一值

  • 是否菜单项:确认此按钮,是否可以点击

img

(2)打开窗体

首先在被打开窗体中,增加窗体输入参数code。

img

  • 执行类型:win

  • 打开窗体方式:dialogWindow

  • 窗体入参:code=1112

img

img

(3)执行规则

建立一个自定义方法mess,增加一个方法输入参数name。

img

增加一个提示信息的规则,提示方法输入参数name的值。

img

  • 按钮:执行规则1

  • 执行类型:rule

  • 执行规则编码:mess

  • 窗体入参:name=张三

img

img

下载:按钮组demo.zip

31. 图表里的柱状图,是否可以改柱子的颜色?

图表里的柱状图,可以设置柱子的颜色。

但有一个限制条件,只有一个图例项的情况下,才可以修改柱子的颜色。

实现步骤:

  1. 增加一个用来存颜色代码的字段,文本类型。

    img

  2. 在图表设置中,数值页签中,设置颜色列。

    img

  3. 颜色列的值,支持颜色的英文代码和十六进制代码。

    img

  4. 预览效果

    img

注:只有图例项内容只有一个的情况下,才能实现修改柱子颜色功能。

下载:柱状图demo.zip

32. 构件变量应该怎么用?

说明

使用范围:当前构件。

生命周期:同一会话session登录后至登录状态销毁期间。

注意事项:

  1. 用户未登录则无法对构件变量进行读写操作。

  2. 客户端在读取构件变量前建议调用【刷新构件变量的值】规则来确保变量值是新的。

  3. 不同用户会话间的构件变量相互独立/隔离。

赋值和使用

(一)客户端方法

1. 赋值

使用规则【给界面实体/控件/变量赋值】,目标类型选择构件变量。

img

2. 使用

使用规则【刷新构件变量的值】,对构件变量的值进行刷新。

img

然后,在可配置表达式的地方均可对已定义的构件变量进行调用。

img

注:若是构件方法客户端、窗体方法,在使用构件变量前,需要使用规则【刷新构件变量的值】,对构件变量的值进行刷新,因为前台会有缓存,若不刷新使用,可能会导致取值不正确。

(二)服务端方法

赋值和使用,和客户端方法相同。

但是无需在使用构件变量前用规则【刷新构件变量的值】对构件变量的值进行刷新。

33. 在候选项里模糊检索,怎么配置?

可以使用「弹出选择」控件来实现模糊检索。

实现步骤:

  1. 在窗体里放一个「弹出选择」控件,并对其进行编组操作。

    注:编组后才支持模糊检索功能。

    img

  2. 配置数据源,可以通过控件属性「快捷匹配项数据源」进入,也可以双击控件进入。配置页面,目前数据源支持表/查询和API。

    img

举例

  1. 以表作为数据源为例,显示字段和标识字段为必须。

    注:标识字段的值,必须是唯一的。

    img

  2. 设置好数据来源表、显示字段、标识字段。

    副标题:是显示在显示字段候选项下方的,同时也可以进行模糊检索。

    img

  3. 预览效果:对显示字段名称,进行检索。

  4. 候选项里,名称下方的就是副标题年龄

    img

  5. 对副标题年龄字段,进行检索。

    img

  6. 可设置多个副标题,同时都可以进行模糊检索。

    img

下载:模糊检索demo.zip

34. 第三方系统用链接打开平台的窗体,怎么把参数传到窗体输入呢??

使用链接打开平台的窗体,传入参数,需要使用 token

格式:

在窗体地址后面加 &token={"data":{"inputParam":{"variable":{"窗体输入参数编码":"参数内容"}}}}

原地址是:

http://10.1.28.62:8809/module-operation!executeOperation?operation=Form&componentCode=demo&windowCode=form1

改为:

http://10.1.28.62:8809/module-operation!executeOperation?operation=Form&componentCode=demo&windowCode=form1&token=
{"data":{"inputParam":{"variable":{"窗体输入参数编码":"参数内容"}}}}

举例一

在窗体里,新增窗体输入参数code。

img

如果需要传入窗体的编号是 YDG-001

那么链接地址为:

http://10.1.28.62:8809/module-operation!executeOperation?operation=Form&componentCode=demo&windowCode=form1&token=
{"data":{"inputParam":{"variable":{"code":"YDG-001"}}}}

打开链接地址后,窗体就可以收到参数内容。

img

举例二

如果用户不希望在浏览器地址栏显示明码的参数内容,我们可以做加密处理一下。

第三方系统,先把参数内容,进行base64加密。

YDG-001 加密后为 WURHLTAwMQ==

那么链接地址为:

http://10.1.28.62:8809/module-operation!executeOperation?operation=Form&componentCode=demo&windowCode=form1&token=
{"data":{"inputParam":{"variable":{"code":"WURHLTAwMQ=="}}}}

打开窗体后,先使用函数 Decrypt(@code,"base64") ,对窗体输入参数进行 base64 解密。

img

打开链接地址后,浏览器地址栏显示的参数内容就是加密后的非明码内容。

img

举例三

token 值的内容里,有中文或者特殊符号,请连续两次使用 encodeURIComponent方法对 token 值进行转换。

假设现在要打开构件A里的窗体B,需要传递窗体变量var,窗体变量值为:100

var tokenStr = "{\"data\":{\"inputParam\":{\"variable\":{\"var\":100}}}}";

var encodeTokenStr = encodeURIComponent(encodeURIComponent(tokenStr));

var url="http://localhost:8080/module-operation!executeOperation?componentCode=A&windowCode=B&token=" + encodeTokenStr

注:构造token json字符串时,不要使用 ' ,如:"{'data':{'inputParam':{'variable':{'var':100}}}}"; 后台解析 json 字符串会报错。

下载:第三方链接传参demo.zip

35. 我想设置流水号为“YDG-年月日”+序号,请问怎么设置?

流水号的功能,可以使用规则「单据编号生成」来实现。

按规则的设置生成单据编号,流水号最好在编号的末尾。

img

规则说明
  • 实体表、实体字段:将单据编号生成到指定的实体字段上。

  • 流水号位数:顾名思义,即生成多少位流水号,未满足位数时,用补位符补全,如果设置的是3位,补位符是0,则第一次生成时,从001开始,然后递增。

  • 流水号补位符:与“流水号位数”结合使用,当流水号未满设置的位数时,前面会用什么字符补全,只允许填写1位,一般设置0。

    如:流水号位数为3,补位符是0,第一次生成流水号位001。

  • 生成范围:

    选中行:将生成的单据编号生成到实体的选中行上。

    所有行:将生成的单据编号生成到实体的所有行上。

    字段为空的记录:实体字段对应的值为空时,才会生成单据编号。

  • 不缓存流水号:

    不勾选:只在产生第一次的时候计算,后面直接用缓存的流水号+1,缓存有助于提高性能,但可能会产生废号,使流水号不连续。

    勾选:每次生成,都会到关联的物理表字段去查询最大可用流水号,可能影响性能,但不会产生废号,保证流水号连续,需结合关联表、关联表字段使用。

  • 单据编号内容编排:可以按照一定规则编排单据编号的生成规则

  • 值不同时重新生成流水号属性说明:

    勾选:当单据编号对应的内容发生改变时,流水号重新开始计算;

    不勾选:单据编号对应的内容发生改变时,流水号也不会重新开始计算,而是一直递增。

    img

那么生成流水号样式为 “YDG-20210808-001” ,设置如下:

  • 流水号位数:3
  • 流水号补位符:0
  • 生成范围:选中行
  • 缓存流水号
  • 内容编排如图

img

建议:把【单据编号生成】规则,放在保存规则之前,而不要放在新增规则之后。原因:避免用户新增一条业务数据后,生成了流水号,然后意外或主动关闭窗体,没有保存数据,导致出现废号。

img

效果展示:

用户新增一条记录,保存后,即可生成一个流水号。

img

36. 每次启动测试服务后,都要重新发地址给别人,才能访问?

如果使用应用设计器自带的测试服务,那就是 端口不同 引起的。

img

系统 → 系统设置 → 一体化服务设置 中,进行端口号设置即可。

img

info
  • 随机端口号:那么每次启动测试服务,都会由系统自动生成一个端口,基本上每次都不同。
  • 指定端口号:由开发指定一个端口号,每次启动都是这个端口,前提是此端口未被占用。
注:端口号设置修改后,需要重启测试服务,才会生效。

37. 列表控件,能加上最后一行合计行吗?

img

当然可以,列表控件提供了合计行的属性设置。

将「显示表尾统计」属性设置为 True

img

在列表控件的列设计器中,所有绑定的字段属于数字类型的,都会有「显示统计」属性。

  • True :显示合计
  • False :不显示合计

列表中,一共有 3 个字段是数字类型,列设计中「显示统计」属性设置如下:

  • 数量:False ——因为数量的单位不同,不能计算合计。
  • 单价:False
  • 金额:True

img

设置完成后,保部署,预览页面。

合计行,就显示在列表的最下面了,并且按照设置,金额列汇总。

img

38. 旧版本的窗体能导到新版本平台中使用吗?

可以,旧版本的窗体能导到新版本平台中使用。

注意:

  1. 新版本平台对比旧版本平台,移除了通用控件中的面板、流布局、分组等控件。

  2. 如果旧版本的窗体里,包含了面板控件,在新平台中打开窗体后还是存在的,只是无法新增面板控件了。

39. web版报表,怎么按照编号合并相同的名称内容?

制作web版报表,有些时候,需要合并相同单元内容。

例如下图,设置了“编号”和“名称”字段合并相同内容单元。

img

但是,遇到某些情况时,我们不希望所有相同单元都合并,而是按照某一字段的值,分组合并。

例如:按照“编号”内容的不同,合并“名称”单元。

具体操作如下:

  1. 在单元格中鼠标右键,设置单元格字段。

img

  1. 在“编号”和“名称”这2个需要合并单元的定义中,勾选“内容相同的组合为一个单元”。

img

  1. 在“名称”字段单元格内,设置函数 T_MERGEDIFFERENTFIELDS ,可双击函数,也可自己录入。

img

  1. 函数设置 = T_MERGEDIFFERENTFIELDS(@数据源名.分组字段名) = T_MERGEDIFFERENTFIELDS(@tablexx.code)
  • 实体:tablexx

  • “编号”字段名:code

img

  1. 效果预览:

img

注:函数的名称大小写敏感,请使用大写字母。

40. web版报表,怎么设置“第几页共几页”?

web版报表,是使用一段公式,来实现 “第几页共几页” 显示的。

公式内容为:="第PAGE()页/共MAXPAGE()页"

img

然后,再设置 “定义行类型” ,在序号列鼠标右键。

img

设置为 “页眉” 。

img

设置完成后,报表界面呈现样式。

img

预览报表的时候,就在相应的位置显示 “第几页共几页” 了。

img

41. 怎么用链接的方式获取到资源管理里的图片?

路径是构件名+资源名

例如:

img

42. 生产环境只允许一个账号部署构件,是在哪设置?

登录配置中心设置部署权限,设置路径:配置中心 → 系统高级配置 → 构件管理 → 部署权限设置。

是否验证开发系统的发布权限:

  • 不勾选:代表不验证权限(即所有账号登录的开发系统都能发布业务构件到此执行系统)
  • 勾选:代表验证权限(即登录开发系统的账号要跟启动执行系统的账号是同一个帐号才能发布业务构件到此执行系统)

img

43. 超级管理员sa的密码忘记了怎么办?

可以用配置文件修改。

  1. 进入应用服务的文件夹,找到 userdata 目录里

    ..\userdata\conf\preferences\com.toone.v3.platform-00sysadmin\sysadmin\config.xml

    img

  2. 修改 “配置中心密码” ,这里是加密后的密码

    例如:

    密码:123456,加密后:4QrcOUm6Wau+VuBX8g+IPg==

    密码:8,加密后:yfD4lfuYq5FZ9R/QKX4jbQ==

    img

  3. 修改后,保存文件,重启服务之后就可以使用新密码登录sa,再去修改自己的新密码就行了。

img

44. 平台需要的Flash插件是什么版的?

平台需要的是Flash PPAPI版,也就是Adobe Flash Player (for IE)的版本,不是Flash NPAPI版。

如何自己电脑里安装的是什么版的Flash?

可以在控制面板里,选择 “程序和功能” 。

img

img

如果你安装的不是PPAPI版Flash,不用着急,卸载之后,重新下载一个Adobe Flash Player (for IE)的版本安装上就好了。

然后,第一次登录时,请右键 “以管理员身份运行” 平台。

img

45. 平台设计器能双开吗?打开两个开发设计器,然后每个开发设计器打开不同的项目?

设计器只控制了帐号。

  • 同一个账号,不能同时登录2个设计器。

  • 可以用不同的账号,在一台机器上打开多个设计器的。

例如:

一个账号,登录了应用设计器A,之后,又登录了应用设计器B。

几分钟后,设计器A就会弹出提示:

img

同时,设计器左下角也会红色字提示,未登录状态。

img

未登录状态,无法部署构件。

46. 报表中,有什么方法可以在这一列的数字右边拼一个百分号吗?

设置单元格的单元数字显示格式,设置成百分比。

img

img

47. 有没有一次性导出平台所有表的功能?

使用平台的“导出构件设计”功能,可以实现多构件的表同时导出Excel的场景。

img

选择:导出数据库设计

生成格式:3选1

构件需要导出的构件。

img

48. 附件预览报错?

执行期,预览附件时报错。

img

解决方案:

登录配置中心,配置服务外网域名。

设置路径:配置中心 → 系统高级配置 → 系统维护 → 配置管理 → 文档预览方案选择

img

49. 电脑蓝屏或死机后,开发系统使用时报异常,是因为什么?

因为开发系统在使用时,会随时对文件进行写入操作,这个时候电脑蓝屏或死机的话,会导致此文件被损坏。

此损坏是不可逆的。

在重启电脑,重新打开开发系统后,使用时,会未知领域报异常。

img

可以看到,会提示文件路径

C:\Software\V3\DevSystem\Plugins\Toone.V3.DevSystem.MethodEditor\RuleEditor\Client\ExecuteRuleSet\ExecuteRuleSet.xml,

检查文件ExecuteRuleSet.xml是被损坏了。

img

还有其他类型的报异常,如:

img

这种没有明确提示路径和文件,就需要看开发系统日志里面才有。

img

可以在日志里,看到具体路径C:\Software\V3\DevSystem\Plugins\Toone.V3.DevSystem.MethodEditor\RuleEditor\Client\AddDataBaseRecord\AddDataBaseRecord.xml,

检查文件AddDataBaseRecord.xml是被损坏了。

解决方案:

  1. 找同事,复制这个文件回来,替换本地,重启开发系统。

    缺点就是,不知道有哪些文件损坏,要一个一个找,一个一个替换。

  2. 重新安装开发系统。

50. 多个文件怎么打包下载?

这里要是最后一级才能打包成文件合集。

像这样选中文件夹的话,我就算通过文件夹获取到下级文件的ID也不能打包。

img

打包下载的前提:

  • 选中的文件,需要有2个及以上。
  • 需要列表设置多选模式,勾选多个文件。

解决方案:

像问题的描述的那样,把文件ID复制到一个临时实体,想把这个临时实体里所有的文件打包下载,其结果只能是下载临时实体里第一个文件(默认选中第一行)。

  1. 使用函数SelectOrQuitAllRecords,全选临时实体的记录,然后下载。
  2. SelectOrQuitAllRecords("TableName","select") 全选实体记录
  3. SelectOrQuitAllRecords("TableName","quit") 取消全选实体记录