联系
我们

工作日 9:00-18:00

13632615190

随需应变
即时开发,即时发布,即时使用
表单驱动
使用简单,“0”IT基础,“0”软件基础,拖拉拽完成开发
快速开发
分钟级的字段调整,小时级别的模块增加,级别的系统开发
快速发布
开发完成一键发布即可见效
环境分离
开发,测试,生产环境分离
读写分离
支持数据库集群实现读写分离

脚本

对于任何一个低代码开发平台来说,要实现界面元素,动态过滤条件,动态权限,数据校验等等,必然需要脚本功能,否则这个低代码平台就只能实现简单模块的增删改查功能了。

脚本可以用于哪些方面呢?比如:

1、赋初始值,比如新增单据的时候,如果单据上有个员工字段,那么我们希望员工为当前登录用户,那么我看可以在单据的“新增事件”中使用脚本:LoadRefData("Employee",UserID()); 这脚本的意思是加载当前员工信息,其中Employee表示开发平台中的员工模块的模块ID(每个模块都有一个ID),UserID()表示取当前登录用户的ID。再比如要设置某个日期字段为当前日期后30天(比如下一次跟进时间),那么可以这么设置SetValue("下一次跟进日期字段名",ToDay(30))就可以了;

2、权限:比如要设置经理可以看本部门及其子部门所有数据,那么可以设置

3、提醒,比如保单到期前30天进行提醒,则可以在开发平台首页的提醒任务中这么设置提醒条件:

4、初始显示条件,比如某个单据我们进入的时候默认显示最近7天的记录,则可以在开发平台中进行设置


5、保存前进行验证,如果我们需要保存记录前对某些值进行交易,校验不通过则不允许保存,那么我们可以通过在“保存前校验”事件中增加脚本,进行校验。


下面是部分常用脚本:


取数赋值脚本:

GetValue:取控件的值,如果某个控件字段名叫“__Name__”,那么GetValue("__Name__")则可取得此字段当前输入的值。如果要去本单据上引用的其他单据字段,比如客户信息单据上引用了员工姓名,那么可以这么取:GetValue("Employee\__Name__");其中Employee表示引用的单据编号,__Name__表示引用的字段名称。

SetValue:设置控件的值,如果某个控件字段名叫“__Name__”,那么SetValue("__Name__","张三")则设置了控件值为“张三”;

GetCellValue:取单元格的值,只能用于可编辑子表的列“内容改变”等事件中,和RowIndex()配合使用,如GetCellValue(RowIndex(), "列数据库字段名"),表示取当前事件触发的单元格所在的行(RowIndex()返回)中的“列数据库字段名”指定的这一个单元格的值;

SetCellValue:设置单元格的值,只能用于可编辑子表的列“内容改变”等事件中,和RowIndex()配合使用,如SetCellValue(RowIndex(), "列数据库字段名", "值"),表示设置前事件触发的单元格所在的行(RowIndex()返回)中的“列数据库字段名”这一个单元格的值;

RowIndex:取单元格所在的行号,只能用于可编辑子表中,和GetCellValue和SetCellValue配合使用,返回当前事件触发的单元格所在的行号;

SumColumn:汇总某个可编辑子表的某列的值,可用于可编辑子表中某列单元格值修改后,将列数据汇总到主表的某个字段,如SumColumn("子表单据ID", "子表列字段名"),比如要将子表订单明细(OrdersItem)中的金额列“Amt”的值汇总到主表的“TotalAmt”,则可以在子表金额列内容改变事件中加:SetValue("TotalAmt", SumColumn("OrdersItem","Amt")); 就表示先用SumColumn获得OrdersItem的Amt列的汇总数据后,用SetValue赋值给主表字段TotalAmt。

LoadRefData:用于加载关联字段的值,假设“客户信息”表单上的“业务员”字段引用的是“员工表单Employee”上姓名字段,那么想新增客户信息时自动设置业务员为当前登录用户,则可以在“客户信息”表单的“新增事件”中用LoadRefData("Employee", UserID()) ,表示用UserID()获得当前登录用户ID,然后用LoadRefData自动加载引用数据。LoadRef的作用类似于在页面上点击选择引用数据按钮的操作;


日期操作类脚本:

AddDay:指定日期加指定天数,参数(DateTime date,int dayDiff),第一个参数表示日期(可以是日期字符串或者其他返回日期的脚本,第二个参数表示要加的天数,可以是负数,则表示减多少天)如:Add("2022-11-01",10)则返回 2022-11-11。

