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

表單和頁面中的查詢檢視元件

可以在內容管理表單、流程管理表單或門戶頁面中嵌入查詢檢視元件,用來顯示資料。

表單中的選擇檢視元件

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