Adjuntar anexo en factura
Buenas, tengo el siguiente método para adjuntar un anexo en un documento (es una ZZ).
METHOD adjuntar_annexos_gefact.
DATA: l_subrc TYPE sysubrc,
l_objkey TYPE swo_typeid,
l_id_extern TYPE zgf_gefact_id,
lcl_efactura TYPE REF TO zgf_cl_ws_efactura,
lr_message TYPE bapireturn1,
lr_posicion TYPE zfit_058,
lr_id_annex TYPE zgf_r_annex_ws,
li_id_annex TYPE zgf_t_annex_ws,
lr_folder_id TYPE sofdk,
l_obj_data TYPE sood1,
l_obj_id TYPE soodk,
lr_document_id TYPE sofmk,
li_objcont TYPE STANDARD TABLE OF soli,
li_objhead TYPE STANDARD TABLE OF soli,
lr_boridcomment TYPE borident,
lr_boridproject TYPE borident,
lo_obj_sofm_key TYPE sofmk,
* lo_obj_sofm TYPE swc0_object,
lo_obj_sofm TYPE swc_object,
l_index TYPE n,
l_id_annex_est TYPE zgf_gefact_id.
* Creem l'objecte per la clase de missatges
IF ps_mensajes IS NOT BOUND.
CREATE OBJECT ps_mensajes.
ENDIF.
CALL METHOD me->get_id_gefact
IMPORTING
ps_id_gefact_extern = l_id_extern.
LOOP AT me->posicions INTO lr_posicion
WHERE estat_reg = zfi_cl_preregistre_fac=>estat_pos_conformada.
CONCATENATE lr_posicion-bukrs_zz
lr_posicion-belnr_zz
lr_posicion-gjahr_zz
INTO l_objkey.
CREATE OBJECT lcl_efactura.
CALL METHOD lcl_efactura->ws_obtenir_annex_pendents
EXPORTING
* pe_centre_receptor =
pe_id_gefact = l_id_extern
IMPORTING
ps_msg = lr_message
ts_annexos = li_id_annex[].
IF lr_message IS INITIAL.
swc_container container.
* swc0_create_container container.
CALL FUNCTION 'SO_FOLDER_ROOT_ID_GET'
EXPORTING
region = 'B'
IMPORTING
folder_id = lr_folder_id
EXCEPTIONS
OTHERS = 1.
LOOP AT li_id_annex INTO lr_id_annex.
CLEAR l_obj_data.
l_index = sy-index.
CALL FUNCTION 'ZGF_F_WF_GENERAR_ANNEX'
EXPORTING
pe_id_annex = lr_id_annex-id_annex
TABLES
ts_soli = li_objcont.
IF sy-subrc = 0.
CONCATENATE 'annex'
l_index
l_objkey
INTO l_obj_data-objdes SEPARATED BY '_'.
l_obj_data-file_ext = lr_id_annex-extensio.
l_obj_data-objnam = 'SOFM'.
l_obj_data-objla = sy-langu.
l_obj_data-objlen = LINES( li_objcont ) * 255.
CALL FUNCTION 'SO_OBJECT_INSERT'
EXPORTING
folder_id = lr_folder_id
object_type = 'EXT'
object_hd_change = l_obj_data
IMPORTING
object_id = l_obj_id
TABLES
objhead = li_objhead
objcont = li_objcont
EXCEPTIONS
active_user_not_exist = 1
communication_failure = 2
component_not_available = 3
dl_name_exist = 4
folder_not_exist = 5
folder_no_authorization = 6
object_type_not_exist = 7
operation_no_authorization = 8
owner_not_exist = 9
parameter_error = 10
substitute_not_active = 11
substitute_not_defined = 12
system_failure = 13
x_error = 14
OTHERS = 15.
IF sy-subrc = 0.
COMMIT WORK AND WAIT.
IF sy-subrc = 0.
lr_document_id-foltp = lr_folder_id-foltp.
lr_document_id-folyr = lr_folder_id-folyr.
lr_document_id-folno = lr_folder_id-folno.
lr_document_id-doctp = l_obj_id-objtp.
lr_document_id-docyr = l_obj_id-objyr.
lr_document_id-docno = l_obj_id-objno.
ENDIF.
* swc0_create_object lo_obj_sofm 'SOFM' lr_document_id.
swc_create_object lo_obj_sofm 'SOFM' lr_document_id.
IF sy-subrc = 0.
* swc0_get_object_key lo_obj_sofm lo_obj_sofm_key.
swc_get_object_key lo_obj_sofm lo_obj_sofm_key.
lr_boridcomment-objkey = lo_obj_sofm_key.
lr_boridcomment-objtype = 'MESSAGE'.
MOVE zfi_cl_preregistre_fac=>gefact_adjunt_objtyp TO lr_boridproject.
lr_boridproject-objtype = zfi_cl_preregistre_fac=>gefact_adjunt_objtyp.
CALL FUNCTION 'BINARY_RELATION_CREATE_COMMIT'
EXPORTING
obj_rolea = lr_boridproject
obj_roleb = lr_boridcomment
relationtype = 'ATTA'
EXCEPTIONS
no_model = 1
internal_error = 2
unknown = 3
OTHERS = 4.
IF sy-subrc = 0.
COMMIT WORK AND WAIT.
ELSE.
* No s'han pogut annexar els fitxers.
ENDIF.
ELSE.
* No s'han pogut annexar els fitxers.
ENDIF.
ELSE.
* No s'han pogut annexar els fitxers.
ENDIF.
ELSE.
ps_subrc = 1.
CALL METHOD ps_mensajes->insertar_mensaje
EXPORTING
pe_tipo_msg = zfg_cl_mensajes=>tipo_mensaje_sap
pe_type = lr_message-type
pe_id = lr_message-id
pe_number = lr_message-number
pe_message_v1 = lr_message-message_v1
pe_message_v2 = lr_message-message_v2
pe_message_v3 = lr_message-message_v3
pe_message_v4 = lr_message-message_v4.
ENDIF.
ENDLOOP.
ELSE.
ps_subrc = 1.
CALL METHOD ps_mensajes->insertar_mensaje
EXPORTING
pe_tipo_msg = zfg_cl_mensajes=>tipo_mensaje_sap
pe_type = lr_message-type
pe_id = lr_message-id
pe_number = lr_message-number
pe_message_v1 = lr_message-message_v1
pe_message_v2 = lr_message-message_v2
pe_message_v3 = lr_message-message_v3
pe_message_v4 = lr_message-message_v4.
ENDIF.
ENDLOOP.
ENDMETHOD.
Este código funciona perfectamente en una función, pero necesitábamos pasarlo a un método.
La única diferencia respecto a la funcion es el siguiente include:
INCLUDE <cntn01>. Este include no esta permitido en un método y en internet encontré estos dos para suplirlo, <CNTN02> and <CNTN03>.
Aun así no me funciona, me recupera el anexo y parece que lo inserta pero luego no hace nada.
Alguna sugerencia?
|