cancel
Showing results for 
Search instead for 
Did you mean: 

SAP_WAPI_ATTACHMENT_ADD and WORKFLOW

Former Member
0 Kudos

I have a project about WD4A and workflow. I use a WD to trigger a workflow by raising a event of self-defined class. Meanwhile, I want to generate a pdf file as an attachment for the next receiver in the workflow. Method SAP_WAPI_ATTACHMENT_ADD need work item ID as a import parameter. Here is the problem, how can I get the work item ID after triggering the workflow?

Accepted Solutions (1)

Accepted Solutions (1)

Former Member
0 Kudos

Hi Ahmed, your idea inspires me. I think I can pass and save the pdf as a parameter when I trigger the WF. Then at the step of userdecsion, I will find a way to convert it into an attachment. Because I am not familiar with WF, I wonder it is possible to convert a variable in container into a attachment in the userdecsion step, or maybe I need another background step to realize it?

Former Member
0 Kudos

Bind the attachment object to the container element " ATTACHOBJECTS ". Its multi line so supports multiple attachments if required.

imthiaz_ahmed
Active Contributor
0 Kudos

Yes you need a background step to create the attachment and pass it back to the WF.

Regards, IA

Former Member
0 Kudos

hi Khanna ,

How can I create or get the attachment object with my PDF XSTRING? Which FM should I use? Should I create the object of attachment, then pass it to the WF as a parameter? Can you show me in detail?

Answers (3)

Answers (3)

imthiaz_ahmed
Active Contributor
0 Kudos

One way will be to use a fork and in the parallel branch, add a back ground activity to read the WI by using the FM SWI_WORKITEMS_OF_OBJECT_GET and add the attachment. Alternatively you can add background step before the receivers step or the approval step, create an attachment and pass on to the next step thru' binding of containers.

Regards, IA

Former Member
0 Kudos

If I remember correctly, you cannot really get the work item ID from the functions/methods that are used for triggering events. Of course there might be some workarounds, but I doubt that they will work without problems.

Instead of triggering event, you could start the workflow directly. This can be done with function SAP_WAPI_START_WORKFLOW. It will return you the work item ID, and then you can use that to attach your document to the workflow.

Regards,

Karri

surjith_kumar
Active Contributor
0 Kudos

Hi,

You have to create a Method, in that method convert the Raw text to PDF. And send it as an attachment. Using the Function Module SO_NEW_DOCUMENT_ATT_SEND_API1.

Refer the below Program and create your Program.

Regards,

P Surjith Kumar

&----


*& Report ZTESTMAIL

*&

&----


*&

*&

&----


REPORT ZTESTMAIL.

DATA: i_otf TYPE itcoo OCCURS 0 WITH HEADER LINE,

i_tline TYPE TABLE OF tline WITH HEADER LINE,

i_receivers TYPE TABLE OF somlreci1 WITH HEADER LINE,

i_record LIKE solisti1 OCCURS 0 WITH HEADER LINE,

Objects to send mail.

i_objpack LIKE sopcklsti1 OCCURS 0 WITH HEADER LINE,

i_objtxt LIKE solisti1 OCCURS 0 WITH HEADER LINE,

i_objbin LIKE solisti1 OCCURS 0 WITH HEADER LINE,

i_reclist LIKE somlreci1 OCCURS 0 WITH HEADER LINE,

Work Area declarations

w_objhead TYPE soli_tab,

w_ctrlop TYPE ssfctrlop,

w_compop TYPE ssfcompop,

w_return TYPE ssfcrescl,

w_doc_chng typE sodocchgi1,

w_data TYPE sodocchgi1,

w_buffer TYPE string,"To convert from 132 to 255

Variables declarations

v_form_name TYPE rs38l_fnam,

v_len_in LIKE sood-objlen,

v_len_out LIKE sood-objlen,

v_len_outn TYPE i,

v_lines_txt TYPE i,

v_lines_bin TYPE i.

call function 'SSF_FUNCTION_MODULE_NAME'

exporting

formname = 'ZTESTFORM'

importing

fm_name = v_form_name

exceptions

no_form = 1

no_function_module = 2

others = 3.

IF sy-subrc 0.

MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno

WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.

ENDIF.

w_ctrlop-getotf = 'X'.

w_ctrlop-no_dialog = 'X'.

w_compop-tdnoprev = 'X'.

*

*CALL FUNCTION v_form_name

*EXPORTING

*control_parameters = w_ctrlop

*output_options = w_compop

