自定程序
# TaskRunner 自定程序
以下是TaskRunner中使用到的相关自定程序。自定程序可用于 RestAPI
与 JScript
类型的自定程序中。
# 1. UGMM类
UGMM类程序在程序中调用时,必须以UGMM.开头。
# 1.1. AddLog
procedure AddLog(AText:string);
将自定日志信息添加至动态滚动日志列表中。
- 参数
参数名称 | 说明 |
---|---|
AText | 要添加日志的内容 |
- 示例
UGMM.AddLog("This Log was Generated by JScript Program");
# 1.2. WSClient_WriteStream
procedure WSClient_WriteStream(const AStream:TStream);
由客户端向服务端发送流信息。流信息的来源可以是文件、图片、音频、文本等内容。
- 参数
参数名称 | 说明 |
---|---|
AStream | 要输出的流信息 |
- 示例
var Data;
Data = new TStream;
Data = TStream(PostStream);
UGMM.WSClient_WriteStream(Data);
2
3
4
# 1.3. WSClient_WriteString
procedure WSClient_WriteString(const AText: string);
由客户端向服务端发送字符串信息。
- 参数
参数名称 | 说明 |
---|---|
AText | 要发送的字符串信息 |
- 示例
UGMM.WSClient_WriteString("{\"action\":\"msg\",\"sid\":\"test\",\"text\":\"hello\"}")
# 1.4. WSClient_WriteIsoBean
procedure WSClient_WriteIsoBean(const acusername, acname, accom, atag, acevent: string; acparams:TStringlist=nil);
向指定的用户登录的Bean窗口发送WebSocket信息。
部分 | 说明 |
---|---|
acusername | 登录的用户名称 |
acname | 动作名称,指定为 callback |
accom | 调用的Bean模块的编号 |
atag | 绑定的控件的Tag编号 |
acevent | 调用的事件名称 |
acparams | 参数信息,以键值对的方式进行 |
var l;
l = new TStringList();
l.Values["text"] = "Hello WebSocket Test";
UGMM.WSClient_WriteIsoBean("demo","callback","bean-001","updatememo","0",l))
l.Free;
2
3
4
5
# 1.5. MQTTClient_Publish
procedure MQTTClient_Publish(const ATopic: String; const APayload: String; AQos: TMQTTQOSType = qtAtMostOnce);
向指定主题发布MQTT订阅消息。
- 参数
部分 | 说明 |
---|---|
ATopic | MQTT主题 |
APayload | MQTT订阅信息内容 |
AQos | 消息的优先级设定 |
- 示例
{
var d;
d = new TFastDataSet(nil);
TFastDataSet(d).ConnectionDefName = "FastERP";
TFastDataSet(d).CommandText = "Select top 10 * from Basic_Cust";
TFastDataSet(d).Open;
//数据集转JSON
s = TFastDataSet(d).ToJSONArrayString;
UGMM.MQTTClient_Publish("fasterp",s,qtAtMostOnce);
}
2
3
4
5
6
7
8
9
10
11
# 1.6. WSServer_BroadcastString
procedure WSServer_BroadcastString(const aMessage: string);
向 WebSocket 服务器发送字符串类型的广播消息。
- 参数
部分 | 说明 |
---|---|
aMessage | 待发布的消息 |
- 示例
UGMM.WSServer_BroadcastString("Hello_World");
# 1.7. WSServer_BroadcastStream
procedure WSServer_BroadcastStream(aStream: TStream);
向 WebSocket 服务器发送流类型的广播消息。
- 参数
部分 | 说明 |
---|---|
aStream | 待发布的流信息 |
# 1.8. VerifySqlSensitiveWords
Procedure VerifySqlSensitiveWords(AList:TStrings);
检查SQL文本中是否包含 UPDATE
、DELETE
、INSERT
等敏感词汇。
# 1.9. OpenCds
Procedure OpenCds(ANodeName:String;
ACds:TClientDataSet;
Const SelectMaxRecordCount:Integer = 0;
Const RecordCountMode : TFDRecordCountMode = cmTotal;
Const PageRowCount :integer = -1;
Const PageIndex:Integer = -1);
2
3
4
5
6
说明 打开数据集,适用于 TFastDataSet。
- OpenCds 程序语法中各部分说明
部分 | 说明 |
---|---|
ANodeName | 数据库连接设置的名称 |
ACds | TFastDataSet的名称 |
SelectMaxRecordCount | 限制显示的最大记录数量,0表示为不限制 |
RecordCountMode | 统计模式,cmTotal 表示为合计模式 |
PageRowCount | 设定分页显示指向的行数 |
PageIndex | 设定显示页数 |
- 示例
var D,V,O;
D = new TFastDataSet(nil);
TFastDataSet(D).CommandText = "SELECT * FROM Basic_WHS";
UGMM.OpenCds("FastERP",TFastDataSet(D),0,cmTotal,-1,-1);
//数据集转换
V = TFastDataSet(D).ToJSONArray;
O = new TJSONObject();
O.AddPair("status","ok");
O.AddPair("message","success");
O.AddPair("records",TJSONNumber.Create(D.RecordCount));
O.AddPair("data",V);
ShowMessage(O.ToString);
2
3
4
5
6
7
8
9
10
11
12
# 1.10. ExecSQL
Procedure ExecSql(ANodeName,ASqlText:String;Const ALines:TStringList = Nil);
执行SQL语句。
- ExecSQL 程序语法中各部分说明
部分 | 说明 |
---|---|
ANodeName | 数据库连接设置的名称 |
ASqlText | 执行的SQL语句 |
ALines | 指定行 |
UGMM.ExecSql("FastERP","SELECT * FROM Basic_WHS",nil);
# 1.11. ApplyUpdatesCds
Procedure ApplyUpdatesCds(AConnection:TFDConnection;ATableName:string;ADelta:OleVariant);
说明 提交更新。
- ApplyUpdatesCds 程序语法中各部分说明。
部分 | 说明 |
---|---|
AConnection | 数据库连接设置控件 |
ATableName | 更新的表名称 |
ADelta | 更新的内容 |
# 1.12. ApplyUpdatesCds1
Procedure ApplyUpdatesCds1(ANodeName:String;ACds:TClientDataSet);
说明 单个 TFastDataSet 控件提交更新。
- ApplyUpdatesCds1 程序语法中各部分说明。
部分 | 说明 |
---|---|
ANodeName | 数据库连接设置的名称 |
ACds | TFastDataSet 控件的名称 |
# 1.13. ApplyUpdatesCds2
Procedure ApplyUpdatesCds2(ANodeName:String;ACds1,ACds2:TClientDataSet);
说明 两个 TFastDataSet 控件提交更新。
- ApplyUpdatesCds2 程序语法中各部分说明。
部分 | 说明 |
---|---|
ANodeName | 数据库连接设置的名称 |
ACds1,ACds2 | TFastDataSet 控件的名称 |
# 1.14. ApplyUpdatesCds3
Procedure ApplyUpdatesCds3(ANodeName:String;ACds1,ACds2,ACds3:TClientDataSet);
说明 三个 TFastDataSet 控件提交更新。
- ApplyUpdatesCds3 程序语法中各部分说明
部分 | 说明 |
---|---|
ANodeName | 数据库连接设置的名称 |
ACds1,ACds2,ACds3 | TFastDataSet 控件的名称 |
# 1.15. ExecuteCds
Procedure ExecuteCds(ANodeName:String;ACds:TClientDataSet);
说明 执行 TFastDataSet 控件中包含的语句。
- ExecuteCds 程序语法中各部分说明
部分 | 说明 |
---|---|
ANodeName | 数据库连接设置的名称 |
ACds | TFastDataSet 控件的名称 |
# 1.16. PyEngineAndGIL_ExecStrings
procedure PyEngineAndGIL_ExecStrings(strings: TStrings; const FileName: string =''<string>'';pascalvar:TPythonDelphiVar=nil);
说明: 使用解锁GIL的Python运行脚本。
- PyEngineAndGIL_ExecStrings程序语法中各部分说明
部分 | 说明 |
---|---|
strings | 要运行的Python脚本内容(多行) |
FileName | 文件名称 |
pascalvar | 使用的python变量组件 |
//当python语句中出现引用`test.Value`时,触发此事件
function pvOnGetData(Sender,Data)
{
Data = UgParams.Values["user"];
UGMM.AddLog("User:"+Data);
}
//当python语句中出现给`test.Value`赋值的语句时,触发此事件
function pvOnSetData(Sender,Data)
{
UGMM.AddLog("Agent:"+Data);
}
{
var pe, pv,ps;
pv = new TPythonDelphiVar(nil);
ps = new TStrings;
UGMM.AddLog("UserCreate");
//设定运行的python模块名称,主运行模块名称通常为__main__
pv.Module = "__main__";
//需要注入至python模块中的变量名称
pv.VarName = "test";
UGMM.AddLog("UserSetProperties");
//绑定事件,用于设定python运行时输入变量,以及计算完成后输出变量
pv.OnGetData = &pvOnGetData;
pv.OnSetData = &pvOnSetData;
UGMM.AddLog("UserSetEvent");
//构造多行python脚本
ps.Add("test.Value = f'access{test.Value}'");
ps.Add("print(test.Value)");
//从主python引擎中获取GIL,并运行脚本
UGMM.PyEngineAndGIL_ExecStrings(ps,"<string>",pv);
UGMM.AddLog("UserRunPythonScript");
//使用线程模式运行的程序,运行完成后不需要释放创建的资源,在线程运行结束后会自动释放
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# 1.17. PyEngineAndGIL_ExecString
procedure PyEngineAndGIL_ExecString(const command: AnsiString; const FileName:string = ''<string>'';pascalvar:TPythonDelphiVar=nil);
说明: 使用解锁GIL的Python运行脚本。
- PyEngineAndGIL_ExecString程序语法中各部分说明
部分 | 说明 |
---|---|
command | 要运行的Python脚本文本 |
FileName | 文件名称 |
pascalvar | 使用的python变量组件 |
//当python语句中出现引用`test.Value`时,触发此事件
function pvOnGetData(Sender,Data)
{
Data = UgParams.Values["user"];
UGMM.AddLog("User:"+Data);
}
//当python语句中出现给`test.Value`赋值的语句时,触发此事件
function pvOnSetData(Sender,Data)
{
UGMM.AddLog("Agent:"+Data);
}
{
var pe, pv;
pv = new TPythonDelphiVar(nil);
UGMM.AddLog("UserCreate");
//设定运行的python模块名称,主运行模块名称通常为__main__
pv.Module = "__main__";
//需要注入至python模块中的变量名称
pv.VarName = "test";
UGMM.AddLog("UserSetProperties");
//绑定事件,用于设定python运行时输入变量,以及计算完成后输出变量
pv.OnGetData = &pvOnGetData;
pv.OnSetData = &pvOnSetData;
UGMM.AddLog("UserSetEvent");
//从主python引擎中获取GIL,并运行脚本
UGMM.PyEngineAndGIL_ExecString("test.Value = '32'","<string>",pv);
UGMM.AddLog("UserRunPythonScript");
//使用线程模式运行的程序,运行完成后不需要释放创建的资源,在线程运行结束后会自动释放
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# 1.18. PyEngineAndGIL_ExecFile
procedure PyEngineAndGIL_ExecFile(const FileName: string; locals, globals: PPyObject; pascalvar:TPythonDelphiVar=nil);
说明: 使用解锁GIL的Python运行脚本。
- PyEngineAndGIL_ExecFile程序语法中各部分说明
部分 | 说明 |
---|---|
FileName | 要运行pytho脚本的文件名称 |
pascalvar | 使用的python变量组件 |
//当python语句中出现引用`test.Value`时,触发此事件
function pvOnGetData(Sender,Data)
{
Data = UgParams.Values["user"];
UGMM.AddLog("User:"+Data);
}
//当python语句中出现给`test.Value`赋值的语句时,触发此事件
function pvOnSetData(Sender,Data)
{
UGMM.AddLog("Agent:"+Data);
}
{
var pe, pv;
pv = new TPythonDelphiVar(nil);
UGMM.AddLog("UserCreate");
//设定运行的python模块名称,主运行模块名称通常为__main__
pv.Module = "__main__";
//需要注入至python模块中的变量名称
pv.VarName = "test";
UGMM.AddLog("UserSetProperties");
//绑定事件,用于设定python运行时输入变量,以及计算完成后输出变量
pv.OnGetData = &pvOnGetData;
pv.OnSetData = &pvOnSetData;
UGMM.AddLog("UserSetEvent");
//从主python引擎中获取GIL,并运行脚本
UGMM.PyEngineAndGIL_ExecFile("test.py",nil,nil,pv);
UGMM.AddLog("UserRunPythonScript");
//使用线程模式运行的程序,运行完成后不需要释放创建的资源,在线程运行结束后会自动释放
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# 1.19. AddPythonScriptTask
procedure AddPythonScriptTask(APyID:string;AVarName:string='';AVarValue:string='');
说明: 将预设资料中定义的Python脚本加入至Python运行队列中。
- AddPythonScriptTask程序语法中各部分说明
部分 | 说明 |
---|---|
APyID | 预设资料的编号 |
AVarName | 绑定Python脚本的输入变量的名称 |
AVarValue | 绑定Python脚本的输入变量的取值 |
//假设预设资料编号为test
//Python中定义的输入参数为input, 使用input.value 获取输入参数的取值为hello
UGMM.AddPythonScriptTask("test","input","hello")
2
3
# 2. UGCM 类
UGCM类程序在程序中调用时,必须以UGCM.开头。
# 2.1. Base64Put
procedure Base64Put(Base64Str,FileName:String);
说明: 将base64字符串保存为文件。
- Base64Put 程序语法中各部分说明
部分 | 说明 |
---|---|
Base64Str | 要转换的base64文本 |
FileName | 要保存的文件名称(要包含保存文件的路径) |
# 2.2. DownloadFile
procedure DownLoadFile(const Url, FilePath: string);
说明: 从url地址下载文件。
- DownloadFile 程序语法中各部分说明
部分 | 说明 |
---|---|
Url | 链接地址 |
FilePath | 保存文件的路径,以及文件的名称 |
# 2.3. HexToJPG
procedure HexToJPG(AHex: string; AFileName: string);
说明: 16进制转JPG
- HexToJPG 程序语法中各部分说明
部分 | 说明 |
---|---|
AHex | 指定16进制字符阿串 |
AFileName | 指定转换为的文件名 |
- 示例
//JScript
//接收到的16进制数据转换为图片
UGCM.HexToJPG(apayload,"profile-image.jpg");
Image.Picture.LoadFromFile("profile-image.jpg");
}
2
3
4
5
# 2.4. RunPowerShellCommand
procedure RunPowerShellCommand(const ACommand: string;AParams:string='';AShow:integer=0);
说明: 执行PowerShell命令。
- RunPowerShellCommand 程序语法中各部分说明
部分 | 说明 |
---|---|
ACommand | 要执行的PowerShell命令 |
AParams | PowerShell运行的额外参数信息 |
AShow | 是否显示PowerShell运行的窗口,0为不显示,1为显示 |
# 2.5. RunPowerShellFile
procedure RunPowerShellFile(const AFile: string;AParams:string='';AShow:integer=0);
说明: 执行PowerShell批处理文件。
- RunPowerShellFile 程序语法中各部分说明
部分 | 说明 |
---|---|
AFile | 文件的名称(需包含路径信息) |
AParams | PowerShell运行的额外参数信息 |
AShow | 是否显示PowerShell运行的窗口,0为不显示,1为显示 |
# 2.6. RunWorkFlow
procedure RunWorkFlow(AName:string; AParams: TStringList);
说明: 运行工作流。
- RunWorkFlow 程序语法中各部分说明
部分 | 说明 |
---|---|
AName | 工作流的名称 |
AParams | 工作流的参数信息,每行都以name=value 的形式赋值 |
- 示例
{
var list= new TStringList();
list.add("var1=233");
UGCM.RunWorkFlow("test_wf",list);
}
2
3
4
5
# 2.7. StrToStream
StrToStream(AString:String; AStream:TMemoryStream);
说明: 字符串转流
- StrToStream 程序语法中各部分说明
部分 | 说明 |
---|---|
AString | 指定字符串 |
AStream | 指定转换为的流 |
# 2.8. WriteLog
procedure WriteLog(AFilename:string; ALogText:string);
说明: 向指定目录的日志文件中写入日志信息。
- WriteLog 程序语法中各部分说明
部分 | 说明 |
---|---|
AFileName | 日志文件的名称 |
ALogText | 日志文件写入的字符串内容 |
- 示例
UGCM.WriteLog("LOG\\Syslog.log",DateTimeToStr(now) + ": Success");
# 2.9. WriteErrorLog
procedure WriteErrorLog(AText: string);
说明: 写入错误日志信息。
部分 | 说明 |
---|---|
AText | 日志写入的字符串内容 |
- 示例
UGCM.WriteErrorLog(DateTimeToStr(now) + ": Error");
# 2.10. WriteSysLog
procedure WriteSysLog (AText: string);
说明: 写入系统日志信息。
部分 | 说明 |
---|---|
AText | 日志写入的字符串内容 |
- 示例
UGCM.WriteSysLog(DateTimeToStr(now) + ": SysLog");
# 2.11. WriteWSLog
procedure WriteWSLog(AText: string);
说明: 写入WebSocket日志信息。
部分 | 说明 |
---|---|
AText | 日志写入的字符串内容 |
- 示例
UGCM.WriteWSLog(DateTimeToStr(now) + ": WSLog");
# 2.12. TTS
procedure TTS(QSpeak: string);
说明: 播报TTS语音
部分 | 说明 |
---|---|
QSpeak | 播报的语音的内容 |
- 示例
UGCM.TTS("Hello,TaskRunner!");
# 2.13. RunScriptToThread
procedure RunScriptToThread(ATaskName: string; AParams: TStringList=nil);
说明: 在子线程中运行TaskRunner中设定的自定程序,适用于运行花费较多时间的自定程序。
部分 | 说明 |
---|---|
ATaskName | 自定程序的名称 |
AParams | 自定程序需要输入的参数信息 |
- 示例
{
var sl;
sl = new TStringList();
//设定要传入的参数
sl.Values["user"] = UgParams.Values["user"];
//使用线程模式运行python的自定程序
UGCM.RunScriptToThread("python_js",sl);
sl.Free;
}
2
3
4
5
6
7
8
9