目录(?) [+]

  1. 不使用Break逻辑
  2. 使用Print命令的On-Break选项
  3. 使SQR程序API Ware

在报表中,当一列值改变时,也就是出现break时,通常会做一些特殊处理,比如跳过一行、在break之前或之后执行某个procedure、打印小计等等。

不使用Break逻辑

如下例,针对选择的每一个员工,打印该员工的姓名、公司和员工薪水。该例不使用任何break逻辑:

[plain] view plain copy print ?
  1. !****************************
  2. !An employee list program that uses no break logic
  3. !****************************
  4. Begin-Program
  5. !****************************
  6. Do List_Employees
  7. End-Program
  8. !****************************
  9. Begin-Heading 2
  10. !****************************
  11. Print 'Company' (1,1)
  12. Print 'Paygroup' (,+2)
  13. Print 'Emplid' (,+2)
  14. Print 'Name ' (,+4)
  15. Print 'Annual Salary' (,+15)
  16. Print ' ' (2,1)
  17. End-Heading
  18. !*****************************************
  19. Begin-Procedure List_Employees
  20. !*****************************************
  21. Begin-Select
  22. B.Company (,1,7)
  23. B.Paygroup (,+2,8)
  24. A.Emplid (,+2,8)
  25. A.Name (,+2,20)
  26. B.Annual_Rt (,+2,12) Edit $,$$$,$$$.00
  27. Position (+1)
  28. From PS_Personal_Data A, PS_Job B
  29. Where A.Emplid=B.Emplid
  30. And B.Effdt=(Select Max(D.Effdt) From PS_Job D
  31. Where D.Effdt<=Sysdate
  32. And D.Emplid=B.Emplid
  33. And D.Empl_Rcd=B.Empl_Rcd)
  34. And B.Effseq = (Select Max(C.Effseq) from PS_Job C
  35. Where C.Emplid=B.Emplid
  36. And C.Empl_Rcd = B.Empl_Rcd
  37. And C.Effdt=B.Effdt)
  38. Order By B.Company, B.Paygroup, A.Emplid
  39. End-Select
  40. End-Procedure
  41. !****************************
!****************************
!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字段永远不打印

如下例:

[plain] view plain copy print ?
  1. !****************************
  2. !Using break logic in the employee list program
  3. !****************************
  4. Begin-Program
  5. !****************************
  6. Do List_Employees
  7. End-Program
  8. !****************************
  9. Begin-Heading 2
  10. !****************************
  11. Print 'Company' (1,1)
  12. Print 'Paygroup' (,+2)
  13. Print 'Emplid' (,+2)
  14. Print 'Name ' (,+4)
  15. Print 'Annual Salary' (,+15)
  16. Print ' ' (2,1)
  17. End-Heading
  18. !*****************************************
  19. Begin-Procedure List_Employees
  20. !*****************************************
  21. Begin-Select
  22. ! We use the On-Break option below:
  23. B.Company (,1,7) On-Break Print=Change/Top-Page Skiplines=1
  24. B.Paygroup (,+2,8)
  25. A.Emplid (,+2,8)
  26. A.Name (,+2,20)
  27. B.Annual_Rt (,+2,12) edit $,$$$,$$$.00
  28. Position (+1)
  29. From PS_Personal_Data A, PS_Job B
  30. Where A.Emplid=B.Emplid
  31. And B.Effdt=(Select Max(D.Effdt) From PS_Job D
  32. Where D.Effdt<=Sysdate
  33. And D.Emplid=B.Emplid
  34. And D.Empl_Rcd=B.Empl_Rcd)
  35. And B.Effseq = (Select Max(C.Effseq) from PS_Job C
  36. Where C.Emplid=B.Emplid
  37. And C.Empl_Rcd = B.Empl_Rcd
  38. And C.Effdt=B.Effdt)
  39. Order By B.Company, B.Paygroup, A.Emplid
  40. End-Select
  41. End-Procedure
  42. !****************************
!****************************
!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程序:

