O2OA提供的資料管理中心,可以讓使用者通過配置的形式完成對資料的彙總,統計和資料分組展現,查詢和搜尋資料形成列表資料展現。也支援使用者配置獨立的資料表來適應特殊的業務的資料儲存需求。本文主要介紹如何在O2OA中開發和配置自定義資料查詢語句JPQL及對應的檢視。
Statement
查詢語句是建立在資料表基數上的查詢語句配置。配置查詢語句後,在應用中可呼叫執行。
對系統表,目前支援流程平臺的待辦、已辦、待閱、已閱、流程例項、已完成流程例項和閱讀的查詢操作;還支援內容管理平臺的文件查詢操作。
對自建表,支援查詢、更新和刪除操作。
入口
點系統的左上角圖示->應用->資料中心平臺->具體應用->查詢配置開啟
查詢語句的後臺服務
http://{hostip}:20020/x_query_assemble_surface/jest/index.html

查詢語句執行依託的後臺服務是“executeV2”,如下圖

引數說明
uri 引數:
flag: 查詢語句的id/名稱/別名
mode: data表示獲取匹配的具體資料,返回的資料在data標籤;count表示獲取匹配的資料條目數,返回的資料在 count標籤;all表示同時獲取count和data資料。
page: 需要返回資料的頁碼。
size: 每頁的數量。
body引數:
filterList: 參見api文件說明 https://www.o2oa.net/api/global.html#StatementFilter
parameter: 過濾條件值引數,對查詢語句where語句的形如":person"的引數部分進行賦值有以下規則:
- 引數名稱為下列值時,後臺自動賦值:person(當前人),identityList(當前人身份列表),unitList(當前人所在直接組織), unitAllList(當前人所在所有組織), groupList(當前人所在群組)。
- 如果對比的是日期時間,值為 "{ts '2021-04-29 11:01:01'}";如果對比的是日期,值為"{d '2021-04-29'}";如果對比的是時間,值為 "{t '11:01:01'}"。
- 如果運算子用的是 like, noLike,模糊查詢,值為 "%{value}%"。
查詢語句
語法
查詢語句用的是JPA JPQL語句,如 :
select o from tableName o where o.name='zhangsan'
瞭解JPQL語句可以點選連結檢視:https://www.objectdb.com/java/jpa/query/jpql/structure
動態傳參
查詢語句中的where語句的值可以使用json傳入
如:
查詢語句的設計為
select o from tableName o where o.name=:n
在呼叫查詢語句服務的時候傳入 json
{
"n" : "zhangsan"
}
則最終在後臺拼接成的語句為
select o from tableName o where o.name='zhangsan'

瞭解JPQL語句動態傳參可以點選連結檢視:https://www.objectdb.com/java/jpa/query/parameter
也可以看本文件的parameter說明,點選檢視。
查詢配置詳細項
語句配置
本區域配置完成後,就可以在服務中使用查詢語句。

配置項 |
內容 |
說明 |
如何建立語句 |
直接編寫JPQL建立語句 |
如: SELECT o FROM tempCard o where o.isBranch=:n |
通過指令碼建立語句 |
可以在查詢語句和總數語句中使用指令碼編寫,可以通過返回字串,如: return "SELECT o FROM tempCard o where o.isBranch=:n" 另外,在指令碼中,可以使用parameters獲取傳入的parameter引數,見本文的“查詢語句的後臺服務->引數說明->body引數->parameter”。 |
|
訪問物件型別 |
系統表 |
指平臺建立的表,選擇此項後,支援流程平臺的待辦、已辦、待閱、已閱、流程例項、已完成流程例項和閱讀的查詢操作;還支援內容管理平臺的文件查詢操作。 |
自建表 |
指二次開發人員在資料中心中建立的"資料表" |
|
語句型別 |
JPQL語句型別 |
訪問物件型別選擇“系統表”時,支援select。 訪問物件型別選擇“自建表”時,支援select\update\delete。 |
資料表 |
資料庫表名稱 |
|
欄位 |
幫助在語句編輯區域插入欄位,不儲存至後臺。 |
|
查詢語句 |
查詢資料表記錄內容的語句 |
後臺服務“executeV2”返回的data標籤。 |
總數語句 |
查詢資料表記錄條數的語句 |
後臺服務“executeV2”返回的count標籤。 在進行分頁查詢的時候,可以在第一次查詢執行,翻頁的時候不執行,以節省伺服器資源。 樣例:SELECT count(o.id) FROM tempCard o where o.isBranch=:n |
測試語句 |
左側 |
用json的方式傳入語句中的引數 |
右側 |
根據左側引數執行的結果 |
|
檢視 |
以配置的形式視覺化展現資料 |
詳細配置見下一小節。 |
檢視配置
檢視支援查詢語句的視覺化展現。具有列式、分頁、查詢等功能。

