& http://www.sstd.com.cn PDM產品數據管理軟件、項目管理系統 Fri, 17 Jan 2025 00:44:41 +0000 zh-Hans hourly 1 https://wordpress.org/?v=6.9.1 http://www.sstd.com.cn/wp-content/uploads/2022/11/cropped-plmico512-32x32.png 二次開發 – 共好plm系統 http://www.sstd.com.cn 32 32 mobox3打開某一個項目后進入項目領域里面的3000功能獲取prjid方法 http://www.sstd.com.cn/3149/ Fri, 17 Jan 2025 00:44:41 +0000 http://www.sstd.com.cn/?p=3149 — 項目領域進入后,里面的3000功能獲取Prj_id 方法
? ? local nRet, strRetInfo
? ? — 獲取外部輸入參數
? ? nRet, strRetInfo = mobox.getCurEditExtInfo(strLuaDEID)
? ? if (nRet ~= 0 ) then
? ? ? ? Error( strLuaDEID, debug.getinfo(1), strRetInfo)
? ? ? ? return
? ? end
? ? local tTmp = json.decode(strRetInfo)
? ? local tP = tTmp.urlParams
? ? if (tP == nil) then
? ? ? ? Error( strLuaDEID, debug.getinfo(1), “輸入參數有問題!”)
? ? ? ? return
? ? end
? ? local strPrjID = tP.prjId
? ? if (strPrjID == nil) then
? ? ? ? Error( strLuaDEID, debug.getinfo(1), “獲取項目標識失敗!”)
? ? ? ? return
? ? end
? ? strPrjID = strPrjID:match(“{(.-)}”) — 去掉 {}
]]>
mobox3 格式化日期 http://www.sstd.com.cn/3144/ Thu, 16 Jan 2025 07:04:46 +0000 http://www.sstd.com.cn/?p=3144  

–[[ 格式日期 2024-03-25T16:00:00.000Z 格式化為 2024-03-25?]]

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

]]>
lua for mobox3二次開發一些經驗 http://www.sstd.com.cn/3119/ Sun, 06 Oct 2024 04:40:45 +0000 http://www.sstd.com.cn/?p=3119 1、建議任何調用函數,都需要做執行保護

nRet, strOBJInfo = mobox.objAttrToObjJson (‘PMS001’, strRetInfo )

沒有對執行做保護(原先理解是 絕對不會出錯的,實際上是錯了),執行后報錯

這個錯誤爆出,我們根本無法判斷問題所在。所以在任何情況下調用函數都需要做 出錯保護,加入

?if (nRet ~= 0) then

mobox.error(strLuaDEID, “PMS001數據庫沒有對應字段 “)

return

end

2、在Debug 函數里面不能包含表類型的變量

Debug( strLuaDEID, debug.getinfo(1), ‘keynode創建’,tbNote[1])

里面的 tbNote[1]是一個表類型的變量,debug 不支持這個格式

nRet, strOBJInfo = mobox.objAttrToObjJson (‘JS003’, strRetInfo )

 

 

]]>
Mobox 3000功能點頁面按鈕隱藏的lua實現方法 http://www.sstd.com.cn/2590/ Thu, 18 Apr 2024 03:06:07 +0000 http://www.sstd.com.cn/?p=2590 需求,我們有一個任務執行后,需要對這個任務做后做評價。為此與任務系統集成通過3000功能點定義了一個任務評分的功能點。任務評分后,不能通過新增,對這個任務再次增加一個評分。因此第一個任務評分后,需要將頁面按鈕(新增)隱藏掉

腳本列子

— 功能:
— 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].value

local 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 對回車(%3Cbr%3E)處理方法 http://www.sstd.com.cn/2537/ Thu, 11 Apr 2024 05:02:28 +0000 http://www.sstd.com.cn/?p=2537 我們在Gird列出數據的時候,若數據內帶%3Cbr%3E,其實是回車的意思,若grid讀出數據不做任何處理,那么就會影響系統表達

為了解決這個問題,我們可以編輯一個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
這個列子也可以用于別的一些非法字符串的處理
]]>
Gungho項目擴展屬性二次開發的實現過程 http://www.sstd.com.cn/2224/ Thu, 29 Feb 2024 04:27:33 +0000 http://www.sstd.com.cn/?p=2224 Gungho個性項目屬性描述二次開發的實現過程

 