[plain] view plain copy print ?
  1. !****************************
  2. !TEST10B.SQR
  3. !Using break logic in the employee list program
  4. !****************************
  5. <span style="color: rgb(255, 0, 0);">#Include 'setenv.sqc' !Set environment</span>
  6. <span style="color: rgb(255, 0, 0);">begin-setup
  7. #Include 'setupdb.sqc'
  8. end-setup</span>
  9. Begin-Program
  10. <span style="color: rgb(255, 0, 0);">Do Stdapi-Init</span>
  11. Do List_Employees
  12. <span style="color: rgb(255, 0, 0);">Do Stdapi-Term</span>
  13. End-Program
  14. !****************************
  15. Begin-Heading 2
  16. !****************************
  17. Print 'Company' (1,1)
  18. Print 'Paygroup' (,+2)
  19. Print 'Emplid' (,+2)
  20. Print 'Name ' (,+4)
  21. Print 'Annual Salary' (,+15)
  22. Print ' ' (2,1)
  23. End-Heading
  24. !*****************************************
  25. Begin-Procedure List_Employees
  26. !*****************************************
  27. Begin-Select
  28. ! We use the On-Break option below:
  29. B.Company (,1,7) On-Break Print=Change/Top-Page Skiplines=1
  30. B.Paygroup (,+2,8)
  31. A.Emplid (,+2,8)
  32. A.Name (,+2,20)
  33. B.Annual_Rt (,+2,12) edit $,$$$,$$$.00
  34. Position (+1)
  35. From PS_Personal_Data A, PS_Job B
  36. Where A.Emplid=B.Emplid
  37. And B.Effdt=(Select Max(D.Effdt) From PS_Job D
  38. Where D.Effdt<=Sysdate
  39. And D.Emplid=B.Emplid
  40. And D.Empl_Rcd=B.Empl_Rcd)
  41. And B.Effseq = (Select Max(C.Effseq) from PS_Job C
  42. Where C.Emplid=B.Emplid
  43. And C.Empl_Rcd = B.Empl_Rcd
  44. And C.Effdt=B.Effdt)
  45. Order By B.Company, B.Paygroup, A.Emplid
  46. End-Select
  47. End-Procedure
  48. !****************************
  49. <span style="color: rgb(255, 0, 0);">#Include 'datetime.sqc' !Routines for date and time formatting
  50. #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逻辑相关推荐

  1. java如何停止函数循环_在Java中使用break来退出循环是不好的做法吗?

    好主不. 有时在满足总体要求的循环中可能会出现某些情况,而不满足逻辑循环条件. 在这种情况下,使用break ,来阻止你毫无意义地在循环中循环. 例 String item; for(int x = ...

  2. switch中的break和return的区别

    概要 return是直接返回,不执行后续的代码 break只是跳到switch的外面,继续执行后面的代码 使用场景: 如果是在函数中的switch case判断中需要返回qie,则使用return 如 ...

  3. 关于线程池运行过程中,业务逻辑出现未知异常导致线程中断问题反思

    最近在项目研发中的关于线程池应用过程中由于业务逻辑异常导致的线程中断,但程序未中断导致的脏数据问题  话不多说,在最近最新的一个版本发布过程中,业务需要,我们要定期去给客户预留出可用的资源数据,提供客 ...

  4. 简述Python中的break和continue的区别

    众所周知在Python中,break是结束整个循环体,而continue则是结束本次循环再继续循环. 但是作为一个新手的你,还是不明白它们的区别,这里用一个生动的例子说明它们的区别,如下: 1.con ...

  5. Scala中没有break和continue, 如何退出循环

    Java是指令式风格,Scala是函数式风格. 在Scala中,应该尽量适用循环,而是应用函数的方式来处理. Scala并没有提供break和continue语句来退出循环,那么如果我们又确实要怎么办 ...

  6. JAVA中的break[标签]continue[标签]用法

    原文:JAVA中的break[标签]continue[标签]用法 注意:JAVA中的标签必须放在循环之前,且中间不能有其他语句.例如:tag:for或while或do--while; 1.使用brea ...

  7. centos 调整home分区xfs_Linux中对lvm逻辑卷分区大小的调整教程(针对xfs与ext4不同文件系统)...

    前言 当我们在安装系统的时候,由于没有合理分配分区空间,在后续维护过程中,发现有些分区空间不够使用,而有的分区空间却有很多剩余空间.如果这些分区在装系统的时候使用了lvm(前提是这些分区要是lvm逻辑 ...

  8. 攻防演练中的业务逻辑漏洞及检测思路

    随着各类前后端框架的成熟和完善,传统的SQL注入.XSS等常规漏洞在Web系统里逐步减少,而攻击者更倾向于使用业务逻辑漏洞来进行突破.业务逻辑漏洞,具有攻击特征少.自动化脆弱性工具无法扫出等特点,也为 ...

  9. 代码的世界中,一个逻辑套着另外一个逻辑,如何让每一种逻辑在代码中都有迹可循?...

    代码的世界中,一个逻辑套着另外一个逻辑,如何让每一种逻辑在代码中都有迹可循? 这正式框架的意义所在!

最新文章

  1. 常见问题一之项目报错排查
  2. 含有参数的sql拼接_关于SQL语句参数中为多个带.字符串。
  3. java 内存空间_怎样用java实现存储空间动态分配
  4. P1038 神经网络(拓扑排序)
  5. php rsa加密实例,关于PHP语言的RSA加密实例讲解
  6. 树莓派+android things+实时音视频传输demo之遥控小车
  7. cryptapi双向认证_2019 08 28 netty案例,netty4.1中级拓展篇十三《Netty基于SSL实现信息传输过程中双向加密验证》...
  8. 曾辉机器人_工业机器人市占率5年来首现下滑 “春寒”中国产机器人如何突围?...
  9. 《机器学习实战:基于Scikit-Learn、Keras和TensorFlow第2版》-学习笔记(1)
  10. C# RestSharp的http连接
  11. womic网络错误_【无线麦克风(WO Mic)】无线麦克风(WO Mic)安卓版(Android)3.2下载_太平洋下载中心...
  12. termux配置python安装kali_利用termux安装kali
  13. Android任务栈简介
  14. java的duplicate用法_Java IntBuffer duplicate()用法及代码示例
  15. 使用VsCode管理Gitee仓库中的项目
  16. 折叠面板的改进【Amaze UI】
  17. 深度学习FPGA实现基础知识17(图像处理卷积运算 矩阵卷积)
  18. 一些值得一看的博友文章地址
  19. 计算机网考里操作题发邮件,计算机网考操作题题型.doc
  20. 【干货】教你用python给你的微信朋友群发私人订制的藏头诗

热门文章

  1. 出现The import javax.servlet cannot be resolved 的解决方法
  2. 深度卷积对抗生成网络DCGAN论文解读
  3. C语言 函数中返回数组
  4. matlab机器人工具箱的使用(4)
  5. matlab svr示例,matlab svr代码
  6. 人工智能眼中颜值最高全球最美10佳
  7. 十年 Java API 版权案终落地、Log4j 漏洞蛰伏八年后席卷全球,2021 年开源圈大事件盘点
  8. Windows配置MySQL ODBC数据源
  9. 大学里,如果你一个人,就请这样生活!
  10. HelloWorld 电脑代码初相识