--[[
|
创建日期: 2021-9-3
|
创建人: HAN
|
|
功能:
|
一些常用的和数据处理相关 Lua 函数
|
|
函数:
|
|
|
变更记录:
|
|
--]]
|
|
lua = require ("oi_base_func")
|
mobox = require ("OILua_JavelinExt")
|
|
local m3 = {_version = "0.1.1"} -- 定义一个空表,用于存储模块的函数和变量
|
|
-- 把 [{"attr":"a1","value":"xxx"},..] 的json对象转成 {"a1":"xxx","b1":"xxx"}
|
function m3.KeyValueAttrsToObjAttr( attrs )
|
local n, nCount
|
|
if ( type(attrs) ~= "table" ) then error( "KeyValueAttrsToObjAttr的输入参数必须是table" ) end
|
nCount = #attrs
|
local objattr = {}
|
|
if (nCount == 0) then return nil end
|
for n = 1, nCount do
|
if (attrs[n].attr ~= '') then
|
objattr[attrs[n].attr] = attrs[n].value
|
end
|
end
|
return objattr
|
end
|
|
-- 导出数据类标识 = cls_id 条件满足 condition 的数据对象到文件 fn 中,导出的数据集的顺序为 order
|
function m3.OI_DataObject_Export( strLuaDEID, fn, cls_id, condition, order )
|
local nRet, strRetInfo
|
|
if ( fn == nil ) then return 1, "OI_DataObject_Export 中参数 file_io 不能为空" end
|
if ( cls_id == nil or cls_id == '') then return 1, "OI_DataObject_Export 中参数 cls_id不能为空" end
|
if ( condition == nil ) then condition = '' end
|
if ( order == nil ) then order = '' end
|
|
-- 获取数据对象数量大于1000因此采用 queryDataObjAttr2
|
nRet, strRetInfo = mobox.queryDataObjAttr2( strLuaDEID, cls_id, condition, order, 100 )
|
if ( nRet ~= 0 ) then return 2, "queryDataObjAttr2: "..strRetInfo end
|
if ( strRetInfo == '' ) then return 0 end
|
|
local success, queryInfo
|
success, queryInfo = pcall( json.decode, strRetInfo )
|
if ( success == false ) then return 2, "queryDataObjAttr2 返回非法的JSON字符串!" end
|
|
local queryID = queryInfo.queryID
|
local nPageCount = queryInfo.pageCount
|
local nPage = 1
|
local dataSet = queryInfo.dataSet -- 查询出来的数据集
|
local data_obj_json = {}
|
|
while (nPage <= nPageCount) do
|
|
for i = 1, #dataSet do
|
obj_attrs = m3.KeyValueAttrsToObjAttr(dataSet[i].attrs)
|
obj_attrs.cls_id = cls_id
|
obj_attrs.obj_id = dataSet[i].id
|
fn:write( lua.table2str(obj_attrs).."\n" )
|
end
|
|
nPage = nPage + 1
|
if ( nPage <= nPageCount ) then
|
-- 取下一页
|
nRet, strRetInfo = mobox.queryDataObjAttr2( queryID, nPage)
|
if ( nRet ~= 0 ) then
|
return 2, "queryDataObjAttr2失败! nPage="..nPage.." "..strRetInfo
|
end
|
queryInfo = json.decode(strRetInfo)
|
dataSet = queryInfo.dataSet
|
end
|
end
|
return 0
|
end
|
|
-- 导入用 OI_DataObject_Export 导出的数据
|
function m3.OI_DataObject_Import( strLuaDEID, import_file )
|
local nRet, strRetInfo
|
|
if ( import_file == nil or import_file == '') then
|
return 1, "导入文件名不能为空!"
|
end
|
|
local str_line
|
local success, data_attrs_json
|
local data_obj = {}
|
local n = 1
|
for str_line in io.lines( import_file ) do
|
if ( str_line ~= nil and str_line ~= '' ) then
|
success, data_attrs_json = pcall( json.decode, str_line )
|
if ( success == false ) then return 2, "导入的数据文件格式不是 DataObject 类型!" end
|
if ( data_attrs_json.cls_id == nil or data_attrs_json.cls_id == '' ) then
|
return 2, "导入的数据文件格式不是 DataObject 类型!"
|
end
|
|
data_obj = mobox.objJsonToObjAttr( data_attrs_json.cls_id, lua.table2str( data_attrs ))
|
nRet, strRetInfo = mobox.createDataObj( strLuaDEID, data_attrs_json.cls_id, data_obj, 0 )
|
if ( nRet ~= 0 ) then
|
lua.Debug( strLuaDEID, debug.getinfo(1), "OI_DataObject_Import lua.Error In Line"..n )
|
return 2, "创建'"..data_attrs_json.cls_id.."'时失败! "..strRetInfo
|
end
|
n = n + 1
|
end
|
end
|
end
|
|
-- 获取当前Lua环境中的DataJson,并且转换成Json对象
|
function m3.GetSysDataJson( strLuaDEID )
|
local nRet, strDataJson
|
|
nRet, strDataJson = mobox.getCurEditDataPacket( strLuaDEID )
|
if ( nRet ~=0 ) then
|
return nRet, "无法获取Lua数据包!"
|
end
|
if ( strDataJson == '' ) then
|
return 2, "Lua数据包为空!"
|
end
|
local jsonObj, success
|
success, jsonObj = pcall( json.decode, strDataJson)
|
if ( success == false ) then
|
return 2, "Lua数据包的JSON格式非法! 原因:"..jsonObj..' --> '..strDataJson
|
end
|
return 0, jsonObj
|
end
|
|
-- 获取当前Lua环境中的全局变量,并且转换成Json对象
|
function m3.GetSysGloablAttr( strLuaDEID )
|
local nRet, strGlobalAttr
|
nRet, strGlobalAttr = mobox.getGlobalAttr2( strLuaDEID )
|
if ( nRet ~=0 ) then return 2, "无法获取Lua中的全局变量!" end
|
if ( strGlobalAttr == '' ) then return 0, "" end
|
local global_attr, success
|
success, global_attr = pcall( json.decode, strGlobalAttr)
|
if ( success == false ) then return 2, "Lua数据包的JSON格式非法! 原因:"..global_attr..' --> '..strDataJson end
|
return 0, global_attr
|
end
|
|
-- 获取外部输入的参数,并且把参数转化成 [{"attr":"a1","value":"xxx"},..]的json对象
|
-- 注意返回的是Json对象
|
function m3.GetSysInputParameter( strLuaDEID )
|
local nRet, strRetInfo
|
nRet, strRetInfo = mobox.getInputParameter2(strLuaDEID)
|
if (nRet ~= 0) then
|
return nRet, "getInputParameter2 失败!"
|
end
|
if ( strRetInfo == '') then return 0, "" end
|
local attrs, success
|
success, attrs = pcall( json.decode, strRetInfo )
|
if ( success == false ) then
|
return nRet, "外部输入参数的Json格式非法!"..strRetInfo
|
end
|
return 0, attrs
|
end
|
|
-- 获取当前运行环境参数
|
function m3.GetRuntimeParam( strLuaDEID )
|
local nRet, strRetInfo
|
|
nRet, strRetInfo = mobox.getCurEditExtInfo(strLuaDEID)
|
if (nRet ~= 0) then
|
return nRet, "getCurEditExtInfo 失败!"
|
end
|
if ( strRetInfo == '') then return 0, "" end
|
local attrs, success
|
success, attrs = pcall( json.decode, strRetInfo )
|
if ( success == false ) then
|
return nRet, "运行环境参数的Json格式非法!"..strRetInfo
|
end
|
return 0, attrs
|
end
|
|
-- 获取当前运行环境参数中的面板输入参数
|
-- 根据运行时环境参数中的 panel 属性,获取名为 XX 的面板的输入长胡是
|
-- 返回 1 表示不存在,2 表示错误
|
function m3.GetRuntimePanel_InputParamter( strLuaDEID, panel, panel_name )
|
local nRet, strRetInfo
|
|
if ( panel == nil or type(panel) ~= "table" ) then
|
return 2, "GetRuntimePanel_InputParamter 函数的输入参数错误, panel 必须有值而且必须是 table 对象!"
|
end
|
|
if ( panel_name == nil or type(panel_name) ~= "string" ) then
|
return 2, "GetRuntimePanel_InputParamter 函数的输入参数错误, panel_name 必须有值而且必须是字符串!"
|
end
|
local n
|
|
for n = 1, #panel do
|
if ( panel[n].panel_name == panel_name ) then
|
return 0, panel[n].input_parameter
|
end
|
end
|
return 1, "运行时环境参数中不存在名为 '"..panel_name.."'的面板输入参数!"
|
end
|
|
|
-- 获取外部输入的参数参数格式是某个数据类的属性键值对 [{"attr":"a1","value":"xxx"},..]
|
-- 直接转成Lua对象
|
function m3.SysInputParamToDataObj( strLuaDEID, strClsID )
|
local nRet, strRetInfo
|
|
if ( strClsID == nil or strClsID == '' ) then return 1, "SysInputParamToLuaObj 函数中 strClsID 不能为空或nil!" end
|
|
nRet, strRetInfo = mobox.getInputParameter2(strLuaDEID)
|
if (nRet ~= 0) then return 1, "getInputParameter2 失败!" end
|
-- 把 [{"attr":"xxx","value":""},...] 转换成 json object
|
local strObjJson
|
nRet, strObjJson = mobox.objAttrsToLuaJson( strClsID, strRetInfo )
|
if ( nRet ~= 0 ) then return 1, "objAttrsToLuaJson 转 "..strClsID.." 失败! "..strObjJson end
|
local success
|
local luaObj
|
success, luaObj = pcall( json.decode, strObjJson )
|
if ( success == false ) then return 1, "objAttrsToLuaJson 转 "..strClsID.." 返回的的JSON格式不合法 !"..luaObj end
|
|
return 0, luaObj
|
end
|
|
|
-- 如果 attrs 是多表联查返回的,一般属性上会带 a. 如 a.S_ITEM_CODE
|
-- 通过这个函数会转成 {a_S_ITEM_CODE ="xxx"}
|
function m3.KeyValueAttrsToObjAttr2( attrs )
|
local n, nCount
|
|
if ( type(attrs) ~= "table" ) then error( "KeyValueAttrsToObjAttr的输入参数必须是table" ) end
|
nCount = #attrs
|
local objattr = {}
|
local attr
|
|
if (nCount == 0) then return nil end
|
for n = 1, nCount do
|
if (attrs[n].attr ~= '') then
|
attr = attrs[n].attr
|
attr = string.gsub( attr,"%.","_")
|
objattr[attr] = attrs[n].value
|
end
|
end
|
return objattr
|
end
|
|
-- 获取当前Lua数据交换区里的当前编辑对象属性,并且把参数转化成 [{"attr":"a1","value":"xxx"},..]一个table
|
-- 如:{"a1":xxx,"b1":"xxx"}
|
function m3.GetSysCurEditDataAttrs(strLuaDEID)
|
local nRet, strRetInfo
|
|
nRet, strRetInfo = mobox.getCurEditDataObjAttr(strLuaDEID)
|
if (nRet ~= 0 ) then
|
return nRet, "getCurEditDataObjAttr 失败! "
|
end
|
if ( strRetInfo == '') then
|
return nRet, "当前编辑数据对象属性为空!"
|
end
|
local attrs, success
|
success, attrs = pcall( json.decode, strRetInfo )
|
if ( success == false ) then
|
return nRet, "当前编辑数据对象属性的Json格式非法!"..strRetInfo
|
end
|
local obj_attrs = m3.KeyValueAttrsToObjAttr(attrs)
|
|
return 0, obj_attrs
|
end
|
|
-- 获取当前Lua数据交换区里的当前编辑对象属性中的一个名为 attr_name 的属性值,返回一个字符串值
|
function m3.GetSysCurEditDataOneAttr(strLuaDEID, attr_name )
|
local nRet, strRetInfo
|
nRet, strRetInfo = mobox.getCurEditDataObjAttr( strLuaDEID, attr_name )
|
if (nRet ~= 0 or strRetInfo == '') then return 2, "无法获取当前编辑对象中的名为'"..attr_name.."'的值!" end
|
local retAttrs = json.decode(strRetInfo)
|
return 0, retAttrs[1].value
|
end
|
|
-- 获取当前Lua数据交换区里的当前编辑对象属性,并且把参数转化成 Json 对象
|
-- 注意返回的是Json对象
|
function m3.GetSysCurEditDataObj( strLuaDEID, strClsID )
|
local nRet, strRetInfo, strErr
|
|
strErr = ''
|
strClsID = lua.trim(strClsID)
|
|
nRet, strRetInfo = mobox.getCurEditDataObjAttr( strLuaDEID )
|
if ( nRet ~= 0 or strRetInfo == '') then
|
strErr = "getCurEditDataObjID 失败!"..strRetInfo
|
return 2, strErr
|
end
|
local strObjJson
|
nRet, strObjJson = mobox.objAttrsToLuaJson( strClsID, strRetInfo )
|
if ( nRet ~= 0 ) then
|
strErr = "objAttrsToLuaJson 失败! 数据类标识 = "..strClsID.." 原因:"..strObjJson
|
return 2, strErr
|
end
|
|
local obj, success
|
success, obj = pcall( json.decode, strObjJson )
|
if ( success == false ) then
|
strErr = "objAttrsToLuaJson 返回的的JSON格式不合法 ! 数据类标识 = "..strClsID.." 原因:"..obj
|
return 2, strErr
|
end
|
|
local strClsID, strObjID
|
nRet, strClsID, strObjID = mobox.getCurEditDataObjID( strLuaDEID )
|
if ( nRet == 0 ) then
|
obj.id = strObjID
|
obj.cls = strClsID
|
end
|
|
return 0, obj
|
end
|
|
-- 获取当前Lua数据交换区里的当前编辑对象属性在变化前的属性,并且把参数转化成 Json 对象
|
-- 注意返回的是Json对象
|
function m3.GetSysCurEditOldDataObj( strLuaDEID, strClsID )
|
local nRet, strRetInfo, strErr
|
|
strErr = ''
|
strClsID = lua.trim(strClsID)
|
|
nRet, strRetInfo = mobox.getCurEditOldDataObjAttr( strLuaDEID )
|
if ( nRet ~= 0 or strRetInfo == '') then
|
strErr = "getCurEditDataObjID 失败!"..strRetInfo
|
return 2, strErr
|
end
|
local strObjJson
|
nRet, strObjJson = mobox.objAttrsToLuaJson( strClsID, strRetInfo )
|
if ( nRet ~= 0 ) then
|
strErr = "objAttrsToLuaJson 失败! 数据类标识 = "..strClsID.." 原因:"..strObjJson
|
return 2, strErr
|
end
|
|
local obj, success
|
success, obj = pcall( json.decode, strObjJson )
|
if ( success == false ) then
|
strErr = "objAttrsToLuaJson 返回的的JSON格式不合法 ! 数据类标识 = "..strClsID.." 原因:"..obj
|
return 2, strErr
|
end
|
|
return 0, obj
|
end
|
|
-- 获取当前登录人员所属单位标识/编码
|
function m3.GetMyFactory( strLuaDEID )
|
local strUserLogin, strUserName, nRet
|
nRet, strUserLogin, strUserName = mobox.getCurUserInfo( strLuaDEID )
|
if ( nRet ~= 0 ) then return 2, "获取当前操作人员信息失败! "..strUserLogin end
|
-- 获取当前操作人员的单位编码,作为工厂标识
|
nRet, strRetInfo = mobox.getUserSectionUnit( strUserLogin )
|
if ( nRet ~= 0 ) then return 2, "获取当前操作人员所属单位失败! "..strRetInfo end
|
local factory = ''
|
if ( strRetInfo ~= '' ) then
|
local orgInfo = json.decode( strRetInfo )
|
factory = orgInfo.company_code
|
end
|
return 0, factory
|
end
|
|
-- 分配一个数据类对象,属性为缺省值
|
function m3.AllocObject( strLuaDEID, strClsID )
|
local nRet, strJson
|
|
strClsID = lua.trim(strClsID)
|
nRet, strJson = mobox.allocObject(strClsID)
|
if (nRet ~= 0 ) then
|
lua.Error( strLuaDEID, debug.getinfo(1), "allocObject失败:"..strJson )
|
end
|
|
local object, success
|
success, object = pcall( json.decode, strJson )
|
if ( success == false ) then
|
lua.Error( strLuaDEID, debug.getinfo(1), "allocObject("..strClsID..") 返回的的JSON格式不合法!" )
|
end
|
return object
|
end
|
|
--[[
|
查询数据对象
|
参数:
|
strClsID 数据类标识
|
strCondition 查询条件
|
[strOrder] 排序,可以不输入
|
返回2个参数
|
第一个参数:非零表示错误,0 表示成功
|
第二个参数:如果第一个参数是非零,第二个参数是错误信息
|
否则,第二个参数的是一个数据对象数组
|
[{"id":"","attrs":[{"attr":"S_CODE","value":""},...]}]
|
|
--]]
|
function m3.QueryDataObject( strLuaDEID, strClsID, strCondition, strOrder )
|
local nRet, strRetInfo
|
-- 参数检查
|
if ( strClsID == nil or strClsID == '' ) then
|
return 1, "QueryDataObject 中 strClsID 不能为空!"
|
end
|
if ( strCondition == nil ) then strCondition = "" end
|
if ( strOrder == nil ) then strOrder = '' end
|
|
nRet, strRetInfo = mobox.queryDataObjAttr(strLuaDEID, strClsID, strCondition, strOrder)
|
if ( nRet ~= 0 ) then
|
return nRet, "queryDataObjAttr 发生错误!"..strRetInfo
|
end
|
|
if ( strRetInfo == '' ) then return 0, "" end
|
|
local objects, success
|
success, objects = pcall( json.decode, strRetInfo )
|
if ( success == false ) then
|
return 2, "queryDataObjAttr 返回的的JSON格式不合法!"
|
end
|
return 0, objects
|
end
|
|
--[[
|
查询数据对象
|
参数:
|
strClsID 数据类标识
|
strCondition 查询条件
|
[strOrder] 排序,可以不输入
|
[count] 查询记录条数,默认1000
|
|
返回2个参数
|
第一个参数:非零表示错误,0 表示成功
|
第二个参数:如果第一个参数是非零,第二个参数是错误信息
|
否则,第二个参数的是一个数据对象数组
|
[{"id":"","attrs":[{"attr":"S_CODE","value":""},...]}]
|
|
--]]
|
function m3.QueryDataObject3( strLuaDEID, strClsID, strCondition, strOrder, count )
|
local nRet, strRetInfo
|
-- 参数检查
|
if ( strClsID == nil or strClsID == '' ) then
|
return 1, "QueryDataObject 中 strClsID 不能为空!"
|
end
|
if ( strCondition == nil or strCondition == '' ) then
|
return 1, "QueryDataObject 中 strCondition 不能为空!"
|
end
|
if ( strOrder == nil ) then strOrder = '' end
|
if ( count == nil or count <= 0 ) then count = 1000 end
|
|
nRet, strRetInfo = mobox.queryDataObjAttr3(strLuaDEID, strClsID, strCondition, count, strOrder)
|
if ( nRet ~= 0 ) then
|
return nRet, "queryDataObjAttr3 发生错误!"..strRetInfo
|
end
|
|
if ( strRetInfo == '' ) then return 0, "" end
|
|
local objects, success
|
success, objects = pcall( json.decode, strRetInfo )
|
if ( success == false ) then
|
return 2, "queryDataObjAttr3 返回的的JSON格式不合法!"
|
end
|
return 0, objects
|
end
|
|
--[[
|
获取对象属性,返回数据类定义的Lua属性
|
返回 1 表示不存在
|
--]]
|
function m3.GetDataObjectByKey( strLuaDEID, cls_id, key_attr, key_value )
|
-- 参数检查
|
if ( cls_id == nil or cls_id == '' ) then
|
return 2, "GetDataObjectByKey 中 cls_id 不能为空!"
|
end
|
if ( key_attr == nil or key_attr == '' ) then
|
return 2, "GetDataObjectByKey 中 key_attr 不能为空!"
|
end
|
if ( key_value == nil or key_value == '' ) then
|
return 2, "GetDataObjectByKey 中 key_value 不能为空!"
|
end
|
|
local nRet, strRetInfo, id
|
local strCondition = key_attr.." = '"..key_value.."'"
|
nRet, id, strRetInfo = mobox.getDataObjAttrByKeyAttr( strLuaDEID, cls_id, strCondition )
|
|
if ( nRet == 1 ) then
|
return 1, key_attr.."='"..key_value.."'的"..cls_id.."不存在!"
|
end
|
if ( nRet ~= 0 ) then
|
return 2, "getDataObjAttrByKeyAttr 发生错误!"..id
|
end
|
|
local strJson
|
nRet, strJson = mobox.objAttrsToLuaJson( cls_id, strRetInfo )
|
if ( nRet ~= 0 ) then
|
return 2, "objAttrsToLuaJson Supplier 失败!"..strJson
|
end
|
|
local object, success
|
success, object = pcall( json.decode, strJson )
|
if ( success == false ) then
|
return 2, "objAttrsToLuaJson 返回的的JSON格式不合法!"
|
end
|
object.id = id
|
object.cls = cls_id
|
return 0, object
|
end
|
|
--[[
|
根据数据类标识和数据对象标识获取对象属性,返回数据类定义的Lua属性
|
|
返回值:
|
nRet 0 正确 1 对象不存在 > 1 错误
|
object
|
--]]
|
function m3.GetDataObject( strLuaDEID, cls_id, obj_id )
|
|
-- 参数检查
|
if ( cls_id == nil or cls_id == '' ) then
|
return 1, "GetDataObjInfo 中 cls_id 不能为空!"
|
end
|
if ( obj_id == nil or obj_id == '' ) then
|
return 1, "GetDataObjInfo 中 obj_id 不能为空!"
|
end
|
|
local nRet, strRetInfo
|
nRet, strRetInfo = mobox.getDataObjAttr( strLuaDEID, cls_id, obj_id )
|
|
if ( nRet == 1 ) then
|
return 1, "ID ='"..obj_id.."'的"..cls_id.."对象不存在!"
|
end
|
if ( nRet ~= 0 ) then
|
return 2, "getDataObjAttr 发生错误!"..id
|
end
|
|
local strJson
|
nRet, strJson = mobox.objAttrsToLuaJson( cls_id, strRetInfo )
|
if ( nRet ~= 0 ) then
|
return 2, "objAttrsToLuaJson Supplier 失败!"..strRetInfo
|
end
|
|
local object, success
|
success, object = pcall( json.decode, strJson )
|
if ( success == false ) then
|
error( "objAttrsToLuaJson 返回的的JSON格式不合法!" )
|
end
|
object.id = obj_id
|
object.cls = cls_id
|
return 0, object
|
end
|
|
--[[
|
根据数据类标识和数据对象标识+数据对象属性设置数据库数据记录
|
|
返回值:
|
nRet 0 正确 1 对象不存在 > 1 错误
|
object
|
--]]
|
function m3.SetDataObject( strLuaDEID, data_obj )
|
local nRet, strRetInfo
|
|
if ( data_obj == nil or type(data_obj) ~= "table" ) then
|
return 1, "SetDataObject 函数中的 data_obj 必须有值,必须是table类型!"
|
end
|
-- 参数检查
|
if ( data_obj.cls == nil or data_obj.cls == '' ) then
|
return 1, "SetDataObject 中 data_obj 类型非法!"
|
end
|
if ( data_obj.id == nil or data_obj.id == '' ) then
|
return 1, "SetDataObject 中 data_obj 类型非法!"
|
end
|
local strAttrs
|
nRet, strAttrs = mobox.luaJsonToObjAttrs( data_obj.cls, lua.table2str(data_obj))
|
if ( nRet ~= 0 ) then return nRet, strAttrs end
|
|
nRet, strRetInfo = mobox.setDataObjAttr( strLuaDEID, data_obj.cls, data_obj.id, strAttrs )
|
if ( nRet ~= 0 ) then
|
return 2, "setDataObjAttr 发生错误!"..strRetInfo
|
end
|
|
return 0
|
end
|
|
--[[
|
根据查询条件获取一条对象属性,返回数据类定义的Lua属性
|
--]]
|
function m3.GetDataObjByCondition( strLuaDEID, cls_id, strCondition, strOrder )
|
-- 参数检查
|
if ( cls_id == nil or cls_id == '' ) then
|
return 2, "GetDataObjByCondition 中 cls_id 不能为空!"
|
end
|
if ( strCondition == nil or strCondition == '' ) then
|
return 2, "GetDataObjByCondition 中 strCondition 不能为空!"
|
end
|
if ( strOrder == nil ) then strOrder = '' end
|
|
local nRet, strRetInfo, id
|
nRet, strRetInfo = mobox.queryOneDataObjAttr2( strLuaDEID, cls_id, strCondition, strOrder )
|
if ( nRet ~= 0 ) then return 2, "GetDataObjByCondition 发生错误!"..strRetInfo end
|
if ( strRetInfo == '' ) then
|
return 1, "条件:"..strCondition.."的"..cls_id.."不存在!"
|
end
|
local ret_info, success
|
success, ret_info = pcall( json.decode, strRetInfo )
|
if ( success == false ) then return 2, "queryOneDataObjAttr 返回的的JSON格式不合法!" end
|
|
local strJson
|
nRet, strJson = mobox.objAttrsToLuaJson( cls_id, lua.table2str(ret_info.attrs) )
|
if ( nRet ~= 0 ) then return 2, "objAttrsToLuaJson Supplier 失败!"..strRetInfo end
|
|
local object
|
success, object = pcall( json.decode, strJson )
|
if ( success == false ) then
|
return 2, "objAttrsToLuaJson 返回的的JSON格式不合法!"
|
end
|
object.id = ret_info.id
|
object.cls = cls_id
|
return 0, object
|
end
|
|
-- 创建一个数据对象 update_exist = 0/1 1-- 表示如果创建时对象已经存在就覆盖
|
-- 返回 dataobj Json 对象
|
function m3.CreateDataObj( strLuaDEID, dataObj, update_exist )
|
local nRet, strRetInfo
|
|
if ( update_exist == nil ) then update_exist = 0 end
|
if ( dataObj == nil or dataObj.cls == nil or dataObj.cls == '' ) then
|
return 2, "AddDataObj 中的dataObj不是一个mobox数据对象!"
|
end
|
|
local attrs
|
nRet, attrs = mobox.luaJsonToObjAttrs(dataObj.cls, lua.table2str(dataObj))
|
if ( nRet ~= 0 ) then
|
return 2, 'luaJsonToObjAttrs时失败! 数据类标识 = '..dataObj.cls..' 原因:'..attrs.." dataobj = "..lua.table2str(dataObj)
|
end
|
|
nRet, strRetInfo = mobox.createDataObj( strLuaDEID, dataObj.cls, attrs, 1, update_exist ) -- 返回的是Lua attr
|
if ( nRet ~= 0 ) then
|
strRetInfo = string.gsub(strRetInfo, "\n", "")
|
strRetInfo = string.gsub(strRetInfo, "\r", "")
|
return nRet, 'createDataObj失败! 数据类标识 = '..dataObj.cls..' 原因:'..strRetInfo
|
end
|
|
local retInfo, success
|
success, retInfo = pcall( json.decode, strRetInfo )
|
if ( success == false ) then
|
return 2, "createDataObj 返回的的JSON格式不合法!"..strRetInfo
|
end
|
|
local strClsID = dataObj.cls
|
|
dataObj = retInfo.lua_attr
|
dataObj.id = retInfo.id
|
dataObj.cls = strClsID
|
|
return 0, dataObj
|
end
|
|
-- 把一个[{"attr": "XXXX", "value": "XXXX" }, … ]字符串转成一个 json对象
|
-- {"item_code":"xxx","item_name":"xxx",...}
|
function m3.ObjAttrStrToLuaObj( strClsID, strAttrs )
|
local nRet, strRetInfo
|
if ( type(strAttrs) == "table" ) then
|
strAttrs = lua.table2str( strAttrs )
|
end
|
nRet, strRetInfo = mobox.objAttrsToLuaJson( strClsID, strAttrs )
|
if ( nRet ~= 0 ) then
|
return 2, "objAttrsToLuaJson Operation 失败!"..strRetInfo
|
end
|
|
local object, success
|
success, object = pcall( json.decode, strRetInfo )
|
if ( success == false ) then
|
return 2, "objAttrsToLuaJson('Operation') 返回的的JSON格式不合法!"
|
end
|
return 0, object
|
end
|
|
--[[
|
是否存在关键字段=XX的数据对象,适合判断KEY是单个的数据类
|
如期KeyAttr必须是字符串类型
|
返回:nRet, false/true
|
]]
|
function m3.ExistThisDataObject( strLuaDEID, strClsID, strKeyAttr, strKeyValue )
|
local strCondition, nRet, strRetInfo
|
|
if ( strClsID == nil or strClsID == '' ) then return 1, "ExistThisDataObject 函数 strClsID 必须有值" end
|
if ( strKeyAttr == nil or strKeyAttr == '' ) then return 1, "ExistThisDataObject 函数 strKeyAttr 必须有值" end
|
if ( strKeyValue == nil or strKeyValue == '' ) then return 1, "ExistThisDataObject 函数 strKeyValue 必须有值" end
|
|
strCondition = strKeyAttr.." = '"..strKeyValue.."'"
|
nRet, strRetInfo = mobox.existThisData( strLuaDEID, strClsID, strCondition )
|
if ( nRet ~= 0 ) then return 2, "existThisData 函数失败!"..strRetInfo end
|
|
if ( strRetInfo == 'no') then return 0, false end
|
return 0, true
|
end
|
|
-- 新增一个后台处理脚本
|
--[[
|
paramter 参数是一个json包
|
{
|
"wfp_type":1,2
|
"datajson":{...}
|
"cls":"数据类标识或名称"
|
"obj_id":""
|
"obj_name":""
|
"trigger_type":0\1\2\3
|
"trigger_time":"2024-6-10 8:20:10"
|
"trigger_event":"xxx"
|
'wfp_name':""
|
}
|
如果:wfp_type = 1 cls + obj_id 均有值 触发数据对象的事件,如果 obj_id 没值,触发数据类事件
|
]]
|
function m3.AddSysWFP( strLuaDEID, paramter )
|
local nRet, strRetInfo
|
local wfp_list_show_name = ''
|
local cls = paramter.cls
|
local id = paramter.obj_id
|
local obj_display_name = paramter.obj_name
|
local trigger_time = paramter.trigger_time
|
local trigger_event = ""
|
local trigger_type = paramter.trigger_type
|
local strDataJson = ''
|
|
if ( paramter.datajson == nil ) then
|
strDataJson = ''
|
elseif (type(paramter.datajson) ~= "table" ) then
|
strDataJson = paramter.datajson
|
else
|
strDataJson = lua.table2str( paramter.datajson )
|
end
|
|
if (trigger_type == nil ) then trigger_type = 0 end
|
if (strDataJson == nil ) then strDataJson = '' end
|
if (obj_display_name == nil ) then obj_display_name = '' end
|
if (trigger_time == nil ) then trigger_time = '' end
|
if (id == nil ) then id = '' end
|
if (paramter.wfp_type == nil ) then
|
paramter.wfp_type = 1
|
end
|
|
if ( paramter.wfp_type == 1) then
|
-- 触发数据类事件
|
if ( paramter.cls == nil or paramter.cls == '') then
|
return 1, "AddSysWFP 参数paramter缺少cls属性!"
|
end
|
if ( paramter.trigger_event == nil or paramter.trigger_event == '') then
|
return 1, "AddSysWFP 参数paramter缺少trigger_event属性!"
|
end
|
trigger_event = paramter.trigger_event
|
if ( obj_display_name == '' ) then
|
wfp_list_show_name = "触发数据类'"..paramter.cls.."'对象事件'"..paramter.trigger_event.."'"
|
else
|
wfp_list_show_name = obj_display_name
|
end
|
elseif ( paramter.wfp_type == 2 ) then
|
-- 触发Zone、Zon_Cls
|
wfp_list_show_name = "触发数据类'"..paramter.cls.."'对象事件'"..paramter.trigger_event.."'"
|
if ( paramter.wfp_name == nil or paramter.wfp_name == '') then
|
wfp_list_show_name = paramter.wfp_name
|
end
|
if ( paramter.obj_id == nil or paramter.obj_id == '') then
|
return 1, "AddSysWFP 参数paramter缺少obj_id属性!"
|
end
|
if ( paramter.cls == nil or paramter.cls == '') then
|
return 1, "AddSysWFP 参数paramter缺少cls属性!"
|
end
|
if ( paramter.trigger_event == nil or paramter.trigger_event == '') then
|
return 1, "AddSysWFP 参数paramter缺少trigger_event属性!"
|
end
|
trigger_event = paramter.trigger_event
|
elseif ( paramter.wfp_type == 0 ) then
|
if (strDataJson == '') then
|
return 1, "AddSysWFP 参数paramter缺少 datajson 属性!"
|
end
|
else
|
return 1, "AddSysWFP 参数paramter中的wfp_type属性值不正确只能是0,1,2!"
|
end
|
|
nRet, strRetInfo = mobox.addSysWFP( strLuaDEID, paramter.wfp_type, strDataJson, cls, id,
|
obj_display_name, trigger_type,
|
trigger_time,
|
trigger_event,
|
wfp_list_show_name, "", 0 )
|
if (nRet ~= 0 ) then return 1, "addSysWFP 失败!"..strRetInfo end
|
|
return 0
|
end
|
|
--[[ 动态可编程接口返回函数
|
err_code = 0 表示接口成功
|
err_msg -- 接口Lua返回给调用方的错误信息
|
]]
|
function m3.EPI_Return( strLuaDEID, json_return_value )
|
mobox.returnValue( strLuaDEID, 1, lua.table2str(json_return_value) )
|
end
|
|
-- 获取当前编辑对象属性和ID
|
function m3.GetCurEditDataObj( strLuaDEID )
|
local nRet, data_obj
|
local strClsID, strObjID
|
nRet, strClsID, strObjID = mobox.getCurEditDataObjID( strLuaDEID )
|
if ( nRet ~= 0 ) then return 2, "getCurEditDataObjID失败! "..strClsID end
|
|
nRet, data_obj = m3.GetSysCurEditDataObj( strLuaDEID, strClsID )
|
if (nRet ~= 0) then return 2, "获取【'"..strClsID.."'】对象属性失败!"..data_obj end
|
return 0, data_obj
|
end
|
|
-- 获取Lua数据交换区所有参数,用于Lua lua.Debug
|
function m3.PrintLuaDEInfo( strLuaDEID )
|
local nRet, obj_attr, data_json, runtime, input_paramter, global_attr
|
local strClsID, strObjID
|
|
nRet, strClsID, strObjID = mobox.getCurEditDataObjID( strLuaDEID )
|
if ( nRet ~= 0 ) then
|
strClsID = ''
|
strObjID = ''
|
end
|
|
obj_attr = {}
|
if ( strObjID ~= '' and strObjID ~= nil ) then
|
nRet, obj_attr = m3.GetSysCurEditDataAttrs( strLuaDEID )
|
if (nRet ~= 0) then return 2, "获取【'"..strClsID.."'】对象属性失败!"..obj_attr end
|
elseif ( strClsID ~= '' ) then
|
nRet, obj_attr = m3.GetSysCurEditDataAttrs(strLuaDEID)
|
if (nRet ~= 0) then return 2, "获取正在编辑的【'"..strClsID.."'】对象属性失败!"..obj_attr end
|
end
|
|
local lua_ed = {
|
cls_id = strClsID,
|
obj_id = strObjID,
|
obj_attr = obj_attr,
|
data_json = {},
|
ext_info = {},
|
global_attr = {},
|
input_param = {}
|
}
|
|
nRet, lua_ed.data_json = mobox.getCurEditDataPacket( strLuaDEID )
|
if ( nRet ~= 0 ) then
|
lua_ed.data_json = {}
|
end
|
nRet, global_attr = m3.GetSysGloablAttr( strLuaDEID )
|
if ( nRet == 0 ) then
|
lua_ed.global_attr = global_attr
|
end
|
nRet, input_paramter = m3.GetSysInputParameter( strLuaDEID )
|
if ( nRet == 0 ) then
|
lua_ed.input_param = input_paramter
|
end
|
nRet, runtime = m3.GetRuntimeParam( strLuaDEID )
|
if ( nRet == 0 ) then
|
lua_ed.ext_info = runtime
|
end
|
|
lua.Debug( strLuaDEID, debug.getinfo(1), "Lua脚本数据交换区内容-->", lua_ed )
|
end
|
|
-- 从内存获取数据对象属性
|
function m3.GetDataFromCache( cls_id, key )
|
local nRet, strRetInfo
|
|
if ( lua.StrIsEmpty( cls_id ) ) then return 1, "函数 GetDataFromCache 中 cls_id 必须要有值!" end
|
if ( lua.StrIsEmpty( key ) ) then return 1, "函数 GetDataFromCache 中 key 必须要有值!" end
|
|
nRet, strRetInfo = mobox.getMemoryDataObjInfo( cls_id, key )
|
if ( nRet ~= 0 ) then return 2, strRetInfo end
|
if ( strRetInfo == '' ) then
|
return 1, " 数据类标识 '"..cls_id.."' 的缓存中不存在 key = '"..key.."'的数据对象!"
|
end
|
local success, data
|
success, data = pcall( json.decode, strRetInfo )
|
if ( success == false ) then return 2, "getMemoryDataObjInfo 返回非法的JSON字符串!" end
|
return 0, data
|
end
|
return m3
|