企業在實施項目管理系統的時候,不通類型的項目其屬性可能是不一樣的。而Gungho標準系統內對項目的屬性,主要包括(項目名稱、編號、開始結束日期等)。為了適應企業個性項目信息的輸入,我們需要通過Mobox平臺定義項目類型去適應這個需求

 

項目類型定義過程

Sa 登錄mobox低代碼開發平臺

進入數據模型(001功能點)創建數據對象

創建一個用于描述項目擴展屬性的數據對象

注意:業務類型必須是 項目

接下來需要做的內容,這里不具體展開

    • 設置數據對象的相關字段屬性
    • 設置數據對象的Gird(列表)
    • 設置數據對象的窗口(界面)
    • 及可能涉及的二次開發

進入項目類型定義(8012功能點)創建項目類型

  • 新建項目類型(基礎)

基礎:主要是綁定哪個數據對象及相關的界面

 

  • 新建項目類型(功能)

功能:主要是可以自定義該類型項目的自定義菜單 (參考下圖)

效果

我們在gungho登錄后,新建項目

]]>
Gungho任務二次開發-任務分類集成3000功能的擴展屬性excel導入 http://www.sstd.com.cn/2176/ Mon, 26 Feb 2024 05:43:40 +0000 http://www.sstd.com.cn/?p=2176 Gungho任務二次開發-任務分類集成3000功能的清單導入

這個是一個標準的導入模板 ,使用前可以通過修改 表名,字段名稱,字段中文名,字段對應賦值變量名稱。

–[[

這個是一個標準的腳本,可以

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 ) then

mobox.error(strLuaDEID, “在檢查樣品技術參數是否存在時失敗! ” .. strRetInfo)

return
end

if (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
end

end
end

 

function
]]>
通過Mobox導入項目清單詳細說明 http://www.sstd.com.cn/1696/ Thu, 30 Nov 2023 03:08:04 +0000 http://www.sstd.com.cn/?p=1696 項目清單導入

 

我們在實施Gungho項目管理系統剛上線的時候,其實用戶手上有很多的歷史項目需要導入進來。而且用戶的項目屬性與我們標準的項目屬性差異很大。為此,我們需要對Gungho的項目數據屬性進行擴延。而這個擴延設置是在Mobox數據平臺來完成的。為此我們需要做2個事情:

給項目設置擴展屬性,用于對用戶需求的適應

需要將企業歷史項目清單一次性導入

 

Mobox低代碼中心的實現過程

  • Mobox數據建模
  • Mobox設置項目類型
  • Mobox編寫項目導入二次開發腳本
  • Mobox增加導入功能點,綁定數據模型及腳本
  • Mobox通過腳本創建Gungho項目后的g _id 寫入到數據對象的 G_PRJ_ID中

 

數據對象建模

因為,我們是為Gungho的項目管理做配套,所以在mobox建立數據模型的時候,有類型需要選擇? ,業務類型必須是 “項目”

項目類型定義(通過 8012 功能點)

目的,定義適用企業個性需求的項目管理功能及界面

  • 基礎

 

  • 功能

根據需求 自定義功能

 

  • 腳本

根據需求,加入對應腳本

 

函數 createProject() 說明

方法一: ?(這個一般在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}’

]]>
Excel數據導入Mobox低代碼平臺 http://www.sstd.com.cn/1686/ Tue, 28 Nov 2023 02:22:55 +0000 http://www.sstd.com.cn/?p=1686 Excel數據導入Mobox低代碼平臺

 

我們系統上線的時候,原先的歷史數據是沒有的,為了快速接軌企業已有數據,我們可以通過excel 對歷史數據進行導入操作。導入一般可以通過腳本做一些定制開發來實現

 

列子:

數據導入的sheet 要求

這個系統只能導入,左邊第一個sheet (命名無所謂)(注意:若數據列表 這個sheet左邊還有隱藏的sheet,那么系統也不能獲取 數據列表sheet頁的數據)

對Excel單元格的要求

單元個里面的數據,只能是字符串或數值。若是計算公式或函數 ,將無法獲取

另外,單元個內容 不能出現 /\<> & 符號,不能有換行或大量空格

分析excel格式

1、字段分3類:

  • 關鍵字段

如,產品名稱 ,這個是必須有數值的

  • 屬性字段

用于登記各種屬性信息

  • 計算字段

若有數據,則直接獲取