*user_settings = 'X'

*IMPORTING

*job_output_info = w_return

*EXCEPTIONS

*formatting_error = 1

*internal_error = 2

*send_error = 3

*user_canceled = 4

*OTHERS = 5.

*IF sy-subrc 0.

*MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno

*WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.

*ENDIF.

*

*i_otf] = w_return-otfdata[.

*

CALL FUNCTION 'CONVERT_OTF'

EXPORTING

format = 'PDF'

max_linewidth = 132

IMPORTING

bin_filesize = v_len_in

TABLES

otf = i_otf

lines = i_tline

EXCEPTIONS

err_max_linewidth = 1

err_format = 2

err_conv_not_possible = 3

OTHERS = 4.

IF sy-subrc 0.

MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno

WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.

ENDIF.

Convert PDF from 132 to 255.

*LOOP AT i_tline.

Replacing space by ~

*TRANSLATE i_tline USING ' ~'.

*CONCATENATE w_buffer i_tline INTO w_buffer.

*ENDLOOP.

Replacing ~ by space

*TRANSLATE w_buffer USING '~ '.

*

*DO.

*i_record = w_buffer.

Appending 255 characters as a record

*APPEND i_record.

*SHIFT w_buffer LEFT BY 255 PLACES.

*IF w_buffer IS INITIAL.

*EXIT.

*ENDIF.

*ENDDO.

*

*Refresh: i_reclist,

*i_objtxt,

*i_objbin,

*i_objpack.

*

*clear w_objhead.

*

Object with PDF.

*i_objbin] = i_record[.

*DESCRIBE TABLE i_objbin LINES v_lines_bin.

*

Object with main text of the mail.

*i_objtxt = 'Find attached the output of the smart form.'.

*APPEND i_objtxt.

*i_objtxt = 'Regards,'.

*APPEND i_objtxt.

*i_objtxt = 'Surjith'.

*APPEND i_objtxt.

*

*DESCRIBE TABLE i_objtxt LINES v_lines_txt.

*

Document information.

*w_doc_chng-obj_name = 'Smartform'.

*w_doc_chng-expiry_dat = sy-datum + 10.

*w_doc_chng-obj_descr = 'Smart form output'.

*w_doc_chng-sensitivty = 'F'. "Functional object

*w_doc_chng-doc_size = v_lines_txt * 255.

*

Pack to main body as RAW.

Obj. to be transported not in binary form

*CLEAR i_objpack-transf_bin.

Start line of object header in transport packet

*i_objpack-head_start = 1.

Number of lines of an object header in object packet

*i_objpack-head_num = 0.

Start line of object contents in an object packet

*i_objpack-body_start = 1.

Number of lines of the object contents in an object packet

*i_objpack-body_num = v_lines_txt.

Code for document class

*i_objpack-doc_type = 'RAW'.

*APPEND i_objpack.

*

Packing as PDF.

*i_objpack-transf_bin = 'X'.

*i_objpack-head_start = 1.

*i_objpack-head_num = 1.

*i_objpack-body_start = 1.

*i_objpack-body_num = v_lines_bin.

*i_objpack-doc_type = 'PDF'.

*i_objpack-obj_name = 'Smartform'.

*CONCATENATE 'Smartform_output' '.pdf'

*INTO i_objpack-obj_descr.

*i_objpack-doc_size = v_lines_bin * 255.

*APPEND i_objpack.

*

Document information.

*CLEAR i_reclist.

*

e-mail receivers.

*i_reclist-receiver = "give the email address.

*i_reclist-express = 'X'.

*i_reclist-rec_type = 'U'. "Internet address

*APPEND i_reclist.

*

Sending mail.

*CALL FUNCTION 'SO_NEW_DOCUMENT_ATT_SEND_API1'

*EXPORTING

*document_data = w_doc_chng

*put_in_outbox = 'X'

*TABLES

*packing_list = i_objpack

*object_header = w_objhead

*contents_hex = i_objbin

*contents_txt = i_objtxt

*receivers = i_reclist

*EXCEPTIONS

*too_many_receivers = 1

*document_not_sent = 2

*document_type_not_exist = 3

*operation_no_authorization = 4

*parameter_error = 5

*x_error = 6

*enqueue_error = 7

*OTHERS = 8.

*IF sy-subrc 0.

*MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO

*WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.

*ENDIF.

martin_nooteboom
Active Contributor
0 Kudos

Hi Surjith,

Did you even read the question?

Regards,

Martin