Seleccionar página

Durante estos últimos días hemos peleado mucho mis compañeros y yo para desarrollar una nueva funcionalidad en el trabajo y poder Adjuntar Archivos en Envíos de Correos en SAP.

Para reforzar conocimientos voy a escribir esta entrada de blog, por lo que si no estás interesado en la tecnología SAP mejor no sigas leyendo porque te aburrirás…

La tarea era adjuntar los anexos de las facturas y documentos contables con una peculiaridad en el correo electrónico. No ha sido fácil, no hemos encontrado como hacerlo en internet, por lo que ahora que todo funciona la felicidad es máxima. ¡Y hemos aprendido un montón!

Perdonad las generalidades pero en ningún caso quiero quebrar las políticas de mi empresa ni las de su cliente. Por lo que no pienso copiar ni una sola línea de código por trivial pudiera ser.

Hay dos formas (que yo conozca) de anexar archivos a las facturas o a los documentos contables en SAP. A través de la transacción VF03 o con subidas masivas (ArchiveLink). Dependiendo de cómo hayas anexado estos archivos su trato es diferente.

Para ambas formas hay que preparar una estructura que luego se usa en el método CALL METHOD cl_binary_relation=>read_links que es el que hemos usado tras probar con otros métodos y funciones que no nos dieron resultado.

En el caso de los archivos que han sido subido por carga masiva:

  1. Se usa la función CALL FUNCTION ‘ARCHIV_GET_CONNECTIONS’ que nos devuelve una tabla con todos los archivos que se anexaron de esta manera.
  2. Tras esto hay que recorrer dicha tabla y usar la función CALL FUNCTION ‘ARCHIV_GET_TABLE’ para recuperar el tamaño (super importante esto) y el contenido del archivo.
  3. Para poder usar la tabla del contenido obtenido con el siguiente método hay que redimensionar la tabla. Esto lo hemos solucionado usando CALL METHOD cl_rmps_general_functions=>convert_1024_to_255. Hay que desactivar el UNICODE para que esté método funcione, por lo que no sé si sería una solución definitiva o habrá que hacer modificaciones más adelante.
  4. Por último adjuntamos el documento al correo con el método CALL METHOD e_mail_body->add_attachment. Es importantísimo calcular el tamaño del archivo, ya que si esto no se hace correctamente el archivo se anexa pero no se abre correctamente.

En el caso de los archivos que han sido subido de forma manual:

  1. Tras el CALL METHOD cl_binary_relation=>read_links se llama a CALL FUNCTION ‘SO_DOCUMENT_READ_API1’ por cada documento anexado. Y cada documento nos va a devolver una tabla con la cabecera y otra con el contenido del archivo.
  2. ¡IMPORTANTE! Para que se puedan adjuntar archivos con una extensión de más de tres caracteres (ejemplo: docx) hay que usar una OSS NOTE 0001459896 – SUPPORT 4 DIGIT EXTENSION que es un parche estándar del propio SAP.
  3. Por último, como en el caso anterior, adjuntamos el documento al correo con el método CALL METHOD e_mail_body->add_attachment. De nuevo es importantísimo calcular el tamaño del archivo, ya que si esto no se hace correctamente el archivo se anexa pero no se abre correctamente (repito textualmente).

Tras configurar el e_mail con las últimas configuraciones cl_bcs=>create_persistent( )e_mail->set_documente_mail_body ) se comprueba las direcciones a las que se va a enviar están OK (pueden ser más de uno) y ejecutar CALL METHOD e_mail->add_recipient por cada uno.

Al final se prepara el correo con el que efectuamos los envíos con lv_sender cl_cam_address_bcs=>create_internet_address‘mi@correo.es’ ). Y se añade con CALL METHOD e_mail->set_sender

El último paso es CALL METHOD e_mail->send que envía los correos.

Para comprobarlo todo tenemos que usar la transacción SOST que es la que muestra el tráfico de los envios de correo electrónico en entornos de desarrollo (modificaciones) y test (pruebas). Esta transacción tiene mucho malaje porque cuando entras puede que no te diga la verdad. ¡OJO CON ESTO, Porque a nosotros nos ha dado mucho dolor de cabeza! Para que funcione correctamente pon una cifra exagerada en la cantidad máxima de aciertos.

Y esto es todo. Espero que os sea de utilidad si habéis navegado por internet buscando una solución para este problema. Con lo que os pueda ayudar contactarme por LinkedIn.