若沒有,可以通過lua腳本計算生成

這種字段,一般也是必須有數值的

2、第一行是表頭行,數據行從第二行開始

 

定義導入功能

通過Mobox 3000 功能點進行定義,設置界面如下:

導入腳本,參考:

json? = require(“json”)
mobox = require(“OILua_JavelinExt”)
require(“oi_basestrfunc”)
function ImportKA(strLuaDEID)
? ? local nRet, strRetInfo
? ? — 獲取導入的數據, 返回 [[{“attr”:”xx”,”value”:””},…]]
? ? — V2.0
? ? nRet, strRetInfo = mobox.getCurEditDataPacket(strLuaDEID)
? ? if (nRet ~= 0 or strRetInfo == ”) then
? ? ? ? mobox.error(strLuaDEID, “無法獲取導入數據!”)
? ? ? ? return
? ? end
? ? local input_rows = json.decode(strRetInfo)
? ? local n, nCount, nValue, nMaxRow, nRow
? ? local strAddAttr = ”
? ? — 一些關鍵屬性
? ? local strKAName = ”
? ? local strKAType = ”
? ? local strArea = ”
? ? — 步驟1 獲取從excel導入的一行數據,根據excel的列定義進行屬性組合 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
? ? ? ? ? ? ? ? — 根據導入的excel列頭名稱進行判斷
? ? ? ? ? ? ? ? — 關鍵屬性判斷
? ? ? ? ? ? ? ? if (strAttr == “客戶名稱”) then
? ? ? ? ? ? ? ? ? ? if (strValue == ”) then
? ? ? ? ? ? ? ? ? ? ? ? mobox.error(strLuaDEID, strAttr .. “不能為空!”)
? ? ? ? ? ? ? ? ? ? ? ? return
? ? ? ? ? ? ? ? ? ? end
? ? ? ? ? ? ? ? ? ? strKAName = strValue
? ? ? ? ? ? ? ? ? ? strAddAttr = strAddAttr .. ‘{“attr”:”S_KA_NAME”,”value”:”‘ .. strKAName .. ‘”},’
? ? ? ? ? ? ? ?— 常規屬性
? ? ? ? ? ? ? ? elseif (strAttr == “所屬地區”) 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 根據客戶名稱來判斷導入的客戶是否已經存在
? ? ? ? —? ? ? ?如果已經存在,根據導入的數據進行覆蓋
? ? ? ? —? ? ? ?如果不存在需要創建
? ? ? ? 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
? ? ? ? ? ? — 已經存在,根據導入的數據進行覆蓋
? ? ? ? ? ? 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
? ? ? ? ? ? — 創建客戶
? ? ? ? ? ? –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
? ? ? ? ? ? end
? ? ? ? end
? ? end
end
]]>
低代碼平臺關于數據對象定版后權限控制 http://www.sstd.com.cn/1646/ Wed, 13 Sep 2023 02:15:16 +0000 http://www.sstd.com.cn/?p=1646 在項目實施過程中:Mobox低代碼平臺所需管理的內容,都是通過數據建模而確立的。我們可以將任何一個需要管理的事務抽象為數據對象

數據對象它有生命周期:編輯 -> 審核 -> 定版 -> 報廢? (默認 4個狀態)

我們數據在輸入階段,那么就屬于 “編輯”? ,這個時候可以修改與之相關的屬性及關聯關系。而一定數據對象經過審核 ,進入“定版” 狀態,那么針對這個數據對象就不能修改了

參考下圖:

為實現這個功能設置,Mobox系統需要做如下配置

-》在grid列表定義里面 ,必須有 “S_STATE” 狀態? 這個字段

