<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                #### **什么是腳本** 腳本是一段PHP代碼,可以被應用中心執行以實現特定功能。應用中心支持通過腳本實現以下功能: * 自定義計算函數。 * 自定義提取觸發器。 * 自定義回填觸發器。 編寫腳本對于應用中心來說不是必須的,但通過編寫腳本卻可以極大地增強應用中心的處理能力,這對于實施復雜度高、應用中心標準化功能滿足不了的項目是一個很好的選擇。 ## 編寫腳本需要具備哪些基礎 除了要熟悉應用中心以及相關數據庫表結構之外,編寫腳本還需要有PHP編程基礎,寫腳本的過程本質上寫PHP代碼的過程。因此,應用中心的實施人員需要補充些PHP編程知識,這對編寫腳本是非常有幫助的。 #### **應用中心庫表結構** 應用中心主要庫表結構如下圖所視: ![](https://www.tongda2000.com/oa/MYOA2019/manual/04%E7%94%A8%E6%88%B7%E6%89%8B%E5%86%8C/%E5%BA%94%E7%94%A8%E4%B8%AD%E5%BF%83/media/%E5%BA%94%E7%94%A8%E4%B8%AD%E5%BF%83_127.png) #### **應用中心控件數據結構** 新版應用中心采取前后端分離方式實現,前端和后端采取規定好的數據結構進行通信,因此用戶自己編寫腳本過程中讀取和設置數據時要滿足規定好的結構。應用中心各控件數據結構說明如下: \*\*單行文本、多行文本、數字文本、貨幣文本、自動編號:\*\*具體值,例如:”應用中心”,”2017版\\n應用中心操作手冊”,96,25.98,”2017110056”。 \*\*日期文本:\*\*類型為日期時,數據格式為yyyy-M-d,例如:2017-11-20;類型為時間時,數據格式為HH:mm:ss,例如:11:07:01;類型為日期+時間時,數據格式為yyyy-M-d HH:mm:ss,例如:2017-11-20 11:07:01。 \*\*單選框:\*\*選項值結構為:\[\[“code”,”name”\]\],code為代碼保存值,name為代碼顯示值,例如:\[\[“code”=>”01”,”name”=>”男”\],\[“code”=>”02”,”name”=>”女”\]\];選定值為:選擇后的代碼code值,例如:01。 \*\*多選框:\*\*選項值結構與單選框一樣;選定值為:數組,數組里元素為選擇后的代碼code值,例如:\[“01”,”02”\]。 \*\*下拉選擇:\*\*選項值結構與單選框一樣;不支持多選的選定值結構與單選框一致,支持多選的選定值結構與多選框一致。 \*\*地址:\*\*數據結構為:\[“prov”=>\[“id”,”name”\],”city”=>\[“id”,”name”\],”country”=>\[“id”,”name”\],”street”\],分別對應省、市、縣以及詳細地址,例如:\[“prov”=>\[“id”=>”110000”,”name”=>”北京市”\],”city”=>\[“id”=>”110100”,”name”=>”市轄區”\],”country”=>\[“id”=>”110108”,”name”=>”海淀區”\],”street”=>”紫竹院路69號”\]。 \*\*定位:\*\*數據結構為:\[“lat”,”lng”,”address”\],分別對應緯度、經度以及具體地址,例如:\[“lat”=>39.9241,”lng”=>116.404,”address”=>”北京市東城區”\]。 \*\*附件、圖片:\*\*數據結構為:\[\[“attach\_id”,”attach\_name”\]\],分別對應附件ID以及附件名稱,例如:\[\[“attach\_id”=>” 2873\\@1711\_754692181”,”attach\_name”=>” 報表需求開發.docx”\],\[“attach\_id”=>” 2874\\@1711\_303458136”,”name”=>” 17版應用中心建議.docx”\]\]。 \*\*部門選擇:\*\*數據結構為:\[\[“dept\_id”,”dept\_name”\]\],分別對應部門ID以及部門名稱,例如:\[\[“dept\_id”=>”ALL\_DEPT”,”dept\_name”=>”全體部門”\]\],\[\[“dept\_id”=>1,”dept\_name”=>”總經理”\],\[“dept\_id”=>2,”dept\_name”=>”財務部”\]\]。 \*\*人員選擇:\*\*數據結構為:\[\[“uid”,”username”\]\],分別對應人員的UID以及人員真實姓名,例如:\[\[“uid”=>1,”username”=>”張三”\],\[“uid”=>2,”username”=>”李四”\]\]。 \*\*列表:\*\*數據結構為:\[“flag”,”index”,”data”=>\[\[“field\_id”,”value”\]\]\],解釋如下: > flag:新增行標識,新增行flag值為new,非新增行時為空; > index:行id; > data:記錄數據,是一個二維數組,每列數據包含field\_id和value,field\_id為該列字段的GUID,value為該列的數值,數值結構參考之前的描述。 列表數據例子如下: \[ \[“flag”=>”new”,”index”=>” 1511236728561”,”data”=>\[\[“field\_id”=>“{4C022D90-83C4-5EBA-EE7B-ED1A98AFD7ED}”,”value”=>2\],\[“field\_id”=>” {6FF2B352-A9D9-C1EC-414C-795016C2141D}”,”value”=>\[11,12\]\]\]\], \[“flag”=>”new”,”index”=>” 1511236715995”, ”data”=> \[\[“field\_id”=>“{4C022D90-83C4-5EBA-EE7B-ED1A98AFD7ED}”,”value”=>1\],\[“field\_id”=>” {6FF2B352-A9D9-C1EC-414C-795016C2141D}”,”value”=>\[5,1\]\]\]\] \] #### **公共函數** 系統內置了一系列公共函數可供自定義函數、自定義腳本插件使用,這些函數封裝在一個名為APPPluginUtils的類里,在運行時這個類會實例化為$PLUGIN\_UTILS對象,并以實參或者變量形式傳遞給自定義函數、自定義插件。具體調用方式請參考后面例子。 ### 獲得當前表單id 方法:getFormId() 輸入:無 輸出:當前表單id ### 獲得當前表單guid 方法:getFormGuid() 輸入:無。 輸出:當前表單guid。 ### 獲得表單guid 方法:getFormGuidById($i\_id) 輸入: $i\_id 表單id。 輸出:指定表單guid。 ### 獲得字段guid 方法:getItemGuidByName($i\_formid, $s\_title, $s\_subtitle = “”) 輸入:$i\_formid 表單id;$s\_title 字段名稱;$s\_subtitle 列表子字段名稱,可不傳。 輸出:字段guid。 ### 根據名稱獲得當前字段值 方法:getValueByName($s\_item\_name, $s\_subitem\_name = "", $i\_seq = 1) 輸入:$s\_item\_name 字段名稱;$s\_subitem\_name 列表子字段名稱,可不傳;$i\_seq 行順序號,默認取第一行數據。 輸出:字段值。 ### 獲得當前字段值 方法: getValue($s\_item\_guid, $i\_seq = 1) 輸入:$s\_item\_guid 字段guid;$i\_seq 行順序號,默認取第一行數據。 輸出:字段值。 ### 根據名稱獲得表單基本數據(非列表數據)或者列表數據 方法:getRowByName($s\_list\_name = "", $i\_seq = 0) 輸入:$s\_list\_name 列表名稱,可不傳,不傳時返回表單基本數據;$i\_seq 行順序號,默認取所有數據。 輸出:基本數據或者列表數據。 ### 獲得表單基本數據(非列表數據)或者列表數據 方法:getRow($s\_list\_guid = "", $i\_seq = 0) 輸入:$s\_list\_guid 列表guid,可不傳,不傳時返回表單基本數據;$i\_seq 行順序號,默認取所有數據。 輸出:基本數據或者列表數據。 ### 設置字段數據 方法:setValue($s\_item\_guid, $value, $i\_seq = 1) 輸入:$s\_item\_guid 字段guid;$value 字段值;$i\_seq 記錄行順序號。 輸出:無。 ### 設置字段選項數據 方法:setOptionValues($s\_item\_guid, $arr\_options, $i\_seq = 1) 輸入:$s\_item\_guid 字段guid;$arr\_options 選項數組;$i\_seq 記錄行順序號。 輸出:無。 ### 清除列表數據 方法:function clearDetailTable($s\_item\_guid) 輸入:$s\_item\_guid 字段guid。 輸出:無。 ### 獲得應用中心數據庫連接 方法:function getDb() 輸入:無。 輸出:應用中心數據庫連接。 根據數據庫連接操作數據庫,常見方法舉例如下: $command = $connection->createCommand('SELECT \* FROM post'); $posts = $command->queryAll(); $post = $command->queryOne(); $command = $connection->createCommand('UPDATE post SET status=1'); $command->execute(); $command = $connection->createCommand('SELECT \* FROM post WHERE id=:id'); $command->bindValue(':id', $\_GET\['id'\]); $post = $command->query(); ### 獲得數據源里配置的數據庫連接 方法:function getOtherDB($s\_sername, $s\_db = "") 輸入:$s\_sername數據源名稱,在系統管理》數據源管理中設置;$s\_db 數據庫名稱,不傳時使用數據源里設置的數據庫。 輸出:數據庫連接。 ### 根據表單名稱獲得表單id 方法:function getFormIdByName($s\_app, $s\_form) 輸入:$s\_app應用名稱;$s\_form表單名稱。 輸出:表單id。 ### 根據表單guid獲得表單id 方法:function getFormIdByGuid($s\_guid) 輸入:$s\_guid表單guid。 輸出:表單id。 ### 根據字段guid獲得字段id 方法:function getItemIdByGuid($s\_guid) 輸入:$s\_guid字段guid。 輸出:字段id。 ### 根據字段名稱獲得字段id 方法:function getItemIdByName($i\_formid, $s\_title, $s\_subtitle = "") 輸入:$i\_formid 表單id;$s\_title 字段名稱;$s\_subtitle 列表子字段名稱,可不傳。 輸出:字段id。 ### 獲得本表單當前記錄號 方法:function getCurPosition() 輸入:無 輸出:當前記錄號(從1開始) ### 獲得遍歷觸發器提取數據的當前記錄 方法:function getCurDataRow() 輸入:無 輸出:遍歷提取數據的當前記錄 ### 獲得觸發器提取全部數據 方法:function getCurDataRows() 輸入:無 輸出:遍歷提取的全部數據 #### **自定義函數** 應用中心提供了大量的標準函數,通過組合這些標準函數可以實現各種復雜度不一的數據處理。此外,應用中心還提供了自定義函數功能,方便用戶自行擴充數據處理功能。自定義函數語法如下: MYFUNC(\\):返回由\\指定的自定義函數處理后的結果。例如:MYFUNC(“get\_aux\_quantity”)。 處理引擎命名規則為:XXX名稱.func,對應的實現文件為:XXX名稱.func.php,例如:MYFUNC(“get\_aux\_quantity”),指定處理引擎為get\_aux\_quantity.func,對應的實現文件為:get\_aux\_quantity.func.php。 引擎實現文件存放路徑為:webroot\\general\\appbuilder\\modules\\appcenter\\plugin\\表單編號,例如:webroot\\general\\appbuilder\\modules\\appcenter\\plugin \\frm10。 注意:自定義函數只能用在填充表達式中,不能用在篩選條件中。 #### **輸入參數與輸出結果** 應用中心調用自定義函數時,將給自定義函數傳遞以下實參(即自定義函數的輸入參數): $PLUGIN\_UTILS:插件公共對象,包含了訪問公共函數接口; 自定義函數輸出結果為計算結果值。 #### **舉例** 以倍數換算為例,舉例說明如何使用自定義函數。首先,定義如下提取觸發器: ![](https://www.tongda2000.com/oa/MYOA2019/manual/04%E7%94%A8%E6%88%B7%E6%89%8B%E5%86%8C/%E5%BA%94%E7%94%A8%E4%B8%AD%E5%BF%83/media/%E5%BA%94%E7%94%A8%E4%B8%AD%E5%BF%83_128.png) 其中,MYFUNC("calculate\_it")為自定義函數。處理引擎定義為:calculate.func。引擎實現文件calculate.func.php包含自定義函數calculate\_it,其腳本如下: /\*\* \* 計算基數根據陪數翻番后的結果\* \\@param $PLUGIN\_UTILS 插件公共對象,提供公共方法\* \\@return mixed\*/function calculate\_it($PLUGIN\_UTILS){$i\_basic = $PLUGIN\_UTILS->getValueByName("基數");$i\_power = $PLUGIN\_UTILS->getValueByName("倍數");$i\_result = $i\_basic;while($i\_power > 1){$i\_result \*= $i\_basic;$i\_power--;}return $i\_result;} 運行一結果如下圖所示: ![](https://www.tongda2000.com/oa/MYOA2019/manual/04%E7%94%A8%E6%88%B7%E6%89%8B%E5%86%8C/%E5%BA%94%E7%94%A8%E4%B8%AD%E5%BF%83/media/%E5%BA%94%E7%94%A8%E4%B8%AD%E5%BF%83_129.png) #### **自定義提取或回填引擎** 自定義函數僅在觸發器的局部實現了自定義處理邏輯。除此之外,應用中心還支持在整個觸發器范圍內自定義處理邏輯。要實現整個觸發器范圍內的自定義處理,需要滿足以下條件: 如果是提取觸發器,填充方式里除了匹配之外,其他填充方式不得存在。 如果是回填觸發器,則無需定義更新方式。 自定義提取或者回填處理引擎命名規則為:XXX名稱,對應的實現文件為:XXX名稱.php,例如:處理引擎為get\_goods\_lot,對應的實現文件為:get\_goods\_lot.php。 引擎實現文件存放路徑為:webroot\\general\\appbuilder\\modules\\appcenter\\plugin \\表單編號,例如:webroot\\general\\appbuilder\\modules\\appcenter\\plugin \\frm10。 #### **輸入參數與輸出結果** 應用中心傳遞給腳本引擎的參數,即引擎文件輸入參數為: * $PLUGIN\_UTILS 插件公共對象,包含了訪問公共函數接口。 注意:由于自定義提取或回填腳本引擎是被嵌入到應用中心里一起執行的,因此引擎里使用的變量盡可能加前綴“plugin\_”并采用小寫形式,例如$plugin\_i、$plugin\_str、$plugin\_arr\_datas等,以區別于應用中心里所使用的變量。 ## 舉例 以初始化數據為例,舉例說明如何使用腳本引擎實現自定義提取邏輯,觸發器定義如下: ![](https://www.tongda2000.com/oa/MYOA2019/manual/04%E7%94%A8%E6%88%B7%E6%89%8B%E5%86%8C/%E5%BA%94%E7%94%A8%E4%B8%AD%E5%BF%83/media/%E5%BA%94%E7%94%A8%E4%B8%AD%E5%BF%83_130.png) 處理引擎定義為“fill\_it”,填充方式空著,即什么都不定義。 引擎腳本文件fill\_it.php包含以下內容: \\<?php/\*\*\* 北京通達信科科技有限公司\* Date: 2017/11/21\* Time: 16:34\*/$plugin\_s\_select = $PLUGIN\_UTILS->getItemGuidByName($PLUGIN\_UTILS->getFormId(), "寄送方式");$PLUGIN\_UTILS->setOptionValues($plugin\_s\_select, \[\["code"=>"","name"=>""\],\["code"=>"01","name"=>"自提"\],\["code"=>"02","name"=>"郵寄"\],\["code"=>"03","name"=>"送達"\]\]);$PLUGIN\_UTILS->setValue($plugin\_s\_select, "01");$plugin\_s\_list = $PLUGIN\_UTILS->getItemGuidByName($PLUGIN\_UTILS->getFormId(), "列表");$plugin\_s\_guid = $PLUGIN\_UTILS->getItemGuidByName($PLUGIN\_UTILS->getFormId(), "列表", "發票名稱");$plugin\_s\_guid2 = $PLUGIN\_UTILS->getItemGuidByName($PLUGIN\_UTILS->getFormId(), "列表", "發票號");$PLUGIN\_UTILS->clearDetailTable($plugin\_s\_list);$PLUGIN\_UTILS->setValue($plugin\_s\_guid, "充值卡");$PLUGIN\_UTILS->setValue($plugin\_s\_guid2, 19918125);$PLUGIN\_UTILS->setValue($plugin\_s\_guid, "物業費", 2);$PLUGIN\_UTILS->setValue($plugin\_s\_guid2, 19918126, 2);$PLUGIN\_UTILS->setValue($plugin\_s\_guid, "采暖費", 3);$PLUGIN\_UTILS->setValue($plugin\_s\_guid2, 19918127, 3); ?> 以回寫發票信息為例,舉例說明如何使用腳本引擎實現自定義回填邏輯,觸發器定義如下: ![](https://www.tongda2000.com/oa/MYOA2019/manual/04%E7%94%A8%E6%88%B7%E6%89%8B%E5%86%8C/%E5%BA%94%E7%94%A8%E4%B8%AD%E5%BF%83/media/%E5%BA%94%E7%94%A8%E4%B8%AD%E5%BF%83_131.png) ![](https://www.tongda2000.com/oa/MYOA2019/manual/04%E7%94%A8%E6%88%B7%E6%89%8B%E5%86%8C/%E5%BA%94%E7%94%A8%E4%B8%AD%E5%BF%83/media/%E5%BA%94%E7%94%A8%E4%B8%AD%E5%BF%83_132.png) ![](https://www.tongda2000.com/oa/MYOA2019/manual/04%E7%94%A8%E6%88%B7%E6%89%8B%E5%86%8C/%E5%BA%94%E7%94%A8%E4%B8%AD%E5%BF%83/media/%E5%BA%94%E7%94%A8%E4%B8%AD%E5%BF%83_133.png) 回寫條件和更新方式不定義。處理引擎寫上back\_it。 腳本引擎文件back\_it.php包含如下內容: \\<?php/\*\*\* 北京通達信科科技有限公司\* User: lhs\* Date: 2017/11/24\* Time: 14:22\*///把本表單列表數據回填到目標表單的列表中//回寫目標$plugin*i\_target\_formid = $PLUGIN\_UTILS->getFormIdByName("特性展示", "test112102");//目標表單id**$plugin\_i\_target\_list\_id = $PLUGIN\_UTILS->getItemIdByName($plugin\_i\_target\_formid, "列表");//目標列表id**$plugin\_i\_target\_fph\_id = $PLUGIN\_UTILS->getItemIdByName($plugin\_i\_target\_formid, "列表", "發票號");//目標字段發票號id**$plugin\_i\_target\_bz\_id = $PLUGIN\_UTILS->getItemIdByName($plugin\_i\_target\_formid, "列表", "說明");//目標字段說明id**//本表單**$plugin\_i\_source\_fph\_id = $PLUGIN\_UTILS->getItemIdByGuid("{C55A3264-04D4-297B-7685-26AFE7FE10C2}");//本表單字段發票號id**$plugin\_i\_source\_fpmc\_id = $PLUGIN\_UTILS->getItemIdByGuid("{B8240BDB-5A0B-21F3-D676-2E9A07DC36CF}");//本表單字段發票名稱id**////本表單列表數據**$plugin\_arr\_row = $PLUGIN\_UTILS->getRowByName("列表");**if(!empty($plugin\_arr\_row)){**foreach($plugin\_arr\_row as $plugin\_row){**$sql = "select id from app\_data*{$plugin*i\_target\_formid}\_list*{$plugin*i\_target\_list\_id} where col*$plugin*i\_target\_fph\_id='{$plugin\_row\["col*$plugin*i\_source\_fph\_id"\]}'";**$plugin\_target\_row = $PLUGIN\_UTILS->getDb()->createCommand($sql)->queryOne();**if(!empty($plugin\_target\_row)){**$plugin\_s\_value = "發票號:{$plugin\_row\["col*$plugin*i\_source\_fph\_id"\]},發票項目:{$plugin\_row\["col*$plugin*i\_source\_fpmc\_id"\]}";**$sql = "update app\_data*{$plugin*i\_target\_formid}\_list*{$plugin*i\_target\_list\_id} set col*$plugin\_i\_target\_bz\_id='$plugin\_s\_value' where id=$plugin\_target\_row\[id\]";$PLUGIN\_UTILS->getDb()->createCommand($sql)->execute();}}} ?>
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看