通用人机语言命令报告生成系统及方法 【技术领域】
本发明涉及一种命令报告生成系统及方法,特别涉及一种通用人机语言(MML,Man-Machine Language)命令报告生成系统及方法。
背景技术
在现阶段的电信网管中,一般都采用Client/Server(客户端/服务器)模式进行构建,客户端一般通过和服务器约定的协议(这里指MML命令)进行交互通信,服务器针对客户端的MML命令返回相应的处理报告。
实际应用中,MML命令返回的报告多是各个业务处理者自己根据约定的规范格式化输出的,这样做有很大的缺点:
(1)代码大量重复,每个业务处理要实现通用的处理部分,造成程序体积增大;
(2)可重用性差,规范稍有改动就会导致多个地方重复修改,不能多个用户使用同一处理方法;
(3)统一性不好,网管各个业务处理部分对网管报告规范的理解不同,造成报告风格不一致,客户端也很难统一解析工具。
(4)可扩展性不好,对于新的报告格式需要重新设计、编码。
【发明内容】
本发明的目的在于提供一种通用人机语言命令报告生成系统,利用该系统可以快速地生成人机语言命令报告,且可扩展性好,格式统一。
本发明的目的在于提供一种通用人机语言命令报告生成方法,利用该方法可以快速地生成人机语言命令报告,且重用性好,程序体积小。
为解决上述问题,本发明提供一种通用人机语言命令报告生成系统,该系统包括报告调度模块、报告头生成模块、报告体生成模块及报告结束标记模块,其中:所述报告调度模块用于接收使用者输入的报告头信息及报告体信息,分别调用报告头生成模块、报告体生成模块及报告结束标记模块生成格式化后的报告;所述报告头生成模块,接收报告调度模块的报告头信息,返回格式化后的报告头;所述报告体生成模块,接收报告调度模块的报告体信息,返回格式化后的报告体;所述报告结束标记模块,根据报告调度模块地信息返回结束标记。
在本发明的另一个方面,我们提供一种通用人机语言命令报告生成方法,包括下列步骤:a.接收输入报告的初始信息;b.根据初始信息中的报告头信息及报告体信息,分别调用报告头生成模块、报告体生成模块及报告结束标记模块;c.所述报告头生成模块接收报告调度模块的报告头信息,返回格式化后的报告头;d.所述报告体生成模块,接收报告调度模块的报告体信息,返回格式化后的报告体;e.所述报告结束标记模块,根据报告调度模块的信息返回结束标记。f.生成格式化后的报告并输出MML报告。
如上所述,与现有技术相比本发明具有如下优点:
通过封装重用,使用者可不必了解具体的报告规范,就可满足输出报告的需求,效率得到提高,同时使客户端的报告解析算法稳定统一。
【附图说明】
图1是本发明的通用报告头的实现流程示意图;
图2是本发明的通用报告体的实现流程示意图;
图3是本发明的MML报告生成的流程示意图。
【具体实施方式】
下面结合附图就本发明的优选实施例详细说明如下:
首先说明MML报告的规范:
MML报告一般由报告头、报告体和结束标志组成:
关于MML报告规范可参考《华为公司窄带MML网管命令报告规范V3.0》,但并不限定于该规范。
例如:
+++ HUAWEI MSC9800 2002-06-25 14:38:22
TRAFFIC #885
%%LST TSK:CHT=TN,INFO=TRUE,TSKN=″report_d″;%%
RETCODE=0执行成功
基本信息
---------
任务名称=Report_D
任务号=1
任务描述=2000年报表D表
测量功能集=局向的中继话务测量
对象类型=局向号
运行状态=激活
结果保留记录数=5000
结果输出=普通维护端口
--- END
通用报告生成的实现也主要根据这几部分展开:
(1)说明符含义解释
一对尖括号<>之间的内容为实际输出内容。
\r\n表示换行符
<nSP>表示连续n个空格符;
<XXX′对齐方式>其中:A0表示左对齐,A1表示右对齐;
<XXX′Mn>其中:′Mn表示此信息段最大长度n字符;
<XXX′Ln>其中:′Ln表示此信息段总长度是n字符,不足部分用空格填充;
′L0表示输出该字段的实际长度,不用填充;
<XXXXX> 标记下划线的文字,为确定输出字样
<XXXX> XXXX为其他部分实际输出更改;
某一部分信息空缺,则填<NULL>或<->
如<局名′M32A0>表示局名信息最大长度32字符,左对齐。
(2)报告头格式
报告头格式部分如下:
<起始符标识+++><4SP><源标识符′M32><8SP><报告输出日期′M10><1SP><报告输出时间′M8>\r\n
<业务报告标志′M10><4SP><#报告序号′M10>\r\n
具体说明如下:
i、一个源标识符指出产生一项输出信息的物理区域。一般是设备的标识,在安装设备时指定即可。可以是局名等。
ii、根据国际标准(ISO 2014)在标题中输出的日期按全数字形式写成日历日期。日历日期应按下列次序书写:年、月、日。
年由两位十进制数字或四位十进制数字组成,为杜绝2000年问题发生,采用四位十进制数字;
月由两位十进制数字组成,范围从01到12;
日由两位十进制数字组成,范围从01到31;
年和月之间及月和日之间用的字符是连字符号。
iii、时间表示法采用24小时计时方式。时间元素的顺序应是从高位到低位(从左到右):时、分、秒。
小时用两位十进制数表示,范围从00到23,并包括23;
分用两位十进制数字表示,范围从00到59,并包括59;
秒用两位十进制数表示,范围从00到59,并包括59;
时和分及秒之间用分号字符[:]分割。
iv、业务报告标志有:
TRAFFIC(通信量);
O&M(操作维护);
TEST(测试);
ALARM(告警),
v、现在报告序号的作用是:唯一标识一个任务的输出报告。因为一些命令的结果信息非常庞大,可能需要分多个报告输出,这时就需要有一种手段把这些报告串起来。报告序号就起到这个作用。同一个任务的输出报告无论多少都由一个报告序号标识。、
报告头的样例如下:
+++ HUAWEI 1998-12-07 11:45:58
O&M #10000
(3)报告体
报告体是报告的真正内容所在。它包括以下几部分:
命令回显部分;系统报告信息;结果正文;附加信息。
具体说明如下:
i、命令回显部分
<命令回显标识%%><回显的命令文本><命令回显标识%%>\r\n
对于对话输出,即对输入命令的响应输出,命令回显是必须的。对于非对话输出,不存在命令回显。回显的命令文本可能超出一行的宽度,因此允许换行。回显命令的起始和结束由命令回显标识%%标志。
为了保证命令回显对用户的提示功能,回显的命令文本与用户输入的命令保持完全一致,程序不做任何如过滤空格等等的处理。
如果回显的命令文本有多个命令,新的命令要重起一行,不要紧跟在上一个命令的后面接着写。多个命令一起包围在一对%%之间。
ii、系统报告信息
一般是成功/失败信息。
分为两个区段,一个是返回码,一个是返回码的解释信息,给出这个错误的合理解释,帮助用户定位这个错误。
<返回码标识RETCODE><1SP><=><1SP><返回码><2SP><解样信息>\r\n
<A0解释信息折行后续>
iii、结果正文
结果正文是查询以及其它登记的任务返回的数据块。它的显示形式比较多样灵活。
一个结果文本中可以包含多个结果主体,例如:查询一个中继群,可以将该群包含的中继电路一起显示出来。那么,这时就包含两个结果主体,一个是中继群,另一个是中继电路。每个主体需要显示的属性以及个体的数目是不定的,因此对于每个主体的显示格式的处理也不相同。例如,以上例来说,返回的中继群属性是一条记录,而中继电路是多条,那么对于中继群这个主体来说,可能就以纵向列表的形式显示;而中继电路的属性就以横向列表的形式(一个记录一行)来显示。
由于在结果中包含多个主体,所以在每个主体的显示之前必须有这个主体的标题信息(TITLE),指定这个主体的含义,如:“中继群属性”、“该群包含的中继电路”。对于单个结果主体的结果正文,标题信息可以省略,因为用户清楚的知道输入信息的含义。
在主体的显示之后显示记录的个数,如“结果个数=100”,这样一个主体的表述才比较完整。
通过把相关的多个主体信息以一定的格式组合起来显示,可以显示给用户一个比较综合的信息,使用户从一个任务返回中得到的有用信息更多。毕竟,孤立的信息,它的分析价值比较小。
iii、主体的标题信息
在主体的数据信息之前显示,用于说明主体的含义,给出概括性的说明。要求意义准确清晰。标题信息字符串中不能使用标点符号,包括中英文。
<标题字符串>\r\n
<′-′字符的重复,重复次数与标题字符串长度相同>\r\n
iv、结果总计信息
一个结果正文是由多个结果主体构成,每个主体根据它的内容不同,可以以不同的方式来组织它的显示格式。每个主体都有标题信息(TITLE),对于多记录的结果输出,在结果之后还要显示结果记录个数。
<(结果个数><1SP><=><1SP><记录个数><)>\r\n
v、主体信息
主体的描述形式有:横向列表和纵向列表。
1)纵向列表:
该纵向列表的适用于单条返回记录的显示,例如查询某个用户的返回结果、查询某个测试结果等等。适用范围很广。
格式说明:
结果只有一个个体的属性,每一行描述该个体的一个属性。其中等号左边是属性名称,等号右边是取值。以等号为准居中对齐。
具体形式如下:
<属性名1><2SP> =<2SP><值1>\r\n
<属性名2><2SP>=<2SP><值2>\r\n
<属性名3><2SP>=<2SP><值3>\r\n
<属性名4><2SP>=<2SP><值4>\r\n
2)横向列表:
该横向列表的适用于多条返回记录的显示,应用非常普遍。例如数据管理台查询一个模块的所有机框、维护台中查询一个框的所有单板状态、话务统计台中返回的多个实体的统计结果、测试台中查询多个测试结果等等。每行开头可以缩进一格,也可以不缩进。
格式说明:
<属性名1′A0′Mw1><2SP><属性名2′A0′Mw2><2SP><属性名3′A0′Mw3><2SP><属性名′A0>\r\n
\r\n
<属性1值1′A0′Mw1><2SP><属性2值1′A0′Mw2><2SP><属性3值1′A0 ′Mw3><2SP><属性n值
′A0>\r\n
<属性1值2′A0′Mw1><2SP><属性2值2′A0′Mw2><2SP><属性3值2′A0 ′Mw3><2SP><属性n值
′A0>\r\n
<属性1值m′A0′Mw1><2SP><属性2值m′A0′Mw2><2SP><属性3值m′A0′Mw3><2SP><属性n值
′A0>\r\n
其中,每一列的宽度是输出报告时根据该属性的最大显示宽度计算出来的,最小宽度是6个字符。第一行显示输出属性的名称,下面的数据区以一个空行分隔。且每一列的属性左对齐。
vi、提示信息
提示信息一般在报告的结束标记之前显示,如果报告中有附加信息,那么在附加信息之前显示。如果提示信息后不是结束标记,那么后面加一空行分隔。对于一个任务有多个报告输出的情况,提示信息也只出现一次,即在最后一个报告中显示。
格式:
<提示信息>\r\n
<--------->\r\n
<提示信息字符串>\r\n
vii、附加信息
是在一个报告的结束标记之前显示的补充信息,作为对上面报告的一个补充。目前存在的附加信息有:
<仍有后续报告输出>
<共有><报告个数><个报告>
(4)结束标志
结束标记是固定的,具有如下形式:
<结束符标识---><4SP><END>\r\n
2、通用的报告头实现
报告头由以下三部分组成:(1)源标志符(2)报告输出时间(3)业务报告标志及报告序号,这三部分根据一定的规范(本实施例采用华为公司的窄带报告规范)分别进行格式化,最后输出格式化后的报告头。
具体见图1,图1是本发明的通用报告头的组成模块及实现流程示意图,在图1中可以看出,其组成包括报告头调度模块、源标志符格式化模块、报告输出时间格式化模块,业务报告标志和报告序号格式化模块及窄带报告规范数据库模块。需要说明的是,中间的″格式化″方框是模块,仅是一个功能描述,而且从数据流的方向来看,″读取规范数据″的箭头只是表明操作的发起模块和响应模块,并不表明数据流的方向。
3、通用的报告体实现
报告体由以下几部分组成:(1)命令回显部分;(2)系统报告信息;(3)结果正文(分横排和竖排),包括:主体的标题信息、结果总计信息、主体信息、提示信息;(4)附加信息。
实现流程同报告头类似,通过报告体生成模块将各部分格式化的字符串汇集,输出可打印的报告体,详见图2,包括报告体调度模块,命令回显格式化模块,系统报告信息格式化模块,结果正文格式化模块,附加信息格式化模块以及窄带报告规范数据库,其中与报告头不同的地方还包括如下模块:
(1)字符串折行模块:
窄带规范规定,报告每行最多可输出80个字符串,超过将折行,字符串折行不但能将普通的英文字符正确折行,还能进行汉字(UNICODE)折行,避免出现一个汉字被折掉一半的情况。报告体各部分进行折行时通过调度模块申请,并得到折行后的文本。
(2)报告容量限制模块:
报告的容量不能是无限的,当报告超过一定长度(这里是32K),在网管服务器和客户端传输可能会丢失部分数据,故通过使用者设置单个输出报告的最大容量进行限制,报告体生成模块将根据各部分格式化情况实时计算还可以合成多少行记录,达到容量限制后,会停止格式化,输出当前报告,将剩余部分合到下一个报告中输出。
(3)结果正文内容由用户通过接口填写,具体见下面的接口(3)。
4、结束标志实现:
结束标志比较简单,根据规范合成结束END标识。
5、构造一个MML报告的流程
本文针对使用者主要提供如下接口:
(1)添加报告的初始信息;
(2)生成报告结果体:
功能:创建一个报告结果体,包括执行报告类型(横排、竖排),属性字段的名称等,创建的报告结果体会加入到报告结果体列表中,并返回结果体句柄。一个报告可由多个结果体组成,故可创建多个;
(3)报告体内容填写:
功能:向结果体报告中每个属性字段添加属性值,横排可添加多行数据;
(4)设置报告的输出限制:
功能:可设置报告的最大输出行数和容量限制,超过此限制,控件将自动分报告,分批次输出;
(5)得到可输出的报告
功能:格式化生成一个可打印MML报告;
创建一个MML报告的流程就是按照上面的接口,顺序的调用,最后得到可输出的报告,见图3,从图3可以看出,该系统包括下列模块:报告调度模块,报告头生成模块,报告体生成模块及报告结束标记模块。其中,报告调度模块接收使用者输入的报告头信息及报告体内容信息,然后分别调用报告头生成模块、报告体生成模块及报告结束标记模块生成格式化后的报告,而报告头生成模块及报告体生成模块则分别调用自己的模块,如图1及图2所示的执行过程。
6、为能充分共享报告生成技术,将本发明封装成COM(组件对象模型)组件的形式,这样就方便的继承了微软COM技术的优点,可以在二进制级别共享,可扩展和封装性都很强。
综上所述,本发明结合附图详细描述了本发明的优选实施例,然而本发明的描述,详细说明和以上提到的附图并不是用来限制本发明的。对本领域的普通技术人员来说,在本发明的教导下可以进行各种相应的修改而不会超出本发明的精神和范围,因此这种变化应包含在本发明的权利要求及其等效范围之内。