Как передать переменные из xs javascript в функцию ABAP - PullRequest
0 голосов
/ 20 января 2020

Мне дали задание передать ABAP в xs Javascript. Это будет использовать и службу ODATA, где запрос POST с body.data будет иметь объект с заголовками и массив объектов, которые я смогу использовать в следующем формате:

{
   "IvCompCode":"1710",
   "IvDocType":"NB",
   "IvPurchOrg":"1710",
   "IvPurGroup":"002",
   "IvVendor":"17386001",
   "ItemsSet":[
      {
         "Ebelp":"00010",
         "Matnr":"MZ-RM-M500-09",
         "Werks":"1710",
         "Lgort":"171S",
         "Menge":"5.000",
         "Netpr":"100.000"
      },
      {
         "Ebelp":"00020",
         "Matnr":"MZ-RM-M500-07",
         "Werks":"1710",
         "Lgort":"171S",
         "Menge":"4.000",
         "Netpr":"105.000"
      }
   ]
}

Я могу вызвать Функция ABAP внутри функции javascript, однако я понятия не имею, как передать переменные из службы ODATA, а затем просто поместить их в функцию ABAP, сохраняя их в функции javascript, чтобы их можно было использовать в другой лог c. Вот что у меня сейчас:

<script language="JavaScript">
function callABAPMethod()
{
<%
  DATA: po_header          LIKE bapimepoheader,
        poheaderx          LIKE bapimepoheaderx,
        tab_poitem         TYPE STANDARD TABLE OF bapimepoitem,
        tab_poitemx        TYPE STANDARD TABLE OF bapimepoitemx,
        tab_poitem_struct  LIKE bapimepoitem,
        tab_poitemx_struct LIKE bapimepoitemx,
        ebelp_num(5)       TYPE n,
        ebelp_char(5)      TYPE c.


  po_header-comp_code = iv_comp_code.
  po_header-doc_type  = iv_doc_type.
  po_header-vendor = iv_vendor.
  po_header-purch_org = iv_purch_org.
  po_header-pur_group = iv_pur_group.


  poheaderx-comp_code = 'X'.
  poheaderx-doc_type = 'X'.
  poheaderx-vendor = 'X'.
  poheaderx-purch_org = 'X'.
  poheaderx-pur_group = 'X'.



  LOOP AT zpoitems INTO DATA(item).
    CLEAR: tab_poitem_struct, tab_poitemx_struct.

    tab_poitem_struct-po_item = item-ebelp.
    tab_poitem_struct-material = item-matnr.
    tab_poitem_struct-plant = item-werks.
    tab_poitem_struct-stge_loc = item-lgort.
    tab_poitem_struct-quantity = item-menge.
    tab_poitem_struct-net_price = item-netpr.


    tab_poitemx_struct-po_item = item-ebelp.
    tab_poitemx_struct-po_itemx = 'X'.
    tab_poitemx_struct-material = 'X'.
    tab_poitemx_struct-plant = 'X'.
    tab_poitemx_struct-stge_loc = 'X'.
    tab_poitemx_struct-quantity = 'X'.
    tab_poitemx_struct-net_price = 'X'.

    APPEND tab_poitem_struct TO tab_poitem.
    APPEND tab_poitemx_struct TO tab_poitemx.


  ENDLOOP.


  IF iv_update EQ 'X'.
    IF  iv_po_number IS NOT INITIAL.
      CALL FUNCTION 'BAPI_PO_CHANGE'
        EXPORTING
          purchaseorder = iv_po_number
          poheader      = po_header
          poheaderx     = poheaderx
        TABLES
          return        = return
          poitem        = tab_poitem
          poitemx       = tab_poitemx.

      IF sy-subrc = 0.
        CALL FUNCTION 'BAPI_TRANSACTION_COMMIT' .
      ENDIF.
    ENDIF.
  ELSE.
    CALL FUNCTION 'BAPI_PO_CREATE1'
      EXPORTING
        poheader         = po_header
        poheaderx        = poheaderx
      IMPORTING
        exppurchaseorder = po_numer
      TABLES
        return           = et_return
        poitem           = tab_poitem
        poitemx          = tab_poitemx.

    IF sy-subrc = 0.
      CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'.
    ENDIF.
  ENDIF.
%>
}


</script>

1 Ответ

0 голосов
/ 20 января 2020

Вы можете создать собственный сервис oData для кэширования ABAP-кодов в бэкэнде, которые отправляются с js. Используйте t-код SEGW для создания пользовательского сервиса и внедрите собственный код ABAP для перехвата запроса. Некоторые из примеров блога здесь .

На серверной стороне вы можете создавать динамическую c программу во время выполнения на стороне ABAP, но обычно она не одобрена системными администраторами. Ваш запрос может быть перехвачен средствами сканирования кода. Это связано с риском того, что кто-то манипулирует вашим кодом и изменяет ваши коды для доступа к системе без привилегий.

Проверьте оператор GENERATE SUBROUTINE POOL для запуска динамического c кода ABAP во время выполнения.

...