一种创建流程的方法以及创建流程的装置
【技术领域】
本发明涉及流程处理领域,特别是涉及一种创建流程的方法以及创建流程的装置。
【背景技术】
随着业务的扩大、需求变更的增多,往往导致业务代码变得臃肿,与此同时,业务代码中的业务逻辑也变得复杂,从而也使软件开发人员不容易对业务代码进行维护。
为了解决业务代码不易维护的问题,目前,很多应用***通过一些流程工具(如,jbpm和activity开源流程框架)实现流程化业务。但是,发明人发现,在数据中转流程配置中,通常需要配置许多相关流程,而在这些流程中又有极大的相似之处,一般在某些数据源配置或流程节点参数上存在差异。当类似的流程达到一定数量时,在流程配置和管理上都是通过手工操作进行修改的,工作量庞大,无论修改流程或是新增流程都将花费大量的时间,极大影响效率。
鉴于此,克服该现有技术所存在的缺陷是本技术领域亟待解决的问题。
【发明内容】
针对现有技术的以上缺陷或改进需求,本发明提供了一种创建流程的方法以及创建流程的装置,其目的在于该创建流程的方法能够基于基准流程对象批量生成新的流程对象,以满足不同业务的需求,节省时间,可以极大的提高效率;由此解决目前在对流程的配置和管理上,工作量庞大,无论修改流程或是新增流程都将花费大量的时间,极大影响效率的问题。
本发明实施例采用如下技术方案:
第一方面,本发明提供一种创建流程的方法,所述创建流程的方法包括:
获取基准流程对象,并依据所述基准流程对象构建预设格式的基准模板;
接收用户所输入的流程更改指令,并依据所述流程更改指令以及所述基准模板构建差异模板;
对所述差异模板进行处理,得到差异对象;
将所述差异对象与所述基准流程对象进行比较,并依据所述差异对象对所述基准流程对象进行修改,创建新的流程对象,以实现与所述新的流程对象相匹配的业务需求。
优选地,所述创建流程的方法还包括:
依据所述基准模板的格式,创建以变量标记预设属性对象的属性值的参照模板;
所述接收用户所输入的流程更改指令,并依据所述流程更改指令以及所述基准模板构建差异模板包括:
接收用户所输入的流程更改指令,依据所述流程更改指令以及所述预设属性对象确定差异数据;
通过所述差异数据为所述变量赋值,以将所述参照模板实例化,从而构建差异模板。
优选地,所述基准流程对象包括多个节点以及节点之间的连线,每个节点具有各自的节点属性,其中,所述节点属性包括节点标识码以及节点名称;每个连线具有各自的连线属性,其中,所述连线属性包括连线标识码以及连线对应连接的目标节点的节点标识码。
优选地,所述流程更改指令为属性替换指令,其中,所述属性替换指令中携带有节点标识码;
所述接收用户所输入的流程更改指令,并依据所述流程更改指令以及所述基准模板构建差异模板包括:
接收用户所输入的属性替换指令,并依据所述属性替换指令确定节点标识码;
通过所述节点标识码在所述基准模板上定位相应节点的位置,依据所述属性替换指令对相应节点的属性进行替换,构建差异模板;
所述将所述差异对象与所述基准流程对象进行比较,并依据所述差异对象对所述基准流程对象进行修改,创建新的流程对象包括:
将所述差异对象与所述基准流程对象进行比较,并依据所述差异对象对所述基准流程对象进行属性替换,创建新的流程对象。
优选地,所述流程更改指令为删除节点指令,所述删除节点指令中携带有被删除节点的节点标识码以及与被删除的节点相关联的目标连线的连线属性;
所述接收用户所输入的流程更改指令,并依据所述流程更改指令以及所述基准模板构建差异模板包括:
接收用户所输入的删除节点指令,并依据所述删除节点指令确定被删除节点的节点标识码以及与被删除的节点相关联的目标连线的连线属性;
通过所述节点标识码在所述基准模板上定位被删除节点的位置,依据所述与被删除的节点相关联的目标连线的连线属性,确定需要被连接的目标节点的标识码和/或需要被删除的连线,构建差异模板;
所述将所述差异对象与所述基准流程对象进行比较,并依据所述差异对象对所述基准流程对象进行修改,创建新的流程对象包括:
将所述差异对象与所述基准流程对象进行比较,并依据所述差异对象对所述基准流程对象执行删除节点操作;
删除与被删除节点相关联的连线,并在需要被连接的目标节点之间添加新的连线,创建新的流程对象。
优选地,所述流程更改指令为新增节点指令,其中,所述新增节点指令中携带有与新增节点相关联的目标节点的节点标识码;
所述接收用户所输入的流程更改指令,并依据所述流程更改指令以及所述基准模板构建差异模板包括:
接收用户所输入的新增节点指令,并依据所述新增节点指令确定与新增节点相关联的目标节点的节点标识码;
依据所述目标节点的节点标识码确定新增节点的节点位置,并增加所述新增节点与所述目标节点之间的连线,构建差异模板。
优选地,与所述新增节点相关联的节点数目为两个,所述新增节点指令中携带有与新增节点相关联的前一目标节点的节点标识码,以及与新增节点相关联的后一目标节点的节点标识码;
所述依据所述目标节点的节点标识码确定新增节点的节点位置,并增加所述新增节点与所述目标节点之间的连线,构建差异模板包括:
依据前一目标节点的节点标识码以及后一目标节点的节点标识码,确定连接前一目标节点以及后一目标节点的连线;
删除前一目标节点以及后一目标节点之间的连线;
将前一目标节点与新增节点建立连接,将新增节点与后一目标节点建立连接,以构建差异模板。
优选地,所述获取基准流程对象,并依据基准流程对象构建预设格式的基准模板包括:
获取基准流程对象,对所述基准流程对象进行序列化处理,构建XML格式的基准模板。
优选地,所述对所述差异模板进行处理,得到差异对象包括:
对所述差异模板进行反序列化处理,得到差异对象。
第二方面,本发明提供一种创建流程的装置,包括至少一个处理器;以及,与所述至少一个处理器通信连接的存储器;其中,所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被程序设置为执行第一方面所述的创建流程的方法。
第三方面,本发明还提供了一种非易失性计算机存储介质,所述计算机存储介质存储有计算机可执行指令,该计算机可执行指令被一个或多个处理器执行,用于完成第一方面所述的创建流程的方法。
与现有技术相比,本发明实施例的有益效果在于:本发明的创建流程的方法,首先将基准流程对象转换为基准模板,用户在基准模板的基础上,依据实际需求输入流程更改指令。然后,根据用户所输入的流程更改指令以及基准模板构建差异模板,并将差异模板转化为差异对象。最后,再依据差异对象对基准流程对象进行修改,得到新的流程对象。通过该创建流程的方法,可以实现批量化创建新的流程对象的目的,以实现与新的流程对象相匹配的业务。该创建流程的方法操作简单、适用性广,能够基于基准流程对象批量生成新的流程对象,以满足不同业务的需求,节省时间,可以极大的提高效率。
【附图说明】
为了更清楚地说明本发明实施例的技术方案,下面将对本发明实施例中所需要使用的附图作简单地介绍。显而易见地,下面所描述的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明实施例提供的一种创建流程的方法的流程示意图;
图2是本发明实施例提供的一种基准流程对象的结构示意图;
图3是本发明实施例提供的另一种基准流程对象的结构示意图;
图4是本发明实施例提供的又一种基准流程对象的结构示意图;
图5是本发明实施例提供的另一种创建流程的方法的流程示意图;
图6是本发明实施例提供的一种创建流程的装置的结构示意图。
【具体实施方式】
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
实施例1:
目前,在数据中转流程配置中,通常需要配置许多相关流程,而在这些流程之间存在着极大的相似之处,例如,在某些数据源配置或流程节点参数上存在差异。当类似的流程达到一定数量时,在流程配置和管理上都是通过手工操作进行修改的,工作量庞大,无论修改流程或是新增流程都将花费大量的时间,极大影响效率。为了解决前述问题,本发明提出一种创建流程的方法,该创建流程的方法可以实现批量化创建新的流程对象的目的,以实现与新的流程对象相匹配的业务。该创建流程的方法操作简单、适用性广,能够基于基准流程对象批量生成新的流程对象,以满足不同业务的需求,节省时间,可以极大的提高效率。
下面结合图1~图4说明本实施例创建流程的方法,该创建流程的方法具体步骤如下:
步骤10:获取基准流程对象,并依据所述基准流程对象构建预设格式的基准模板。
在实际应用场景中,依据业务需求创建业务流程,并可视化显示业务的流程进度以及业务流程的状态。例如,数据清洗流程、项目研发流程以及奖金核算流程等。
在实际使用过程中,存在大量相似的流程(例如,同一个部门的很多流程大多相似,同一种类型的流程大多相似),为了便于管理流程业务,同时为了便于依据新的业务需求创建新的流程对象,在本实施例中,可以依据业务的类型以及业务部门等因素,配置相应的基准业务流程,并依据基准业务流程获取基准流程对象,其中,该基准流程对象涵盖了基本的业务需求,在业务需求变更时,可以在基准流程对象的基础上进行修改,得到新的流程对象,以实现与新的流程对象相匹配的业务需求。
由于基准流程对象的表现形式为代码,例如,java对象,用户无法直观的获取到相应的内容,进而无法依据基准流程对象进行修改,而得到与新的业务需求匹配的流程对象,因此,需要对基准流程对象进行处理,以得到预设格式的基准模板,其中,该基准模板具有人机可读的特点(即,机器以及用户均能识别)。在本实施例中,对基准流程对象进行序列化处理,构建XML(eXtensibleMarkupLanguage,简写为XML)格式的基准模板。
举例而言,业务流程为ETL(Extract-Transform-Load,简写ETL)流程,该ETL流程用于实现对数据进行抽取、清洗以及装载等过程。当数据源配置不同时,ETL流程也会相应地存在差异,为了提高效率,在实际应用场景中,可以依据ETL的基本需求创建基准ETL流程,在对数据进行ETL处理的过程中,可以依据数据源的配置确定新的ETL流程与基准ETL流程之间的差异,然后依据该差异对基准ETL流程进行修改,得到新的ETL流程,从而对数据进行处理。
步骤11:接收用户所输入的流程更改指令,并依据所述流程更改指令以及所述基准模板构建差异模板。
在本实施例中,用户依据实际业务需求,输入流程更改指令,依据基准模板的格式以及属性对象标签(例如,用于表示节点的名称的属性对象、用于表示节点的标识码的属性对象等),构建差异模板。其中,差异模板与基准模板的格式以及属性对象标签相同,以保证差异模板在进行反序列化处理后,可以转换为相应的java对象,进而对基准流程对象进行修改,以得到新的流程对象。
在实际应用场景中,每一个流程实际上是有多个节点、节点属性、连线以及连线属性等数据按照一定的关联关系绑定形成的事务/业务流程,以实现相应的事务/业务需求。因此,所述基准流程对象包括多个节点以及节点之间的连线,每个节点具有各自的节点属性,其中,所述节点属性包括节点标识码以及节点名称;每个连线具有各自的连线属性,其中,所述连线属性包括连线标识码以及连线对应连接的目标节点的节点标识码。
其中,流程更改指令可以为修改节点属性、删除节点、新增节点或者其他更改需求,依据实际情况而定。
步骤12:对所述差异模板进行处理,得到差异对象。
在本实施例中,对所述差异模板进行反序列化处理,得到差异对象。例如,将XML格式的模板转换为java对象。
步骤13:将所述差异对象与所述基准流程对象进行比较,并依据所述差异对象对所述基准流程对象进行修改,创建新的流程对象,以实现与所述新的流程对象相匹配的业务需求。
在本实施例中,首先将所述差异对象与所述基准流程对象进行比较,并依据所述差异对象对所述基准流程对象进行修改,创建新的流程对象,以实现与所述新的流程对象相匹配的业务需求。
在实际应用场景中,根据流程更改指令的不同,基于基准流程对象创建新的流程对象的方式也相应存在差异,具体如下:
(1)在其中的一个实施例中,流程更改指令为属性替换指令,其中,所述属性替换指令中携带有节点标识码。
步骤11:所述接收用户所输入的流程更改指令,并依据所述流程更改指令以及所述基准模板构建差异模板具体包括如下步骤:
首先,接收用户所输入的属性替换指令,并依据所述属性替换指令确定节点标识码。然后,通过所述节点标识码在所述基准模板上定位相应节点的位置,依据所述属性替换指令对相应节点的属性进行替换,构建差异模板。具体而言,每个节点下包括与该节点对应的基本属性信息,例如,某个节点下包括人物名字、人物年龄以及人物住址等,属性替换指令为某个节点的属性替换指令,例如,替换人物名字、人物年龄以及人物住址等。
在得到差异模板后,对差异模板进行反序列化,得到差异对象,然后执行步骤13,创建新的流程对象。
步骤13:所述将所述差异对象与所述基准流程对象进行比较,并依据所述差异对象对所述基准流程对象进行修改,创建新的流程对象具体包括如下步骤:
将所述差异对象与所述基准流程对象进行比较,并依据所述差异对象对所述基准流程对象进行属性替换,创建新的流程对象。
举例而言,基准流程对象的某个节点下的属性值对应为name=tom,age=100,p=hb,c=js,差异对象相应节点下的属性值为name=jack,age=90,p=ppp,则依据差异对象对基准流程对象进行属性替换,创建新的流程对象相应节点下的属性值为name=jack,age=90,p=ppp,c=js。具体代码如下:
(2)在另一个实施例中,流程更改指令为删除节点指令,所述删除节点指令中携带有被删除节点的节点标识码以及与被删除的节点相关联的目标连线的连线属性。
步骤11:所述接收用户所输入的流程更改指令,并依据所述流程更改指令以及所述基准模板构建差异模板具体包括如下步骤:
首先,接收用户所输入的删除节点指令,并依据所述删除节点指令确定被删除节点的节点标识码以及与被删除的节点相关联的目标连线的连线属性;通过所述节点标识码在所述基准模板上定位被删除节点的位置,依据所述与被删除的节点相关联的目标连线的连线属性,确定需要被连接的目标节点的标识码和/或需要被删除的连线,构建差异模板。
在得到差异模板后,对差异模板进行反序列化,得到差异对象,然后执行步骤13,创建新的流程对象。
步骤13:所述将所述差异对象与所述基准流程对象进行比较,并依据所述差异对象对所述基准流程对象进行修改,创建新的流程对象具体包括如下步骤:
将所述差异对象与所述基准流程对象进行比较,并依据所述差异对象对所述基准流程对象执行删除节点操作;删除与被删除节点相关联的连线,并在需要被连接的目标节点之间添加新的连线,创建新的流程对象。
举例而言,如图2所示,基准流程对象包括三个节点,具体为:表/视图读取节点、排序节点以及文本文件装载节点;基准流程对象还包括两个连线,表/视图读取节点与排序节点之间的连线,排序节点与装载节点之间的连线。每个节点具有各自对应的节点标识码,每个连线具有各自对应的标识码。基准流程对象对应的基准模板如下:
<Activity id="17425552681795584"type=tableSource……/>//表/视图读取节点
<Activity id="15325522221565523"type="SUCCESS_CONNECTION"sourceId="17425552681795584"targetId="12425552812492637"……/>//表/视图读取节点与排序节点之间的连线
<Activity id="12425552812492637"type="sort"……/>//排序节点
<Activity id="18936552827352618"type="SUCCESS_CONNECTION"sourceId="12425552812492637"targetId="11956782822232348"……/>//排序节点与装载节点之间的连线
<Activity id="11956782822232348"type=tableDestination……/>//文本文件装载节点
用户输入删除排序节点的删除节点指令,该删除指令中携带有删除标记信息(modifytype="delete"),在检测到删除标记信息后,执行删除操作。具体而言,删除指令中还携带有排序节点的节点标识码,以及需要被删除的连线。差异模板如下:
<Activity modifytype="delete"id="15325522221565523"type="SUCCESS_CONNECTION"sourceId="17425552681795584"targetId="12425552812492637"/>//删除读取节点与排序节点之间的连线
<Activity modifytype="delete"id="12425552812492637"type="sort"……/>//删除排序节点
<Activity modifytype="delete"id="18936552827352618"
type="SUCCESS_CONNECTION"sourceId="12425552812492637"
targetId="11956782822232348"……/>//删除排序节点与装载节点之间的连线
<Activity modifytype="add"id="13457552822910862"
type="SUCCESS_CONNECTION"sourceId="17425552681795584"
targetId="11956782822232348"……/>//添加读取节点到装载节点之间的连线
实际的处理过程为:依次删除读取节点与排序节点之间的连线、删除排序节点、删除排序节点与装载节点之间的连线,然后再添加读取节点到装载节点之间的连线。在得到差异模板之后执行步骤13,得到新的流程对象,具体如图3所示。
(3)在又一个实施例中,流程更改指令为新增节点指令,其中,所述新增节点指令中携带有与新增节点相关联的目标节点的节点标识码。
步骤11:所述接收用户所输入的流程更改指令,并依据所述流程更改指令以及所述基准模板构建差异模板具体包括如下步骤:
首先,接收用户所输入的新增节点指令,并依据所述新增节点指令确定与新增节点相关联的目标节点的节点标识码,然后,依据所述目标节点的节点标识码确定新增节点的节点位置,并增加所述新增节点与所述目标节点之间的连线,构建差异模板。
举例而言,与所述新增节点相关联的节点数目为两个,所述新增节点指令中携带有与新增节点相关联的前一目标节点的节点标识码,以及与新增节点相关联的后一目标节点的节点标识码。首先,依据前一目标节点的节点标识码以及后一目标节点的节点标识码,确定连接前一目标节点以及后一目标节点的连线;然后,删除前一目标节点以及后一目标节点之间的连线;最后,将前一目标节点与新增节点建立连接,将新增节点与后一目标节点建立连接,以构建差异模板。
在得到差异模板后,对差异模板进行反序列化,得到差异对象,然后执行步骤13,创建新的流程对象。
结合图2以及图4,举例说明,用户输入增加数据清洗转换节点,该数据清洗转换节点的前一目标节点为表/视图读取节点,该数据清洗转换节点的后一目标节点为排序节点,则依据读取节点以及排序节点对应的标识码可以确定数据清洗转换节点的位置。由于读取节点以及排序节点之间存在连线,首先将读取节点以及排序节点之间的连线删除,然后再添加读取节点与数据清洗转换节点之间的连线,数据清洗转换节点与装载节点之间的连线,以得到新的流程对象(如图4所示)。关于添加节点的具体操作与上述删除节点的过程类似,可参照前述描述,在此,不再赘述。
实施例2:
在实际应用场景中,存在同时创建多个新的流程对象,而每个新的流程对象相对于基准流程对象的差异相同,新的流程对象之间的差异只是相同属性对应的属性值不同,为了便于批量创建新的流程对象,避免不必要的重复操作,提高工作效率,本实施例在上述实施例1的基础上进行了改进,提出了另一种创建流程的方法。
区别于实施例1,本实施例的创建流程的方法,采用变量表达式的方式创建参照模板,然后再依据实际的需求为变量表达式中的变量进行赋值,以使参照模板实施例化,得到对应的差异模板。本实施例的创建流程的方法可以依据变量表达式进行动态替换,批量创建多个新的流程对象。下面参阅图5说明创建流程的方法,该创建流程的方法具体包括如下步骤:
步骤20:获取基准流程对象,并依据所述基准流程对象构建预设格式的基准模板。
步骤21:依据所述基准模板的格式,创建以变量标记预设属性对象的属性值的参照模板。
在本实施例中,依据所述基准模板的格式,创建参照模板,其中,所述参照模板与所述基准模板的格式以及属性对象标签相同。在所述参照模板中,每一属性对象对应的属性值均以变量标记。例如,采用变量表达式为{},以变量标记属性对象对应的属性值,(如,person name=\"{name}\",person name为属性对象,{name}为以变量标记属性对象对应的属性值)。此外,属性对象与流程对象的某个属性具有唯一对应关系,可以批量对变量进行赋值,以实例化参照模板,得到相应的差异模板。
步骤22:接收用户所输入的流程更改指令,依据所述流程更改指令以及所述预设属性对象确定差异数据。
在本实施例中,流程更改指令携带有节点名称或节点标识码等唯一的属性信息,通过该属性信息与预设的属性对象形成一一映射关系,从而得到差异数据。
步骤23:通过所述差异数据为所述变量赋值,将所述参照模板实例化,从而构建差异模板。
在本实施例中,通过所述差异数据为所述变量赋值,将所述参照模板实例化,从而构建差异模板。
步骤24:对所述差异模板进行处理,得到差异对象。
步骤25:将所述差异对象与所述基准流程对象进行比较,并依据所述差异对象对所述基准流程对象进行修改,创建新的流程对象,以实现与所述新的流程对象相匹配的业务需求。
其中,步骤20、步骤24以及步骤25与实施例1的相应步骤相同,在此不再赘述。
在一具体应用场景中,预设属性对象为person name、age以及address p(参照模板如下代码所示),即,需要实例化的变量为{name},{age}以及p_value;然后,再对变量进行赋值,name=Jack,age=22,p_value=pp,从而对参照模板进行实例化,得到对应的差异模板。
在另一应用场景中,预设属性对象为id、activityNum以及name(参照模板如下代码所示),即,需要实例化的变量为{num}、{activityNum}以及{name}。
在一文本文件或者excel中输入需要修改的数据,如下:
num=1,activityNum=1,name=文本文件2;num=2,activityNum=1,name=文本文件3;num=3,activityNum=1,name=文本文件4;num=4,activityNum=1,name=文本文件5。
在读取到文本文件或者excel中的内容后,依次为num、activityNum以及name赋值,以实例化参照模板,进而得到四个不同的差异模板,然后再执行步骤24以及步骤25,得到四个新的流程对象,以实现与新的流程对象相匹配的业务需求。
通过上述方法可以依据变量表达式进行动态替换,批量创建多个新的流程对象,以满足不同的业务需求,提高工作效率。
区别于现有技术,本发明的创建流程的方法,首先将基准流程对象转换为基准模板,用户在基准模板的基础上,依据实际需求输入流程更改指令。然后,依据用户的流程更改指令以及基准模板构建差异模板,并将差异模板转化为差异对象。最后,再依据差异对象对基准流程对象进行修改,得到新的流程对象。通过该创建流程的方法,可以实现批量化创建新的流程对象的目的,以实现与新的流程对象相匹配的业务。该创建流程的方法操作简单、适用性广,能够基于基准流程对象批量生成新的流程对象,以满足不同业务的需求,节省时间,可以极大的提高效率。
实施例3:
请参阅图6,图6是本发明实施例提供的一种创建流程的装置的结构示意图。本实施例的创建流程的装置包括一个或多个处理器61以及存储器62。其中,图6中以一个处理器61为例。
处理器61和存储器62可以通过总线或者其他方式连接,图6中以通过总线连接为例。
存储器62作为一种基于创建流程的非易失性计算机可读存储介质,可用于存储非易失性软件程序、非易失性计算机可执行程序以及模块,如实施例1中的创建流程的方法以及对应的程序指令。处理器61通过运行存储在存储器62中的非易失性软件程序、指令以及模块,从而执行创建流程的方法的各种功能应用以及数据处理,实现实施例1和/或实施例2的创建流程的方法的功能。
其中,存储器62可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他非易失性固态存储器件。在一些实施例中,存储器62可选包括相对于处理器61远程设置的存储器,这些远程存储器可以通过网络连接至处理器61。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
关于创建流程的方法请参照图1~图5及相关的文字描述在此,不再赘述。
值得说明的是,上述装置和***内的模块、单元之间的信息交互、执行过程等内容,由于与本发明的处理方法实施例基于同一构思,具体内容可参见本发明方法实施例中的叙述,此处不再赘述。
本领域普通技术人员可以理解实施例的各种方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,该程序可以存储于一计算机可读存储介质中,存储介质可以包括:只读存储器(Read Only Memory,简写为ROM)、随机存取存储器(Random AccessMemory,简写为RAM)、磁盘或光盘等。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。