--[[ 创建日期: 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