2009 Mar 03 9:44 AM
Hi,
Is it possible from a FM to start a job using a program where one sends the selection screen parameters with?
As the called FM calls the program with different parameteres each time.
If it is possible can someone please assist by giving an exsample?
Thanks in advance.
Best regards
2009 Mar 03 11:49 AM
Hi,
Check this eg.
This program will submit an another program in background mode as a job.
REPORT ZACE1031_ROUTING_CONV_TRG NO STANDARD PAGE HEADING
LINE-COUNT 255(1)
LINE-SIZE 255.
TYPES: BEGIN OF x_mat,
werks TYPE mast-werks,
matnr TYPE mast-matnr,
stlal TYPE mast-stlal,
stlnr TYPE mast-stlnr,
stlan TYPE mast-stlan,
END OF x_mat.
DATA: v_params TYPE pri_params,
v_jobname TYPE tbtcjob-jobname,
v_jobcount TYPE tbtcjob-jobcount VALUE 1,
v_stringlen TYPE i VALUE 0,
v_msg_string(50) TYPE c,
v_prog(30) TYPE c,
c_cross(1) TYPE c VALUE 'X',
c_01(2) TYPE c VALUE '01',
c_trg(1) TYPE c VALUE 'X'. "CCT51576
DATA : it_mat TYPE TABLE OF x_mat,
wa_mat type x_mat.
DATA : v_werks TYPE mast-werks,
v_pre_werks TYPE mast-werks.
RANGES: r_matnr FOR mara-matnr.
TABLES : mkal,mast.
SELECTION-SCREEN BEGIN OF BLOCK matnr
WITH FRAME TITLE text-001.
SELECT-OPTIONS : so_matnr FOR mast-matnr.
SELECTION-SCREEN END OF BLOCK matnr.
SELECTION-SCREEN BEGIN OF BLOCK plant
WITH FRAME TITLE text-002.
SELECT-OPTIONS : so_werks FOR mast-werks OBLIGATORY .
SELECTION-SCREEN SKIP.
PARAMETERS : p_date TYPE datuv OBLIGATORY. "CCT51576
SELECTION-SCREEN END OF BLOCK plant.
INITIALIZATION. "CCT51576
CONCATENATE sy-datum+0(4) c_01 c_01 INTO p_date.
AT SELECTION-SCREEN.
START-OF-SELECTION.
SELECT bwerks bmatnr bstlnr bstlal b~stlan
INTO CORRESPONDING FIELDS OF TABLE it_mat
FROM mara AS a
INNER JOIN mast AS b
ON bmatnr = amatnr
WHERE a~matnr IN so_matnr
AND b~werks IN so_werks
AND ( a~mtart = 'FD')
AND b~stlan = 1. "CCT53428
AND b~stlan IN (1,2). "CCT53428
IF sy-subrc = 0.
SORT it_mat by werks matnr. "CCT53428
DELETE ADJACENT DUPLICATES FROM it_mat COMPARING werks matnr."CCT53428
SORT it_mat BY matnr werks stlan stlal ASCENDING. "CCT53428
DELETE ADJACENT DUPLICATES FROM it_mat COMPARING matnr werks stlan. "CCT53428
SORT it_mat BY matnr werks stlan DESCENDING. "CCT53428
DELETE ADJACENT DUPLICATES FROM it_mat COMPARING matnr werks. "CCT53428
SORT it_mat BY werks.
LOOP AT it_mat into wa_mat.
CLEAR : r_matnr.
r_matnr-sign = 'I'.
r_matnr-option = 'EQ'.
r_matnr-low = wa_mat-matnr.
APPEND r_matnr.
AT END OF werks.
CLEAR v_werks.
v_werks = wa_mat-werks.
CLEAR v_jobname.
CONCATENATE 'WWACSD12' '_' v_werks INTO v_jobname.
PERFORM f_open_job USING v_jobname.
PERFORM f_submit_job.
PERFORM f_job_close.
REFRESH r_matnr.
ENDAT.
ENDLOOP.
ELSE.
WRITE / text-017.
ENDIF.
&----
*& Form f_open_job
&----
Form to open the job with the particular job name
----
FORM f_open_job USING v_jobname TYPE any.
CALL FUNCTION 'JOB_OPEN'
EXPORTING
jobname = v_jobname
IMPORTING
jobcount = v_jobcount
EXCEPTIONS
OTHERS = 8.
IF sy-subrc NE 0.
WRITE: /3 v_werks,
11 text-008, v_jobname.
ENDIF.
ENDFORM. " f_open_job
&----
*& Form f_submit_job
&----
Form to submit the program (ZACC0014_COST_COLLECTORS_BDC) as job
----
FORM f_submit_job.
v_prog = text-016.
SUBMIT (v_prog) WITH so_matnr IN r_matnr
WITH p_werks EQ v_werks
WITH p_date EQ p_date "CCT51576
WITH ck_trg EQ c_trg
TO SAP-SPOOL
SPOOL PARAMETERS v_params
WITHOUT SPOOL DYNPRO
USER sy-uname VIA JOB v_jobname NUMBER v_jobcount
AND RETURN.
IF sy-subrc > 4.
WRITE: /3 v_werks,
11 text-009, v_jobname.
ENDIF.
ENDFORM. " f_submit_job
&----
*& Form f_job_close
&----
Form to close the job
----
FORM f_job_close.
CALL FUNCTION 'JOB_CLOSE'
EXPORTING
jobcount = v_jobcount
jobname = v_jobname
strtimmed = 'X' "start immediately
EXCEPTIONS
cant_start_immediate = 1.
Process various error conditions
CASE sy-subrc.
WHEN 0.
MOVE v_jobname TO v_msg_string.
CONDENSE v_msg_string.
v_stringlen = STRLEN( v_msg_string ).
WRITE ' created.' TO v_msg_string+v_stringlen.
WRITE :/3 v_werks,
11 v_msg_string.
WHEN OTHERS.
MOVE v_jobname TO v_msg_string.
CONDENSE v_msg_string.
v_stringlen = STRLEN( v_msg_string ).
WRITE 'create failed.' TO v_msg_string+v_stringlen.
WRITE :/3 v_werks,
11 v_msg_string.
ENDCASE.
ENDFORM. "f_job_close
Hi,
Is it possible from a FM to start a job using a program where one sends the selection screen parameters with?
As the called FM calls the program with different parameteres each time.
If it is possible can someone please assist by giving an exsample?
Thanks in advance.
Best regards
2009 Mar 03 9:59 AM
2009 Mar 03 11:42 AM
Hi,
for job scheduling these fm are used
1.job_open , job_submit, job_close
and the parameters are stored in VARI table
Regards,
Madhu
2009 Mar 03 11:49 AM
Hi,
Check this eg.
This program will submit an another program in background mode as a job.
REPORT ZACE1031_ROUTING_CONV_TRG NO STANDARD PAGE HEADING
LINE-COUNT 255(1)
LINE-SIZE 255.
TYPES: BEGIN OF x_mat,
werks TYPE mast-werks,
matnr TYPE mast-matnr,
stlal TYPE mast-stlal,
stlnr TYPE mast-stlnr,
stlan TYPE mast-stlan,
END OF x_mat.
DATA: v_params TYPE pri_params,
v_jobname TYPE tbtcjob-jobname,
v_jobcount TYPE tbtcjob-jobcount VALUE 1,
v_stringlen TYPE i VALUE 0,
v_msg_string(50) TYPE c,
v_prog(30) TYPE c,
c_cross(1) TYPE c VALUE 'X',
c_01(2) TYPE c VALUE '01',
c_trg(1) TYPE c VALUE 'X'. "CCT51576
DATA : it_mat TYPE TABLE OF x_mat,
wa_mat type x_mat.
DATA : v_werks TYPE mast-werks,
v_pre_werks TYPE mast-werks.
RANGES: r_matnr FOR mara-matnr.
TABLES : mkal,mast.
SELECTION-SCREEN BEGIN OF BLOCK matnr
WITH FRAME TITLE text-001.
SELECT-OPTIONS : so_matnr FOR mast-matnr.
SELECTION-SCREEN END OF BLOCK matnr.
SELECTION-SCREEN BEGIN OF BLOCK plant
WITH FRAME TITLE text-002.
SELECT-OPTIONS : so_werks FOR mast-werks OBLIGATORY .
SELECTION-SCREEN SKIP.
PARAMETERS : p_date TYPE datuv OBLIGATORY. "CCT51576
SELECTION-SCREEN END OF BLOCK plant.
INITIALIZATION. "CCT51576
CONCATENATE sy-datum+0(4) c_01 c_01 INTO p_date.
AT SELECTION-SCREEN.
START-OF-SELECTION.
SELECT bwerks bmatnr bstlnr bstlal b~stlan
INTO CORRESPONDING FIELDS OF TABLE it_mat
FROM mara AS a
INNER JOIN mast AS b
ON bmatnr = amatnr
WHERE a~matnr IN so_matnr
AND b~werks IN so_werks
AND ( a~mtart = 'FD')
AND b~stlan = 1. "CCT53428
AND b~stlan IN (1,2). "CCT53428
IF sy-subrc = 0.
SORT it_mat by werks matnr. "CCT53428
DELETE ADJACENT DUPLICATES FROM it_mat COMPARING werks matnr."CCT53428
SORT it_mat BY matnr werks stlan stlal ASCENDING. "CCT53428
DELETE ADJACENT DUPLICATES FROM it_mat COMPARING matnr werks stlan. "CCT53428
SORT it_mat BY matnr werks stlan DESCENDING. "CCT53428
DELETE ADJACENT DUPLICATES FROM it_mat COMPARING matnr werks. "CCT53428
SORT it_mat BY werks.
LOOP AT it_mat into wa_mat.
CLEAR : r_matnr.
r_matnr-sign = 'I'.
r_matnr-option = 'EQ'.
r_matnr-low = wa_mat-matnr.
APPEND r_matnr.
AT END OF werks.
CLEAR v_werks.
v_werks = wa_mat-werks.
CLEAR v_jobname.
CONCATENATE 'WWACSD12' '_' v_werks INTO v_jobname.
PERFORM f_open_job USING v_jobname.
PERFORM f_submit_job.
PERFORM f_job_close.
REFRESH r_matnr.
ENDAT.
ENDLOOP.
ELSE.
WRITE / text-017.
ENDIF.
&----
*& Form f_open_job
&----
Form to open the job with the particular job name
----
FORM f_open_job USING v_jobname TYPE any.
CALL FUNCTION 'JOB_OPEN'
EXPORTING
jobname = v_jobname
IMPORTING
jobcount = v_jobcount
EXCEPTIONS
OTHERS = 8.
IF sy-subrc NE 0.
WRITE: /3 v_werks,
11 text-008, v_jobname.
ENDIF.
ENDFORM. " f_open_job
&----
*& Form f_submit_job
&----
Form to submit the program (ZACC0014_COST_COLLECTORS_BDC) as job
----
FORM f_submit_job.
v_prog = text-016.
SUBMIT (v_prog) WITH so_matnr IN r_matnr
WITH p_werks EQ v_werks
WITH p_date EQ p_date "CCT51576
WITH ck_trg EQ c_trg
TO SAP-SPOOL
SPOOL PARAMETERS v_params
WITHOUT SPOOL DYNPRO
USER sy-uname VIA JOB v_jobname NUMBER v_jobcount
AND RETURN.
IF sy-subrc > 4.
WRITE: /3 v_werks,
11 text-009, v_jobname.
ENDIF.
ENDFORM. " f_submit_job
&----
*& Form f_job_close
&----
Form to close the job
----
FORM f_job_close.
CALL FUNCTION 'JOB_CLOSE'
EXPORTING
jobcount = v_jobcount
jobname = v_jobname
strtimmed = 'X' "start immediately
EXCEPTIONS
cant_start_immediate = 1.
Process various error conditions
CASE sy-subrc.
WHEN 0.
MOVE v_jobname TO v_msg_string.
CONDENSE v_msg_string.
v_stringlen = STRLEN( v_msg_string ).
WRITE ' created.' TO v_msg_string+v_stringlen.
WRITE :/3 v_werks,
11 v_msg_string.
WHEN OTHERS.
MOVE v_jobname TO v_msg_string.
CONDENSE v_msg_string.
v_stringlen = STRLEN( v_msg_string ).
WRITE 'create failed.' TO v_msg_string+v_stringlen.
WRITE :/3 v_werks,
11 v_msg_string.
ENDCASE.
ENDFORM. "f_job_close
| User | Count |
|---|---|
| 3 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 |