function DayFromat(dateTimeStr) local formattedDateStr ="" if (dateTimeStr == "" or dateTimeStr==nil ) then return formattedDateStr end dateTimeStr = string.gsub(dateTimeStr, "T", " ") print(dateTimeStr) -- 使用模式匹配提取日期和時(shí)間部分 local dateStr, timeStr = dateTimeStr:match("(%d+-%d+-%d+) (%d+:%d+:%d+)") if (dateStr == nil) then formattedDateStr ="Date Format Error" return formattedDateStr end -- 提取日期部分的年、月、日 local year, month, day = dateStr:match("(%d+)-(%d+)-(%d+)") -- 將提取的月、日格式化為兩位數(shù)的字符串 month = string.format("%02d", tonumber(month)) day = string.format("%02d", tonumber(day)) -- 組合格式化后的日期和原始時(shí)間部分 local formattedDateStr = string.format("%s-%s-%s", year, month, day) local formattedDateTime = string.format("%s %s", formattedDateStr, timeStr) return formattedDateStr end
— 示例使用
local date = “2024-03-25T16:00:00.000Z”
local formattedDate = DayFromat(date)
print(formattedDate) — 輸出: 2024-03-25
nRet, strOBJInfo = mobox.objAttrToObjJson (‘PMS001’, strRetInfo )
沒有對(duì)執(zhí)行做保護(hù)(原先理解是 絕對(duì)不會(huì)出錯(cuò)的,實(shí)際上是錯(cuò)了),執(zhí)行后報(bào)錯(cuò)
這個(gè)錯(cuò)誤爆出,我們根本無法判斷問題所在。所以在任何情況下調(diào)用函數(shù)都需要做 出錯(cuò)保護(hù),加入
?if (nRet ~= 0) then
mobox.error(strLuaDEID, “PMS001數(shù)據(jù)庫(kù)沒有對(duì)應(yīng)字段 “)
return
end
2、在Debug 函數(shù)里面不能包含表類型的變量
Debug( strLuaDEID, debug.getinfo(1), ‘keynode創(chuàng)建’,tbNote[1])
里面的 tbNote[1]是一個(gè)表類型的變量,debug 不支持這個(gè)格式
nRet, strOBJInfo = mobox.objAttrToObjJson (‘JS003’, strRetInfo )
]]>
mobox3的功能點(diǎn)擴(kuò)展的MBC客戶端的配置實(shí)現(xiàn)方式
需要定義 3個(gè)應(yīng)用 (應(yīng)用名稱 不能變)
MOBOX3
OIOrgSAPI
OIMoboxSAPI
OIDataSAPI
其它2個(gè)服務(wù)類似
這個(gè)用戶部署了 Gungho系統(tǒng) ,而這個(gè)系統(tǒng)需要使用微信小程序。所以系統(tǒng)就會(huì)用到 gunghoAPI服務(wù)。(這個(gè)服務(wù)不是系統(tǒng)默認(rèn)安裝的服務(wù),需要手工單獨(dú)部署過)
這個(gè)服務(wù)部署后,我們客戶端怎樣去調(diào)用這個(gè)服務(wù),我們就可以通過定義一個(gè)自定義參數(shù)來描述 gunghoAPI的的 IP及端口,方便客戶端調(diào)用
配置過程如下
這樣,我們就定義了一個(gè)編號(hào)為 9001 的參數(shù)。 這個(gè)參數(shù)可以通過 lua腳本來獲取
nRet, strCanSu= mobox.getParameter(strLuaDEID, ‘9001’)
]]>
我們可以看到,excel第一行是分組行(項(xiàng)目基礎(chǔ)信息,P1,P2)
在P1 下面有 計(jì)劃日期;在P2下面也有 計(jì)劃日期 ,2個(gè)字段名稱是一樣的。我們做讀取數(shù)據(jù)的時(shí)候必須要依賴分組 P1、P2的定義才能區(qū)分
我們?cè)谧鰁xcel導(dǎo)入的時(shí)候,針對(duì)這類表格。我們需要如下處理
1、導(dǎo)入按鈕設(shè)置
2、在導(dǎo)入腳本的地方主要通過分組屬性來區(qū)分字段
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í)還是一個(gè)Json字符串,但其是一個(gè)標(biāo)準(zhǔn)的Json表格式表達(dá)
具體 objAttrToObjJson 函數(shù)怎么用查看手冊(cè)
{“cls”: “JS001”,
“ver”: 1,
“G_PRJ_ID”: “”,
“S_PRJ_CODE”: “PM-0002”,
“S_PRJ_NAME”: “pcy 0999 hard”,
“S_PM_NAME”: “金振興”
}
注意:這個(gè)Json格式是標(biāo)準(zhǔn)表格式字符串表達(dá)。
local tbOBJ = json.decode (strOBJInfo)
注,只有變成表后,我們可以這樣來理解這個(gè)表:
字段名 | 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)會(huì)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 )
]]>
為了解決這個(gè)問題,我們可以編輯一個(gè)lua腳本,將這個(gè)數(shù)據(jù)做處理后再顯示(在顯示前事件里面定義這個(gè)lua腳本)
–[[? ? 功能說明:? ? ? ? 1) 顯示前做一些字段的處理? ? ? ? 2)前端導(dǎo)入,新增有換行符號(hào) %%3Cbr%%3E ,替換成 <br> 前端html支持的換行內(nèi)容? ? ? ? 3)內(nèi)容中有&,替換成 & 前端解析 &不支持,最好在輸入時(shí)進(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ù)對(duì)象屬性? ? ? ? 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? ? ? ? — 取消最后一個(gè),號(hào)? ? ? ? strAttrs = trim_laster_char(strAttrs)? ? ? ? strRow = ‘{“id”:”‘ .. id .. ‘”,”attrs”:[‘ .. strAttrs .. ‘]},’? ? ? ? strDataJson = strDataJson .. strRow? ? end? ? — 取消最后一個(gè),號(hào)? ? strDataJson = trim_laster_char(strDataJson)? ? strDataJson = strDataJson .. ‘]’? ? local strAction = ‘[{“action_type”:”reset_data_attr”,”value”:’ .. strDataJson .. ‘}]’? ? mobox.setAction(strLuaDEID, strAction)end
這個(gè)列子也可以用于別的一些非法字符串的處理
]]>
企業(yè)在實(shí)施項(xiàng)目管理系統(tǒng)的時(shí)候,不通類型的項(xiàng)目其屬性可能是不一樣的。而Gungho標(biāo)準(zhǔn)系統(tǒng)內(nèi)對(duì)項(xiàng)目的屬性,主要包括(項(xiàng)目名稱、編號(hào)、開始結(jié)束日期等)。為了適應(yīng)企業(yè)個(gè)性項(xiàng)目信息的輸入,我們需要通過Mobox平臺(tái)定義項(xiàng)目類型去適應(yīng)這個(gè)需求
Sa 登錄mobox低代碼開發(fā)平臺(tái)
創(chuàng)建一個(gè)用于描述項(xiàng)目擴(kuò)展屬性的數(shù)據(jù)對(duì)象
注意:業(yè)務(wù)類型必須是 項(xiàng)目
接下來需要做的內(nèi)容,這里不具體展開
基礎(chǔ):主要是綁定哪個(gè)數(shù)據(jù)對(duì)象及相關(guān)的界面
功能:主要是可以自定義該類型項(xiàng)目的自定義菜單 (參考下圖)
我們?cè)趃ungho登錄后,新建項(xiàng)目
Gungho項(xiàng)目管理軟件在企業(yè)部署的時(shí)候因其業(yè)務(wù)的個(gè)性,很有可能需要對(duì)任務(wù)做各種各樣的二次開發(fā),從而適應(yīng)企業(yè)需求
舉例:
某檢測(cè)檢驗(yàn)中心,在做叉車整車檢測(cè)的時(shí)候會(huì)分解出100多個(gè)的檢測(cè)任務(wù),每一個(gè)任務(wù)除了要求員工按時(shí)間要求完成以外,還需將每個(gè)檢測(cè)任務(wù)所獲取的數(shù)據(jù)等級(jí)下來。這個(gè)數(shù)據(jù)可能是一個(gè)表,而且每一個(gè)任務(wù)所對(duì)應(yīng)的填寫數(shù)據(jù)也都是不一樣的。
這樣一個(gè)需求,我們就必須對(duì)任務(wù)做二次開發(fā)
用sa 登錄Mobox平臺(tái),進(jìn)入系統(tǒng)管理模塊
定義的任務(wù)類型名稱,在后面會(huì)用到
開發(fā)一個(gè)腳本:任務(wù)點(diǎn)擊后 腳本 (目的是 任務(wù)點(diǎn)擊后能將 prj_id,task_id 等設(shè)置到全局變量)
這個(gè)任務(wù)點(diǎn)擊后(lua腳本)是標(biāo)準(zhǔn)的
|
這個(gè)腳本目的是生成 全局變量:prj_id , task_id 。 這2個(gè)變量描述了當(dāng)前任務(wù)所屬項(xiàng)目唯一標(biāo)識(shí),及任務(wù)唯一標(biāo)識(shí)。是Gungho系統(tǒng)向Mobox平臺(tái)傳遞核心參數(shù),Mobox后期二次開發(fā)的時(shí)候都需要用到。
注意,這里定義的全局變量 名稱在后期調(diào)用的是要完全一樣
這個(gè)腳本,會(huì)在后面文章的:任務(wù)分類定義 –? 事件 (點(diǎn)擊后事件用到) 參考
按需分別定義數(shù)據(jù)模型,及模型里面的字段。這里不詳細(xì)展開(需要有mobox二次開經(jīng)驗(yàn))
定義小窗口的時(shí)候需要注意,有一個(gè)窗口初始化腳本要執(zhí)行(目的是個(gè)小窗口內(nèi)設(shè)置prj_id, task_id)
因?yàn)槭桥cGungho集成,前面描述過gungho的全局變量,這里開發(fā)的時(shí)候已經(jīng)可以使用這些變量(prj_id , task_id)
根據(jù)需求,圍繞數(shù)據(jù)模型做二次開發(fā)(可能有很多過個(gè)腳本,按需求開發(fā))比如
1)查詢事件 (我們的擴(kuò)展屬性,是與任務(wù)綁定的,所以需要查出與本任務(wù)有關(guān)的屬性 如 任務(wù)ID過濾 )
因?yàn)槭桥cGungho集成,前面描述過gungho的全局變量,這里開發(fā)的時(shí)候已經(jīng)可以使用這些變量(prj_id , task_id)
2)初始化腳本 (因?yàn)樾枰cGungho的任務(wù)集成,定義界面(小窗口的時(shí)候需要定義初始化腳本 如 設(shè)置項(xiàng)目及任務(wù)ID )
任務(wù)擴(kuò)展屬性信息的grid展示(查詢事件)、小窗口數(shù)據(jù)的輸入保存(需要綁定task_id等)
任務(wù)分類定義,是gungho的任務(wù)與Mobox的功能點(diǎn)集合的一個(gè)過程
注意:數(shù)量限制 必須選擇 多數(shù)據(jù), 顯示方式必須選擇 自定義頁(yè)面
注意:點(diǎn)擊任務(wù)后事件 是必須選擇( 來源: gungho領(lǐng)域 – TASK任務(wù) – 某自定義事件)
自定義里面是將任務(wù)與Mobox的功能點(diǎn)集合在一起
按上圖,A2樣品技術(shù)參數(shù),這類任務(wù),綁定了2個(gè)功能點(diǎn)
綁定了2個(gè)功能點(diǎn)
? 1 個(gè)用于技術(shù)參數(shù)輸入 (可能是一個(gè)表)
1 個(gè)用于檢測(cè)結(jié)果輸入
]]>
共好合同管理軟件是基于 Mobox工業(yè)低代碼開發(fā)平臺(tái)結(jié)合企業(yè)個(gè)性需求定制開發(fā)而發(fā)布的
合同軟件包括:客戶維護(hù)、銷售跟蹤管理、客戶需求管理、(銷售與采購(gòu))合同管理、合同評(píng)審、合同檔案管理、企業(yè)即時(shí)通訊平臺(tái)等模塊組成
基礎(chǔ)服務(wù):人員管理服務(wù)、消息服務(wù)、文件服務(wù)、數(shù)據(jù)服務(wù)、流程服務(wù)、腳本引擎
合同軟件涉及的企業(yè)員工角色:銷售、采購(gòu)、管理員、主管、財(cái)務(wù)。以下是各個(gè)角色主要需要做的事情。
合同系統(tǒng)大體思路
一、合同系統(tǒng)基礎(chǔ)數(shù)據(jù)維護(hù)
管理員(admin),要維護(hù)(本公司的產(chǎn)品)信息
二、銷售合同完成過程
1、必須 先建立 客戶,及其 對(duì)應(yīng)的 聯(lián)系人
2、有了客戶 (需要有稅號(hào)) ,才能新建銷售合同
3、合同 建立后 ,位這個(gè) 合同設(shè)置 銷售清單 (來源 本公司的產(chǎn)品)
4、合同完成后,需要找人審批 (審批人 xszg)
5、審批通過后 , 財(cái)務(wù) (cw)可以輸入 財(cái)務(wù)信息比如 (匯款信息、開票信息等)
6、合同原件歸檔
合同管理可以幫助組織或個(gè)人提高合同交付的效率和準(zhǔn)確性。合同管理軟件和工具可以簡(jiǎn)化合同創(chuàng)建、審批、跟蹤和管理的過程,減少人為錯(cuò)誤和遺漏。這有助于提高合同流程的效率。
能對(duì)合同全局進(jìn)行查看(如 采購(gòu)清單、收款記錄、開票記錄、收款計(jì)劃等)
能查看合同附件
合同草案擬定后,需要公司組織相關(guān)專業(yè)的人員及領(lǐng)導(dǎo),對(duì)合同進(jìn)行評(píng)審。共好合同管理系統(tǒng),支持用戶自定義流程,可以根據(jù)不通的合同、不同的發(fā)起人啟動(dòng)對(duì)應(yīng)的流程來多合同進(jìn)行評(píng)審,所有評(píng)審記錄都會(huì)記錄在系統(tǒng)中,便于以后追溯。
合同是業(yè)務(wù)和管理的雙向訴求,在企業(yè)的經(jīng)營(yíng)過程中,合同的歸口部門在不同的業(yè)務(wù)部門(當(dāng)然,紙質(zhì)文檔一般會(huì)由財(cái)務(wù)或者行政或者其他部門進(jìn)行統(tǒng)一存檔),沒有一個(gè)統(tǒng)一的入口提供所有合同管理的情況下,會(huì)給合同的查詢、閱覽等帶來不便,合同管理系統(tǒng)可以將不同業(yè)務(wù)部門的不同類型的合同集中管理起來,提供統(tǒng)一的查詢?nèi)肟冢瑸楹贤牟樵儭㈤営[帶來便利。
合同本身是一個(gè)文檔,要么是在線文檔、要么是附件文檔,這些文檔本身是沒辦法進(jìn)行直接提供支撐數(shù)據(jù)支撐的,在合同管理系統(tǒng)中,我們先要把合同的關(guān)鍵數(shù)據(jù)提取出來,放到合同管理系統(tǒng)中。當(dāng)合同數(shù)據(jù)全面錄入合同管理系統(tǒng)以后,合同的各種數(shù)據(jù)都可以被進(jìn)行統(tǒng)計(jì),如合同金額、合同的收款、付款情況,收付款計(jì)劃等等,這些數(shù)據(jù)按照業(yè)務(wù)需要進(jìn)行加工以后,就可以為業(yè)務(wù)提供全面的數(shù)據(jù)、決策支撐。
我們可以為合同設(shè)置收款計(jì)劃,系統(tǒng)會(huì)根據(jù)設(shè)置 自動(dòng)進(jìn)行,到期收款提醒,及收到匯款后提醒、開票后提醒等
合同系統(tǒng)是B/S架構(gòu)的系統(tǒng),企業(yè)需要找一臺(tái)服務(wù)器來部署,服務(wù)的要求如下
硬件 :
8G 內(nèi)存或更高 、8CPU或更高、500G硬盤(根據(jù)自己需求而定)
操作系統(tǒng):
操作系統(tǒng):Windows 2012 r2 或更高(支持 32及64)
數(shù)據(jù)庫(kù):甲方自己準(zhǔn)備或我方協(xié)助
數(shù)據(jù)庫(kù):SQLServer 2008 R2或更高
軟件環(huán)境:
IIS + .NET4.0 +.NET4.5(或更高版本)
備注:
1)若Windows 2012r2 ,那么SQL需要安裝 2008或更高版本 (否則 SQL管理器可能不能安裝)
2)若安裝 SQL 2008 or 2008R2 ,那么必須安裝過 .Net 3.5
3)Mobox網(wǎng)站必須有 .Net 4.5(或更高版本支持)
]]>