# 批处理设置 ## 批处理作用 批处理变量是在调度任务中设置的一种特殊变量。 批处理变量可以传递给报表对报表数据进行处理,也可以直接在调度任务中使用,更灵活的控制调度任务的执行: + 批处理变量可以传给调度对象。比如,调度对象是一个报表,该报表有参数和宏,则在调度任务中可以设置批处理变量,在任务执行时将相应的值传给报表,作为报表的参数和宏的值。 + 批处理变量也可以在调度任务设置中使用。比如,在输出设置的文件名中,可以使用批处理变量,从而生成动态的文件名。 批处理变量可以是固定值也可以是根据表达式计算得出动态值,亦可以是能被调度任务循环遍历的一组值。 批处理变量值的个数决定了任务在一次执行时会产生的实例数。 ![](/uploads/projects/7.11_online/uploads/sjjc/images/m_3ef17814ed1376d79d43a0ca2598b9fd_r.png) ## 应用场景-报表中使用批处理变量 很多时候,报表中的某些内容希望在调度任务执行的时候动态获取。 这时候就可以在批处理变量中定义变量。在调度任务的执行过程中,报表可以动态获取变量值。 ### 示例1 例如在调度任务中,需要在推送的报表中显示当前任务执行时的时间: + Step1:报表设计时,添加参数arg0用于接收时间值,然后报表中添加表达式,里如A1单元格填入表达式“=@arg0”。 + Step2:新建调度任务的时候,批处理设置添加批处理变量,变量名称execTime,取值方式为“表达式”,表达式为“now()”。 + Step3:调度任务选择任务处理对象为刚才设计的报表,并通过“设置条件和参数”绑定报表中参数“arg0”和批处理变量“execTime”的关系。 通过以上设置,在调度任务执行时推送的报表结果的A1单元格的值就是当前时间。 ### 示例2 例如调度任务需输出多个报表结果,含参数的报表使用批处理变量进行参数遍历。 报表参数的循环遍历,执行调度任务可能生成多个调度实例,每个实例运算报表时报表接受到的报表参数值都是不一样的,参数值根据批处理变量的集合结果逐一遍历: + Step1:报表设计:地区销售情况统计报表,报表中还有参数area(地区),传递不同的area值,返回不同地区销售情况统计结果。 + Step2:新建调度任务时,批处理设置添加批处理变量,变量名称areas,取值方式为“表达式”,表达式为list("东北","西北","华北","东南")。 + Step3:调度任务选择任务处理对象为地区销售情况统计报表,并通过“设置条件和参数”绑定报表中参数“area”和批处理变量“areas”的关系。 通过以上设置,在调度任务执行时就会根据批处理变量多个值的结果,分别得出东北,西北,华北,东南多个地区的销售情况统计结果,生成多个实例。 注意:如果报表中的参数名称和批处理变量中的名称一致,无需进行参数和批处理变量的绑定,报表参数会自动读批处理变量中的同名变量值。 ## 应用场景-调度任务中使用批处理变量 例如在推送报表的过程中,报表的推送路径或者报表的名称需要根据情况进行不同的设置。 这种情况下就可以在批处理变量设置中设置好变量,在推送路径和命名调度对象的时候调用。 ### 示例1 例如希望根据任务执行的年月日,将调度对象推送到FTP服务器不同的路径: + Step1:在批处理变量设置处添加3个变量,变量名称分别为year、month、day,变量值分别为year(now())、month(now())、day(now()) + Step2:在任务输出设置中输出FTP设置中FTP目录地址中输入/@year/@month/@day 这样调度任务执行时,报表结果推送到FTP服务器下“年月日”对应目录下。 ## 批处理变量的定义 批处理变量的定义界面如下: ![](/uploads/projects/7.11_online/uploads/sjjc/images/m_9601b5d360e9225a6548a81bcc2e6587_r.png) ## 变量名 如果该变量的计算结果要传给报表,那么,变量名称必须与报表对应的参数名称一致。 调度管理其他支持变量的定义项中,均可使用这里定义的变量,调用时,变量名称前加@。 例如:定义一个变量为temp,在“输出ftp设置”的“ftp目录地址”中使用,那么在该文本框输入@temp以调用temp变量。如下图: ![](/uploads/projects/7.11_online/uploads/sjjc/images/m_de37f38bead2c6ef4f6f4cf456e0755c_r.png) ## 取值方式 共分为4种取值方式: + 常量:一个确定的值。参数值可输入具体的值(如:数值、字符串等)。 + SQL:可定义一个可执行的sql语句,调度任务执行时相应计算出结果。SQL语句输入在“SQL”中。 + 表达式:可定义一个表达式,调度任务在执行时根据表达式计算出变量值。在“表达式”中输入表达式。例如: now()返回系统时间; + list(user1,user2)返回包括两个用户名user1,user2的数组。 + 自定义类:可定义一个由用户自己的程序作为变量来源。“自定义类”可定义一个完整的类路径,用于计算变量的值。如:com.runqianapp.schedule.argument.ArgumentTest。 ## 多个调度对象的变量 当一个任务设置了多个调度对象时,这些调度对象需要使用的变量均在批处理变量设置中进行设置。调度对象根据变量名进行引用。 特别地,批处理变量可以被多个调度对象共用。在不同调度对象中只需要引用同名变量即可。 ## 调度任务的执行遍历 批处理变量的运算结果可能是包含多个值的集合结果,例如批处理变量类型为表达式、SQL或者自定义时,其返回值均可能为多个值。 调度引擎在执行调度任务时会遍历批处理变量的值,并生成多个任务实例。 任务中如果设置了多个批处理变量(返回值均为多值集合),调度引擎执行时遍历他们的组合结果。 比如设置了批处理变量a(3个值集合)和b(5个值集合),调度引擎遍历后生成的实例个数为3*5(a的个数*b的个数)。 特殊的:提供组合式批处理变量定义,在使用sql取值或者自定义类取值定义批处理变量时可以一次定义多个变量,多个变量名称用英文逗号“,”分割,SQL语句和自定义类返回列和变量依次对应。这种批处理变量主要用于顺次每次遍历都要传入一组变量值的情况。比如id和name是两个元素组成的数组,每次遍历都传递一个数组给调度引擎进行任务处理,其中传递id给报表参数,传递name给邮件标题。调度引擎仅会按照返回的数组个数进行遍历,不再按照多个单独的批处理变量组合遍历。 ## 遍历执行的应用示例 1、定义批处理变量如下: ![](/uploads/projects/7.11_online/uploads/sjjc/images/m_d2f897a700a3f19b733b7a082c992d81_r.png) + 变量名为: id,name + sql 语句为: select DEMO_EMPLOYEE. 雇员 ID,DEMO_EMPLOYEE. 销售人员 from DEMO_EMPLOYEE + 批处理变量 id 对应 sql 执行后的雇员 ID 列的查询结果,批处理变量 name 对应 sql 执行后的销售人员列的查询结果 2、调度任务选择任务处理对象为”工资条”,并通过“设置条件和参数”绑定报表中参数“empid”和批处理变量“id”的关系。 3、在输出设置中选择邮件推送,并设置邮件标题为@name工资条 通过以上设置,在调度任务执行时就会根据批处理变量多组值的结果,分别计算出员工的工资条,并按照指定的邮件标题“员工姓名+工资条”推送邮件给员工。