RFC .- Archivos

Colapsar
X
 
  • Tiempo
  • Mostrar
Limpiar Todo
nuevos mensajes
  • Paola79
    Member
    • oct
    • 62

    #1

    RFC .- Archivos

    Hola a todos,

    Tengo que crear una rfc en la que ellos me mandandan unos datos para generar un informe en SAP, hasta ahí todo bien.

    Ese informe lo tengo que generar en PDF, hasta ahí todo bien.

    y aqui va mi cuestión: ¿El informe en PDF se lo puedo devolver al otro sistema en la propia RFC o se lo tendría que dejar en una ruta y que lo recojan ellos?

    Muchas gracias de antemano y un saludo
  • ballan
    Senior Member
    • oct
    • 671

    #2
    Puedes hacerlo de las dos maneras, podrias depositar el fichero en algun sitio y devolver la ruta como parametro o bien si quieres puedes mandar el fichero en una cadena

    Asi a bote pronto se me ocurre que podrias crear una orden de spool con el pdf

    Despues llamar a la funcion CONVERT_ABAPSPOOLJOB_2_PDF y obtendrias el pdf en una tabla

    Esta tabla la puedes convertir con la funcion SX_TABLE_LINE_WIDTH_CHANGE y cambiarle la longitud de linea de 132 a 255

    Despues llamarias a la funcion SCMS_BINARY_TO_XSTRING y en el parametro buffer obtendrias una cadena que repesenta el pdf

    Luego el receptor del pdf podria tratar esa cadena y generar el fichero o hacer lo que necesitara

    Comentario

    • Paola79
      Member
      • oct
      • 62

      #3
      Gracias Ballan, estoy con ello porque he estado liadilla con otros temas...

      La RFC la he creado haciendo un submit al programa del que sacamos el listado, como recupero el número de la orden SPOOL? para realizar los siguientes pasos qeu me indicas.

      Muchas gracias y un saludo,

      Comentario

      • Paola79
        Member
        • oct
        • 62

        #4
        Buenos días,

        Tengo creada ya la RFC donde hago un submit al al programa donde me genera el listado y la orden SPOOL, pero no consigo que la RFC reciba el xstring para que lo trate el otro sistema. En el submit al hacer el AT RETURN se lo puedo devolver?

        En espera de vuestra ayuda muchas gracias,

        Un saludo

        Comentario

        • Atlas
          Senior Member
          • ago
          • 107

          #5
          tal vez esto te sirva

          DATA list_tab TYPE TABLE OF abaplist.

          SUBMIT report EXPORTING LIST TO MEMORY
          AND RETURN.

          CALL FUNCTION 'LIST_FROM_MEMORY'
          TABLES
          listobject = list_tab
          EXCEPTIONS
          not_found = 1
          OTHERS = 2.

          Comentario

          • melerogalan
            Senior Member
            • nov
            • 142

            #6
            Como bien dice mi compañero, es conveniente usar los MEMORY ID. Un ejemplo más sencillo.

            ************************************************** ********************
            * Hacer un submit y devolver un parámetro
            ************************************************** ********************
            REPORT zlol8.
            DATA l_orden_spool TYPE string.

            SUBMIT zlol9 AND RETURN.

            IMPORT return = l_orden_spool FROM MEMORY ID 'TEST'.
            FREE MEMORY ID 'TEST'. "Es conveniente borrar la memoria usada para evitar datos corruptos

            WRITE l_orden_spool.
            REPORT zlol9.

            DATA l_orden_spool TYPE string.

            l_orden_spool = '1234567890'.

            EXPORT return = l_orden_spool TO MEMORY ID 'TEST'.
            El resultado será en pantalla
            1234567890.

            Saludos.
            Editado por última vez por melerogalan; 21/07/2010, 12:29:41.
            Cada vez que un programador hace una hora extra, Dios mata a un gatito...tenlo en cuenta

            Comentario

            • ballan
              Senior Member
              • oct
              • 671

              #7
              Pon el codigo para que veamos como haces la llamada, si estas haciendo submit y no has añadido el and return la rfc se va a quedar colgada en ese punto

              Comentario

              • Paola79
                Member
                • oct
                • 62

                #8
                Hola gracias ante todo,

                La llamada desde a la RFC al programa la tengo de la siguiente forma:



                SUBMIT zsalo056_spool_2
                WITH s_bukrs = bukrs
                WITH s_filkd = filkd
                WITH s_gsber = gsber
                AND RETURN.

                Los parametros de la RFC son:
                IMPORTING
                VALUE(BUKRS) TYPE BSID-BUKRS OPTIONAL
                VALUE(FILKD) TYPE BSID-FILKD OPTIONAL
                VALUE(GSBER) TYPE BSID-GSBER OPTIONAL
                EXPORTING
                VALUE(PDF) TYPE XSTRING.

                En el programa le paso un parametro que se llama s_pdf al PDF de la RFC.

                Un saludo y gracias de antemano,

                Comentario

                • Paola79
                  Member
                  • oct
                  • 62

                  #9
                  Muchas gracias ya lo he conseguido, pero ahora quieren que les pase un fichero plano (txt) porque dicen que el XSTRING no lo pueden leer. Esto con que función podría hacerlo?

                  Un saludo

                  Comentario

                  • ballan
                    Senior Member
                    • oct
                    • 671

                    #10
                    Hasta donde yo se un PDF no es texto sino que es una "imagen" del texto por lo que para convertir el xstring BINARIO que contiene el PDF tendrias que pasarlo por algun tipo de programa conversor de PDF a TXT o algo asi

                    Si lo que quieres es enviarles un fichero plano lo que tendras que hacer es que dentro de tu programa zsalo056_spool_2 tendras alguna tabla interna que contiene los datos necesarios para el fichero, tienes que exportar/importar esa tabla entre tu RFC y el programa zsalo056_spool_2

                    Puedes hacerlo de dos maneras

                    1.-

                    Haces el submit igual

                    Dentro de tu programa zsalo056_spool_2 añades la instruccion

                    EXPORT (aqui iria el nombre de la tabla interna) TO MEMORY ID 'TEST'

                    y luego en tu RFC despues de la llamada al submit and return haces

                    IMPORT (aqui iria el nombre de la tabla interna) FROM MEMORY ID 'TEST'

                    2.-

                    Haces submit con exporting list to memory

                    En tu RFC despues del submit llamas a la funcion LIST_FROM_MEMORY


                    Una vez que tengas tu tabla interna podras crear el fichero con GUI_DOWNLOAD o con OPEN DATASET

                    Comentario

                    • Paola79
                      Member
                      • oct
                      • 62

                      #11
                      Gracias Ballan, el listado es un write puro y duro no hay ni una tabla interna, que es lo jodido, ya me encontré este programa montado y me ha tocado modificarlo para el otro sistema porque ahora no consiguen que les lea el listadito... Un lio, no saben ni lo que quieren la verdad.

                      Gracias de nuevo y un saludo

                      Comentario

                      • Paola79
                        Member
                        • oct
                        • 62

                        #12
                        Ya lo tengo, muchas gracias a todos a ver si ahora les gusta.

                        Un saludo

                        Comentario

                        Trabajando...