涉及到两个程序:

ZTEST_ZUMA02 (主程序)
ZTEST_ZUMA(被调用的程序,需要以后台job执行)
"ztest_zuma 的代码
DATA col TYPE i VALUE 0.
DO 8 TIMES.
  MESSAGE 'JOB HERE' TYPE 'S'.
ENDDO.
程序ZTEST_ZUMA是在程序ZTEST_ZUMA02中以job的形式调用的,先来看看SM37里面ZTEST_ZUMA的执行日志,当然这些日志是ZTEST_ZUMA程序中通过message输出的:
到这里你应该有一个初步的认识了,那么关键看看ZTEST_ZUMA02是通过什么方式实现以JOB的形式调用ZTEST_ZUMA的呢,看一下代码的几处关键位置,job_open,submit,job_close.
简单解释一下,代码中也有注释。
job_open :开启一个后台job,job名任意命名,会生产一个job id.
submit :调用需要设置为后台执行的程序,使用via 参数设置job的相关参数.(这个时候可以看到SM37里面有一个job 状态为schedule).
job_close :把之前创建的job release 并执行(参数strtimmed = 'X' 表示立即执行,设置某一个时间执行还没有研究).
======================
REPORT ztest_zuma02.
DATA: lv_jobnum TYPE btcjobcnt.
DATA: gv_jobname TYPE btcjob VALUE 'ZUMATESTJOB'. "Step1. open a job define a job_name(whatever you want), and return a jobnumber.
CALL FUNCTION 'JOB_OPEN'
EXPORTING
jobname = gv_jobname
IMPORTING
jobcount = lv_jobnum
EXCEPTIONS
cant_create_job =
invalid_job_data =
jobname_missing =
OTHERS = . "Step2. Submit a program which you want to run in background as job.
SUBMIT ztest_zuma VIA JOB gv_jobname NUMBER lv_jobnum AND RETURN.
"ztest_zuma 的代码
"DATA col TYPE i VALUE 0.
"DO 8 TIMES.
" MESSAGE 'JOB HERE' TYPE 'S'.
"ENDDO. "Step3-Option. This is option step, for some special requirment modify job name instead of sy-uname.
" in this step first call BP_JOB_READ to read the job information and then call BP_JOB_MODIFY to modify
" the user name.
PERFORM modify_job_name USING lv_jobnum gv_jobname. IF sy-subrc = .
"Step4. To release the job which you were opened in step1.
CALL FUNCTION 'JOB_CLOSE'
EXPORTING
jobcount = lv_jobnum
jobname = gv_jobname
strtimmed = 'X'
EXCEPTIONS
cant_start_immediate =
invalid_startdate =
jobname_missing =
job_close_failed =
job_nosteps =
job_notex =
lock_failed =
OTHERS = .
IF sy-subrc NE .
MESSAGE 'Job error' TYPE 'E'.
ELSE.
MESSAGE 'Job success' TYPE 'S'.
ENDIF.
ENDIF.
*&---------------------------------------------------------------------*
*& Form MODIFY_JOB_NAME
*&---------------------------------------------------------------------*
* Modify user name for job owner
*----------------------------------------------------------------------*
* -->P_LV_JOBNUM text
* -->P_GV_JOBNAME text
*----------------------------------------------------------------------*
FORM modify_job_name USING p_lv_jobnum
p_gv_jobname.
DATA: ls_jobhead TYPE tbtcjob,
lt_jobstep TYPE STANDARD TABLE OF tbtcstep.
CALL FUNCTION 'BP_JOB_READ'
EXPORTING
job_read_jobcount = p_lv_jobnum
job_read_jobname = p_gv_jobname
job_read_opcode = ''
IMPORTING
job_read_jobhead = ls_jobhead
TABLES
job_read_steplist = lt_jobstep
EXCEPTIONS
invalid_opcode =
job_doesnt_exist =
job_doesnt_have_steps =
OTHERS = . IF sy-subrc <> . ENDIF. ls_jobhead-sdluname = 'BATCH_CM'. CALL FUNCTION 'BP_JOB_MODIFY'
EXPORTING
dialog = 'N'
jobcount = p_lv_jobnum
jobname = p_gv_jobname
new_jobhead = ls_jobhead
opcode = ''
IMPORTING
modified_jobhead = ls_jobhead
TABLES
new_steplist = lt_jobstep
EXCEPTIONS
cant_derelease_job =
cant_enq_job =
cant_read_jobdata =
cant_release_job =
cant_set_jobstatus_in_db =
cant_start_job_immediately =
cant_update_jobdata =
eventcnt_generation_error =
invalid_dialog_type =
invalid_new_jobdata =
invalid_new_jobstatus =
invalid_opcode =
invalid_startdate =
job_edit_failed =
job_modify_canceled =
job_not_modifiable_anymore =
nothing_to_do =
no_batch_on_target_host =
no_batch_server_found =
no_batch_wp_for_jobclass =
no_modify_privilege_given =
no_release_privilege_given =
no_startdate_no_release =
target_host_not_defined =
tgt_host_chk_has_failed =
invalid_targetgroup =
conflicting_targets =
OTHERS = . IF sy-subrc <> . ENDIF.
ENDFORM.

