mobox3的功能點(diǎn)擴(kuò)展的MBC客戶端的配置實(shí)現(xiàn)方式
需要定義 3個應(yīng)用 (應(yīng)用名稱 不能變)
MOBOX3
OIOrgSAPI
OIMoboxSAPI
OIDataSAPI
其它2個服務(wù)類似
nRet, strRetInfo = mobox.getCurEditDataObjAttr(strLuaDEID, “G_PRJ_ID”, “S_PRJ_CODE”, “S_PRJ_NAME”, “S_PM_NAME”, “S_PD_NAME”)
[{
“attr”: “G_PRJ_ID”,
“value”: “”
},
{
“attr”: “S_PRJ_CODE”,
“value”: “PM-0002”
},
{
“attr”: “S_PRJ_NAME”,
“value”: “pcy 0999 hard”
},
{
“attr”: “S_PM_NAME”,
“value”: “金振興”
},
{
“attr”: “S_PD_NAME”,
“value”: “”
}
]
nRet, strOBJInfo = mobox.objAttrToObjJson (‘JS001’, strRetInfo )
注意:strOBJInfo 得到其實(shí)還是一個Json字符串,但其是一個標(biāo)準(zhǔn)的Json表格式表達(dá)
具體 objAttrToObjJson 函數(shù)怎么用查看手冊
{“cls”: “JS001”,
“ver”: 1,
“G_PRJ_ID”: “”,
“S_PRJ_CODE”: “PM-0002”,
“S_PRJ_NAME”: “pcy 0999 hard”,
“S_PM_NAME”: “金振興”
}
注意:這個Json格式是標(biāo)準(zhǔn)表格式字符串表達(dá)。
local tbOBJ = json.decode (strOBJInfo)
注,只有變成表后,我們可以這樣來理解這個表:
字段名 | cls | ver | G_PRJ_ID | S_PRJ_CODE | S_PRJ_NAME | S_PM_NAME |
數(shù)值 | JS001 | 1 | PM-0002 | pcy 0999 hard | 金振興 |
取值方法:
local strPMName
strPMName = tbOBJ.S_PRJ_NAME
賦值方法:
tbOBJ.S_PRJ_NAME = ‘潘元元’
local strRetInfo , strOBJInfo
local tbOBJ ={}
— 得到當(dāng)前窗體上指定字段的json字符串
nRet, strRetInfo = mobox.getCurEditDataObjAttr(strLuaDEID, “G_PRJ_ID”, “S_PRJ_CODE”, “S_PRJ_NAME”, “S_PM_NAME”, “S_PD_NAME”)— 將json字符串(mobox3)格式轉(zhuǎn)為 json標(biāo)準(zhǔn)表格式
nRet, strOBJInfo = mobox.objAttrToObjJson (‘JS001’, strRetInfo )–將json字符串轉(zhuǎn)變?yōu)楸?br /> tbOBJ = json.decode (strOBJInfo)
— 獲取表字段內(nèi)容及設(shè)置表字段值
local strPMName
strPMName = tbOBJ.S_PM_NAME
tbOBJ.S_PM_NAME = ‘潘元元’
若需要將數(shù)據(jù)轉(zhuǎn)會mobox3數(shù)據(jù)格式
–將表轉(zhuǎn)變?yōu)閖son字符串(標(biāo)準(zhǔn)格式)
strOBJInfo = json.encode (tbOBJ)— 將json標(biāo)準(zhǔn)表格式格式轉(zhuǎn)為 json字符串(mobox3)
nRet, strRetInfo = mobox.objJsonToObjAttr (‘JS001’, strOBJInfo )
]]>
為了解決這個問題,我們可以編輯一個lua腳本,將這個數(shù)據(jù)做處理后再顯示(在顯示前事件里面定義這個lua腳本)
–[[? ? 功能說明:? ? ? ? 1) 顯示前做一些字段的處理? ? ? ? 2)前端導(dǎo)入,新增有換行符號 %%3Cbr%%3E ,替換成 <br> 前端html支持的換行內(nèi)容? ? ? ? 3)內(nèi)容中有&,替換成 & 前端解析 &不支持,最好在輸入時進(jìn)行替換–]]json = require(“json”)mobox = require(“OILua_JavelinExt”)require(“oi_basestrfunc”)function BeforeGridShow(strLuaDEID)? ? local nRet, strRetInfo? ? local arobjs, attrs, success? ? — 獲取輸入的DataJson數(shù)據(jù)包? ? nRet, strRetInfo = mobox.getCurEditDataPacket(strLuaDEID)? ? if (nRet ~= 0) then? ? ? ? mobox.error(strLuaDEID, “無法獲取數(shù)據(jù)包!”)? ? ? ? return? ? end? ? if (strRetInfo == ” or strRetInfo == nil) then? ? ? ? return? ? end? ? — 解析數(shù)據(jù)包,數(shù)據(jù)包格式? ? — [{“id”:””,”attrs”:[{“attr”:””,”value”:””},..]},..]? ? local n, nCount? ? success, arobjs = pcall(json.decode, strRetInfo)? ? if (success == false) then? ? ? ? mobox.error(strLuaDEID, “非法的JSON格式!”)? ? ? ? return? ? end? ? nCount = #arobjs? ? if (nCount == 0) then? ? ? ? return? ? end? ? local obj, attrs? ? local nattr_count? ? local strRow, strAttr, strItem? ? local strDataJson? ? local id, strValue? ? local strAttrs? ? strDataJson = ‘[‘? ? local seg = {}? ? local nSegCount = 0? ? for n = 1, nCount do? ? ? ? obj = arobjs[n]? ? ? ? attrs = obj.attrs? ? ? ? nattr_count = #attrs? ? ? ? id = obj.id? ? ? ? strAttrs=”? ? ? ? — 開始過濾顯示數(shù)據(jù)對象屬性? ? ? ? for nIndex = 1, nattr_count do? ? ? ? ? ? strAttr = attrs[nIndex].attr? ? ? ? ? ? strValue = attrs[nIndex].value? ? ? ? ? ? strValue = strValue:gsub(“%%3Cbr%%3E”, “<br>”)? ? ? ? ? ? strValue = strValue:gsub(“&”, “&”)? ? ? ? ? ? strItem = ‘{“attr”:”‘ .. strAttr .. ‘”,”value”:”‘ .. strValue .. ‘”},’? ? ? ? ? ? strAttrs = strAttrs .. strItem? ? ? ? end? ? ? ? — 取消最后一個,號? ? ? ? strAttrs = trim_laster_char(strAttrs)? ? ? ? strRow = ‘{“id”:”‘ .. id .. ‘”,”attrs”:[‘ .. strAttrs .. ‘]},’? ? ? ? strDataJson = strDataJson .. strRow? ? end? ? — 取消最后一個,號? ? strDataJson = trim_laster_char(strDataJson)? ? strDataJson = strDataJson .. ‘]’? ? local strAction = ‘[{“action_type”:”reset_data_attr”,”value”:’ .. strDataJson .. ‘}]’? ? mobox.setAction(strLuaDEID, strAction)end
這個列子也可以用于別的一些非法字符串的處理
]]>
企業(yè)在實(shí)施項(xiàng)目管理系統(tǒng)的時候,不通類型的項(xiàng)目其屬性可能是不一樣的。而Gungho標(biāo)準(zhǔn)系統(tǒng)內(nèi)對項(xiàng)目的屬性,主要包括(項(xiàng)目名稱、編號、開始結(jié)束日期等)。為了適應(yīng)企業(yè)個性項(xiàng)目信息的輸入,我們需要通過Mobox平臺定義項(xiàng)目類型去適應(yīng)這個需求
Sa 登錄mobox低代碼開發(fā)平臺
創(chuàng)建一個用于描述項(xiàng)目擴(kuò)展屬性的數(shù)據(jù)對象
注意:業(yè)務(wù)類型必須是 項(xiàng)目
接下來需要做的內(nèi)容,這里不具體展開
基礎(chǔ):主要是綁定哪個數(shù)據(jù)對象及相關(guān)的界面
功能:主要是可以自定義該類型項(xiàng)目的自定義菜單 (參考下圖)
我們在gungho登錄后,新建項(xiàng)目
]]>
Gungho項(xiàng)目管理軟件在企業(yè)部署的時候因其業(yè)務(wù)的個性,很有可能需要對任務(wù)做各種各樣的二次開發(fā),從而適應(yīng)企業(yè)需求
舉例:
某檢測檢驗(yàn)中心,在做叉車整車檢測的時候會分解出100多個的檢測任務(wù),每一個任務(wù)除了要求員工按時間要求完成以外,還需將每個檢測任務(wù)所獲取的數(shù)據(jù)等級下來。這個數(shù)據(jù)可能是一個表,而且每一個任務(wù)所對應(yīng)的填寫數(shù)據(jù)也都是不一樣的。
這樣一個需求,我們就必須對任務(wù)做二次開發(fā)
用sa 登錄Mobox平臺,進(jìn)入系統(tǒng)管理模塊
定義的任務(wù)類型名稱,在后面會用到
開發(fā)一個腳本:任務(wù)點(diǎn)擊后 腳本 (目的是 任務(wù)點(diǎn)擊后能將 prj_id,task_id 等設(shè)置到全局變量)
這個任務(wù)點(diǎn)擊后(lua腳本)是標(biāo)準(zhǔn)的
|
這個腳本目的是生成 全局變量:prj_id , task_id 。 這2個變量描述了當(dāng)前任務(wù)所屬項(xiàng)目唯一標(biāo)識,及任務(wù)唯一標(biāo)識。是Gungho系統(tǒng)向Mobox平臺傳遞核心參數(shù),Mobox后期二次開發(fā)的時候都需要用到。
注意,這里定義的全局變量 名稱在后期調(diào)用的是要完全一樣
這個腳本,會在后面文章的:任務(wù)分類定義 –? 事件 (點(diǎn)擊后事件用到) 參考
按需分別定義數(shù)據(jù)模型,及模型里面的字段。這里不詳細(xì)展開(需要有mobox二次開經(jīng)驗(yàn))
定義小窗口的時候需要注意,有一個窗口初始化腳本要執(zhí)行(目的是個小窗口內(nèi)設(shè)置prj_id, task_id)
因?yàn)槭桥cGungho集成,前面描述過gungho的全局變量,這里開發(fā)的時候已經(jīng)可以使用這些變量(prj_id , task_id)
根據(jù)需求,圍繞數(shù)據(jù)模型做二次開發(fā)(可能有很多過個腳本,按需求開發(fā))比如
1)查詢事件 (我們的擴(kuò)展屬性,是與任務(wù)綁定的,所以需要查出與本任務(wù)有關(guān)的屬性 如 任務(wù)ID過濾 )
因?yàn)槭桥cGungho集成,前面描述過gungho的全局變量,這里開發(fā)的時候已經(jīng)可以使用這些變量(prj_id , task_id)
2)初始化腳本 (因?yàn)樾枰cGungho的任務(wù)集成,定義界面(小窗口的時候需要定義初始化腳本 如 設(shè)置項(xiàng)目及任務(wù)ID )
任務(wù)擴(kuò)展屬性信息的grid展示(查詢事件)、小窗口數(shù)據(jù)的輸入保存(需要綁定task_id等)
任務(wù)分類定義,是gungho的任務(wù)與Mobox的功能點(diǎn)集合的一個過程
注意:數(shù)量限制 必須選擇 多數(shù)據(jù), 顯示方式必須選擇 自定義頁面
注意:點(diǎn)擊任務(wù)后事件 是必須選擇( 來源: gungho領(lǐng)域 – TASK任務(wù) – 某自定義事件)
自定義里面是將任務(wù)與Mobox的功能點(diǎn)集合在一起
按上圖,A2樣品技術(shù)參數(shù),這類任務(wù),綁定了2個功能點(diǎn)
綁定了2個功能點(diǎn)
? 1 個用于技術(shù)參數(shù)輸入 (可能是一個表)
1 個用于檢測結(jié)果輸入
]]>
1)3000功能點(diǎn)
2)增加打印功能
3)配置打印時用的支撐文檔柜
需要定義word模版,必須存儲為 docx
主表變量:{S_KA_NAME}???? 對應(yīng)的是:客戶名稱
這里的 {S_KA_NAME} 變量輸入(最好的方法)
1)在 notepad 中,將變量輸入后,復(fù)制;
2)到word 里面進(jìn)行 粘貼
若不采用這個方法,直接在word里面輸入這個變量,有的時候word對這個變量會做特殊處理。從而在打印的時候造成,變量無法賦值
其中,購買產(chǎn)品是一個采購清單,屬于合同的關(guān)聯(lián)表,其變量定義解釋
舉例:產(chǎn)品名稱 字段 ,變量:
{TN_0012*S_PO_CODE*S_GDS_NAME*2}
關(guān)聯(lián)表變量解釋:
其中:所有這些表名、字段名等都需要系統(tǒng)管理 在后臺進(jìn)行查看
帶來的問題:
設(shè)置正確后:
打印的word 顯示會正常:
]]>
我們在實(shí)施Gungho項(xiàng)目管理系統(tǒng)剛上線的時候,其實(shí)用戶手上有很多的歷史項(xiàng)目需要導(dǎo)入進(jìn)來。而且用戶的項(xiàng)目屬性與我們標(biāo)準(zhǔn)的項(xiàng)目屬性差異很大。為此,我們需要對Gungho的項(xiàng)目數(shù)據(jù)屬性進(jìn)行擴(kuò)延。而這個擴(kuò)延設(shè)置是在Mobox數(shù)據(jù)平臺來完成的。為此我們需要做2個事情:
給項(xiàng)目設(shè)置擴(kuò)展屬性,用于對用戶需求的適應(yīng)
需要將企業(yè)歷史項(xiàng)目清單一次性導(dǎo)入
因?yàn)椋覀兪菫镚ungho的項(xiàng)目管理做配套,所以在mobox建立數(shù)據(jù)模型的時候,有類型需要選擇? ,業(yè)務(wù)類型必須是 “項(xiàng)目”
目的,定義適用企業(yè)個性需求的項(xiàng)目管理功能及界面
根據(jù)需求 自定義功能
根據(jù)需求,加入對應(yīng)腳本
方法一: ?(這個一般在mobox數(shù)據(jù)對象創(chuàng)建后事件調(diào)用)
Mobox 數(shù)據(jù)對象先創(chuàng)建 –》之后通過腳本生成Gungho的項(xiàng)目 –》得到Gungho項(xiàng)目的prj_id –》更新mobox數(shù)據(jù)對象的 G_PRJ_ID
local strPrjInfo
strPrjInfo = ‘{“type“:”漢和項(xiàng)目”,”name“:”‘ .. strPrjName .. ‘”,’
strPrjInfo = strPrjInfo .. ‘”pm_login“:”‘ .. strPMID .. ‘”,”pm_name“:”‘ .. strPMName .. ‘”,’
strPrjInfo = strPrjInfo .. ‘”pd_login“:”‘ .. strPDID .. ‘”,”pd_name“:”‘ .. strPDName .. ‘”,’
— type:定義了項(xiàng)目類型? ? ? ?name:項(xiàng)目名稱
strPrjInfo = strPrjInfo .. ‘”class_name“:”項(xiàng)目”,”obj_id“:”‘ .. strObjID .. ‘”,’
— class_name:數(shù)據(jù)對象名稱? obj_id:數(shù)據(jù)對象ID ,Mobox數(shù)據(jù)創(chuàng)建后獲取
strPrjInfo = strPrjInfo .. ‘”code“:”‘ .. strPrjCode .. ‘”,’
strPrjInfo = strPrjInfo .. ‘”role“:[{“name”:”項(xiàng)目總監(jiān)”,”user”:[{“login”:”‘ .. strPDID .. ‘”,”name”:”‘ ..?strPDName .. ‘”}]}’ .. strPrjRoleMember .. ‘]}’
— code:項(xiàng)目編號? role:角色相關(guān)
— 向共好系統(tǒng)創(chuàng)建一個項(xiàng)目
nRet, strRetInfo = mobox.createProject(strLuaDEID, strPrjInfo)
— strRetInfo:返回的是gungho創(chuàng)建項(xiàng)目的ID (prj_id)
if (nRet ~= 0) then
mobox.error(strLuaDEID, strRetInfo)
return
end
— strRetInfo:這個要回寫Mobox數(shù)據(jù)對象的 G_PRJ_ID
— 得到prj_id 將信息寫入mobox數(shù)據(jù)對象的代碼,這里就不展現(xiàn)了
方法二: ?(這個一般在mobox數(shù)據(jù)對象的自定義事件入“項(xiàng)目導(dǎo)入”調(diào)用)
Gungho的項(xiàng)目所需的所有信息(包括擴(kuò)展信息)全部定義好,一次性創(chuàng)建Gungho及Mobox所有數(shù)據(jù)及其相關(guān)性
?strPrjInfo = ‘{“type”:”漢和項(xiàng)目”,”class_name”:”項(xiàng)目”,”name”:”‘ .. strPrjName .. ‘”,’
strPrjInfo = strPrjInfo .. ‘”pm_login”:”‘ .. strPMID .. ‘”,”pm_name”:”‘ .. strPMName .. ‘”,’
strPrjInfo = strPrjInfo .. ‘”pd_login”:”‘ .. strPDID .. ‘”,”pd_name”:”‘ .. strPDName .. ‘”,’
strPrjInfo = strPrjInfo .. ‘”code”:”‘ .. strPrjCode .. ‘”,’
— 拼接項(xiàng)目的角色屬性
strPrjInfo = strPrjInfo .. ‘”role”:[{“name”:”項(xiàng)目總監(jiān)”,”user”:[{“login”:”‘ .. strPDID .. ‘”,”name”:”‘ ..? strPDName .. ‘”}]}’ .. strPrjRoleMember .. ‘],’
— 拼接項(xiàng)目的擴(kuò)展項(xiàng)目屬性
strPrjInfo = strPrjInfo .. ‘”ext_obj_attr“:[‘ .. strAddAttr1 .. ‘]}’
— ext_obj_attr 項(xiàng)目創(chuàng)建的時候,帶擴(kuò)展屬性(strAddAttr1 變量事先拼接好了)
— 帶擴(kuò)展屬性,會同時將mobox數(shù)據(jù)對象及gungho的項(xiàng)目都創(chuàng)建起來,并關(guān)聯(lián)好
nRet, strRetInfo = mobox.createProject(strLuaDEID, strPrjInfo)
–strRetInfo 返回參數(shù) 為兩個GUID :項(xiàng)目ID ;
— 返回的內(nèi)容如:
— ‘{A52E97CF-BDBE-4EA7-AAD6-949AD5707BF3};{1CB2B481-CA23-42DB-B7A2-546C1EA05364}’
我們系統(tǒng)上線的時候,原先的歷史數(shù)據(jù)是沒有的,為了快速接軌企業(yè)已有數(shù)據(jù),我們可以通過excel 對歷史數(shù)據(jù)進(jìn)行導(dǎo)入操作。導(dǎo)入一般可以通過腳本做一些定制開發(fā)來實(shí)現(xiàn)
列子:
數(shù)據(jù)導(dǎo)入的sheet 要求
這個系統(tǒng)只能導(dǎo)入,左邊第一個sheet (命名無所謂)(注意:若數(shù)據(jù)列表 這個sheet左邊還有隱藏的sheet,那么系統(tǒng)也不能獲取 數(shù)據(jù)列表sheet頁的數(shù)據(jù))
對Excel單元格的要求
單元個里面的數(shù)據(jù),只能是字符串或數(shù)值。若是計(jì)算公式或函數(shù) ,將無法獲取
另外,單元個內(nèi)容 不能出現(xiàn) /\<> & 符號,不能有換行或大量空格
1、字段分3類:
如,產(chǎn)品名稱 ,這個是必須有數(shù)值的
用于登記各種屬性信息
若有數(shù)據(jù),則直接獲取
若沒有,可以通過lua腳本計(jì)算生成
這種字段,一般也是必須有數(shù)值的
2、第一行是表頭行,數(shù)據(jù)行從第二行開始
通過Mobox 3000 功能點(diǎn)進(jìn)行定義,設(shè)置界面如下:
導(dǎo)入腳本,參考:
json? = require(“json”)mobox = require(“OILua_JavelinExt”)require(“oi_basestrfunc”)function ImportKA(strLuaDEID)? ? local nRet, strRetInfo? ? — 獲取導(dǎo)入的數(shù)據(jù), 返回 [[{“attr”:”xx”,”value”:””},…]]? ? — V2.0? ? nRet, strRetInfo = mobox.getCurEditDataPacket(strLuaDEID)? ? if (nRet ~= 0 or strRetInfo == ”) then? ? ? ? mobox.error(strLuaDEID, “無法獲取導(dǎo)入數(shù)據(jù)!”)? ? ? ? return? ? end? ? local input_rows = json.decode(strRetInfo)? ? local n, nCount, nValue, nMaxRow, nRow? ? local strAddAttr = ”? ? — 一些關(guān)鍵屬性? ? local strKAName = ”? ? local strKAType = ”? ? local strArea = ”? ? — 步驟1 獲取從excel導(dǎo)入的一行數(shù)據(jù),根據(jù)excel的列定義進(jìn)行屬性組合 strAddAttr? ? nMaxRow = #input_rows? ? for nRow = 1, nMaxRow do? ? ? ? input = input_rows[nRow]? ? ? ? nCount = #input? ? ? ? — V2.1? ? ? ? strAddAttr = ”? ? ? ? strKAName = ”? ? ? ? strKAType = ”? ? ? ? strArea = ”? ? ? ? for n = 1, nCount do? ? ? ? ? ? strAttr = input[n].attr? ? ? ? ? ? strValue = input[n].value? ? ? ? ? ? if (strAttr ~= ” and strValue ~= ”) then? ? ? ? ? ? ? ? — 根據(jù)導(dǎo)入的excel列頭名稱進(jìn)行判斷? ? ? ? ? ? ? ? — 關(guān)鍵屬性判斷? ? ? ? ? ? ? ? if (strAttr == “客戶名稱”) then? ? ? ? ? ? ? ? ? ? if (strValue == ”) then? ? ? ? ? ? ? ? ? ? ? ? mobox.error(strLuaDEID, strAttr .. “不能為空!”)? ? ? ? ? ? ? ? ? ? ? ? return? ? ? ? ? ? ? ? ? ? end? ? ? ? ? ? ? ? ? ? strKAName = strValue? ? ? ? ? ? ? ? ? ? strAddAttr = strAddAttr .. ‘{“attr”:”S_KA_NAME”,”value”:”‘ .. strKAName .. ‘”},’? ? ? ? ? ? ? ?— 常規(guī)屬性? ? ? ? ? ? ? ? elseif (strAttr == “所屬地區(qū)”) then? ? ? ? ? ? ? ? ? ? strArea = strValue? ? ? ? ? ? ? ? ? ? strAddAttr = strAddAttr .. ‘{“attr”:”S_AREA”,”value”:”‘ .. strArea .. ‘”},’? ? ? ? ? ? ? ? elseif (strAttr == “客戶類型”) then? ? ? ? ? ? ? ? ? ? strKAType = strValue? ? ? ? ? ? ? ? ? ? strAddAttr = strAddAttr .. ‘{“attr”:”S_KA_TYPE”,”value”:”‘ .. strKAType .. ‘”},’? ? ? ? ? ? ? ? end? ? ? ? ? ? end? ? ? ? end? ? ? ? –去除最后一個,? ? ? ? local strAddAttr1 = trim_laster_char(strAddAttr)? ? ? ? — 步驟2 根據(jù)客戶名稱來判斷導(dǎo)入的客戶是否已經(jīng)存在? ? ? ? —? ? ? ?如果已經(jīng)存在,根據(jù)導(dǎo)入的數(shù)據(jù)進(jìn)行覆蓋? ? ? ? —? ? ? ?如果不存在需要創(chuàng)建? ? ? ? local attrs? ? ? ? local strCondition = “S_KA_NAME='” .. strKAName .. “‘”? ? ? ? nRet, strRetInfo = mobox.existThisData(strLuaDEID, “客戶”, strCondition)? ? ? ? if (nRet ~= 0) then? ? ? ? ? ? mobox.error(strLuaDEID, “在檢查客戶是否存在時失敗! ” .. strRetInfo)? ? ? ? ? ? return? ? ? ? end? ? ? ? if (strRetInfo == ‘yes’) then? ? ? ? ? ? — 已經(jīng)存在,根據(jù)導(dǎo)入的數(shù)據(jù)進(jìn)行覆蓋? ? ? ? ? ? strCondition = “S_KA_NAME='” .. strKAName .. “‘”? ? ? ? ? ? strSetSQL =? “S_KA_NAME = ‘” .. strKAName ..”‘ , S_KA_TYPE ='” ..strKAType .. “‘ , S_AREA = ‘” .. strArea ..”‘ “? ? ? ? ? ? nRet, strRetInfo = mobox.updateDataAttrByCondition(strLuaDEID, “客戶”, strCondition, strSetSQL)? ? ? ? ? ? if (nRet ~= 0) then? ? ? ? ? ? ? ? mobox.error(strLuaDEID, strRetInfo)? ? ? ? ? ? ? ? return? ? ? ? ? ? end? ? ? ? elseif (strRetInfo == ‘no’) then? ? ? ? ? ? — 創(chuàng)建客戶? ? ? ? ? ? –mobox.writeSysLog(“strAddAttr1”, strAddAttr1)? ? ? ? ? ? strAddAttr1 = ‘[‘ .. strAddAttr1 .. ‘]’? ? ? ? ? ? –mobox.writeSysLog(“strAddAttr2”, strAddAttr1)? ? ? ? ? ? nRet, strRetInfo = mobox.createDataObj(strLuaDEID, “客戶”, strAddAttr1)? ? ? ? ? ? if (nRet ~= 0) then? ? ? ? ? ? ? ? mobox.error(strLuaDEID, “創(chuàng)建客戶失敗! ” .. strRetInfo )? ? ? ? ? ? ? ? return? ? ? ? ? ? end? ? ? ? end? ? endend
數(shù)據(jù)對象它有生命周期:編輯 -> 審核 -> 定版 -> 報廢? (默認(rèn) 4個狀態(tài))
我們數(shù)據(jù)在輸入階段,那么就屬于 “編輯”? ,這個時候可以修改與之相關(guān)的屬性及關(guān)聯(lián)關(guān)系。而一定數(shù)據(jù)對象經(jīng)過審核 ,進(jìn)入“定版” 狀態(tài),那么針對這個數(shù)據(jù)對象就不能修改了
參考下圖:
為實(shí)現(xiàn)這個功能設(shè)置,Mobox系統(tǒng)需要做如下配置
-》在grid列表定義里面 ,必須有 “S_STATE” 狀態(tài)? 這個字段
若這個字段不設(shè)置到 grid ,就無法實(shí)現(xiàn)第一圖的效果
]]>json = require (“json”)
mobox = require (“OILua_JavelinExt”)
function BeforeSelectUser ( strLuaDEID )
local action = ‘[{“action_type”:”open_select_userdlg“,”value”:{“multi_choice “:false,”style”:”user“}}]’
?— user 的意思 只列出用戶選擇
nRet, strRetInfo = mobox.setAction( strLuaDEID, action )
if (nRet ~= 0) then error( strRetInfo ) end
end
json? = require (“json”)mobox = require (“OILua_JavelinExt”)function AfterSelectUser ( strLuaDEID )? ? local? ?nRet, strUserLogin, strUserName? ? — 獲取當(dāng)前選擇數(shù)據(jù)? ? nRet, strRetInfo = mobox.getInputParameter( strLuaDEID )? ? if ( nRet ~= 0 or? strRetInfo == ”) then? ? ? ? mobox.error( strLuaDEID, “無法獲取數(shù)據(jù)!”)? ? ? ? return? ? end? ? local retJson = json.decode( strRetInfo )? ? local input_parameter = retJson[“parameter”]? ? strUserLogin = input_parameter[1].id? ? strUserName =? input_parameter[1].name? ? — 設(shè)置所選人員? ? local setAttr = ‘[{“attr”:”S_MASTER”,”value”:”‘..strUserName..'”},{“attr”:”S_S_MASTER_Login”,”value”:”‘..strUserLogin..'”}]’? ? mobox.setCurEditDataObjAttr( strLuaDEID,setAttr )end