若這個字段不設置到 grid ,就無法實現第一圖的效果

]]>
主站蜘蛛池模板: h网站在线免费观看| 欧美大黄| 亚洲视频免费在线播放| 国产精品福利电影网| 欧美高清videos高潮hd| 国产高清自拍视频| 黄网站欧美内射| 91av视频| 91免费视频网址| 96视频在线| 深夜免费视频| 性xxxx视频播放免费| 日批视频在线| 天堂色av| 一级在线电影| 久久女人网| 不卡的av电影| 久久精品国产亚洲av成人| 本站只有精品| 麻豆视频网页| 日本a高清| 日韩高清久久| 国内自拍视频在线播放| 丁香花电影高清在线阅读免费| 欧美一卡二卡三卡| 久草国产视频| 手机在线播放av| 九九人人| 国产又黄又粗又猛又爽| 已婚少妇美妙人妻系列| 欧美最猛性xxxx| 182午夜视频| 黄色a级在线观看| 天海翼视频在线观看| 亚洲成人免费在线观看| 免费观看黄色网| 色哟哟在线| 国产tv在线观看| 成人动漫毛片| 岛国激情| 欧美色图国产精品| 欧美精品久久久久久| 久久婷婷伊人| 成年人黄色免费视频| 欧美第十页| 黄色大片免费看| 天天干,天天操| 老司机在线免费视频| 精品久久久久久亚洲综合网站 | 日本成人在线播放| 日本男女网站| 亚洲爱情岛论坛永久| 国产视频不卡| 欧美三级 欧美一级| 日日噜噜夜夜狠狠久久波多野| 先锋影音av资源网站| 欧美极品jizzhd欧美仙踪林| 超碰下载页面| 欧美性猛交ⅹxxx乱大交3| 暖暖免费观看日本版| 成人123| 国产成人精品一区二区| 亚洲精品综合| 一级 黄 色 片69| 午夜视频观看| 欧美激情在线一区| 欧美xxxx网站| 91久久精品一区二区三| 毛片大全免费看| 亚洲精品视频免费在线观看| 欧美一区二区| 久久婷婷av| 免费三片在线播放| 成人综合久久| 性猛交╳xxx乱大交| 欧美高清免费| 亚洲高清自拍| 成人免费毛片果冻| 丝袜黄色片| 亚洲av中文无码乱人伦在线视色| 亚洲九九| 欧美黄色网络| 久久免费视频播放| 99re5| 亚洲久久一区二区| 超碰98在线观看| 久久综合综合| 日韩综合一区二区三区| 夜夜躁狠狠躁日日躁婷婷小说| www.黄色免费| 欧美日韩一区二区区别是什么| 裸体美女免费视频网站| 久久亚洲第一| 男女激情久久| 美女叉开腿| 人妻精品久久一区二区三区| 福利电影一区二区| 亚洲精品社区| 中文字幕一区二区人妻在线不卡| 亚洲精品无码专区| 男女激情大尺度做爰视频| 无码中文av有码中文av| 亚洲综合婷婷| 九七伦理电影| 欧美美女一区| 风流少妇一区二区三区91| 波多野结衣网站| 晨勃顶到尿h1v1| 欧洲一级黄| www.四虎.com| 国产又黄又猛又粗又爽| 波多野结衣一区二区| 欧美69久成人做爰视频| 97色国产| 免费av资源| 特级黄色片免费看| 国产吞精囗交免费视频网站| 欧美另类精品| 日本japanese丰满白浆| 国产剧情精品视频| 特级西西444www大胆免费看| 日本中文字幕在线电影| 97偷拍在线视频| 免费中文字幕视频| 激情亚洲色图| 天天色官网| 久久久www成人免费精品张筱雨| 玖玖爱资源站| 女人扒开屁股让我添| 国产专区一区二区| 欧美一区二区三区四区在线| 天堂网www在线| 成人网在线免费观看| 久久久久久亚洲中文字幕无码| 久久久精品人妻无码专区不卡| 好男人天堂网| 中国黄色三级视频| 尹人香蕉| 操小妹影院| 欧美日韩一区二区视频在线观看 | 日韩欧美麻豆| 久久香蕉影院| xxx日本黄色| 在线免费观看小视频| 91视频免费看片| 91av成人| 日日射av| 日韩欧美字幕| 一区二区三区不卡在线| 玖玖在线观看视频| 青青草网址| 亚洲爱爱av| 操干日| 超碰精品在线观看| 精品视频网站| 俺去俺来也在线www色官网| 尤物精品视频| 麻豆传媒网| the lover| 中文在线字幕免费观看| 成人性生活毛片| 成人性视频网站| 日韩欧美一区二区免费| 泰国午夜理伦三级| 日韩有码第一页| 大尺度做爰无遮挡露器官| 欧美日韩电影在线观看| 欧美日韩六区| 亚洲A∨无码国产精品| 国产又大又黄| 一线毛片| 又猛又大又黄作爱视频| 中文字幕激情视频| 印度成人av在线播放| 中文字幕欧美一区二区| 亚州快播| 美女av网| 97在线视频免费看| 乱中年女人伦| 国产精品一卡二卡| 国产一区二区91| 欧美偷拍第一页| 欧美一级大片免费看| 最新不卡av| 日本老少交| 成人h动漫精品一区| 色婷婷久综合久久一本国产av| 国产手机在线| 日韩欧美精品一区二区| 天天碰天天爽天天摸天天躁| 免费大黄网站| 午夜一区二区三区视频| 日韩 国产 欧美| 91porny在线| 伊伊人成亚洲综合人网7777| 国产在线视频第一页| 男女猛烈无遮挡免费视频| 欧美激情啪啪| 亚洲第一色网| 波多野结衣aⅴ在线| 天天摸天天做| 欧美性大战xxxxx久久久| 永久免费看成人av的动态图| 三级网站视频| 日韩美女啪啪| 欧美精彩视频| 亚洲精品中文在线资源| 欧美高清在线| 丰满大爆乳波霸奶| 久久久久久免费精品| 蜜桃又黄又粗又爽av免| 国产精品综合| 国产91一区在线精品| 精品久久久亚洲| 国产激情毛片| 两口子交换真实刺激高潮| 91精品观看| 亚洲成年人影院| 不卡影院一区二区| 东北露脸少妇456| 免费大片黄在线观看| 牛牛在线视频| 欧美精品aa| 色中文| 德国经典free性复古xxxx| 国产成人精品午夜福利Av免费| 毛片哪里看| 成人免费做受小说| 欧美少妇影院| 手机在线看片你懂的| 成人宗合| 久热av在线| 在线观看的网站| 欧美日韩丝袜| 在线观看1区| www夜色| 涩涩天堂| 日本涩涩网| 人人看人人模| 97成人资源| 美女拍拍拍网站| 欧美成人精品一区二区综合免费 | 特级毛片爽www免费版| 日本大乳奶做爰洗澡三级| 超级砰砰砰97免费观看最新一期| 91视频三级| 五月丁香| 精品国自产拍在线观看| 中文字幕人妻无码系列第三区| 欧美成人自拍视频| 成人性生交视频免费观看| 在线日韩精品视频| 久久久99精品| 97av超碰| 亚洲一级片在线观看| 欧美色图第一页| 亚洲av永久一区二区三区蜜桃| 国产日b视频| 朝桐光一区二区| 午夜视频色| 91av在线免费视频| 91在线精品入口| 一区二区三区午夜| 日本韩国中文字幕| 狠狠干天天射| 久久精品一日日躁夜夜躁| 五月开心网| 国产一二三级| 午夜电影一区二区三区| 性午夜| 国产911在线观看| 日韩五月| 免费极品av一视觉盛宴| 精品久操| 日本一区视频免费看| 久久久久一区二区三区| 狠狠操精品| 久久久久国产精品视频| 美女视频国产| 农村脱精光一级| 一级黄色在线播放| 少妇专区| 黄av网| 888久久| 中文字幕亚洲欧美| www.夜夜骑| 国产一级片一区| 久草女人| 韩国毛片视频| 欧洲亚洲女同hd| 无套在线观看| 久草超碰在线| av操一操| 国产高清视频在线观看| 色一情一乱一伦| 136福利视频导航| 成人午夜视频在线播放| 午夜理伦三级做爰电影| 中文字幕亚洲无线码一区女同| 免费观看黄一级视频| 黄色三级生活片| 超碰午夜| 成人精品视频一区二区| 欧美激情3p| 欧美另类第一页| 一二区在线视频| 久久精品国产一区二区电影| 亚洲美女激情视频| 亚洲精品一区二区在线观看| 91视频在线免费观看| 午夜剧场91| 日韩脚交footjobhd| 深夜福利在线播放| 日本三级吃奶头添泬无码苍井空| 日韩福利在线观看| www.日日操| 青青视频网站| 久久只有这里有精品| 欲色影音| 欧美又粗又大aaa片| 成人av高清在线观看| 99热网| 国产一级在线免费观看| 好爽又高潮了毛片| 欧美日韩在线免费| 国内一级视频| 日韩av手机在线看| 色亭亭| 啪啪激情视频| 91免费视| 美国黄色一级大片| 日韩久久久久久久久久久| 亚洲精品91| 久久精彩| 国产偷自拍| 国产中文在线观看| 波多野结衣在线观看一区| mm131美女久久精品美女图片| 男生和女生一起差差差视频| 久久久久久9| 天堂中文字幕在线观看| 69视频污| 蜜臀在线播放| 国产日产欧美精品| 奇米影视777四色米奇影院| 国产做爰xxxⅹ高潮视频12p| 好看的日韩av| 99久久免费看精品国产一区| 日韩精品一区二区三区视频播放| 羞羞涩| 黄色午夜影院| 超碰在线人人爱| 亚洲二区不卡| 亚洲高清无码久久久| 色播欧美| 依人99| 午夜伦理一区二区三区| 欧美日韩国产免费| 亚州av在线播放| 天堂中文av在线| 精品国产乱码久久久久久久| 日韩久久久久久久久久久| 欧美乱码精品一区二区三区| jizz韩国| 极品91| 亚洲男人天堂| 亚洲精品国产一区二区三区| 久久亚洲精品国产| 成人黄色电影网址| 国产免费毛卡片| 日韩中文字幕| 丰满少妇xoxoxo视频| 中文字幕成人在线视频| 色图插插插| 偷偷色噜狠狠狠狠的777米奇| 海角社区在线视频播放观看| 亚洲视频黄色| 国产大学生视频| 黄色av免费在线看| 黄视频在线观看免费| 日本一道本在线| 亚洲男人的天堂一区二区| 精品国产97| 国产调教打屁股xxxx网站| 91视频影院| 亚洲精品一区二区三区蜜桃| 高h视频在线免费观看| 欧美日韩高清在线| 男女网站视频| 日本黄在线观看| 国产一区无| 精品在线播放| 91资源在线视频| 国产一区二区三区色淫影院| 成人免费视频一区二区| 姝姝窝人体www聚色窝| 色天使在线视频| 精品久操| 天天搞天天| 视频污在线观看| 美女作爱网站| 青青啪啪| 97超碰人人爱| 女生隐私免费看| 天天撸天天操| 操女人网| a极毛片| 亚洲天堂999| 国产爱搞| 国产中文字幕不卡| 亚洲午夜精选| 成年人在线观看视频网站| 永久免费未满视频| 黄色三级小视频| 国产一区在线看| 青青免费视频| 三级在线免费| 欧美一区成人| 中国女人裸体视频| 99这里只有精品| 国产精品xxx在线观看| 波多野结衣视频在线| 日韩视频精品| 久久av免费观看| 久久影视网| 亚洲激情春色| 欧洲一级黄色片| 精品国产av 无码一区二区三区| 亚洲黄色大片| 午夜性色福利视频| av网站免费看| 亚洲综合色网站| 精品欧美一区二区在线观看欧美熟 | 色在线观看视频| 中文字幕永久在线观看| 亚洲日日操| 操伊人| 日本三区在线| 黑人多p混交群体交乱| 亚洲精品久久久| 国产色在线视频| 亚洲国产精品视频在线| 91手机在线观看| 91偷拍网| 亚洲欧美xxxx| xxx孕交体内| av网站中文字幕| 91丨porny丨蝌蚪新疆| 欧亚免费视频| 国产成人av一区二区| 男人和女人做爽爽视频| 啪啪福利视频| 921国产乱码久久久久久| 天天弄| 欧美人伦| 懂色av一区二区三区| 制服丨自拍丨欧美丨动漫丨| 福利视频一二区| 伊人最新网址| 蜜桃av噜噜一区二区三区策驰| 第一页av| 亚洲精品人人| 日本综合伊人| 亚洲一区图片| 欧美黑人精品一区二区| 午夜xxxx| 日韩岛国片| 黄色一机片| 国产的黄色片| 夜夜草av| 偷偷草| 免费欧美黄| 国产一级影片| 欧美激情伊人| 不卡av电影在线播放| 欧美日本免费| 久久999视频| 激情婷婷六月天| 四虎av影院| 欧美性啪啪| 在线免费观看黄色网址| 神马午夜91| 日韩二区三区| 人人射人人舔| 免费看操片| 天天草综合| 在线观看国产欧美| 91视频在线免费观看| 色哟哟在线免费观看| 超薄肉色丝袜一区二区| 欧美区视频| 日韩免费电影一区二区| 美女av在线播放| 99热热热热| 四色成人av永久网址| 欧美成人三级在线| 日韩精品一区二区亚洲av性色| 色www亚洲| 国产夫妻av| 你懂的久久|