ABAP 通过sumbit调用另外一个程序使用job形式执行-简单例子的更多相关文章

  1. iOS调用另一个程序

    在 iOS 里,程序之间都是相互隔离,目前并没有一个有效的方式来做程序间通信,幸好 iOS 程序可以很方便的注册自己的 URL Scheme,这样就可以通过打开特定 URL 的方式来传递参数给另外一个 ...

  2. wxWidgets一个界面与数据分离的简单例子

    /*************************************************************** * Name: MyApp.h * Purpose: Defines ...

  3. [Machine-Learning] 一个线性回归的简单例子

    这篇博客中做一个使用最小二乘法实现线性回归的简单例子. 代码来自<图解机器学习> 图3-2,使用MATLAB实现. 代码link 用到的matlab函数 由于以前对MATLAB也不是非常熟 ...

  4. 在C#中调用另一个应用程序或命令行(.exe 带参数)<zz>

    在.net中使用system.diaglostics.Process可以用来调用另一个命令行或程序. using   System.Diagnostics;     如果是dos     Proces ...

  5. 在小程序中修改上一个页面里data中的数据调用上一个页面的方法

    //获取已经打开的页面的数组 var pages = getCurrentPages(); //获取上一个页面的所有的方法和data中的数据  var lastpage = pages[pages.l ...

  6. ABAP RFC远程调用

    声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...

  7. SAP ABAP exporting list to memory ...SUBMIT 程序传输屏幕参数

    SUBMIT report EXPORTING LIST TO MEMORY              AND RETURN. submit 关键字的作用就是在程序内部调用一个程序,and retur ...

  8. windows下调用外部exe程序 SHELLEXECUTEINFO

    本文主要介绍两种在windows下调用外部exe程序的方法: 1.使用SHELLEXECUTEINFO 和 ShellExecuteEx SHELLEXECUTEINFO 结构体的定义如下: type ...

  9. 【Web前端】---js调用本地应用程序

    最近进入了一个项目组,向大牛们一起学习如何搞开发,可谓是边开发边学习.就在前两天,我们的项目被领导们验收了一次,顺便给我们提了点新的需求,要求我们能够使用外在设备拍照上传.君要臣死,臣不能不死.更何况 ...

随机推荐

  1. CSS3教程:box-sizing属性的理解border、padding与容器宽度的关系

    说到 IE 的 bug,一个臭名昭著的例子是它对于“盒模型”的错误解释:在 IE5.x 以及 Quirks 模式的 IE6/7 中,将 border 与 padding 都包含在 width 之内.这 ...

  2. 介绍一款基于jquery好用的编辑框htmlbox.full.js

    1. 可选择背景颜色,自主选择工具,感觉挺好用的,不过需要注意,添加引用后找不到工具图标的图片,找到脚本修改idir:属性改成自己的图片文件夹存放路径即可. asp.net mvc3提交内容报错提示含 ...

  3. 【值得收藏】数据分析和可视化软件IDL的学习资料汇编【可免费下载】

    IDL学习教程 IDL 是一种数据分析和图像化应用程序及编程语言,最初在七十年代后期用于帮助科学家分析火星探险卫星发回的数据.此后,IDL得到广泛运用,使用者日众.IDL能使用户可以迅速且方便地运用此 ...

  4. android判断网络的类型

    转自:http://blog.csdn.net/xxxsz/article/details/8199031 判断网络类型是wifi,还是3G,还是2G网络 对不同的网络进行不同的处理,现将判断方法整理 ...

  5. 重载 C 函数

    在 clang 的扩展下,可以重载 C 函数,例如重载 sin 函数: float __attribute__((overloadable)) sin(float x) { return sinf(x ...

  6. C++数据结构之二叉查找树(BST)

    C++数据结构之二叉查找树(BST) 二分查找法在算法家族大类中属于“分治法”,二分查找的过程比较简单,代码见我的另一篇日志,戳这里!因二分查找所涉及的有序表是一个向量,若有插入和删除结点的操作,则维 ...

  7. SQL Server跨网段(跨机房)FTP复制

    SQL Server跨网段(跨机房)FTP复制 2013-09-24 17:53 by 听风吹雨, 273 阅读, 0 评论, 收藏, 编辑 一. 背景 搭建SQL Server复制的时候,如果网络环 ...

  8. javascript拾遗

    javascript中,只有null和undefined不能拥有方法,其他任何类型都可以在其上定义方法:字符串既然不是对象,怎么会有属性呢?只有引用了字符串的属性,那么javascript就会将字符串 ...

  9. jQuery判断元素是否显示与隐藏

    jQuery判断一个元素是显示还是隐藏,jQuery使用is()方法来判断一个元素是否显示,反之则为隐藏 核心代码 if($("#username").is(":hidd ...

  10. ORA-01810:格式代码出现两次 解决方法

    在写一个sql插入数据库的时候 to_date('20140509131034','yyyyMMddHHmmss') 报ORA-01810:格式代码出现两次 原因是java中的年月日和oracle中的 ...