2017年12月16日 星期六

EXEC SQL存取至外部資料庫

事先於t_code:DBCO,設定外部連結名稱、預設資料庫,登入帳號、密碼
連接名稱         任意輸入
DBMS             MSS "以MS SQL為範例
使用者名稱       ******
資料庫密碼       ******
連結資訊           MSSQL_SERVER=主機名稱或IP MSSQL_DBNAME=資料庫名稱
*********************************************************************************
FORM connet_ext_db .
  DATAexc_ref    TYPE REF TO cx_sy_native_sql_error,
        error_text TYPE string.
  TRY.
      EXEC SQL.
        CONNECT TO :'連接名稱'
      ENDEXEC.
    CATCH cx_sy_native_sql_error INTO exc_ref.
      error_text exc_ref->get_text).
      MESSAGE error_text TYPE 'I'.
  ENDTRY.
ENDFORM.                    " CONNET_EXT_DB
*********************************************************************************
FORM select_into_structure.
  DATAexc_ref    TYPE REF TO cx_sy_native_sql_error,
        error_text TYPE string.

  TRY.
      EXEC SQL.
        SELECT 外部欄位
            INTO :內部欄位
            FROM 外部表格
            WHERE 外部欄位 :內部欄位
              and 外部欄位 :內部欄位
      ENDEXEC.

    CATCH cx_sy_native_sql_error INTO exc_ref.
      error_text exc_ref->get_text).
      MESSAGE error_text TYPE 'I'.
  ENDTRY.

  IF error_text IS INITIAL.
    WRITE/ 執行成功.
  ELSE.
    WRITE/ 執行失敗.
  ENDIF.

ENDFORM.                    " SELECT_INTO_STRUCTURE
*********************************************************************************
FORM update_rows.
  DATAexc_ref    TYPE REF TO cx_sy_native_sql_error,
        error_text TYPE string.

  TRY.
      EXEC SQL.
        UPDATE 外部表格            
        SET  外部欄位 :內部欄位
             外部欄位 :內部欄位
        WHERE 外部欄位 :內部欄位   
          AND 外部欄位 :內部欄位    
    ENDEXEC.
    CATCH cx_sy_native_sql_error INTO exc_ref.
      error_text exc_ref->get_text).
      MESSAGE error_text TYPE 'I'.
  ENDTRY.

  IF error_text IS INITIAL.
    WRITE/ 執行成功.
  ELSE.
    WRITE/ 執行失敗.
  ENDIF.
ENDFORM.                    " UPDATE_ROWS
*********************************************************************************
FORM insert_rows.
  DATAexc_ref    TYPE REF TO cx_sy_native_sql_error,
        error_text TYPE string.

  TRY.
      EXEC SQL.
        INSERT INTO 外部表格
          ( 外部欄位, 外部欄位 )
        VALUES
                 :內部欄位:內部欄位 )
      ENDEXEC.

    CATCH cx_sy_native_sql_error INTO exc_ref.
      error_text exc_ref->get_text).
      MESSAGE error_text TYPE 'I'.
  ENDTRY.
  IF error_text IS INITIAL.
    WRITE/ 執行成功.
  ELSE.
    WRITE/ 執行失敗.
  ENDIF.
ENDFORM.                    " INSERT_ROWS
*********************************************************************************
FORM disconnet_ext_db .
  DATAexc_ref    TYPE REF TO cx_sy_native_sql_error,
        error_text TYPE string.
  TRY.
      EXEC SQL.
        commit work
      ENDEXEC.
      EXEC SQL.
        DISCONNECT
'連接名稱'
      ENDEXEC.
    CATCH cx_sy_native_sql_error INTO exc_ref.
      error_text exc_ref->get_text).
      MESSAGE error_text TYPE 'I'.
  ENDTRY.
ENDFORM.                    " DISCONNET_EXT_DB  

 

2017年11月22日 星期三

Commit work and wait無作用解析

原文:
https://blogs.sap.com/2013/01/24/commit-work-and-wait-does-not-work-as-expected-or-why-to-use-wait-up-to-xx-seconds/

摘要:
1.BAPI有自己的參數設定commit work,必須先取消
2.BAPI要用BAPI_TRANSACTION_COMMIT (WAIT = ‘X’)
3.分組實施相同的bapi功能,而非連續建立、變更單一物件。如單一程式連續建立PO完畢,再針對建立完畢的PO做更改。
4.重複查詢物件是否已建立,再進行下一步,並且限制重複查詢的最大次數。
5.重複嘗試鎖定表格,如未能鎖定,表示上一步的寫入尚未完成,當可以鎖定之後,再解鎖進行下一步。
5.1鎖定表格的方式,se11->"lock object"->f4->All selections->Base table->表格名稱
5.2"ENQUEUE_"+"lock object",如"ENQUEUE_EVVBAKE"
6.有些特殊的用Function module ‘TRANSACTION_BEGIN’。或是‘TRANSACTION_END’,效果只限commit work沒有wait。

