Ayuda SAP

Como NO generar txt vacios al adjuntar archivos?

Holaaaa a todoossss como estais necesito de su ayuda :sweat:

Mi programa Z ( adjunta varios archivos desde un servidor y los envía por mail a varios destinatarios)

Utilizo el modulo de funciones ‘SO_NEW_DOCUMENT_ATT_SEND_API1’, y como import pongo

PUT_IN_OUTBOX = ‘X’ al añadir el asunto en el import document_data : gs_doc_data-obj_descr = ‘asunto’.

siempre me genera un archivo .txt , hay alguna forma en el que no se genero este fichero???

muchísimas gracias por su ideas y ayudas.
:blush:

desconozco, el asunto este de la creación del txt. Se genera en el pc que ejecuta la TRX? de ser así por que mejor en vez de desgastarte en evitar algo que al parecer es estándar de SAP mejor no ejecutas un comando DOS que elimine los archivos generados y lo ejecutas una vez finalizado tu programa Z asi aunque la BAPI te genere estos archivos solo serán temporales.

DATA: w_file     TYPE string    VALUE 'C:\ruta\dondequeda\txt\*.txt
, w_cmd(200) TYPE c.

CONCATENATE 'COMMAND.COM /C del  ' w_file
      INTO w_cmd SEPARATED BY space.

    CALL FUNCTION 'GUI_EXEC'
      EXPORTING
        command = w_cmd.
.

Hola Ricardo

como puedo saber si el fichero lo crea el servidor?

saluditos :sunglasses:

Mira no entiendo mucho tu consulta, este fichero donde se encuentra ubicado? que contiene? siempre tiene un mismo nombre? trata de entregar un poco mas de antecedentes para saber cual es exactamente el problema y que necesitas para solucionarlo. (sueno como la dra. polo jajajaja)

También puedes incluir una imagen de este txt para comprender que contiene.

2 Me gusta

Aquí un Breve resumen:

En el programa Z indicamos que cada diez minutos los archivos que están dentro de una carpeta se adjunten y se borren del servidor.

El txt contiene lo que es el cuerpo del mensaje, y en este caso el cuerpo del mensaje esta vació, ya que solo nos interesa los archivos adjuntos del servidor, y no el txt vació.

el problema es que no quiero que se adjunte ese txt que genera la función: ‘SO_NEW_DOCUMENT_ATT_SEND_API1’

a ver si puedes ayudarme gracias :wink:

Intenta comentando la siguiente línea del código que destaco mas abajo:

call function 'SO_NEW_DOCUMENT_SEND_API1'
 exporting
 document_data = maildata
 document_type = 'RAW'
 put_in_outbox = 'X'
 tables
 object_header = mailtxt
 `"object_content = mailtxt`      ""comenta esta linea
 receivers = mailrec

mailtxt es una tabla interna que lleva el contenido del mail, por ende si la tabla esta vacía y no le pasas el parámetro a object_content no debería utilizarlo.

1 me gusta

Los TXT son archivos de texto, que se relacionan con texfile, easyplot, saved data, wireshark traffic log, display write document y fileviewpro. Se puede modificar el inicio del programa, tal como lo dice Ricardo, para modifique los datos del programa , y tienes que revisar la relación del archivo datos.txt, porque pueden ser los constructores ofstream porque es uno de los especificadores que tienen mayor control en las operaciones de envío. Para que tengas mayor conocimiento de esos detalles del archivo de texto hay una aplicación útil, al menos no me ha saboteado la máquina :wink:, es h_tp://www.solvusoft.com/es/download/fileviewpro/ , nos vemos chicos.

Esta es mi función :eyes:

CALL FUNCTION 'SO_NEW_DOCUMENT_ATT_SEND_API1'
   EXPORTING
     document_data              = gs_doc_data
*     PUT_IN_OUTBOX              = 'X'

   TABLES
     packing_list               = gt_pack_list
     contents_hex               = gt_pdfout
     receivers                  = gt_rec
   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.

y por debug el que crea el txt es el document_data, que se rellena con :

