簡體   English   中英

如何以編程方式判斷系統是 R/3 還是 S/4

[英]How to programmatically tell if system is R/3 or S/4

是否可以通過代碼確定當前系統是 R/3 還是 S/4?

我需要它,因為我有一個方法可以返回人力資源相關數據的軟件組件,但是這個組件應該與 R/3 和 S/4 系統不同。

    DATA(lv_software_component) = mo_configuration->get_software_component( ).

    SELECT * FROM tadir INTO TABLE @DATA(lt_inftype_tables)
            WHERE pgmid  = 'R3TR'
              AND object = 'TABL'
              AND devclass IN ( SELECT devclass FROM tdevc
                                               WHERE dlvunit = @lv_software_component
                                                  OR dlvunit = 'SAP_HRGXX'
                                                  OR dlvunit = 'SAP_HRRXX' )

例如,在 R/3 上, lv_software_component應該是'SAP_HRCMX' ,而在 S/4 上它應該是'S4HCMCMX' 目前,我不知道如何以編程方式區分版本之間的區別。

我想出的最好的方法是硬編碼SY-SYSID ,因為我知道哪些系統是 S/4,哪些不是,但這不應該是理想的。

我感謝任何幫助,謝謝!

您可以使用下面的類方法來確定它。 另一方面, is_s4h 方法僅存在於 S4 系統上。 您需要在調用之前檢查方法退出。

cl_cos_utilities=>is_s4h( )

工作完整示例:

REPORT ZMKY_ISS4.
CLASS cl_oo_include_naming DEFINITION LOAD.

DATA oref TYPE REF TO if_oo_class_incl_naming.
DATA: lt_methods TYPE seop_methods_w_include,
      lv_clskey  TYPE seoclskey,
      ls_cpdkey  TYPE seocpdkey,
      lv_iss4    TYPE abap_bool,
      lt_params  TYPE abap_parmbind_tab.

lv_clskey = 'CL_COS_UTILITIES'.
oref ?= cl_oo_include_naming=>get_instance_by_cifkey( lv_clskey ).
lt_methods = oref->get_all_method_includes( ).
ls_cpdkey-clsname = lv_clskey.
ls_cpdkey-cpdname = 'IS_S4H'.
READ TABLE lt_methods WITH KEY cpdkey = ls_cpdkey TRANSPORTING NO FIELDS.
IF sy-subrc EQ 0.
  lt_params = VALUE #( ( name  = 'RV_IS_S4H'
                  kind  = cl_abap_objectdescr=>returning
                  value = REF #( lv_iss4 ) ) ).
  CALL METHOD CL_COS_UTILITIES=>('IS_S4H')
    PARAMETER-TABLE
      lt_params.
ELSE.
  lv_iss4 = abap_false.
ENDIF.

使用cl_cos_utilities=>is_s4h方法是一個相當不干凈的解決方案,因為該方法在舊版本中不存在。

SFW_IS_BFUNC_SWITCHED_ON方法是使用功能模塊SFW_IS_BFUNC_SWITCHED_ON 該功能模塊檢查交換機框架中的業務功能是否開啟。

要檢查 S4HANA 本地業務功能:

CALL FUNCTION 'SFW_IS_BFUNC_SWITCHED_ON'
  EXPORTING
    bfunc_name     = 'SIMPLIFY_ON_PREMISE'
  IMPORTING
    is_switched_on = is_s4.

在雲業務功能上檢查 S4HANA:

CALL FUNCTION 'SFW_IS_BFUNC_SWITCHED_ON'
  EXPORTING
    bfunc_name     = 'SIMPLIFY_PUBLIC_CLOUD'
  IMPORTING
    is_switched_on = is_s4.

順便說一句: cl_cos_utilities=>is_s4h方法內部實際上使用了這個功能模塊。

您可能還想檢查在您的用例中是否更適合使用該功能模塊來實際檢測哪些 HR 業務功能處於活動狀態,而不是從系統是否已激活 S/4 來間接獲取該信息。

有功能模塊OCS_GET_INSTALLED_COMPS返回所有安裝的軟件組件。 請注意,它不是由 SAP 發布的。 它曾經在舊系統中工作,並且仍然在 S/4HANA 中工作。

您可以使用功能模塊DELIVERY_CHCK_ACTIVE_COMPONENT來檢查兩個組件中的哪個處於活動狀態。

如果您確實需要檢查它是 S/4 還是 R/3,我也很確定只有 S/4 系統才會激活 S4CORE 組件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM