在SQR中使用Break逻辑
目录(?) [+]
- 不使用Break逻辑
- 使用Print命令的On-Break选项
- 使SQR程序API Ware
在报表中,当一列值改变时,也就是出现break时,通常会做一些特殊处理,比如跳过一行、在break之前或之后执行某个procedure、打印小计等等。
不使用Break逻辑
如下例,针对选择的每一个员工,打印该员工的姓名、公司和员工薪水。该例不使用任何break逻辑:
- !****************************
- !An employee list program that uses no break logic
- !****************************
- Begin-Program
- !****************************
- Do List_Employees
- End-Program
- !****************************
- Begin-Heading 2
- !****************************
- Print 'Company' (1,1)
- Print 'Paygroup' (,+2)
- Print 'Emplid' (,+2)
- Print 'Name ' (,+4)
- Print 'Annual Salary' (,+15)
- Print ' ' (2,1)
- End-Heading
- !*****************************************
- Begin-Procedure List_Employees
- !*****************************************
- Begin-Select
- B.Company (,1,7)
- B.Paygroup (,+2,8)
- A.Emplid (,+2,8)
- A.Name (,+2,20)
- B.Annual_Rt (,+2,12) Edit $,$$$,$$$.00
- Position (+1)
- From PS_Personal_Data A, PS_Job B
- Where A.Emplid=B.Emplid
- And B.Effdt=(Select Max(D.Effdt) From PS_Job D
- Where D.Effdt<=Sysdate
- And D.Emplid=B.Emplid
- And D.Empl_Rcd=B.Empl_Rcd)
- And B.Effseq = (Select Max(C.Effseq) from PS_Job C
- Where C.Emplid=B.Emplid
- And C.Empl_Rcd = B.Empl_Rcd
- And C.Effdt=B.Effdt)
- Order By B.Company, B.Paygroup, A.Emplid
- End-Select
- End-Procedure
- !****************************
!****************************
!An employee list program that uses no break logic
!****************************
Begin-Program
!****************************
Do List_Employees
End-Program
!****************************
Begin-Heading 2
!****************************
Print 'Company' (1,1)
Print 'Paygroup' (,+2)
Print 'Emplid' (,+2)
Print 'Name ' (,+4)
Print 'Annual Salary' (,+15)
Print ' ' (2,1)
End-Heading
!*****************************************
Begin-Procedure List_Employees
!*****************************************
Begin-Select
B.Company (,1,7)
B.Paygroup (,+2,8)
A.Emplid (,+2,8)
A.Name (,+2,20)
B.Annual_Rt (,+2,12) Edit $,$$$,$$$.00
Position (+1)
From PS_Personal_Data A, PS_Job B
Where A.Emplid=B.Emplid
And B.Effdt=(Select Max(D.Effdt) From PS_Job D
Where D.Effdt<=Sysdate
And D.Emplid=B.Emplid
And D.Empl_Rcd=B.Empl_Rcd)
And B.Effseq = (Select Max(C.Effseq) from PS_Job C
Where C.Emplid=B.Emplid
And C.Empl_Rcd = B.Empl_Rcd
And C.Effdt=B.Effdt)
Order By B.Company, B.Paygroup, A.EmplidEnd-Select
End-Procedure
!****************************
该SQR报表输出如下:
使用Print命令的On-Break选项
当某个输出字段的值改变时,On-Break选项会触发指定的操作。可以指定 On-Break 选项的一些限定词(qualifier),这些限定词定义了当break出现时要采取的操作。使用最频繁的限定词是Print(不要与Print命令搞混了)。Print 限定词是On-Break选项的默认限定词。当制定On-Break选项时不必指定该限定词。当使用On-break 选项的 Print 限定词时,可以指定 break 字段何时被打印或不被打印:
- Always 总是打印Break 字段。
- Change 只有当break字段的值改变时才打印。默认为Change。
- Change/Top-Page 1.当break字段的值改变时打印 2.在每一页的顶部时打印
- Never break字段永远不打印
如下例:
- !****************************
- !Using break logic in the employee list program
- !****************************
- Begin-Program
- !****************************
- Do List_Employees
- End-Program
- !****************************
- Begin-Heading 2
- !****************************
- Print 'Company' (1,1)
- Print 'Paygroup' (,+2)
- Print 'Emplid' (,+2)
- Print 'Name ' (,+4)
- Print 'Annual Salary' (,+15)
- Print ' ' (2,1)
- End-Heading
- !*****************************************
- Begin-Procedure List_Employees
- !*****************************************
- Begin-Select
- ! We use the On-Break option below:
- B.Company (,1,7) On-Break Print=Change/Top-Page Skiplines=1
- B.Paygroup (,+2,8)
- A.Emplid (,+2,8)
- A.Name (,+2,20)
- B.Annual_Rt (,+2,12) edit $,$$$,$$$.00
- Position (+1)
- From PS_Personal_Data A, PS_Job B
- Where A.Emplid=B.Emplid
- And B.Effdt=(Select Max(D.Effdt) From PS_Job D
- Where D.Effdt<=Sysdate
- And D.Emplid=B.Emplid
- And D.Empl_Rcd=B.Empl_Rcd)
- And B.Effseq = (Select Max(C.Effseq) from PS_Job C
- Where C.Emplid=B.Emplid
- And C.Empl_Rcd = B.Empl_Rcd
- And C.Effdt=B.Effdt)
- Order By B.Company, B.Paygroup, A.Emplid
- End-Select
- End-Procedure
- !****************************
!****************************
!Using break logic in the employee list program
!****************************
Begin-Program
!****************************
Do List_Employees
End-Program
!****************************
Begin-Heading 2
!****************************
Print 'Company' (1,1)
Print 'Paygroup' (,+2)
Print 'Emplid' (,+2)
Print 'Name ' (,+4)
Print 'Annual Salary' (,+15)
Print ' ' (2,1)
End-Heading
!*****************************************
Begin-Procedure List_Employees
!*****************************************
Begin-Select
! We use the On-Break option below:
B.Company (,1,7) On-Break Print=Change/Top-Page Skiplines=1
B.Paygroup (,+2,8)
A.Emplid (,+2,8)
A.Name (,+2,20)
B.Annual_Rt (,+2,12) edit $,$$$,$$$.00Position (+1)
From PS_Personal_Data A, PS_Job B
Where A.Emplid=B.Emplid
And B.Effdt=(Select Max(D.Effdt) From PS_Job D
Where D.Effdt<=Sysdate
And D.Emplid=B.Emplid
And D.Empl_Rcd=B.Empl_Rcd)
And B.Effseq = (Select Max(C.Effseq) from PS_Job C
Where C.Emplid=B.Emplid
And C.Empl_Rcd = B.Empl_Rcd
And C.Effdt=B.Effdt)
Order By B.Company, B.Paygroup, A.Emplid
End-Select
End-Procedure
!****************************
输出结果如下:
1.当break字段的值改变时打印:
2.在每一页的顶部时打印
在上面的例子中,我将Company字段作为一个break字段,对其使用On-Break选项。除了Pritn限定词外,还是用了另外一个限定词Skiplines。该限定词指定当出现break时应该跳过多少行。
使SQR程序API Ware
要想在进程调度器中执行SQR程序,且又要使进程调度器能够更新SQR程序的运行状态,就必须要使SQR程序API Ware。也就是说必须在SQR成添加一些能够将SQR程序的状态返回给进程调度器的代码,从而让Process Monitor能够反应程序的当前状态。可以通过#Include命令包含PeopleSoft 自带的一些SQC文件。如上例,因为没有#include任何SQC文件,所以在进程监控器中出现如下结果:
可见程序已经成功Posted,但是状态却为Error。
修改TEST10B.SQR程序:
- !****************************
- !TEST10B.SQR
- !Using break logic in the employee list program
- !****************************
- <span style="color: rgb(255, 0, 0);">#Include 'setenv.sqc' !Set environment</span>
- <span style="color: rgb(255, 0, 0);">begin-setup
- #Include 'setupdb.sqc'
- end-setup</span>
- Begin-Program
- <span style="color: rgb(255, 0, 0);">Do Stdapi-Init</span>
- Do List_Employees
- <span style="color: rgb(255, 0, 0);">Do Stdapi-Term</span>
- End-Program
- !****************************
- Begin-Heading 2
- !****************************
- Print 'Company' (1,1)
- Print 'Paygroup' (,+2)
- Print 'Emplid' (,+2)
- Print 'Name ' (,+4)
- Print 'Annual Salary' (,+15)
- Print ' ' (2,1)
- End-Heading
- !*****************************************
- Begin-Procedure List_Employees
- !*****************************************
- Begin-Select
- ! We use the On-Break option below:
- B.Company (,1,7) On-Break Print=Change/Top-Page Skiplines=1
- B.Paygroup (,+2,8)
- A.Emplid (,+2,8)
- A.Name (,+2,20)
- B.Annual_Rt (,+2,12) edit $,$$$,$$$.00
- Position (+1)
- From PS_Personal_Data A, PS_Job B
- Where A.Emplid=B.Emplid
- And B.Effdt=(Select Max(D.Effdt) From PS_Job D
- Where D.Effdt<=Sysdate
- And D.Emplid=B.Emplid
- And D.Empl_Rcd=B.Empl_Rcd)
- And B.Effseq = (Select Max(C.Effseq) from PS_Job C
- Where C.Emplid=B.Emplid
- And C.Empl_Rcd = B.Empl_Rcd
- And C.Effdt=B.Effdt)
- Order By B.Company, B.Paygroup, A.Emplid
- End-Select
- End-Procedure
- !****************************
- <span style="color: rgb(255, 0, 0);">#Include 'datetime.sqc' !Routines for date and time formatting
- #Include 'stdapi.sqc'</span>
!****************************
!TEST10B.SQR
!Using break logic in the employee list program
!****************************#Include 'setenv.sqc' !Set environment
begin-setup
#Include 'setupdb.sqc'
end-setupBegin-ProgramDo Stdapi-InitDo List_EmployeesDo Stdapi-Term
End-Program
!****************************
Begin-Heading 2
!****************************
Print 'Company' (1,1)
Print 'Paygroup' (,+2)
Print 'Emplid' (,+2)
Print 'Name ' (,+4)
Print 'Annual Salary' (,+15)
Print ' ' (2,1)
End-Heading
!*****************************************
Begin-Procedure List_Employees
!*****************************************
Begin-Select
! We use the On-Break option below:
B.Company (,1,7) On-Break Print=Change/Top-Page Skiplines=1
B.Paygroup (,+2,8)
A.Emplid (,+2,8)
A.Name (,+2,20)
B.Annual_Rt (,+2,12) edit $,$$$,$$$.00Position (+1)
From PS_Personal_Data A, PS_Job B
Where A.Emplid=B.Emplid
And B.Effdt=(Select Max(D.Effdt) From PS_Job D
Where D.Effdt<=Sysdate
And D.Emplid=B.Emplid
And D.Empl_Rcd=B.Empl_Rcd)
And B.Effseq = (Select Max(C.Effseq) from PS_Job C
Where C.Emplid=B.Emplid
And C.Empl_Rcd = B.Empl_Rcd
And C.Effdt=B.Effdt)
Order By B.Company, B.Paygroup, A.Emplid
End-Select
End-Procedure
!****************************
#Include 'datetime.sqc' !Routines for date and time formatting
#Include 'stdapi.sqc'
运行结果如下:
在SQR中使用Break逻辑相关推荐
- java如何停止函数循环_在Java中使用break来退出循环是不好的做法吗?
好主不. 有时在满足总体要求的循环中可能会出现某些情况,而不满足逻辑循环条件. 在这种情况下,使用break ,来阻止你毫无意义地在循环中循环. 例 String item; for(int x = ...
- switch中的break和return的区别
概要 return是直接返回,不执行后续的代码 break只是跳到switch的外面,继续执行后面的代码 使用场景: 如果是在函数中的switch case判断中需要返回qie,则使用return 如 ...
- 关于线程池运行过程中,业务逻辑出现未知异常导致线程中断问题反思
最近在项目研发中的关于线程池应用过程中由于业务逻辑异常导致的线程中断,但程序未中断导致的脏数据问题 话不多说,在最近最新的一个版本发布过程中,业务需要,我们要定期去给客户预留出可用的资源数据,提供客 ...
- 简述Python中的break和continue的区别
众所周知在Python中,break是结束整个循环体,而continue则是结束本次循环再继续循环. 但是作为一个新手的你,还是不明白它们的区别,这里用一个生动的例子说明它们的区别,如下: 1.con ...
- Scala中没有break和continue, 如何退出循环
Java是指令式风格,Scala是函数式风格. 在Scala中,应该尽量适用循环,而是应用函数的方式来处理. Scala并没有提供break和continue语句来退出循环,那么如果我们又确实要怎么办 ...
- JAVA中的break[标签]continue[标签]用法
原文:JAVA中的break[标签]continue[标签]用法 注意:JAVA中的标签必须放在循环之前,且中间不能有其他语句.例如:tag:for或while或do--while; 1.使用brea ...
- centos 调整home分区xfs_Linux中对lvm逻辑卷分区大小的调整教程(针对xfs与ext4不同文件系统)...
前言 当我们在安装系统的时候,由于没有合理分配分区空间,在后续维护过程中,发现有些分区空间不够使用,而有的分区空间却有很多剩余空间.如果这些分区在装系统的时候使用了lvm(前提是这些分区要是lvm逻辑 ...
- 攻防演练中的业务逻辑漏洞及检测思路
随着各类前后端框架的成熟和完善,传统的SQL注入.XSS等常规漏洞在Web系统里逐步减少,而攻击者更倾向于使用业务逻辑漏洞来进行突破.业务逻辑漏洞,具有攻击特征少.自动化脆弱性工具无法扫出等特点,也为 ...
- 代码的世界中,一个逻辑套着另外一个逻辑,如何让每一种逻辑在代码中都有迹可循?...
代码的世界中,一个逻辑套着另外一个逻辑,如何让每一种逻辑在代码中都有迹可循? 这正式框架的意义所在!
最新文章
- 常见问题一之项目报错排查
- 含有参数的sql拼接_关于SQL语句参数中为多个带.字符串。
- java 内存空间_怎样用java实现存储空间动态分配
- P1038 神经网络(拓扑排序)
- php rsa加密实例,关于PHP语言的RSA加密实例讲解
- 树莓派+android things+实时音视频传输demo之遥控小车
- cryptapi双向认证_2019 08 28 netty案例,netty4.1中级拓展篇十三《Netty基于SSL实现信息传输过程中双向加密验证》...
- 曾辉机器人_工业机器人市占率5年来首现下滑 “春寒”中国产机器人如何突围?...
- 《机器学习实战:基于Scikit-Learn、Keras和TensorFlow第2版》-学习笔记(1)
- C# RestSharp的http连接
- womic网络错误_【无线麦克风(WO Mic)】无线麦克风(WO Mic)安卓版(Android)3.2下载_太平洋下载中心...
- termux配置python安装kali_利用termux安装kali
- Android任务栈简介
- java的duplicate用法_Java IntBuffer duplicate()用法及代码示例
- 使用VsCode管理Gitee仓库中的项目
- 折叠面板的改进【Amaze UI】
- 深度学习FPGA实现基础知识17(图像处理卷积运算 矩阵卷积)
- 一些值得一看的博友文章地址
- 计算机网考里操作题发邮件,计算机网考操作题题型.doc
- 【干货】教你用python给你的微信朋友群发私人订制的藏头诗