cancel
Showing results for 
Search instead for 
Did you mean: 
Read only

workflow not showing attachment

safeer_shah2
Participant
0 Likes
4,169

Dear experts ,

I am using the following code to create a workflow item and later I am attaching a file, the system is showing the attachment is created but its not showing the attachement with the workitem.

here is the code

IF sy-subrc EQ 0.

                  CALL FUNCTION 'SWW_WI_ENABLE'

              EXPORTING

                wi_id                        WORKITEMID

               DO_COMMIT                    = 'X'

             EXCEPTIONS

               UPDATE_FAILED                = 1

               NO_AUTHORIZATION             = 2

               INVALID_TYPE                 = 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.

          CALL FUNCTION 'DEQUEUE_E_WORKITEM'

           EXPORTING

             MODE_SWWWIHEAD       = 'E'

             CLIENT               = SY-MANDT

             WI_ID                WORKITEMID

             X_WI_ID              = ' '

             _SCOPE               = '3'

             _SYNCHRON            = ' '

             _COLLECT             = ' '

                    .

ENDIF.

*     LOOP AT files_tab

*       INTO wa_files.

CALL FUNCTION 'ENQUEUE_E_WORKITEM'

   EXPORTING

     MODE_SWWWIHEAD       = 'E'

     CLIENT               = SY-MANDT

     WI_ID                WORKITEMID

     X_WI_ID              = ' '

     _SCOPE               = '2'

     _WAIT                = ' '

     _COLLECT             = ' '

   EXCEPTIONS

     FOREIGN_LOCK         = 1

     SYSTEM_FAILURE       = 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.

data: l_retcode LIKE  SY-SUBRC,

l_att_id  type  SWR_ATT_ID,

lt_msg  type TABLE OF SWR_MESSAG.

        CALL FUNCTION 'SAP_WAPI_ATTACHMENT_ADD'

          EXPORTING

            workitem_id   WORKITEMID

            att_header    = l_header

            att_bin       = l_xstring

            do_commit     = 'X'

          IMPORTING

            return_code   = l_retcode

            att_id        = l_att_id

          TABLES

            message_lines = lt_msg.

        IF sy-subrc EQ 0.

                  CALL FUNCTION 'SWW_WI_ENABLE'

              EXPORTING

                wi_id                        = WORKITEMID

               DO_COMMIT                    = 'X'

             EXCEPTIONS

               UPDATE_FAILED                = 1

               NO_AUTHORIZATION             = 2

               INVALID_TYPE                 = 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.

              CALL FUNCTION 'DEQUEUE_E_WORKITEM'

           EXPORTING

             MODE_SWWWIHEAD       = 'E'

             CLIENT               = SY-MANDT

             WI_ID                = WORKITEMID

             X_WI_ID              = ' '

             _SCOPE               = '3'

             _SYNCHRON            = ' '

             _COLLECT             = ' '

                    .

        ENDIF.

View Entire Topic
safeer_shah2
Participant
0 Likes

it should show the file like this.

pokrakam
Active Contributor
0 Likes

This should happen automatically. If not, you may need to bind the attachment to your task, possibly as a separate SOFM object.

safeer_shah2
Participant
0 Likes

Thanks mike, can you tell me how I can do it?

safeer_shah2
Participant
0 Likes

mike now i am trying to attach it as a seaprate object , can you please tell me what i should put in the input container becoz its giving me error, here is the code.

CALL FUNCTION 'SAP_WAPI_ATTACHMENT_ADD'

          EXPORTING

            workitem_id   WORKITEMID

            att_header    = l_header

            att_bin       = l_xstring

            do_commit     = 'X'

          IMPORTING

            return_code   = l_retcode

            att_id        = l_att_id

          TABLES

            message_lines = lt_msg.

COMMIT WORK.

      SWC_CREATE_OBJECT BO_SOFM       'SOFM'  l_att_id.

      SWC_SET_ELEMENT INPUT_CONTAINER 'SOFM' BO_SOFM.

pokrakam
Active Contributor
0 Likes

Hello Safeer,

I meant in your WF-Task binding.Check your log, _ATTACH_OBJECTS should contain a reference to your attachment, and it should be object type SOFM. Usually this is automatically bound to the workflow steps, but if something has been overwritten or I don't know what, it may be worth trying to bind this explicitly.

Regards,

Mike

safeer_shah2
Participant
0 Likes

Thanks Mike, from where I can check the log ? and how I can do the binding explicitly ?

pokrakam
Active Contributor
0 Likes

The log is accessible via the 'Log' button in the work item display.

The binding is accessible via the 'Binding' button in the step editor.

See screenshots you posted yesterday.

Vijay's posts also included screenshots of what an attachment should look like, and how to bind it explicitly.

Regards,

Mike

safeer_shah2
Participant
0 Likes

Hi Mike, the log and bidning showing the attachment. please check the screenshots.

pokrakam
Active Contributor
0 Likes

So from the timing it is clear what the problem is:

It looks like you are starting the WF and then adding the attachment. This means the WI has probably already been created by the time you add the attachment, or it is locked and is in process of creating the work item. Therefore WF doesn't bind the attachment, because it isn't there yet.

You can either start the WF by one of the internal FMs or classes that do allow attachments (Not sure why SAP don't let you do it in the WAPI), or you can add the attachment to the decision task instead of the workflow (probably easier). Use SAP_WAPI_GET_CHILD_WORKITEMS to determine the work item number, and then go from there.

Is there a reason for staring the WF directly? If you used events you could pass the attachments along as well...

Regards,

Mike

safeer_shah2
Participant
0 Likes

Mike , this workflow is form based , I am passing internal table into a container to populate the value in forms fields and based on approval and rejection further processing will start. its a simple workflow I am not using object type in it as I don't need. I also tried enque and deque function modules to check if the workitem locked but same result . can you tell me which other internal function I can use for it. thanks for your help.

pokrakam
Active Contributor
0 Likes

I would suggest trying the WAPI route first for two reasons:

1. You're already using a WAPI to start the WF and it works. You'd have to replace that.

2. It's the SAP-supported way...

3. It's easier

So after staring the WF, use SAP_WAPI_GET_CHILD_WORKITEMS to get the ID of the form task and add the attachment there. It should then bind automatically back to the WF once the task is completed.

Regards,

Mike

safeer_shah2
Participant
0 Likes

hi mike, I am getting two workitem ids, one is for workflow and second is I think for form.

safeer_shah2
Participant
0 Likes

thanks mike, its solved, really appreciate your help

pokrakam
Active Contributor
0 Likes

Great, glad we got there in the end.

Two suggestions: I would add a check to ensure the step is the one you want. TASK ID should be TS...whatever. Use that as your basis for finding the step.

Second, just in case of synchronization issues, I would put the get child items bit into a loop, if unsuccessful then WAIT UP TO 2 SECONDS and try again, maybe 30 times before failing (one minute).

Regards,

Mike