自定程式
# 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