通達OA應用中心使用手冊(腳本編寫指南)
腳本編寫必備基礎
1.1 什麽是腳本
腳本是一段 PHP 代碼,可以被應用中心執行以實現特定功能。應用中心支持通過腳本
實現以下功能:
- 自定義計算函數。
- 自定義提取觸發器。
- 自定義回填觸發器。
編寫腳本對於應用中心來說不是必須的,但通過編寫腳本卻可以極大地增強應用中心的
處理能力,這對於實施復雜度高、應用中心標準化功能滿足不了的項目是一個很好的選擇。
1.2 編寫腳本需要具備哪些基礎
除了要熟悉應用中心以及相關數據庫表結構之外,編寫腳本還需要有 PHP 編程基礎,
寫腳本的過程本質上寫 PHP 代碼的過程。因此,應用中心的實施人員需要補充些
知識,這對編寫腳本是非常有幫助的。
1.3 應用中心庫表結構
應用中心主要庫表結構如下圖所屬:
1
app_form 表單id 表單idPKguid 表單guidPKfrmno 表單編號label 表單名稱1對多app_item 字段信息id 字段idPKguid 字段guidPKform_guid 所屬表單guidFKFKitem_guid 所屬列表guidtitle 字段名稱datatype2 字段數據類型 1對1 1對1 app_data_XXX 表單除列表之外且 不是大文本字段數據存儲表,XXX 對應表單id,該表為表單數據主 表id 記錄idPKguid 數據記錄guidPK FK main_id 主表的數據記錄id run_id 工作流水號 isdeleted 刪除標識 position 記錄順序號 create_userid 創建者uid create_time 創建時間 update_userid 最後更新者 uid update_time 最後更新時間 col_XXX 字段數據,XXX代表字段id app_data_XXX_text 表單除列表之
- @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;
}
運行一結果如下圖所示:
10
11
自定義提取或回填引擎
1.9 概述
自定義函數僅在觸發器的局部實現了自定義處理邏輯。除此之外,應用中心還支持在整
個觸發器範圍內自定義處理邏輯。要實現整個觸發器範圍內的自定義處理,需要滿足以下條
件:
如果是提取觸發器,填充方式裏除了匹配之外,其他填充方式不得存在。
如果是回填觸發器,則無需定義更新方式。
自定義提取或者回填處理引擎命名規則為:XXX 名稱,對應的實現文件為:XXX 名
稱.php,例如:處理引擎為 get_goods_lot,對應的實現文件為:get_goods_lot.php。
引擎實現文件存放路徑為:webroot\general\appbuilder\modules\appcenter\plugin \模板 id,
例如:webroot\general\appbuilder\modules\appcenter\plugin \1。
1.10 輸入參數與輸出結果
應用中心傳遞給腳本引擎的參數,即引擎文件輸入參數為:
- $PLUGIN_UTILS 插件公共對象,,包含了訪問公共函數接口。
註意:由於自定義提取或回填腳本引擎是被嵌入到應用中心裏一起執行的,因此引擎裏
- 用的變量盡可能加前綴 " plugin_ " 並采用小寫形式,例如 $plugin_i 、 $plugin_str 、
$plugin_arr_datas 等,以區別於應用中心裏所使用的變量。
1.11 舉例
以初始化數據為例,舉例說明如何使用腳本引擎實現自定義提取邏輯,觸發器定義如下:
12
處理引擎定義為"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, "充值卡");
13
$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);
?>
以回寫發票信息為例,舉例說明如何使用腳本引擎實現自定義回填邏輯,觸發器定義如
下:
14
回寫條件和更新方式不定義。處理引擎寫上 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-26AFE7FE 10C2}");//本表單字段發票號 id
$plugin_i_source_fpmc_id =
$PLUGIN_UTILS->getItemIdByGuid("{B8240BDB-5A0B-21F3-D676-2E9A07DC 36CF}");//本表單字段發票名稱 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_f
ph_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();
}
}
}
?>
通達OA應用中心使用手冊(腳本編寫指南)