基本屬性:
配置項 |
內容 |
說明 |
名稱 |
檢視名稱 |
|
別名 |
檢視別名 |
|
檢視樣式 |
選擇後可切換不同的檢視樣式風格 |
|
顯示序號 |
是否顯示每列的序號,分頁每頁序號延續編號 |
|
每頁行數 |
填寫數字 |
每頁返回的頁數 |
隱藏操作條 |
是否顯示操作條 操作執行的指令碼api可以檢視:連結 |
|
選擇 |
無、單選、多選 |
單選表示可以在檢視中選中一行。 多選表示可以在檢視中選中多行,並且分頁後選中的行值會被保留。 指令碼中獲取選中行API檢視:連結 |
無選擇隱藏首列 |
選擇設定為“無”的時候,是否隱藏系統預設建立的首列。 |
|
無資料顯示 |
當返回的資料為空時,檢視上顯示的文字。 |
|
預設選中行指令碼 |
檢視載入每一行的時候執行 |
可以在指令碼中使用this.target獲取當前行。 this.target.data 為當前行資料 this.target.node 為當前行DOM節點 this.target.row 為當前行對應的平臺類物件 this.target.view 為當前檢視的平臺類物件。 結果return true 表示選中。 如:下面的指令碼判斷資料中的person和登入使用者中文名稱匹配即選中。 if(this.target.data.person ==this.session.user.name){ return true; } |
過濾配置:
過濾配置分為“作為預設過濾條件”和“作為自定義過濾”。
作為預設過濾條件為載入檢視的時候作為過濾條件。
作為自定義過濾是使用者選擇條件後點擊查詢的過濾條件。
預設過濾條件

配置項 |
內容 |
說明 |
標題 |
過濾標題 |
|
引數 |
過濾的引數 |
和查詢語句中形如 :field的where條件,見上圖。 |
資料型別 |
||
值 |
輸入 |
可以填寫固定值,或者系統提供的一些預設公式,比如點選“當前人”,系統會填上@person。 |
指令碼 |
指令碼API請檢視連結,this.target指向當前檢視的平臺類物件。 |
自定義過濾條件

配置項 |
內容 |
說明 |
選擇 |
可選擇對應表的所有欄位,選擇後在標題、路徑、資料型別中自動填寫資料。不儲存在後臺 |
|
標題 |
過濾標題 |
|
路徑 |
表別名.欄位名 |
見上圖。 |
資料型別 |
||
值 |
使用者輸入 |
在使用介面提供輸入框讓使用者輸入。 |
可選 |
指令碼API請檢視連結,this.target指向當前檢視的平臺類物件。 返回格式為: return [ "選項文字1|選項值1", "選項文字2|選項值2"] |
樣式配置
當在檢視的基本配置中切換“檢視樣式”後,會替換成對應的css程式碼,可以修改程式碼呈現不同的檢視介面。
樣式名稱 |
說明 |
container |
表格容器樣式 |
table |
表格樣式 |
titleTr |
標題行樣式 |
titleTd |
標題單元格樣式 |
contentTr |
內容行樣式 |
contentSelectedTr |
選中的內容行樣式 |
contentTd |
內容單元格樣式 |
checkboxNode |
多選節點樣式 |
checkedCheckboxNode |
選中的多選節點樣式 |
radioNode |
單選節點樣式 |
checkedRadioNode |
選中的單選節點樣式 |
noDataTextNode |
檢視無資料時顯示的節點樣式 |
tableProperties |
表格屬性 |
事件配置
檢視在載入或執行過程中的事件。
樣式名稱 |
說明 |
|
queryLoad |
檢視載入前執行 |
可以使用指令碼計算單元格的內容。api可以檢視:連結 this.target 指向當前檢視的平臺類物件。 |
postLoad |
檢視,包括檢視介面和當前頁資料載入後執行 |
|
postLoadPageData |
載入當前頁資料後,畫出介面內容前執行,跳頁後也會執行 |
|
postLoadPage |
載入當前頁內容後執行,跳頁後也會執行 |
|
queryLoadItemRow |
載入每行之前執行 |
可以使用指令碼計算單元格的內容。api可以檢視:連結 this.target 指向當前行的平臺類物件。 |
postLoadItemRow |
載入每行之後執行 |
|
selectRow |
選擇行後執行 |
可以使用指令碼計算單元格的內容。api可以檢視:連結 this.event指向當前行的平臺類物件。 |
unselectRow |
取消選擇行後執行 |
檢視列配置

