{"id":82,"date":"2023-11-22T05:28:35","date_gmt":"2023-11-22T05:28:35","guid":{"rendered":"https:\/\/sapabap.dwimansolution.com\/?p=82"},"modified":"2023-11-22T08:51:06","modified_gmt":"2023-11-22T08:51:06","slug":"sap-abap-simple-interface-ftp-inbound-sap-consume-file-from-ftp","status":"publish","type":"post","link":"https:\/\/sapabap.dwimansolution.com\/index.php\/2023\/11\/22\/sap-abap-simple-interface-ftp-inbound-sap-consume-file-from-ftp\/","title":{"rendered":"SAP ABAP &#8211; Simple Interface FTP Inbound (SAP Consume File From FTP)"},"content":{"rendered":"\n<p>Today I will share my techniques on how to consume file .txt from my experience <\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p>Maintenance Table of Interface Config Master is designed like this<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" loading=\"lazy\" width=\"1024\" height=\"127\" src=\"https:\/\/sapabap.dwimansolution.com\/wp-content\/uploads\/2023\/11\/image-1024x127.png\" alt=\"\" class=\"wp-image-83\" srcset=\"https:\/\/sapabap.dwimansolution.com\/wp-content\/uploads\/2023\/11\/image-1024x127.png 1024w, https:\/\/sapabap.dwimansolution.com\/wp-content\/uploads\/2023\/11\/image-300x37.png 300w, https:\/\/sapabap.dwimansolution.com\/wp-content\/uploads\/2023\/11\/image-768x95.png 768w, https:\/\/sapabap.dwimansolution.com\/wp-content\/uploads\/2023\/11\/image-850x106.png 850w, https:\/\/sapabap.dwimansolution.com\/wp-content\/uploads\/2023\/11\/image.png 1521w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" loading=\"lazy\" width=\"927\" height=\"405\" src=\"https:\/\/sapabap.dwimansolution.com\/wp-content\/uploads\/2023\/11\/image-1.png\" alt=\"\" class=\"wp-image-84\" srcset=\"https:\/\/sapabap.dwimansolution.com\/wp-content\/uploads\/2023\/11\/image-1.png 927w, https:\/\/sapabap.dwimansolution.com\/wp-content\/uploads\/2023\/11\/image-1-300x131.png 300w, https:\/\/sapabap.dwimansolution.com\/wp-content\/uploads\/2023\/11\/image-1-768x336.png 768w, https:\/\/sapabap.dwimansolution.com\/wp-content\/uploads\/2023\/11\/image-1-850x371.png 850w\" sizes=\"(max-width: 927px) 100vw, 927px\" \/><\/figure>\n\n\n\n<p>Password is prohibited to input via SM30 screen. They are input via Zprogram because it has to be encrypted to make your password secure.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" loading=\"lazy\" width=\"628\" height=\"230\" src=\"https:\/\/sapabap.dwimansolution.com\/wp-content\/uploads\/2023\/11\/image-2.png\" alt=\"\" class=\"wp-image-85\" srcset=\"https:\/\/sapabap.dwimansolution.com\/wp-content\/uploads\/2023\/11\/image-2.png 628w, https:\/\/sapabap.dwimansolution.com\/wp-content\/uploads\/2023\/11\/image-2-300x110.png 300w\" sizes=\"(max-width: 628px) 100vw, 628px\" \/><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<p class=\"has-medium-font-size\" style=\"font-style:normal;font-weight:700\"><a href=\"https:\/\/sapabap.dwimansolution.com\/index.php\/2023\/11\/22\/sap-abap-string-encode-decode-base64\/\" data-type=\"URL\" data-id=\"https:\/\/sapabap.dwimansolution.com\/index.php\/2023\/11\/22\/sap-abap-string-encode-decode-base64\/\" target=\"_blank\" rel=\"noreferrer noopener\">Here is how I encode &amp; decode my password (CLICK)<\/a><\/p>\n\n\n\n<p><\/p>\n\n\n\n<p>Here we go to the our FTP Interface Program<\/p>\n\n\n\n<p style=\"font-style:normal;font-weight:700\">STRUCTURE<\/p>\n\n\n\n<p>I will use char with length 1000 to read the content and command<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" loading=\"lazy\" width=\"828\" height=\"234\" src=\"https:\/\/sapabap.dwimansolution.com\/wp-content\/uploads\/2023\/11\/image-3.png\" alt=\"\" class=\"wp-image-94\" srcset=\"https:\/\/sapabap.dwimansolution.com\/wp-content\/uploads\/2023\/11\/image-3.png 828w, https:\/\/sapabap.dwimansolution.com\/wp-content\/uploads\/2023\/11\/image-3-300x85.png 300w, https:\/\/sapabap.dwimansolution.com\/wp-content\/uploads\/2023\/11\/image-3-768x217.png 768w\" sizes=\"(max-width: 828px) 100vw, 828px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" loading=\"lazy\" width=\"698\" height=\"180\" src=\"https:\/\/sapabap.dwimansolution.com\/wp-content\/uploads\/2023\/11\/image-4.png\" alt=\"\" class=\"wp-image-95\" srcset=\"https:\/\/sapabap.dwimansolution.com\/wp-content\/uploads\/2023\/11\/image-4.png 698w, https:\/\/sapabap.dwimansolution.com\/wp-content\/uploads\/2023\/11\/image-4-300x77.png 300w\" sizes=\"(max-width: 698px) 100vw, 698px\" \/><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p style=\"font-style:normal;font-weight:700\">METHODS<\/p>\n\n\n\n<p>I have several methods that will reuse in our programs<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>  METHOD do_command.\n\n    DATA: lv_command TYPE char1000sf.\n    lv_command = im_command.\n\n    CALL FUNCTION 'FTP_COMMAND'\n      EXPORTING\n        handle        = m_handle\n        command       = lv_command\n      TABLES\n        data          = ex_t_result&#91;]\n      EXCEPTIONS\n        tcpip_error   = 1\n        command_error = 2\n        data_error    = 3\n        OTHERS        = 4.\n    IF sy-subrc &lt;&gt; 0.\n* Implement suitable error handling here\n    ENDIF.\n\n  ENDMETHOD.<\/code><\/pre>\n\n\n\n<p><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>  METHOD r3_to_server.\n\n    DATA: lv_filename TYPE char1000sf.\n\n    lv_filename = im_filename.\n\n    CALL FUNCTION 'FTP_R3_TO_SERVER'\n      EXPORTING\n        handle         = m_handle\n        fname          = lv_filename\n*       BLOB_LENGTH    =\n        character_mode = 'X'\n      TABLES\n*       BLOB           =\n        text           = im_t_content\n      EXCEPTIONS\n        tcpip_error    = 1\n        command_error  = 2\n        data_error     = 3\n        OTHERS         = 4.\n    IF sy-subrc &lt;&gt; 0.\n* Implement suitable error handling here\n    ENDIF.\n\n  ENDMETHOD.<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p>And here is the main program<\/p>\n\n\n\n<ol>\n<li style=\"font-style:normal;font-weight:700\">Get master config<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-code\"><code>    SELECT SINGLE *\n      FROM zhrdt900\n      INTO ms_config\n      WHERE zprogram EQ im_program.<\/code><\/pre>\n\n\n\n<p style=\"font-style:normal;font-weight:700\">2. Open FTP<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\n    DATA: lv_key       TYPE i VALUE 26101957,\n          lv_slen      TYPE i,\n          lv_hash_pass TYPE char30,\n          lv_pass_enc  TYPE string,\n          lv_pass_dec  TYPE string,\n          lv_pass      TYPE char30.\n\n    lv_pass_enc = ms_config-ftp_pass.\n\n    CALL FUNCTION 'ZFM_DECODE_BASE64'\n      EXPORTING\n        im_enc_string = lv_pass_enc\n      IMPORTING\n        ex_dec_string = lv_pass_dec.\n\n    lv_pass = lv_pass_dec.\n\n    lv_slen = strlen( lv_pass ).\n    CALL FUNCTION 'HTTP_SCRAMBLE'\n      EXPORTING\n        source      = lv_pass\n        sourcelen   = lv_slen\n        key         = lv_key\n      IMPORTING\n        destination = lv_hash_pass.\n\n    CALL FUNCTION 'FTP_CONNECT'\n      EXPORTING\n        user            = ms_config-ftp_user\n        password        = lv_hash_pass\n        host            = ms_config-endpoint\n        rfc_destination = 'SAPFTPA'\n      IMPORTING\n        handle          = m_handle\n      EXCEPTIONS\n        not_connected   = 1\n        OTHERS          = 2.\n    IF sy-subrc &lt;&gt; 0.\n      ex_error = 'X'.\n    ENDIF.\n<\/code><\/pre>\n\n\n\n<p style=\"font-style:normal;font-weight:700\">3. Get List of Filename<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>    DATA: lt_result  TYPE zhrtt0004,\n          lv_command TYPE string.\n\n    lv_command = `cd ` &amp;&amp; ms_config-ftp_path_ibd.\n    do_command( lv_command ).\n\n    do_command( EXPORTING im_command =  'nlist' IMPORTING ex_t_result = lt_result ).\n    LOOP AT lt_result INTO DATA(ls_result).\n      FIND '.txt' IN ls_result-lines.\n      IF sy-subrc NE 0.\n        CONTINUE.\n      ELSE.\n        APPEND ls_result-lines TO ex_t_file.\n      ENDIF.\n    ENDLOOP.<\/code><\/pre>\n\n\n\n<p style=\"font-style:normal;font-weight:700\">4. Get Content <\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>    DATA: lv_fullpath TYPE string,\n          lv_command  TYPE string.\n\n    lv_command = `cd ` &amp;&amp; ms_config-ftp_path_ibd.\n    do_command( lv_command ).\n\n    ex_t_file = server_to_r3( im_filename = im_filename ).<\/code><\/pre>\n\n\n\n<p style=\"font-style:normal;font-weight:700\">5. Fill Content to Internal Table<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>TYPES: BEGIN OF gty_data_file,\n         field1(8)  TYPE c,\n         field2(10) TYPE c,\n         field3(4)  TYPE c,\n       END OF gty_data_file,\n       gtt_data_file TYPE STANDARD TABLE OF gty_data_file WITH EMPTY KEY.\n\nTYPES: BEGIN OF gty_data,\n         icon     TYPE icon_d,\n         field_alpha   TYPE zdt_log-field_alpha,\n         field_date    TYPE zdt_log-field_date,\n         field_regular TYPE zdt_log-field_regular,\n         message  TYPE zdt_log-message,\n         erdat    TYPE zdt_log-erdat,\n         erzet    TYPE zdt_log-erzet,\n         ernam    TYPE zdt_log-ernam,\n         filename TYPE zdt_log-filename,\n       END OF gty_data,\n       gtt_data TYPE STANDARD TABLE OF gty_data WITH EMPTY KEY.\n\n    DATA:\n      ls_ibd TYPE gty_data_file,\n      lt_ibd TYPE gtt_data_file.\n\n    LOOP AT im_t_content INTO DATA(ls_content).\n      CLEAR: ls_ibd.\n      SPLIT ls_content-lines AT gc_tab INTO ls_ibd-field1 ls_ibd-field2 ls_ibd-field3.\n      APPEND ls_ibd TO lt_ibd.\n    ENDLOOP.\n\n    rt_data = VALUE #( FOR w IN lt_ibd (\n      field_alpha = |{ w-field1 ALPHA = IN }|\n      field_date = |{ w-field2+6(4) }{ w-field2+3(2) }{ w-field2+0(2) }|\n      field_regular = w-field3\n    ) ).<\/code><\/pre>\n\n\n\n<p style=\"font-style:normal;font-weight:700\">6. Process your data and after that save to the log table <\/p>\n\n\n\n<p>Here is my log table<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" loading=\"lazy\" width=\"920\" height=\"360\" src=\"https:\/\/sapabap.dwimansolution.com\/wp-content\/uploads\/2023\/11\/image-8.png\" alt=\"\" class=\"wp-image-100\" srcset=\"https:\/\/sapabap.dwimansolution.com\/wp-content\/uploads\/2023\/11\/image-8.png 920w, https:\/\/sapabap.dwimansolution.com\/wp-content\/uploads\/2023\/11\/image-8-300x117.png 300w, https:\/\/sapabap.dwimansolution.com\/wp-content\/uploads\/2023\/11\/image-8-768x301.png 768w, https:\/\/sapabap.dwimansolution.com\/wp-content\/uploads\/2023\/11\/image-8-850x333.png 850w\" sizes=\"(max-width: 920px) 100vw, 920px\" \/><\/figure>\n\n\n\n<p style=\"font-style:normal;font-weight:700\">7. Close the FTP Connection<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>  METHOD close_ftp.\n    CALL FUNCTION 'FTP_DISCONNECT'\n      EXPORTING\n        handle = m_handle.\n\n    CALL FUNCTION 'RFC_CONNECTION_CLOSE'\n      EXPORTING\n        destination = im_rfcdest\n      EXCEPTIONS\n        OTHERS      = 1.\n  ENDMETHOD.<\/code><\/pre>\n\n\n\n<p>That&#8217;s it. Simple. I hope you can do it better. \ud83d\ude42<\/p>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Today I will share my techniques on how to consume file .txt from my experience Maintenance Table of Interface Config Master is designed like this Password is prohibited to input via SM30 screen. They are input via Zprogram because it has to be encrypted to make your password secure. Here is how I encode &amp;&#8230;<\/p>\n","protected":false},"author":1,"featured_media":103,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[1],"tags":[],"_links":{"self":[{"href":"https:\/\/sapabap.dwimansolution.com\/index.php\/wp-json\/wp\/v2\/posts\/82"}],"collection":[{"href":"https:\/\/sapabap.dwimansolution.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/sapabap.dwimansolution.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/sapabap.dwimansolution.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/sapabap.dwimansolution.com\/index.php\/wp-json\/wp\/v2\/comments?post=82"}],"version-history":[{"count":11,"href":"https:\/\/sapabap.dwimansolution.com\/index.php\/wp-json\/wp\/v2\/posts\/82\/revisions"}],"predecessor-version":[{"id":105,"href":"https:\/\/sapabap.dwimansolution.com\/index.php\/wp-json\/wp\/v2\/posts\/82\/revisions\/105"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/sapabap.dwimansolution.com\/index.php\/wp-json\/wp\/v2\/media\/103"}],"wp:attachment":[{"href":"https:\/\/sapabap.dwimansolution.com\/index.php\/wp-json\/wp\/v2\/media?parent=82"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/sapabap.dwimansolution.com\/index.php\/wp-json\/wp\/v2\/categories?post=82"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/sapabap.dwimansolution.com\/index.php\/wp-json\/wp\/v2\/tags?post=82"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}