AddYear:指定日期加指定年数,参数(DateTime date#日期值,int yearDiff#表示要加的年数),如:AddYear("2022-11-01",1) 则返回 2023-11-01

AddMonth:指定日期加指定月数,参数(DateTime date#日期值,int monthDiff#表示要加的月数),如:AddMonth("2022-11-01",1) 则返回 2022-12-01

Age:根据出生时间,计算年龄,参数(datetime birthday#出生时间),参数可以直接填写日期字符串或者GetValue("日期字段名")等其他脚本;

Day:取指定日期的“日”(如果无参数,则表示取当前的日),如:Day("2023-08-09") 则返回 9,如:Day()则返回今天的“日”;

DateDiff:计算2个日期之间的“天/月/年”数(后一个日期减前一个日期),包括第一“天/月/年”,如 DateDiff("2024-01-01","2024-12-31") 则返回返回366。请注意:如果两个日期相同则返回1,因为默认计算天数。而:DateDiff("2020-01-01","2024-12-31")结果为1827天(第三个参数不填则表示计算天数)、DateDiff("2020-01-01","2024-12-31", "M")结果为59,DateDiff("2020-01-01","2024-12-31", "Y")则返回4;

IDCardNo2Birthday:将身份证号码转换成生日,如:IDCardNo2Birthday(GetValue("idNO")),则先用GetValue("idNO")取到在idNO中输入的身份证号码,然后转换成日期格式;

IDCardNo2Sex:将身份证号码转换成性别,如:IDCardNo2Sex(GetValue("idNO")),则先用GetValue("idNO")取到在idNO中输入的身份证号码,然后转换性别“男/女”;

Year:取指定日期的年,参数(DateTime date#日期值的参数,或者返回日期值的函数。如果没指定参数,则返回本年的年份),如:Year("2022-08-09") = 2022

Month:取指定日期的月份,参数(DateTime date#日期值的参数,或者返回日期值的脚本,如果没指定参数,则返回本年本月),如:Month("2022-08-09") 则返回 8

Now:取当前系统时间,精确到秒,参数(Int addDays#当前时间 (-)多少天,如:假设:Now() = "2022-09-25 15:35:25",那么Now(-4) = "2022-09-21 15:35:25"),如:Now() = "2022-09-25 15:35:25"

WeekDay:星期几,参数(DateTime date#如果没指定参数,则返回今天是星期几,如果指定时间,则表示指定时间是星期几),如:WeekDay("2022-12-31")=6

ToDay:取今天日期值,参数(int addDays#今天 (-)多少天,如:假设:ToDay() = "2011-09-25",那么ToDay(-4) = "2011-09-21"),如:ToDay() = "2022-09-25"

FirstDayOfMonth:取某年某月第一天,返回日期值,参数(int year#年,int month#月),如:假设今天是2022年,则调用:FirstDayOfMonth(Year(),8) - 则返回2022-08-01。

LastDayOfMonth:取某年某月最后一天,返回日期值,参数(int year#年,int month#月),如:假设今天是2022年某一天。调用:LastDayOfMonth(Year(),8) - 则返回2022-08-31。

Quarter:取指定日期所在的第几季度,如:Quarter("2011-08-09") 则返回3,参数(DateTime date#日期类型的参数,或者返回日期值的函数。如果没指定参数,则返回本年本月所在的季度)


字符串操作脚本:

Contains:检查字符串中是否包含指定子字符串,并返回包含的次数,比如:Contains("中国广东省广州市","广")返回2,因为第一个参数包含了2个"广"字,Contains("中国广东省深圳市","佛山")返回0,因为第一个参数没包含佛山,参数(string Str#源字符串,string subStr#检查此字符串是否在源字符串中);

Concat:将多个字符串连接起来,形成一个单一的字符串,比如:Concat("广东省","深圳市")返回"广东省深圳市",参数(string Str1#字符串1,string Str2#字符串2,string StrN#字符串N)

CountSerialNO:计算两个序列号之间有多少个号码,如 CountSerialNO("HH20210000001","HH20210000100") 则返回100,表示有100个号码。起始序列号,结束序列号长度必须相同。参数(string startNO#起始序列号,string endNO#结束序列号);

Date2String:格式化日期,并返回字符串,参数(DateTime date#日期值,string format#表示日期的format)。如:Date2String("2011-11-01","MM-dd") 则返回 11-01。

Length:返回字符串的长度,包括前后空格长度,参数(string Str#要计算长度的字符串,如:Length("abcd") = 4)

String2Date:将字符串转换成日期类型,(string format#表示日期的字符串),如:String2Date("2011-11-01") 则返回对应的DateTime类型

Substring:截取字符串中从指定位置开始的子字符串,如 Substring(\"深圳市汉合软件技术有限公司\", 3, 4) 则返回“汉合软件”,第一个参数表示原字符串,第二个参数表示要截取的起始位置(从0开始计数),第三个参数表示要截图的子字符串的长度;

Trim:删除字符串前后空格,如字符串' zhangsan ',那么调用公式以后,为'zhangsan'

TrimStart:去掉字符串前面空格,或者去掉字符串前面指定的字符,比如Trim(" abcd ") = "abcd ", Trim("$abcd$","$") = "abcd$"

TrimEnd:去掉字符串后面空格,或者去掉字符串后面指定的字符,比如Trim(" abcd ") = " abcd", Trim("$abcd$","$") = "$abcd"


数字操作脚本:

Abs:求数字的绝对值,如Abs("-123")返回123,参数必须是数字类型或者能转成数字类型的字符串,或者返回数字类型的其他脚本;

Average:求平均值(参数个数不限,每个参数都必须返回值为数字,参数可以是数字,或者其他脚本);如:Average(100,90,80,70,GetValue("OnlineAmt"));

Ceiling:返回大于或等于指定的数的最小整数值,如:Ceiling(0.124)返回0,Ceiling(1.125)返回1。参数(double value#值)

Floor:返回小于或等于指定数的最大整数,如:Floor(0.124)返回1,Round(1.125)返回2。参数(double value#值)

Int:对数据取整,参数(double value#值),参数可以直接填写数字,或者GetValue("字段名")等其他脚本

Max:求最大值(参数个数不限,每个参数都必须返回值为数字,)如:Max(100,90,80,70,GetValue("OnlineAmt")) 则返回这几个参数中的最大值;

Min:求最小值(参数个数不限,每个参数都必须返回值为数字),如:Min(100,90,80,70,GetValue("OnlineAmt")) 则返回这几个参数中的最小值;

Mod:求余,如Mod("除数", "被除数") 则返回除数 % 被除数的余值,比如Mod(10 , 3)返回1;

Round:对数字进行四舍五入,如:Round(0.124,2)返回0.12,Round(0.125,2)返回0.13。参数(double value#值,int digits#精度)

ToCapital:将金额转换成大写,比如ToCapital("123.45")将转成“壹佰贰拾叁点四角五分”这样的;


当前登录用户脚本:

UserID:取得当前登录用户的ID,如UserID();

UserName:取得当前登录用户的用户名,如UserName();

UserField:默认取当前登录用户的某个字段,如UserField("Birthday") 则返回当前登录用户的Birthday字段值(注意:字段必须在员工表单Employee中存在);

DeptID:取当前登录用户所在的部门ID,如DeptID();

DeptName:去当前登录用户所在的部门名称,如DeptName();

GetDeptList:如果参数为空则取当前登录用户所在部门及其所有子部门的部门ID列表,返回格式为“部门ID1,部门ID2,...部门IDN”,如果带参数则返回参数所指定的部门ID列表,如GetDeptList("财务部")返回财务部及其下属所有部门的ID列表 “ID1,ID2,ID3...”


界面元素控制脚本:

Enable:用于设置一个或者多个字段是否可输入,如Enable("字段名1","字段名2","字段名N", true/false) ,多个字段之间用逗号(英文状态的逗号)分隔,最后一个参数如果时false则表示这些字段不能输入,如果为true则表示这些字段可以输入;

Visible用于设置一个或者多个字段是否显示,如Visible("字段名1","字段名2","字段名N", true/false) ,多个字段之间用逗号(英文状态的逗号)分隔,最后一个参数如果时false则表示这些字段不显示,如果为true则表示这些字段显示;

Required:用于设置一个或者多个字段是否必填,如Required("字段名1","字段名2","字段名N", true/false) ,多个字段之间用逗号(英文状态的逗号)分隔,最后一个参数如果时false则表示这些字段非必填,如果为true则表示这些字段必填(字段标签会加上红色星号);

Color:颜色函数参数列表(int R,int G,int B),如:Color(255,255,255)则返回白色。


逻辑运算脚本:

OR

OR表示多个参数中只要有一个成立则结果就成立,用法:OR(判断1,判断2,判断3),比如要判断客户级别为A或者B时,自动设置客户的某个字段,那么就可以这么做:

IF(OR(GetValue("客户级别字段名")="A",  GetValue("客户级别字段名")="B"),

    SetValue("客户某个字段", "字段内容"),

"忽略"

);


用GetValue取客户级别字段值,然后用OR判断分别等于A或者B,则执行IF的第二个参数SetValue赋值,IF的第三个参数如果不需要处理,则填一个“忽略”(也可以随便输入一个文字都行,不能为空,因为IF必须要有3个参数)


AND

AND表示多个参数中所有参数判断结果都成立则结果就成立,用法:AND(判断1,判断2,判断3),比如要判断客户级别为“A”并且客户类型等于“IT”时,自动设置客户的某个字段,那么就可以这么做:

IF(AND(GetValue("客户级别字段名")="A",  GetValue("客户类型字段名")="IT"),

    SetValue("客户某个字段", "字段内容"),

"忽略"

);


其他脚本:

SystemName:取当前系统名,系统名为E6开发平台中解决方案的名称,常用于打印模版,导出模版;

SystemShortName:取当前系统名简称,系统简称在E6开发平台的解决方案根节点属性中设置,常用于打印模版,导出模版

Latitude:移动定位-维度(返回当前定位的维度坐标),暂时无用;

Longitude:移动定位-经度(返回当前定位的经度坐标),暂时无用;

IP:获得本机IP地址;

Error:显示错误信息,如Error("开始时间不小小于2024年12月31日")则会显示错误信息“开始时间不小小于2024年12月31日”;

MD5:计算参数的MD5值,比如MD5(UserID() + DeptID()) 则会取当前登录用户的数据记录ID和所在部门的记录ID,相加后计算MD5值,常用于在单据转换等场景生成唯一的记录ID等等;


我们系统是开放的,如果您有一定的编程能力,并且需要一些个性化的脚本,您只需要实现我们的脚本接口,写好dll以后,发布到服务器端的bin目录重新启动即可运行。