function DayFromat(dateTimeStr) local formattedDateStr ="" if (dateTimeStr == "" or dateTimeStr==nil ) then return formattedDateStr end dateTimeStr = string.gsub(dateTimeStr, "T", " ") print(dateTimeStr) -- 使用模式匹配提取日期和時間部分 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+)") -- 將提取的月、日格式化為兩位數的字符串 month = string.format("%02d", tonumber(month)) day = string.format("%02d", tonumber(day)) -- 組合格式化后的日期和原始時間部分 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
這個用戶部署了 Gungho系統 ,而這個系統需要使用微信小程序。所以系統就會用到 gunghoAPI服務。(這個服務不是系統默認安裝的服務,需要手工單獨部署過)
這個服務部署后,我們客戶端怎樣去調用這個服務,我們就可以通過定義一個自定義參數來描述 gunghoAPI的的 IP及端口,方便客戶端調用
配置過程如下
這樣,我們就定義了一個編號為 9001 的參數。 這個參數可以通過 lua腳本來獲取
nRet, strCanSu= mobox.getParameter(strLuaDEID, ‘9001’)
]]>
我們可以看到,excel第一行是分組行(項目基礎信息,P1,P2)
在P1 下面有 計劃日期;在P2下面也有 計劃日期 ,2個字段名稱是一樣的。我們做讀取數據的時候必須要依賴分組 P1、P2的定義才能區分
我們在做excel導入的時候,針對這類表格。我們需要如下處理
1、導入按鈕設置
2、在導入腳本的地方主要通過分組屬性來區分字段
Declare @strSQL as nvarchar(1024)Declare @strTable as nchar(19)Declare @nOrder as intDeclare @strTabOrder as nvarchar(3)Set @nOrder = 1While @nOrder < 1000BeginSet @strTabOrder = REPLACE( str( @nOrder, 3 ), N’ ‘, N’0’ )Set @strTable= N’OI_CROWD_C_MSG_T’ + @strTabOrder— 判斷數據表是否存在,不存在就結束IF NOT EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[dbo].[‘ + @strTable + ‘]’) AND OBJECTPROPERTY(id, N’IsUserTable’) = 1)RETURN— 執行刪除記錄,刪除指定日期之前的記錄Set @strSQL = N’Delete ‘ + @strTable + N’ Where T_C5 < ”2017-10-07”’EXECUTE sp_executesql @strSQLSet @nOrder = @nOrder + 1End
]]>
— 20171220 以后用這個查詢,以前的用 showdbver20171226 – oldziduan.txt 查詢
— 使用前 請修改 老的數據庫名稱 目前用的是 OIOrg.dbo OIAm.dbo OIFile.dbo OIMobox.dbo (老庫用 DMS.dbo)
declare @OIOrgDBVer varchar(40)
declare @AMDBVer varchar(40)
declare @OIFileDBVer varchar(40)
declare @DMSDBVer varchar(40)
declare @CODEDBVer varchar(40)
declare @GunghoVer varchar(40)
declare @REMINDDBVer varchar(40)
declare @WMSDBVer varchar(40)
declare @ISSUEDBVer varchar(40)
declare @PRINTDBVer varchar(40)
select @OIOrgDBVer = ‘OIOrgDB ‘ +(select S_C1 from OIOrg.dbo.OI_ORG_DBVER) + ‘ New- 20230327’
select @AMDBVer = ‘AM8DB ‘ +(select S_C1 from OIAm.dbo.OI_STK_DBVER) + ‘ New- 20200327’
select @OIFileDBVer = ‘OIFileDB ‘ +(select S_C1 from OIFile.dbo.OI_FILE_DBVER) + ‘ New- 20151106’
select @DMSDBVer = ‘DMSDB ‘ +(select CN_S_DMS from OIMobox.dbo.OI_SYS_DBVER) + ‘ New- 20240321’
select @GunghoVer = ‘GunghoDB ‘ +(select CN_S_GUNGHO from OIMobox.dbo.OI_SYS_DBVER) + ‘ New- 20240516’
select @WMSDBVer = ‘WMSDB ‘ +(select CN_S_WMS from OIMobox.dbo.OI_SYS_DBVER) + ‘ New- 20240419’
— select @ISSUEDBVer= ‘ISSUEDB ‘ +(select CN_S_ISSUE from OIMobox.dbo.OI_SYS_DBVER) + ‘ New- 20171110’
select @PRINTDBVer = ‘PRINT ‘ +(select CN_S_PRINT from OIMobox.dbo.OI_SYS_DBVER) + ‘ New- 20171110’
— select @CODEDBVer = ‘CODEDB ‘ +(select CN_S_CODE from OIMobox.dbo.OI_SYS_DBVER) + ‘ New- 20171110’
print ‘列出目前所有數據庫版本日期’
print @OIOrgDBVer
print @AMDBVer
print @OIFileDBVer
print @DMSDBVer
print ‘———————- Mobox3Ver 20240613’
print @GunghoVer
— print @CODEDBVer
print @WMSDBVer
— print @ISSUEDBVer
print @PRINTDBVer
]]>
— 功能:
— 3000 功能點 列出與某一個taskid相關的數據
— 若列出數據已經有,將 新增 頁面按鈕屏蔽 (這個功能是做任務評測結果的,結果只能有一個,不可能多個)
————————————————————————–
json = require (“json”)
mobox = require (“OILua_JavelinExt”)function shownowtaskdata ( strLuaDEID )local nRet, strRetInfo local nType local strTaskID local bHidden=false local strClsID=""--拿到數據對象標識 nRet, strRetInfo = mobox.getCurEditExtInfo( strLuaDEID ) if ( nRet ~= 0 ) then mobox.error( strLuaDEID, "系統獲取擴展屬性失敗 "..strRetInfo ) return end if ( strRetInfo =='' or strRetInfo==nil or strRetInfo=='{}' ) then mobox.error( strLuaDEID, "系統獲取擴展屬性為空!" ) return end local extinfo = json.decode( strRetInfo ) strClsID=extinfo.cls_id -- 得到當前cls的id ,下面操作需要— 獲取任務全局屬性 (這個案例是與 Gungho任務系統集成,所以需要這個參數,別的環境這個可以忽略
nRet, strRetInfo = mobox.getGlobalAttr( strLuaDEID, “task_id” )
if ( nRet ~= 0 or strRetInfo == ” ) then
mobox.error( strLuaDEID, “系統無法獲取任務號 “..strRetInfo )
return
end
local input_paramter = json.decode( strRetInfo )
local strTaskID = input_paramter[1].valuelocal strCondition strCondition = "G_TASK_ID='"..strTaskID.."'" --增加隱藏按鈕的依據-通過條件查詢返回符合數據>0 既隱藏 -- local strQeuryCondition="S_TESTITEM='X'" (定義grid某一個字段內有某些數值 這里沒有啟用) nRet, strRetInfo = mobox.getDataObjCount(strLuaDEID, strClsID, strCondition) if (nRet ~= 0 ) then mobox.error(strLuaDEID, "得到數據數量失敗,原因:" .. strRetInfo) return end --轉為整數類型 local nDataCount = tonumber(strRetInfo) if (nDataCount >0) then bHidden=true end --隱藏頁面按鈕 “新增” local strHiddenButton = '' if (bHidden) then strHiddenButton = ',{"action_type":"hidden_button","value":[{"name":"新增"}]}' end local strAction = '[{"action_type":"set_query_condition","value":{"where":"' .. strCondition .. '","order":""}}' strAction = strAction .. strHiddenButton .. ']' mobox.setAction( strLuaDEID, strAction )end
這個列子也可以用于別的一些非法字符串的處理
]]>為了解決這個問題,我們可以編輯一個lua腳本,將這個數據做處理后再顯示(在顯示前事件里面定義這個lua腳本)
–[[? ? 功能說明:? ? ? ? 1) 顯示前做一些字段的處理? ? ? ? 2)前端導入,新增有換行符號 %%3Cbr%%3E ,替換成 <br> 前端html支持的換行內容? ? ? ? 3)內容中有&,替換成 & 前端解析 &不支持,最好在輸入時進行替換–]]json = require(“json”)mobox = require(“OILua_JavelinExt”)require(“oi_basestrfunc”)function BeforeGridShow(strLuaDEID)? ? local nRet, strRetInfo? ? local arobjs, attrs, success? ? — 獲取輸入的DataJson數據包? ? nRet, strRetInfo = mobox.getCurEditDataPacket(strLuaDEID)? ? if (nRet ~= 0) then? ? ? ? mobox.error(strLuaDEID, “無法獲取數據包!”)? ? ? ? return? ? end? ? if (strRetInfo == ” or strRetInfo == nil) then? ? ? ? return? ? end? ? — 解析數據包,數據包格式? ? — [{“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=”? ? ? ? — 開始過濾顯示數據對象屬性? ? ? ? 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
這個列子也可以用于別的一些非法字符串的處理
]]>這個是一個標準的導入模板 ,使用前可以通過修改 表名,字段名稱,字段中文名,字段對應賦值變量名稱。
–[[
這個是一個標準的腳本,可以
1、修改里面的數據對象名稱 樣品技術參數
2、字段相關名稱(字段中文名、字段名稱、字段賦值變量名稱)
字段名稱? ? ? ? ? ? ? ? ? ? ? ? ? ? 字段中文名? ? ? ? ? 字段對應賦值變量名
N_SN? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?序號? ? ? ? ? ? ? ? ? ? ?nSN
S_ITEM_NAME? ? ? ? ? ? ? ? ?名稱? ? ? ? ? ? ? ? ? ? ?strItemName
S_ITEM_M_S_N? ? ? ? ? ? ? ?型號_規格_數量? ?strItemMSN
S_ITEM_CODE? ? ? ? ? ? ? ? ?編號? ? ? ? ? ? ? ? ? ? ?strItemCode
S_MANUFACTURER? ? ? ? 生產單位? ? ? ? ? ? ? strFacturer
3、若字段不夠多,或太多,需要調整程序
4、里面的唯一性判斷是 task_id + S_ITEM_NAME + S_ITEM_CODE (需要根據情況調整)
–]]
功能說明:json = require(“json”)
mobox = require(“OILua_JavelinExt”)
require(“oi_basestrfunc”)
function ImportExcle(strLuaDEID)
local nRet, strRetInfo
local strPrjID = ”
local strTaskID = ”
— 獲取全局變量 prj_id, task_id
nRet, strRetInfo = mobox.getGlobalAttr( strLuaDEID, “task_id”,”prj_id” )
if ( nRet ~= 0 or strRetInfo == ” ) then
mobox.error( strLuaDEID, “系統無法獲取全局變量 “..strRetInfo )
return
end
local input_paramter = json.decode( strRetInfo )
strTaskID = input_paramter[1].value
strPrjID = input_paramter[2].value
if ( strTaskID == ” ) then
mobox.error( strLuaDEID, “必須要有項目及任務相關信息” )
return
end
— 獲取導入的單條數據, 返回 {“id”:”xxx”,”attrs”:[{“attr”:”attr1″,”value”:”xxx1″},{“attr”:”attr2″,”value”:”xxx2″}, …]}
nRet, strRetInfo = mobox.getInputParameter(strLuaDEID)
if (nRet ~= 0 or strRetInfo == ” ) then
mobox.error(strLuaDEID, “無法獲取導入數據!”..strRetInfo)
return
end
local n, nCount, nValue
local strAddAttr = ”
local strAttr = ”
local strSetSQL = ”
— 一些關鍵屬性 (腳本 后期只需要改字段名稱就可以)
local nSN? ? ? ? ? ? ? ? ? ? ? ? ? ?— 對應 序號 N_SN
local strItemName = ”? ? ? ? — 對應 名稱 S_ITEM_NAME
local strItemMSN = ”? ? ? ? ?— 對應 型號_規格_數量 S_ITEM_M_S_N
local strItemCode = ”? ? ? ? ?— 對應 編號 S_ITEM_CODE
local strFacturer = ”? ? ? ? ? ? — 對應 生產單位 S_MANUFACTURER
— 因為每次導入只傳一條記錄,所以當前條寫入 prj_id 及 task_id
strAddAttr = strAddAttr .. ‘{“attr”:”G_TASK_ID”,”value”:”‘ .. strTaskID .. ‘”},’
strAddAttr = strAddAttr .. ‘{“attr”:”G_PRJ_ID”,”value”:”‘ .. strPrjID .. ‘”},’
local retJson =json.decode(strRetInfo)
local input_rows =retJson[“parameter”]
— 步驟1 獲取從excel導入的一行數據,根據excel的列定義進行屬性組合 strAddAttr
nCount = #input_rows
for n = 1, nCount do
strAttr = input_rows[n].attr
strValue = input_rows[n].value
— 根據導入的excel列頭名稱進行判斷
— 關鍵屬性判斷
if (strAttr == “名稱”) then
if (strValue == ”) then
mobox.error(strLuaDEID, strAttr .. “不能為空!”)
return
end
strItemName = strValue
strAddAttr = strAddAttr .. ‘{“attr”:”S_ITEM_NAME”,”value”:”‘ .. strItemName .. ‘”},’
— 常規屬性
elseif (strAttr == “序號”) then
nSN = strValue
strAddAttr = strAddAttr .. ‘{“attr”:”N_SN”,”value”:”‘ .. nSN .. ‘”},’elseif (strAttr == “型號_規格_數量”) then
strItemMSN = strValue
strAddAttr = strAddAttr .. ‘{“attr”:”S_ITEM_M_S_N”,”value”:”‘ .. strItemMSN .. ‘”},’elseif (strAttr == “編 號”) then
strItemCode= strValue
strAddAttr = strAddAttr .. ‘{“attr”:”S_ITEM_CODE”,”value”:”‘ .. strItemCode .. ‘”},’elseif (strAttr == “生產廠家”) then
strFacturer = strValue
strAddAttr = strAddAttr .. ‘{“attr”:”S_MANUFACTURER”,”value”:”‘ .. strFacturer .. ‘”},’end
end
–去除最后一個,
local strAddAttr1 = trim_laster_char(strAddAttr)— 步驟2 根據 (名稱+編號+taskid) 來判斷導入的檢測數據是否已經存在
— 如果已經存在,根據導入的數據進行覆蓋
— 如果不存在需要創建
local attrs
local strCondition = “S_ITEM_NAME='” .. strItemName .. “‘ and G_TASK_ID='”..strTaskID..”‘ and S_ITEM_CODE='” .. strItemCode.. “‘”
nRet, strRetInfo = mobox.existThisData(strLuaDEID, “樣品技術參數”, strCondition)
if (nRet ~= 0 ) thenmobox.error(strLuaDEID, “在檢查樣品技術參數是否存在時失敗! ” .. strRetInfo)
return
endif (strRetInfo == ‘yes’) then
— 已經存在,根據導入的數據進行覆蓋
strCondition = “S_ITEM_NAME='” .. strItemName .. “‘ and G_TASK_ID='”..strTaskID..”‘ and S_ITEM_CODE='” .. strItemCode.. “‘”
strSetSQL = “N_SN='” ..nSN.. “‘, S_ITEM_NAME = ‘” .. strItemName ..”‘ , S_ITEM_CODE ='” ..strItemCode .. “‘ , S_ITEM_M_S_N = ‘” .. strItemMSN ..”‘ “
nRet, strRetInfo = mobox.updateDataAttrByCondition(strLuaDEID, “樣品技術參數”, strCondition, strSetSQL)
if (nRet ~= 0) then
mobox.error(strLuaDEID, strRetInfo)
return
end
elseif (strRetInfo == ‘no’) then
— 創建 樣品技術參數
— mobox.writeSysLog(“strAddAttr1”, strAddAttr1)
strAddAttr1 = ‘[‘ .. strAddAttr1 .. ‘]’
mobox.writeSysLog(“strAddAttr2”, strAddAttr1)
nRet, strRetInfo = mobox.createDataObj(strLuaDEID, “樣品技術參數”, strAddAttr1)
if (nRet ~= 0) then
mobox.error(strLuaDEID, “創建樣品技術參數失敗! ” .. strRetInfo )
return
endend
end
function
]]>
我們在實施Gungho項目管理系統剛上線的時候,其實用戶手上有很多的歷史項目需要導入進來。而且用戶的項目屬性與我們標準的項目屬性差異很大。為此,我們需要對Gungho的項目數據屬性進行擴延。而這個擴延設置是在Mobox數據平臺來完成的。為此我們需要做2個事情:
給項目設置擴展屬性,用于對用戶需求的適應
需要將企業歷史項目清單一次性導入
因為,我們是為Gungho的項目管理做配套,所以在mobox建立數據模型的時候,有類型需要選擇? ,業務類型必須是 “項目”
目的,定義適用企業個性需求的項目管理功能及界面
根據需求 自定義功能
根據需求,加入對應腳本
方法一: ?(這個一般在mobox數據對象創建后事件調用)
Mobox 數據對象先創建 –》之后通過腳本生成Gungho的項目 –》得到Gungho項目的prj_id –》更新mobox數據對象的 G_PRJ_ID
local strPrjInfo
strPrjInfo = ‘{“type“:”漢和項目”,”name“:”‘ .. strPrjName .. ‘”,’
strPrjInfo = strPrjInfo .. ‘”pm_login“:”‘ .. strPMID .. ‘”,”pm_name“:”‘ .. strPMName .. ‘”,’
strPrjInfo = strPrjInfo .. ‘”pd_login“:”‘ .. strPDID .. ‘”,”pd_name“:”‘ .. strPDName .. ‘”,’
— type:定義了項目類型? ? ? ?name:項目名稱
strPrjInfo = strPrjInfo .. ‘”class_name“:”項目”,”obj_id“:”‘ .. strObjID .. ‘”,’
— class_name:數據對象名稱? obj_id:數據對象ID ,Mobox數據創建后獲取
strPrjInfo = strPrjInfo .. ‘”code“:”‘ .. strPrjCode .. ‘”,’
strPrjInfo = strPrjInfo .. ‘”role“:[{“name”:”項目總監”,”user”:[{“login”:”‘ .. strPDID .. ‘”,”name”:”‘ ..?strPDName .. ‘”}]}’ .. strPrjRoleMember .. ‘]}’
— code:項目編號? role:角色相關
— 向共好系統創建一個項目
nRet, strRetInfo = mobox.createProject(strLuaDEID, strPrjInfo)
— strRetInfo:返回的是gungho創建項目的ID (prj_id)
if (nRet ~= 0) then
mobox.error(strLuaDEID, strRetInfo)
return
end
— strRetInfo:這個要回寫Mobox數據對象的 G_PRJ_ID
— 得到prj_id 將信息寫入mobox數據對象的代碼,這里就不展現了
方法二: ?(這個一般在mobox數據對象的自定義事件入“項目導入”調用)
Gungho的項目所需的所有信息(包括擴展信息)全部定義好,一次性創建Gungho及Mobox所有數據及其相關性
?strPrjInfo = ‘{“type”:”漢和項目”,”class_name”:”項目”,”name”:”‘ .. strPrjName .. ‘”,’
strPrjInfo = strPrjInfo .. ‘”pm_login”:”‘ .. strPMID .. ‘”,”pm_name”:”‘ .. strPMName .. ‘”,’
strPrjInfo = strPrjInfo .. ‘”pd_login”:”‘ .. strPDID .. ‘”,”pd_name”:”‘ .. strPDName .. ‘”,’
strPrjInfo = strPrjInfo .. ‘”code”:”‘ .. strPrjCode .. ‘”,’
— 拼接項目的角色屬性
strPrjInfo = strPrjInfo .. ‘”role”:[{“name”:”項目總監”,”user”:[{“login”:”‘ .. strPDID .. ‘”,”name”:”‘ ..? strPDName .. ‘”}]}’ .. strPrjRoleMember .. ‘],’
— 拼接項目的擴展項目屬性
strPrjInfo = strPrjInfo .. ‘”ext_obj_attr“:[‘ .. strAddAttr1 .. ‘]}’
— ext_obj_attr 項目創建的時候,帶擴展屬性(strAddAttr1 變量事先拼接好了)
— 帶擴展屬性,會同時將mobox數據對象及gungho的項目都創建起來,并關聯好
nRet, strRetInfo = mobox.createProject(strLuaDEID, strPrjInfo)
–strRetInfo 返回參數 為兩個GUID :項目ID ;
— 返回的內容如:
— ‘{A52E97CF-BDBE-4EA7-AAD6-949AD5707BF3};{1CB2B481-CA23-42DB-B7A2-546C1EA05364}’