gs_doc_data-obj_name   = 'TEST'.
gs_doc_data-obj_descr  = lv_asunto."'Documento'.
gs_doc_data-obj_langu  = 'ES'.
gs_doc_data-sensitivty = 'P'.

:sweat:

En ese caso cambia el llamado de tu bapi ‘SO_NEW_DOCUMENT_ATT_SEND_API1’ por la que te indico yo SO_DOCUMENT_SEND_API1, si te fijas tu bapi solo llama al ejemplo que te estoy indicando.

También puede ser que no este viendo algo claramente tengo mucha hambre voy al almuerzo y regreso.

Salu2

ya probé con esta función y tampoco soluciono el problema :frowning:

saluditos :disappointed:

Hola @silvis

:information_source: edite el titulo de tu tema debido a que poner “Pregunta reto de la semana :D” no ayuda a los lectores a entender el problema que presentas. El titulo en el foro representa un resumen de tu falla, por lo cual trata de evitar títulos que desvíen la idea de tu duda.

P.D. recuerda también marcar el tema que soluciono tu problema

Saludos (:

sigo sin poder resolver el problema.

saludos :persevere:

@silvis, podrias poner todo tu código fuente para revisarlo con un poco mas de detalle? supongo que no deben ser tantas líneas de código.

Salu2

Hola Ricardo buen dia este es mi codigo :sweat:

DATA: gs_pdfout    TYPE solix,
      gt_pdfout    TYPE solix_tab,
      gs_doc_data  TYPE sodocchgi1,
      gt_rec       TYPE TABLE OF somlreci1,
      gs_rec       TYPE somlreci1,
      gt_pack_list TYPE TABLE OF sopcklsti1,
      gs_pack_list LIKE LINE OF gt_pack_list,
      gt_message   TYPE TABLE OF solisti1,
      gs_message   LIKE LINE OF gt_message,
      lv_drive TYPE string,
      lv_extension TYPE string,
      lv_name TYPE string,
      lv_name_with TYPE string,
      lv_path TYPE string,
      p_adjunto type string,
      p_file_aux type string,
      gt_lines LIKE sy-tabix.

DATA: file_table TYPE TABLE OF eps2fili,
      wa_file_table LIKE LINE OF file_table.

TYPES:
  BEGIN OF ty_campos,
    campo1(2000),
  END OF ty_campos.

DATA: it_campos TYPE STANDARD TABLE OF ty_campos.
DATA: wa_campos LIKE LINE OF it_campos.
data lv_asunto type string value 'Asunto'.

PARAMETERS :  p_file TYPE eps2filnam.
SELECT-OPTIONS email FOR wa_campos-campo1.

CALL FUNCTION 'EPS2_GET_DIRECTORY_LISTING'
    EXPORTING
      iv_dir_name                  = p_file
    TABLES
      dir_list                     = file_table
   EXCEPTIONS
     invalid_eps_subdir           = 1
     sapgparam_failed             = 2
     build_directory_failed       = 3
     no_authorization             = 4
     read_directory_failed        = 5
     too_many_read_errors         = 6
     empty_directory_list         = 7
     OTHERS                       = 8
            .
IF sy-subrc <> 0.
  EXIT.
ENDIF.

gs_doc_data-obj_descr  = lv_asunto."'Documento'.
READ TABLE file_table into wa_file_table INDEX 1.
clear wa_file_table.

  LOOP AT email.
    gs_rec-receiver = email-low.
    gs_rec-rec_type = 'U'.

    INSERT gs_rec INTO TABLE gt_rec.
  ENDLOOP.

*CLEAR gs_message.
*gs_message-line = ''.
*APPEND gs_message TO gt_message.

*Inicio  silvis Si se borra esta parte no añade un fichero sin extensión
DESCRIBE TABLE gt_message LINES gt_lines.
gs_pack_list-body_num   = gt_lines.
gs_pack_list-doc_type = 'RAW'.
*Fin  silvis Si se borra esta parte no añade asunto


APPEND gs_pack_list TO gt_pack_list.

LOOP AT file_table INTO wa_file_table.

  CLEAR: p_file_aux, p_adjunto.
  CONCATENATE p_file wa_file_table-name INTO p_file_aux.

  p_adjunto = p_file_aux.

  CALL FUNCTION 'CH_SPLIT_FILENAME'
      EXPORTING
        complete_filename       = p_adjunto
     IMPORTING
       extension               = lv_extension
       name                    = lv_name
       name_with_ext           = lv_name_with
       path                    = lv_path
        .

  OPEN DATASET p_file_aux FOR INPUT IN BINARY MODE.
    DO.
       READ DATASET p_file_aux INTO gs_pdfout-line.
       IF sy-subrc NE 0.
         APPEND gs_pdfout TO gt_pdfout.
         EXIT.
       ENDIF.
       APPEND gs_pdfout TO gt_pdfout.
    ENDDO.
  CLOSE DATASET p_file_aux.

  DESCRIBE TABLE gt_pdfout LINES gt_lines.

  gs_pack_list-transf_bin = 'X'.
  gs_pack_list-head_start = 1.
  gs_pack_list-head_num   = 1.
  gs_pack_list-body_start = 1.
  gs_pack_list-body_num   = gt_lines.
  gs_pack_list-doc_type   = 'BIN'.
  gs_pack_list-obj_name   = 'ATTACHMENT'.
  gs_pack_list-obj_descr = lv_name_with.
  gs_pack_list-doc_size   = gt_lines * 255.

  APPEND gs_pack_list TO gt_pack_list.


ENDLOOP.

CALL FUNCTION 'SO_NEW_DOCUMENT_ATT_SEND_API1'
   EXPORTING
     document_data              = gs_doc_data
*     PUT_IN_OUTBOX              = 'X'
     commit_work                = 'X'
   TABLES
     packing_list               = gt_pack_list
*     contents_txt               = gt_message
     contents_hex               = gt_pdfout
     receivers                  = gt_rec
   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.
else.
  COMMIT WORK.
  SUBMIT rsconn01 WITH mode = 'INT' AND RETURN.

  data wa_gt_pack_list like LINE OF gt_pack_list.

  LOOP AT gt_pack_list into wa_gt_pack_list.

    clear p_file_aux.
    CONCATENATE p_file wa_gt_pack_list-obj_descr INTO p_file_aux.
    DELETE DATASET p_file_aux."LV_FILENAME_aux.

  ENDLOOP.

ENDIF.

espero que puedas ayudarme gracias que tengas un lindo dia :slight_smile:

Por lo que veo tu problema esta acá:

*Inicio  silvis Si se borra esta parte no añade un fichero sin extensión
DESCRIBE TABLE gt_message LINES gt_lines.
gs_pack_list-body_num   = gt_lines.
gs_pack_list-doc_type = 'RAW'.
*Fin  silvis Si se borra esta parte no añade asunto


APPEND gs_pack_list TO gt_pack_list.

Como bien dices si lo borras no aparece el archivo adjunto pero pierdes el asunto, lamentablemente no he podido replicar este comportamiento en mi sistema por tanto no se me ocurre de que forma poder evitar esto.

Cualquier cosa que descubra volveré a comentar.

Salu2

Como dice Ricardo yo borraria esa parte, y para añadir asunto, haces lo siguiente:

 OBJHEAD = 'ASUNTO CUALQUIERA'.
  APPEND OBJHEAD.

  CALL FUNCTION 'SO_NEW_DOCUMENT_ATT_SEND_API1'
       EXPORTING
            DOCUMENT_DATA              = DOC_CHNG
            PUT_IN_OUTBOX              = 'X'
       TABLES
            PACKING_LIST               = OBJPACK
            OBJECT_HEADER              = OBJHEAD
            CONTENTS_BIN               = OBJBIN
            CONTENTS_TXT               = OBJTXT
            RECEIVERS                  = 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.

Yo probaria con eso.
Saludos,

holaaaa a todos y muchismas gracias por su ayuda, al final he podido resolver el problema era de estandar, en la transacción sodis, en datos obligatorios del estandar debe tener el mensaje del cuadro en blanco para que no adjunte ningun txt adicional.

que tengan una feliz semana :grinning:

3 Me gusta

Este tema se cerró automáticamente 7 días después del último post. No se permiten nuevas respuestas.