MUNDOSAP

MUNDOSAP (foro/index.php)
-   Programación ABAP IV (foro/forumdisplay.php?f=4)
-   -   Adjuntar anexo en factura (foro/showthread.php?t=71038)

sponsor 20/02/14 06:20:32

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?


Husos Horarios son GMT. La hora en este momento es 12:51:36.

www.mundosap.com 2006 - Spain
software crm, crm on demand, software call center, crm act, crm solutions, crm gratis, crm web