2018年7月6日 星期五

SAP使用者帳號及權限相關表格

1.使用者帳號:USR02
2.使用者權限:USR04, UST04
3.使用者歷史記錄:USH02, USH04, CDHDR, CDPOS

2018年7月5日 星期四

Get program name of SAP Query

  CALL FUNCTION 'RSAQ_GENERATE_PROGRAM'           
    EXPORTING
      i_workspace          = 'G'             "Global area
      i_query              = p_query         "Query name
      i_usergroup          = 'ZGROUP'        "User group
    IMPORTING
      o_report_name        = p_prog          "Program name
*     O_STRUCTURE_NAME     =
    EXCEPTIONS
      no_query             = 1
      no_infoset           = 2
      query_locked         = 3
      generation_cancelled = 4
      generation_error     = 5
      OTHERS               = 6.
  IF sy-subrc <> 0.                            "If Global area not found program
    CALL FUNCTION 'RSAQ_GENERATE_PROGRAM'
      EXPORTING
        i_workspace          = ''               "Local area
        i_query              = p_query
        i_usergroup          = 'ZGROUP'
      IMPORTING
        o_report_name        = p_prog
*       O_STRUCTURE_NAME     =
      EXCEPTIONS
        no_query             = 1
        no_infoset           = 2
        query_locked         = 3
        generation_cancelled = 4
        generation_error     = 5
        OTHERS               = 6.
  ENDIF.

2017年12月16日 星期六

EXEC SQL存取至外部資料庫

事先於t_code:DBCO,設定外部連結名稱、預設資料庫,登入帳號、密碼
連接名稱         任意輸入
DBMS             MSS "以MS SQL為範例
使用者名稱       ******
資料庫密碼       ******
連結資訊           MSSQL_SERVER=主機名稱或IP MSSQL_DBNAME=資料庫名稱
*********************************************************************************
FORM connet_ext_db .
  DATA: exc_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.
  DATA: exc_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.
  DATA: exc_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.
  DATA: exc_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 .
  DATA: exc_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.
  DATA: BEGIN OF ascilist OCCURS 100,
          line TYPE c 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

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


  SUBMIT ppio_entry
    WITH p_sc1100 = lw_sc1100