CN104423986B - 一种应用系统内嵌脚本的方法和装置 - Google Patents

一种应用系统内嵌脚本的方法和装置 Download PDF

Info

Publication number
CN104423986B
CN104423986B CN201310390995.2A CN201310390995A CN104423986B CN 104423986 B CN104423986 B CN 104423986B CN 201310390995 A CN201310390995 A CN 201310390995A CN 104423986 B CN104423986 B CN 104423986B
Authority
CN
China
Prior art keywords
script
dynamic link
link library
language
program packet
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN201310390995.2A
Other languages
English (en)
Other versions
CN104423986A (zh
Inventor
陈丹
张涛
张彦文
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
BEIJING BOCO INTER-TELECOM TECHNOLOGY Co.,Ltd.
Original Assignee
Shandong Yiyang Xintong Information Technology Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Shandong Yiyang Xintong Information Technology Co Ltd filed Critical Shandong Yiyang Xintong Information Technology Co Ltd
Priority to CN201310390995.2A priority Critical patent/CN104423986B/zh
Publication of CN104423986A publication Critical patent/CN104423986A/zh
Application granted granted Critical
Publication of CN104423986B publication Critical patent/CN104423986B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Landscapes

  • Stored Programmes (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

本发明公开一种内嵌脚本的方法,在所述应用系统中配置预先设定的脚本配置文件,以及为每种脚本语言类型配置相应的转换模型;根据脚本配置文件中的配置信息,获取各脚本语言程序包的存放路径,并在所述应用系统内部获取与所述各脚本语言类型相应的动态链接库;根据所述各转换模型,对各动态链接库完成初始化后,各动态链接库按照各脚本语言程序包的存放路径找到与其对应的脚本语言程序包,并对所述脚本语言程序包进行解析;根据所述各转换模型和所述脚本配置文件中的配置信息,在所述各动态链接库中植入与其相应的方法名和参数;所述应用系统调用所述动态链接库,执行所述动态链接库中植入的方法名和参数,返回执行结果。本发明使自行编写的脚本语言程序包内嵌应用系统中,提高应用系统效率便于管理各脚本语言程序包。本发明还公开一种内嵌脚本的装置。

Description

一种应用系统内嵌脚本的方法和装置
技术领域
本发明涉及一种内嵌脚本的方法和装置,具体地涉及一种应用系统内嵌外部脚本的方法和装置。
背景技术
近年IT业迅猛发展,多种大型综合软件在各行业中涌现,大型综合软件会承载多种业务,为了方便用户根据自身业务特点撰写不同的业务逻辑,提高系统灵活性,很多大型综合软件提供了对外的API接口,专供用户调用,可执行用户自己编写不同业务逻辑的外部脚本。所谓外部脚本,就是在系统既定的业务范围外,用户还需要其他辅助业务需要处理,或者针对系统处理的内部数据,还需要精细加工或者特殊处理,而自行编写的程序化脚本。该脚本能够独立依赖自身的脚本语言执行。当系统调用这些外部脚本后,根据脚本植入系统配置的位置而依次调用。这样结合系统的业务功能和逻辑,就可以实现这种灵活的功能或者业务扩展。内嵌方式不仅仅可以实现用户的自增逻辑扩展,同时也实现系统对外部脚本的可控化,同时从性能角度出发,提升的效率也非常可观。
这种给用户提供调用自编脚本接口的方式,极大提高了系统的灵活性,但同时也带来了一系列问题。其一由于用户编程语言习惯的不同可能会采用不同的语言撰写脚本,当用户调用API接口试图运行这些脚本语言时,会调用系统资源执行其脚本,直接导致系统处理效率降低,影响系统性能。其二,现有系统运行这些用户自编外部脚本的方式为通过系统C程序调用SHELL脚本语言,SHELL语言再指向用户自编脚本程序包,这样几层调用关系,会导致系统多语言混乱调用,降低系统处理能力,且调用语言脚本运行不可控,也无法跟踪脚本程序包的运行情况。
发明内容
本发明提供了一种将用户根据业务需求自撰的脚本语言程序包内嵌入应用系统执行的方法,提高了应用系统执行外部程序包的效率和可控性,同时避免了多重语言调用出现的复杂易出错的弊端。
一种应用系统内嵌脚本的方法,其特征在于,所述方法包括:
根据已编写好的外部各脚本语言程序包在所述应用系统中配置预先设定的脚本配置文件,以及为每种脚本语言类型配置相应的转换模型;
所述应用系统加载所述脚本配置文件,根据所述脚本配置文件中的配置信息,获取各脚本语言程序包的存放路径,并在所述应用系统内部获取与所述各脚本语言类型相应的动态链接库;
根据所述各转换模型,对与转换模型相同脚本语言类型的动态链接库完成初始化后,所述各动态链接库按照所述各脚本语言程序包的存放路径找到与其对应的脚本语言程序包,并对所述脚本语言程序包进行解析;
根据所述各转换模型和所述脚本配置文件中的配置信息,在所述各动态链接库中植入与其相应的方法名和参数;
所述应用系统调用所述动态链接库,执行所述动态链接库中植入的方法名和参数,返回执行结果。
优选的,在所述通用语言动态链接库执行所述解析后的与其对应的脚本语言程序包后,所述方法还包括:
清除所述动态链接库本次解析的内容,释放其所占系统资源。
具体的,所述配置预先设定的脚本配置文件的方法具体为:
在所述脚本配置文件中配置各脚本语言程序包的编写语言类型、存放路径、方法名和执行该方法所需的参数,将每个脚本语言程序包的信息配置为一条记录。
具体的:在每个所述转换模型中配置一种脚本语言类型的转换规则,所述转换规则包括与该脚本语言类型相应的动态链接库初始化方法、生成解析器方法、外部传递参数方法、返回值方法。
优选的,在所述动态链接库初始化之前,所述方法还包括:
根据所述脚本配置文件中配置各脚本语言程序包的方法名,与所述脚本程序包中的所有方法名进行比对校验,如有方法名错误或未找到则提示错误报告并退出步骤。
具体的,根据所述转换规则中记载的动态链接库初始化方法对与该转换规则脚本语言类型相应的动态链接库进行初始化;
读取所述脚本配置文件中记载的所述该脚本语言类型方法名和执行该方法所需的参数,通过所述转换规则中的外部传递参数方法,将所述方法名和执行该方法所需的参数植入相应的动态链接库。
具体的,所述脚本语言类型包括PERL语言、SHELL语言、PYTHON语言、LUA语言;
在所述应用系统内部获取与所述各脚本语言类型相应的动态链接库。
优选的,当出现新的脚本语言程序包时,可在脚本配置文件中增加新的记录,所述应用系统周期性读取所述脚本配置文件中的信息,可根据实际操作需求设定应用系统的读取周期。
本发明还公开一种应用系统内嵌脚本的装置,其特征在于,所述装置包括:
配置模块,用于根据已编写好的外部各脚本语言程序包在应用系统中预置脚本配置文件,以及为每种脚本语言类型配置相应的转换模型;
获取模块,用于加载所述配置模块预置的脚本配置文件,根据所述脚本配置文件中的配置信息,获取各脚本语言程序包的存放路径,并在所述应用系统内部获取与所述各脚本语言类型相应的动态链接库;
解析模块,用于根据所述配置模块配置的转换模型,对所述获取模块获取的与转换模型相同脚本语言类型的动态链接库完成初始化后,所述各动态链接库按照所述各脚本语言程序包的存放路径找到与其对应的脚本语言程序包,并对所述脚本语言程序包进行解析;
植入模块,用于根据所述配置模块配置的转换模型和所述脚本配置文件中的配置信息,在所述解析模块中对脚本语言程序包进行解析后的动态链接库中植入与其相应的方法名和参数;
执行模块,用于调用所述解析模块中的动态链接库,执行植入模块在所述动态链接库中植入的方法名和参数。
优选的,所述装置还包括:
资源释放模块,用于在执行模块执行完成后,清除所述解析模块中本次解析的内容。
具体的,所述配置模块在所述脚本配置文件中配置各脚本语言程序包的编写语言类型、存放路径、方法名和执行该方法所需的参数,将每个脚本语言程序包的信息配置为一条记录。
具体的,所述配置模块在每个所述转换模型中配置一种脚本语言类型的转换规则,所述转换规则包括与该脚本语言类型相应的动态链接库初始化方法、生成解析器方法、外部传递参数方法、返回值方法。
优选的,所述装置还包括:
校验模块,用于在解析模块对动态链接库进行初始化之前,根据所述脚本配置文件中配置各脚本语言程序包的方法名,与所述脚本程序包中的所有方法名进行比对校验,如有方法名错误或未找到则提示错误报告并退出步骤。
具体的,所述解析模块根据所述转换规则中记载的动态链接库初始化方法对与该转换规则脚本语言类型相应的动态链接库进行初始化;
所述植入模块读取所述脚本配置文件中记载的所述该脚本语言类型方法名和执行该方法所需的参数,通过所述转换规则中的外部传递参数方法,将所述方法名和执行该方法所需的参数植入相应的动态链接库。
具体的,当出现新的脚本语言程序包时,所述配置模块可在脚本配置文件中增加新的记录;
所述获取模块周期性读取所述脚本配置文件中的信息,可根据实际操作需求设定应用系统的读取周期。
本发明通过脚本配置文件,将用户自撰不同脚本语言类型的脚本语言程序在应用系统中记载,通过预先设定的转换模型调用应用系统中与各脚本语言类型的动态链接库,通过动态链接库执行与其相应的脚本语言程序包中的方法,将外部脚本语言程序包内嵌到应用系统中来,这种方式摒弃了不同脚本语言类型的脚本语言程序包在系统中的差异,系统直接调用自身的动态链接库,即可完成对外部脚本语言的执行,避免系统经过C程序调用SHELL脚本,SHELL再指向用户自编程序包复杂的调用过程,在不改变使用者编写习惯的同时提高了应用系统对外部脚本语言包的处理能力;应用系统通过自身动态链接库执行解析好的脚本语言程序包,不用占用系统内部资源去直接执行外部脚本语言程序包,节约了应用系统宝贵的资源;同时还可在脚本配置文件中设定各语言程序包中本次需要执行的方法名,不用将脚本配置文件中所有的方法执行一遍,提高了效率的同时也增强了应用系统对外部脚本运行的可控性,使用者能清楚获知本次执行的方法名称、数量等,进而提高应用系统对自撰脚本语言程序包的可执行性。
附图说明
图1为本发明实施例一一种应用系统内嵌脚本的方法流程图;
图2为本发明实施例二的方法流程图;
图3为本发明实施例三一种应用系统内嵌脚本的装置结构示意图;
具体实施方式
以下将配合图式及实施例来详细说明本发明的实施方式,藉此对本发明如何应用技术手段来解决技术问题并达成技术功效的实现过程能充分理解并据以实施。
在现有的大型应用系统中,由于接入系统的不同厂家设备多样化,业务的复杂化,为了方便用户根据自身业务特点灵活的实现不同的业务逻辑,很多厂家都开放了可供用户调用的接口,用户可根据各自的业务逻辑运用其熟悉的编程语言撰写脚本,来实现业务逻辑,这些脚本语言程序包即称为外部脚本。本发明的关键点在于,将这些不同编程语言撰写的脚本语言程序包通过预先配置、应用系统读取并解析、加载执行的方式完成应用系统内嵌脚本的过程,脚本语言程序包完成内嵌后,应用系统调用其自身的动态链接库对其进行执行,占用较少的系统资源,且在执行过程中不用通过多种语言层层调用的方式,安全迅速,提高了系统执行脚本语言程序包的效率和可控性。
如图1所示,本发明实施例一公开一种应用系统内嵌脚本的方法,包括以下步骤。
步骤S101:根据已编写好的外部各脚本语言程序包在所述应用系统中配置预先设定的脚本配置文件,以及为每种脚本语言类型配置相应的转换模型。
预先设定的脚本配置文件是用来描述在应用系统中内嵌脚本语言程序包的文件,通过脚本配置文件,相当于把将要内嵌在应用系统中的脚本语言程序包的一些信息通知给应用系统。
在所述脚本配置文件中配置各脚本语言程序包的编写语言类型、存放路径、方法名和执行该方法所需的参数,将每个脚本语言程序包的信息配置为一条记录,当有新的脚本语言程序包需要内嵌时,只需要在脚本配置文件中增加一条记录即可。
为每种脚本语言类型配置相应的转换模型,由于不同脚本语言类型的编程语法、方法名、参数等都不相同,因此需要为每种脚本语言类型设置转换模型,以便应用系统能够为不同的脚本语言类型配置与其相应的动态链接库。
在每个转换模型中配置一种脚本语言类型的转换规则,所述转换规则包括与该脚本语言类型相应的动态链接库初始化方法、生成解析器方法、外部传递参数方法、返回值方法。
如果出现了新的脚本语言类型,只需要为新的脚本语言类型设置相应的转换模型即可完成转换。
步骤S102:所述应用系统加载所述脚本配置文件,根据所述脚本配置文件中的配置信息,获取各脚本语言程序包的存放路径,并在所述应用系统内部获取与所述各脚本语言类型相应的动态链接库。
脚本配置文件中的配置信息,主要包含脚本语言程序包的脚本语言类型、脚本语言程序包的存放路径、本次需要执行的脚本语言程序包中的方法名称(简称方法名)、以及执行这些方法所需要用到的参数名称(简称参数)。
现在常用的脚本语言包括perl、python、lua、shell等。
在脚本配置文件配置好后,应用系统加载脚本配置文件,即可获得其中包含的信息,包括脚本语言程序包的编写语言类型、各脚本语言包的存放路径、本次需要执行的方法名、以及执行方法所需的参数信息等。
动态链接库英文为DLL,是Dynamic Link Library的缩写形式,是一个包含可由多个程序同时使用的代码和数据的库。动态链接提供了一种方法,使进程可以调用不属于其可执行代码的函数。是一个包含可由多个程序同时使用的代码和数据的库。
在应用系统中,对于现有技术中常用的这些脚本语言类型,均有与其对应的动态链接库,如perl动态链接库、shell动态链接库、python动态链接库、lua动态链接库,这些动态链接库中包含着与脚本语言类型方法对应的函数。
步骤S103:根据所述各转换模型,对与转换模型相同脚本语言类型的动态链接库完成初始化后,所述各动态链接库按照所述各脚本语言程序包的存放路径找到与其对应的脚本语言程序包,并对所述脚本语言程序包进行解析。
对动态链接库完成初始化的过程,即为该动态链接库生成解析器,按照与动态链接库相同脚本语言类型的转换模型中描述的初始化方法、生成解析器方法,完成生成解析器的工作。动态链接库按照脚本配置文件中所示的各脚本语言程序包的存放路径,找到与其对应的脚本语言程序包,解析器根据动态链接库中记载的该脚本语言类型方法对应的函数,对脚本语言程序包中的各个方法进行解析,其解析的过程就是翻译的过程,将脚本语言程序包中的各个方法按照动态链接库中对应的函数,翻译成应用系统可识别的方法。
步骤S104:根据所述各转换模型和所述脚本配置文件中的配置信息,在所述各动态链接库中植入与其相应的方法名和参数。
在脚本配置文件中的配置信息里,记载了执行脚本语言程序包中的方法名以及执行该方法名所需要的参数,根据转换模型中记载的外部传递参数方法将这些信息植入到动态链接中,以便应用系统调用动态链接库执行相应方法。
步骤S105:所述应用系统调用所述动态链接库,执行所述动态链接库中植入的方法名和参数,返回执行结果。
应用系统调用动态链接库,执行动态链接库中植入的方法名和参数,根据转换模型中设置的返回值的方法,返回执行结果。
本发明通过系统调用自身内部的动态链接库执行用户自撰脚本语言程序包,省去了现有技术中通过C程序调用SHELL脚本语言,然后再通过SHELL语言指向其他语言程序包的复杂调用过程,使应用系统省去了多语言的混乱调用;通过动态链接库执行内嵌脚本语言程序包的方式提高了系统的处理性能;执行动态链接库中植入的方法名和参数,提高了对脚本语言程序包的运行过程可控性。
为进一步提高应用系统执行效率和准确率,节约系统资源,特给出本发明的实施例二,以具体的perl语言程序包pm说明其内嵌的过程,如图2所示,包括步骤:
步骤S201:根据已编写好的外部各脚本语言程序包在所述应用系统中配置预先设定的脚本配置文件,以及为每种脚本语言类型配置相应的转换模型。
下述为脚本配置文件模板实例,脚本配置文件可以.Xml文件形式存在,也可以应用系统可识别的其他形式存在。
[FUNC]
func_title_id=func("PERL","-PERL=\"EXT_FUNC_ERICSION.PM\"-FUNCNAME=\"GetTitleId\"-PARAM1=\"4\"-PARAM2=\"$alarm_title_txt\"")
/*PERL脚本语言配置记录*/
func_omc_id=func("PYTHON","-PYTHON=\"EXT_FUNC_ERICSION.PY\"-FUNCNAME=\"GetTitleId\"-PARAM1=\"4\"-PARAM2=\"$alarm_title_txt\"")/*PYTHON脚本语言配置记录*/
func_alarm_id=func("LUA","-LUA=\"EXT_FUNC_ERICSION.LUA\"-FUNCNAME=\"GetTitleId\"-PARAM1=\"4\"-PARAM2=\"$alarm_title_txt\"")/*LUA脚本语言配置记录*/
custom_no_func=func("SHELL","/opt/BOCO.DAL/NFM/bin/get_gcss.sh'custom_no”$TraphInfo”,'")
/*SHELL脚本语言配置记录*/
[FUNC]
上述脚本配置文件中描述了4种脚本语言类型的配置文本,分别为PERL、PYTHON、LUA、SHELL,以func_title_id=func(
"PERL","-PERL=\"EXT_FUNC_ERICSION.PM\"
-FUNCNAME=\"GetTitleId\"-PARAM1=\"4\"-PARAM2=\"$alarm_title_txt\"")为例,
"PERL"表示该脚本语言类型为perl;
"-PERL=\"EXT_FUNC_ERICSION.PM\"表示该脚本语言程序包的名称及存放路径;
-FUNCNAME=\"GetTitleId\"表示本次需要执行的方法名;
"-PARAM1=\"4\"-PARAM2=\"$alarm_title_txt\",表示执行GetTitleId方法所需要的两个参数及其值。
其他各脚本语言的配置记录含义与PERL脚本语言类型相似,在此不赘述。
预先设置的各类型脚本语言程序包的转换模型,以PERL语言的转换模型为例,下面描述perl的转换模型:
PERL_SYS_INIT(&argc,&argv);//为perl解析器的运行提供了必要的、系统特定的运行环境
my_perl=perl_alloc();//声明一个perl的解析器
Perl_set_context(my_perl);//解析器的初始化
char*dummy_argv[2];/**外部传递参数**/
dummy_argv[0]=(char*)"";
dummy_argv[1]=(char*)("test_perl.pm");
perl_parse(my_perl,xs_init,2,dummy_argv,env);//将解析器和传递的方法名、参数进行封装
perl_run(my_perl);//调用解析器运行
int nItemsReturned=call_pv((char*)("GetTitleId"),G_SCALAR|G_EVAL);//回调函数将压入堆栈
perl_destruct(my_perl);//销毁解析器
perl_free(my_perl);//释放解析器所占内存
上述转换模型中,描述的外部传递参数,可以从脚本配置文件中自动获取,本例中描述的dummy_argv[2]参数组,包含有两个参数分别是dummy_argv[0]=(char*)""和dummy_argv[1]=(char*)("test_perl.pm")。
步骤S202:所述应用系统加载所述脚本配置文件,根据所述脚本配置文件中的配置信息,获取各脚本语言程序包的存放路径。
应用系统加载上述脚本配置文件,获得各脚本语言程序包的脚本语言类型、存放路径等信息,通过获取的存放路径可以找到相应的脚本语言程序包。
应用系统加载脚本配置文件后,通过调用应用系统给用户开通的API接口传递的参数,这些参数包含PM的文件名、需要执行的方法名及方法名执行所需的外部参数。
步骤S203:根据所述脚本配置文件中配置各脚本语言程序包的方法名,与所述相应脚本语言程序包中的所有方法名进行比对校验,如有方法名错误或未找到则提示错误报告并退出步骤,如无误进入步骤S204。
根据脚本语言程序包的存放路径找到脚本语言程序包,将脚本配置文件中记载的方法名与脚本语言程序包中的所有方法名进行比对校验,如果能够找到则表示书写配置无误,可以继续进行下一步骤,如果没有找到,则表示在该脚本语言程序包中并没有所述的方法名,无法执行,则提示错误报告退出步骤。应用系统通过调用其内部的GetPerlFunc函数,将传递的调用方法名与PM程序包中的方法列表进行比对,当发现函数在PM包的函数列表中存在时则继续进入下一步骤。
对脚本配置文件中配置的各脚本语言程序包的方法名进行校验,是一个提高工作效率的方式,首先脚本配置文件中提到的方法名是本次需要执行的方法,每次只执行需要执行的方法,而不用将脚本语言程序包中的所有方法都执行一遍。对填写的方法名进行校验,是确保填写的脚本配置文件准确无误后才继续执行,避免不必要的错误。
步骤S204:在所述应用系统内部获取与所述各脚本语言类型相应的动态链接库。
脚本配置文件中的第一个字段,就标识了本脚本语言程序包是由哪种语言撰写的,根据这个语言类型,可以在应用系统中获取与脚本语言类型相应的动态链接库。
应用系统读取脚本配置文件中的第一条记录,获得第一个脚本语言程序包语言类型为PERL,在应用系统内部获取RUN动态链接库,RUN是C调用的perl动态链接库函数。
步骤S205:根据所述各转换模型,对与转换模型相同脚本语言类型的动态链接库完成初始化后,所述各动态链接库按照所述各脚本语言程序包的存放路径找到与其对应的脚本语言程序包,并对所述脚本语言程序包进行解析。
根据所述转换规则中记载的动态链接库初始化方法对与该转换规则脚本语言类型相应的动态链接库进行初始化。
根据上述PERL的转换模型,调用RUN动态链接库,执行my_perl=perl_alloc(),为RUN动态链接库创建一个名称为my_perl的解析器,通过动态链接库中的loadperl函数执行Perl_set_context(my_perl),完成解析器的初始化。
步骤S206:根据所述各转换模型和所述脚本配置文件中的配置信息,在所述各动态链接库中植入与其相应的方法名和参数。
读取所述脚本配置文件中记载的所述该脚本语言类型方法名和执行该方法所需的参数,通过所述转换规则中的外部传递参数方法,将所述方法名和执行该方法所需的参数植入相应的动态链接库。
根据转换模型中记载的外部传递参数,根据通过RUN动态链接库函数将pm包的执行方法参数、方法名等封装到我们的系统中。
步骤S207:所述应用系统调用所述动态链接库,执行所述动态链接库中植入的方法名和参数,返回执行结果。
调用动态链接库,调用解析器运行并执行所述动态链接库中植入的方法名和参数,返回执行结果。
步骤S208:清除所述动态链接库本次解析的内容,释放其所占系统资源。
按照转换模型中的记载销毁解析器并释放解析器所在内存。
需要说明的是,当出现新的脚本语言程序包时,可在脚本配置文件中增加新的记录,所述应用系统周期性读取所述脚本配置文件中的信息,可根据实际操作需求设定应用系统的读取周期。
如图3所示,本发明提供一种应用系统内嵌脚本的装置,结合实施例三说明其各个部分:
配置模块01,用于根据已编写好的外部各脚本语言程序包在应用系统中预置脚本配置文件,以及为每种脚本语言类型配置相应的转换模型。
所述配置模块在所述脚本配置文件中配置各脚本语言程序包的编写语言类型、存放路径、方法名和执行该方法所需的参数,将每个脚本语言程序包的信息配置为一条记录。
获取模块02,用于加载所述配置模块01预置的脚本配置文件,根据所述脚本配置文件中的配置信息,获取各脚本语言程序包的存放路径,并在所述应用系统内部获取与所述各脚本语言类型相应的动态链接库。
解析模块03,用于根据所述配置模块01配置的转换模型,对所述获取模块02获取的与转换模型相同脚本语言类型的动态链接库完成初始化后,所述各动态链接库按照所述各脚本语言程序包的存放路径找到与其对应的脚本语言程序包,并对所述脚本语言程序包进行解析。
所述解析模块根据所述转换规则中记载的动态链接库初始化方法对与该转换规则脚本语言类型相应的动态链接库进行初始化;
植入模块04,用于根据所述配置模块01配置的转换模型和所述脚本配置文件中的配置信息,在所述解析模块03中对脚本语言程序包进行解析后的动态链接库中植入与其相应的方法名和参数。
所述植入模块读取所述脚本配置文件中记载的所述该脚本语言类型方法名和执行该方法所需的参数,通过所述转换规则中的外部传递参数方法,将所述方法名和执行该方法所需的参数植入相应的动态链接库。
执行模块05,用于调用所述解析模块03中的动态链接库,执行植入模块04在所述动态链接库中植入的方法名和参数。
为了进一步节约应用系统资源,提高效率优选的,装置还可以包括:
资源释放模块06,用于在执行模块05执行完成后,清除所述解析模块中本次解析的内容。
校验模块07,用于在解析模块对动态链接库进行初始化之前,根据所述脚本配置文件中配置各脚本语言程序包的方法名,与所述脚本程序包中的所有方法名进行比对校验,如有方法名错误或未找到则提示错误报告并退出步骤。
当出现新的脚本语言程序包时,所述配置模块可在脚本配置文件中增加新的记录;
所述获取模块周期性读取所述脚本配置文件中的信息,可根据实际操作需求设定应用系统的读取周期。
其与前述的方法实施例的描述对应,不足之处参考上述方法部分的叙述,在此不一一赘述。
虽然本发明所揭露的实施方式如上,然而所述的内容并非用以直接限定本发明的保护范围。任何本发明所属技术领域中技术人员,在不脱离本发明所揭露的精神和范围的前提下,可以在实施的形式上及细节上作些许的更动。本发明的保护范围,仍须以所附的权利要求书所界定的范围为准。

Claims (15)

1.一种应用系统内嵌脚本的方法,其特征在于,所述方法包括:
根据已编写好的外部各脚本语言程序包在所述应用系统中配置预先设定的脚本配置文件,以及为每种脚本语言类型配置相应的转换模型;
所述应用系统加载所述脚本配置文件,根据所述脚本配置文件中的配置信息,获取各脚本语言程序包的存放路径,并在所述应用系统内部获取与各脚本语言类型相应的动态链接库;
根据所述每种脚本语言类型配置相应的转换模型,对与转换模型相同脚本语言类型的动态链接库完成初始化后,所述动态链接库按照所述各脚本语言程序包的存放路径找到与其对应的脚本语言程序包,并对所述脚本语言程序包进行解析;
根据所述转换模型和所述脚本配置文件中的配置信息,在所述各动态链接库中植入与其相应的方法名和参数;
所述应用系统调用所述动态链接库,执行所述动态链接库中植入的方法名和参数,返回执行结果。
2.根据权利要求1所述的方法,其特征在于,在所述应用系统调用所述动态链接库,执行所述动态链接库中植入的方法名和参数,返回执行结果后,所述方法还包括:
清除所述动态链接库本次解析的内容,释放其所占系统资源。
3.根据权利要求1所述的方法,其特征在于,所述配置预先设定的脚本配置文件的方法具体为:
在所述脚本配置文件中配置各脚本语言程序包的编写语言类型、存放路径、方法名和执行方法所需的参数,将每个脚本语言程序包的信息配置为一条记录。
4.根据权利要求1-3中任一所述的方法,其特征在于:
在每个所述转换模型中配置一种脚本语言类型的转换规则,所述转换规则包括与该脚本语言类型相应的动态链接库初始化方法、生成解析器方法、外部传递参数方法、返回值方法。
5.根据权利要求4所述的方法,其特征在于,在所述动态链接库初始化之前,所述方法还包括:
根据所述脚本配置文件中配置各脚本语言程序包的方法名,与所述脚本语言程序包中的所有方法名进行比对校验,如有方法名错误或未找到则提示错误报告并退出步骤。
6.根据权利要求5所述的方法,其特征在于:
根据所述转换规则中记载的动态链接库初始化方法对与该转换规则脚本语言类型相应的动态链接库进行初始化;
读取所述脚本配置文件中记载的脚本语言类型方法名和执行方法所需的参数,通过所述转换规则中的外部传递参数方法,将所述方法名和执行方法所需的参数植入相应的动态链接库。
7.根据权利要求5所述的方法,其特征在于:
所述脚本语言类型包括PERL语言、SHELL语言、PYTHON语言、LUA语言;
在所述应用系统内部获取与所述各脚本语言类型相应的动态链接库。
8.根据权利要求6所述的方法,其特征在于:
当出现新的脚本语言程序包时,可在脚本配置文件中增加新的记录,所述应用系统周期性读取所述脚本配置文件中的信息,可根据实际操作需求设定应用系统的读取周期。
9.一种应用系统内嵌脚本的装置,其特征在于,所述装置包括:
配置模块,用于根据已编写好的外部各脚本语言程序包在应用系统中预置脚本配置文件,以及为每种脚本语言类型配置相应的转换模型;
获取模块,用于加载所述配置模块预置的脚本配置文件,根据所述脚本配置文件中的配置信息,获取各脚本语言程序包的存放路径,并在所述应用系统内部获取与各脚本语言类型相应的动态链接库;
解析模块,用于根据所述配置模块配置的每种脚本语言类型配置相应的转换模型,对所述获取模块获取的与转换模型相同脚本语言类型的动态链接库完成初始化后,所述动态链接库按照所述各脚本语言程序包的存放路径找到与其对应的脚本语言程序包,并对所述脚本语言程序包进行解析;
植入模块,用于根据所述配置模块配置的转换模型和所述脚本配置文件中的配置信息,在所述解析模块对脚本语言程序包进行解析后的动态链接库中植入与其相应的方法名和参数;
执行模块,用于调用所述解析模块中的动态链接库,执行植入模块在所述动态链接库中植入的方法名和参数。
10.根据权利要求9所述的装置,其特征在于,所述装置还包括:
资源释放模块,用于在执行模块执行完成后,清除所述解析模块中本次解析的内容。
11.根据权利要求10所述的装置,其特征在于:
所述配置模块在所述脚本配置文件中配置各脚本语言程序包的编写语言类型、存放路径、方法名和执行方法所需的参数,将每个脚本语言程序包的信息配置为一条记录。
12.据权利要求9-11中任一所述的装置,其特征在于:
所述配置模块在每个所述转换模型中配置一种脚本语言类型的转换规则,所述转换规则包括与该脚本语言类型相应的动态链接库初始化方法、生成解析器方法、外部传递参数方法、返回值方法。
13.根据权利要求12所述的装置,其特征在于,所述装置还包括:
校验模块,用于在解析模块对动态链接库进行初始化之前,根据所述脚本配置文件中配置各脚本语言程序包的方法名,与所述脚本语言程序包中的所有方法名进行比对校验,如有方法名错误或未找到则提示错误报告并退出步骤。
14.根据权利要求13所述的装置,其特征在于:
所述解析模块根据所述转换规则中记载的动态链接库初始化方法对与该转换规则脚本语言类型相应的动态链接库进行初始化;
所述植入模块读取所述脚本配置文件中记载的脚本语言类型方法名和执行方法所需的参数,通过所述转换规则中的外部传递参数方法,将所述方法名和执行该方法所需的参数植入相应的动态链接库。
15.根据权利要求14所述的装置,其特征在于:
当出现新的脚本语言程序包时,所述配置模块可在脚本配置文件中增加新的记录;
所述获取模块周期性读取所述脚本配置文件中的信息,可根据实际操作需求设定应用系统的读取周期。
CN201310390995.2A 2013-09-02 2013-09-02 一种应用系统内嵌脚本的方法和装置 Active CN104423986B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201310390995.2A CN104423986B (zh) 2013-09-02 2013-09-02 一种应用系统内嵌脚本的方法和装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201310390995.2A CN104423986B (zh) 2013-09-02 2013-09-02 一种应用系统内嵌脚本的方法和装置

Publications (2)

Publication Number Publication Date
CN104423986A CN104423986A (zh) 2015-03-18
CN104423986B true CN104423986B (zh) 2018-12-14

Family

ID=52973067

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201310390995.2A Active CN104423986B (zh) 2013-09-02 2013-09-02 一种应用系统内嵌脚本的方法和装置

Country Status (1)

Country Link
CN (1) CN104423986B (zh)

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106897080B (zh) * 2015-12-18 2020-05-01 北京国双科技有限公司 动态链接库的处理方法及装置
CN110389753B (zh) * 2019-06-06 2024-01-23 五八有限公司 原生应用的链式调用方法、装置、电子设备及存储介质
CN110457582B (zh) * 2019-08-10 2023-03-21 北京酷我科技有限公司 一种数据分发方法及推荐系统
CN111090854A (zh) * 2019-11-25 2020-05-01 上海达梦数据库有限公司 目标程序的执行与转换方法、装置、终端和存储介质
CN112799715A (zh) * 2021-01-28 2021-05-14 中国工商银行股份有限公司 异构系统适配方法及装置

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5404528A (en) * 1993-01-19 1995-04-04 Canon Information Systems, Inc. Scripting system
CN1763717A (zh) * 2005-11-24 2006-04-26 北京中星微电子有限公司 一种利用脚本及其编译器调用宿主软件函数的系统与方法
CN101887376A (zh) * 2010-07-09 2010-11-17 中兴通讯股份有限公司 Widget引擎加载脚本插件的方法及Widget引擎
CN102750177A (zh) * 2012-06-19 2012-10-24 武汉凌控自动化技术有限公司 一种使用编译器的脚本实现方法

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5404528A (en) * 1993-01-19 1995-04-04 Canon Information Systems, Inc. Scripting system
CN1763717A (zh) * 2005-11-24 2006-04-26 北京中星微电子有限公司 一种利用脚本及其编译器调用宿主软件函数的系统与方法
CN101887376A (zh) * 2010-07-09 2010-11-17 中兴通讯股份有限公司 Widget引擎加载脚本插件的方法及Widget引擎
CN102750177A (zh) * 2012-06-19 2012-10-24 武汉凌控自动化技术有限公司 一种使用编译器的脚本实现方法

Also Published As

Publication number Publication date
CN104423986A (zh) 2015-03-18

Similar Documents

Publication Publication Date Title
CN104423986B (zh) 一种应用系统内嵌脚本的方法和装置
CA2192049C (fr) Procede de manipulation de modeles de donnees utilises en genie logiciel
CN107807878A (zh) 基于关键字的自动化测试引擎
EP1836568B1 (en) Source code translator
Paige et al. A tutorial on metamodelling for grammar researchers
Fouquet et al. An eclipse modelling framework alternative to meet the models@ runtime requirements
US8429624B2 (en) Application programming interface (API) router implementation and method
CN104050080B (zh) 用户态调试linux内核的方法及系统
CN101996132A (zh) 公用对象请求代理程序体系结构接口自动测试方法和装置
US20080244541A1 (en) Code translator and method of automatically translating modeling language code to hardware language code
CN101185116A (zh) 在软件程序中使用强数据类型表示语音识别语法
CN107678748A (zh) 一种源代码文件编译方法及装置
CN102221998A (zh) 一种扩展构件运行支撑平台中ejb容器的方法
US20110051911A1 (en) World Wide Telecom Web Voice Applications
US8881074B2 (en) Device and method for refactoring hardware code
Sengupta et al. Triggered message sequence charts
Martinez et al. Recovering sequence diagrams from object-oriented code: An ADM approach
Dovland et al. Verification of concurrent objects with asynchronous method calls
CN110109675A (zh) 智能合约处理方法、装置以及计算机可读存储介质
CN106339249A (zh) 动态配置编程方法
CN104915199B (zh) 一种将Flash项目转换为Html5项目的方法与装置
CN111259042B (zh) 一种动态查询方法及系统
CN106126225B (zh) 一种基于程序演进模型的目标代码逆向工程方法
WO2012129864A1 (zh) 一种以脚本形式表示增值业务流程的实现方法和系统
Kozlenkov et al. Prova rule language version 3.0 user’s guide

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
TA01 Transfer of patent application right

Effective date of registration: 20180727

Address after: 250101 6-056 room, ground floor, 1 building, Qilu Software Park, 1 Shun Hua Road, Ji'nan high tech Zone, Shandong.

Applicant after: Shandong Yiyang Xintong Information Technology Co., Ltd.

Address before: 100093 Haidian District, Haidian District, Xing Shi Kou Road, No. 1 20302, 20302

Applicant before: Beijing BOCO Inter-Telecom Technology Co., Ltd.

Applicant before: Yiyang Xintong Co., Ltd.

TA01 Transfer of patent application right
GR01 Patent grant
GR01 Patent grant
TR01 Transfer of patent right

Effective date of registration: 20200914

Address after: 100093, Beijing, Haidian District, No. 99 apricot Road No. 1, 20302

Patentee after: BEIJING BOCO INTER-TELECOM TECHNOLOGY Co.,Ltd.

Address before: 250101 6-056 room, ground floor, 1 building, Qilu Software Park, 1 Shun Hua Road, Ji'nan high tech Zone, Shandong.

Patentee before: Shandong Information Technology Co., Ltd of Bright Oceans Co.,Ltd.

TR01 Transfer of patent right