本发明涉及一种计算机应用技术,是面向专业技术人员使用的,可以通过该方法在软件中实现功能运行冲突的控制,避免相互冲突的功能同时运行导致的逻辑错误或系统错误,具体地说是一种通过数据库技术控制软件功能运行冲突的方法。
背景技术:
企业管理软件运行中有大量用户同时在线,多个客户端同时运行可能会产生冲突,有些软件的功能之间同时运行也可能产生冲突,出现冲突的后果就是导致系统错误。需要一种方法,能够实现对软件功能冲突的实时控制。
技术实现要素:
本发明的目的是提供一种通过数据库技术控制软件功能运行冲突的方法。
本发明的目的是按以下方式实现的,包括如下内容:
1. 在数据库中建立一张软件冲突功能表和一张软件功能运行记录表;
2. 向软件冲突功能表中预置互相冲突的软件功能数据;
3. 打开软件功能时检查冲突功能并控制,注册运行记录;
4. 退出软件功能时注销功能运行记录;
具体步骤如下:
1)利用数据库技术通过数据库中的一组数据表,对客户端软件运行进行记录及检查,实现控制软件功能冲突的目的;
2)在数据库中创建一组数据表,(1)软件冲突功能表,属性包括:功能编号、相冲突功能、冲突提示;(2)软件功能运行记录表,属性包括:用户姓名、运行功能、用户机器名);
3)在步骤2)中的数据表(1)、(2)中预置相互冲突的功能数据,记录相互产生冲突的功能信息;
4)软件运行时,检查步骤2)中的数据表,如果没有相互冲突的功能则允许功能运行并进行记录;如果有相互冲突的功能则进行提示,不允许此功能运行;
5)软件退出运行时,在步骤2中的数据表中注销相应的运行记录。
本发明的具有功能和有益效果:
面向软件开发人员提供了软件运行功能冲突的控制方法和存储结构,能够在软件开发中简便调用,避免软件功能运行时产生冲突。
具体实施方式
实施例1
1)在数据库中建立一张软件冲突功能表,属性包括:功能编号、相冲突功能、冲突提示(见表1)。
在数据库中建立一张软件功能运行记录表,属性包括:用户姓名、运行功能、用户机器名(见表2),此表记录正在运行的软件功能。
2)向表一中预置所有可能产生冲突的功能数据。
3)运行功能冲突检查及控制:用户在客户端打开软件的某个功能时,系统在软件冲突功能表中检索与此功能相互产生冲突的功能,如果没有检索到则允许运行此功能。如果找到相冲突的功能,则在软件功能运行记录表中判断有没有冲突功能正在运行,如果没有则允许运行,并在软件功能运行记录表中记录此功能,否则不允许运行,并给出相应的冲突提示信息。
4)运行功能注销:用户退出软件的某个功能时,在软件功能运行记录表中删除此功能的运行记录,注销功能记录后其他用户才能运行此功能。
附录一:功能注册检查冲突功能的代码
//--------------------------------------------------------------------
//1.检查本功能是否要运行在单用户模式下
//--------------------------------------------------------------------
SELECT F_CTFS INTO :vsTemp FROM LSCTGN WHERE F_GNBH=:psGnbh ;
if vsTemp='' or IsNull(vsTemp) then
rpsMsg ='本功能没有定义冲突内容,请联系系统管理员。'
Return 9
end if
if vsTemp = '0' then
SELECT count(*) INTO :vlJc FROM LSYXJL ;
elseif vstemp='3' then
SELECT count(*) INTO :vlJc FROM LSYXJL WHERE F_XTBH=:psxtbh;
end if
if vlJc>1 then
rpsMsg = usfMsg(psGnbh,'0','','','')
ROLLBACK;
return -1
end if
//--------------------------------------------------------------------
//2、检查有无在独立运行的功能在运行
//--------------------------------------------------------------------vsSql = "SELECT LSYXJL.F_KHJQ,LSYXJL.F_ZGXM,LSYXJL.F_XTBH,LSYXJL.F_GNBH FROM LSYXJL,LSCTGN WHERE LSYXJL.F_GNBH=LSCTGN.F_GNBH AND (LSCTGN.F_CTFS='0' or LSCTGN.F_CTFS='3') AND LSYXJL.F_XTBH='"+psxtbh+"'"
PREPARE Sqlsa FROM :vsSql;
OPEN DYNAMIC myCursor ;
FETCH myCursor INTO :vsCtKhJq,:vsCtZgXm,:vsCtXt,:vsCtGn ;
vbCt = (Sqlca.SqlCode >= 0 and vsCtZgXm<>'' and Not IsNull(vsCtZgxm))
CLOSE myCursor;
if vbCt then
rpsMsg = usfMsg(psGnbh,vsCtGn,vsCtKhJq,vsCtZgxm,vsCtXt)
Return -1
end if
//--------------------------------------------------------------------
//3、检查有无功能冲突
//--------------------------------------------------------------------
vsSql="SELECT LSYXJL.F_KHJQ,LSYXJL.F_ZGXM,LSYXJL.F_XTBH,LSYXJL.F_GNBH " &
+ " FROM LSYXJL,LSCTGN " &
+ " WHERE LSYXJL.F_GNBH=LSCTGN.F_CTGN " &
+" AND LSCTGN.F_CTFS='1' " &
+" AND LSCTGN.F_GNBH='"+psGnbh+"'"
PREPARE Sqlsa FROM :vsSql;
OPEN DYNAMIC myCursor ;
FETCH myCursor INTO :vsCtKhJq,:vsCtZgXm,:vsCtXt,:vsCtGn ;
vbCt = (Sqlca.SqlCode >=0 and vsCtZgXm<>'' and Not IsNull(vsCtZgxm))
CLOSE myCursor;
if vbCt then
rpsMsg = usfMsg(psGnbh,vsCtGn,vsCtKhJq,vsCtZgxm,vsCtXt)
Return -1
end if
除说明书所述的技术特征外,均为本专业技术人员的已知技术。