基本屬性:
配置項 |
內容 |
說明 |
列標題 |
檢視標題列上的文字 |
|
列名 |
檢視列名稱 |
|
預設值 |
對應列無內容時的值 |
|
開啟文件 |
開啟文件 |
點選該列時是否開啟文件 |
開啟文件指令碼(優先於id路徑) |
點選該單元格時執行的指令碼,api可以檢視:連結 this.target指向單元格的平臺類物件,this.target.data指向當前行的資料。 |
|
id路徑 |
當查詢語句的表是內容管理或者是流程時可以使用, Id是(cms文件id/流程work id)相對單條資料的路徑。 如查詢語句返回的是陣列,那麼填寫的是"document id/work id"所在的下標。 如查詢語句返回的是物件,那麼填寫"document id/work id"所在的標籤名稱。 |
|
選擇路徑 |
正確填寫了查詢語句,再測試語句或重新整理檢視資料可顯示(重新整理)選擇路徑。選擇以後自動在資料路徑上填寫路徑名稱,不在後臺儲存。 |
|
資料路徑 |
指該列相對單條資料的路徑。比如 0,title,或 0.title。 如查詢語句返回的是陣列,那麼填寫的是該列值所在的下標。 如查詢語句返回的是物件,那麼填寫該列值所在的標籤名稱。 |
|
隱藏 |
是否隱藏該列 |
|
組織物件 |
是否為組織物件,如果選是,會把全稱轉換成中文名稱顯示。 如:“張三@zhangshan@P” 顯示成 “張三”。 |
|
HTML值 |
如果選擇是,那麼使用innerHTML給單元格賦值,否則使用innerText給單元格賦值。 |
|
顯示指令碼 |
可以使用指令碼計算單元格的內容。api可以檢視:連結 this.target.value 為當前單元格資料路徑的值。 this.target.data 為當前行資料 this.target.json 為當前行的配置 this.target.node 為當前行當前個DOM物件 this.target.row 為當前行的平臺類物件。 使用 return "xx" 返回單元格內容。 |
單元格樣式配置:
樣式名稱 |
說明 |
標題單元格樣式 |
標題單元格樣式 |
標題單元格屬性 |
表格樣式 |
內容單元格樣式 |
內容單元格樣式 |
內容單元格屬性 |
內容單元格屬性 |
單元格事件配置
檢視在載入或執行過程中的事件。
樣式名稱 |
說明 |
事件上下文 |
loadTitle |
載入標題單元格後執行的事件 |
api可以檢視:連結 this.target.data 為當前行資料 this.target.json 為當前行的配置 this.target.node 為當前行當前個DOM物件 this.target.row 為當前行的平臺類物件。 |
loadContent |
載入內容單元格後執行的事件 |
|
click |
點選單元格的事件 |
|
mousedown |
按下滑鼠時執行 |
|
mouseup |
滑鼠還原時執行 |
|
mouseover |
滑鼠經過時執行 |
|
mouseout |
滑鼠移除時執行 |
使用
在指令碼中使用查詢語句
直接呼叫後臺服務查詢資料
filterList 和 parameter 引數見本文“查詢語句的後臺服務->引數說明->body引數”。
o2.Actions.load("x_query_assemble_surface").StatementAction.executeV2(
statementFlag, //語句id、語句名稱或語句別名
mode, //執行模式:data|count|all
page, //頁碼,數字
size, //每頁條數
{
filterList: [],
parameter: {}
}, //請求的json
function(json){
//json為執行結果
},
function(xhr){
//如果返回錯誤,在這裡處理
},
async //同步還是非同步
)
使用平臺封裝好的api查詢資料
參見api https://www.o2oa.net/api/module-statement.html#.execute
使用平臺封裝好的api選擇資料
參見api https://www.o2oa.net/api/module-statement.html#.select
表單和頁面中的查詢檢視元件
可以在內容管理表單、流程管理表單或門戶頁面中嵌入查詢檢視元件,用來顯示資料。

表單中的選擇檢視元件
可以在內容管理表單、流程管理表單嵌入選擇檢視元件,用來選擇資料。