2017年9月30日 星期六

Submit後取得報表內容LIST_FROM_MEMORY

DATA BEGIN OF fs,
         col1 TYPE string,
         col2 TYPE string,
         col3 TYPE string,
         col4 TYPE string,
         col5 TYPE string,
         col6 TYPE string,
         col7 TYPE string,
         col8 TYPE string,
         col9 TYPE string,
         col10 TYPE string,
         col11 TYPE string,
         col12 TYPE string,
       END OF fs.
DATA gt_coois LIKE TABLE OF fs WITH HEADER LINE.
  

DATA list_tab TYPE TABLE OF abaplist.
  DATABEGIN OF ascilist OCCURS 100,
          line TYPE LENGTH 1000,
        END OF ascilist.


  SUBMIT ppio_entry
    WITH p_sc1100 lw_sc1100
    WITH s_werks IN s_werks
    WITH s_isten IN s_gltri
    WITH s_aufnr IN s_aufnr
    WITH s_matnr IN s_matnr
    WITH s_arbpl IN lr_arbpl
    EXPORTING LIST TO MEMORY
                AND RETURN.

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

  IF sy-subrc 0.

    CALL FUNCTION 'LIST_TO_ASCI'
*   EXPORTING
*     LIST_INDEX               = -1
*     WITH_LINE_BREAK          = ' '
*   IMPORTING
*     LIST_STRING_ASCII        =
*     LIST_DYN_ASCII           =
      TABLES
        listasci   ascilist
        listobject list_tab
*   EXCEPTIONS
*       EMPTY_LIST = 1
*       LIST_INDEX_INVALID       = 2
*       OTHERS     = 3
      .

    LOOP AT ascilist FROM 5.
      SPLIT ascilist-line AT '|' INTO fs-col1 fs-col2 fs-col3 fs-col4 fs-col5 fs-col6 fs-col7 fs-col8 fs-col9 fs-col10 fs-col11 fs-col12.
      APPEND fs TO gt_coois.
      CLEAR fs.
    ENDLOOP.

Submit coois

清單與配置變數
  DATAlw_sc1100    TYPE ppio_entry_sc1100.
  lw_sc1100-ppio_listtyp 'PPIOO000'.    "作業
  lw_sc1100-alv_variant '/00000000001'.      "配置


  SUBMIT ppio_entry
    WITH p_sc1100 lw_sc1100



2017年7月1日 星期六

abap 小數四捨五入方法

        CALL FUNCTION 'ROUND'
          EXPORTING
            decimals      0    "取到小數點下第幾位
            input         = 數字型態變數
            sign          'X'  
                            'X' = 四捨五入, 
                            '+' = 無條件進位,
                            '-' = 無條件捨去
          IMPORTING
            output        = 數字型態變數 
          EXCEPTIONS
            input_invalid 1
            overflow      2
            type_invalid  3
            OTHERS        4.

2017年6月9日 星期五

How to check data cluster or allocation unit

execute CMD -> diskpart -> select volume -> filesystems

2017年5月26日 星期五

建立BDC的參數意義

From: https://archive.sap.com/discussions/thread/63557

Cont. After Commit - The transaction ( SAP LUW ) will end at a commit work and recording will also end. If this check box checked you can record beyound commit work also.

Not A Batch Inpt Session - All transaction behave differently in online and batch input mode . In batch input mode SY-BINPT = 'X'. If this check box checked then SY-BINPT = ' ' and recording behaves as normal .

Simulate Background Job - When you record without this checked . The recording will behave similar to dialog behaviour and sy-batch = ' '. If you check this check box sy-batch = 'X' and recording behaves as if it was running in background . You may like to use this if later the recording / BDC session is supposed to run in background mode.

2017年4月15日 星期六

如何查找已更新note


1. 使用se16n打開Table: SMODILOG輸入以下欄位值:OPERATION = ‘NOTE’ 、MOD_DATE >= 調查起算日

2.顯示結果報表後,複製MOD_NAME的欄位值

3.使用Tcode: snote
4. 貼上步驟2所複製的欄位值
5.顯示結果