如何将变量从 xs javascript 传递给 ABAP 函数



我的任务是将ABAP传递给xs Javascript。 这将使用 和 ODATA 服务,其中带有 body.data 的 POST 请求将有一个带有标头的对象和一个对象数组,我将能够以以下格式使用:

{
"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"
}
]
}

我可以在javascript函数中调用ABAP函数,但是,我不知道如何从ODATA服务传递变量,然后简单地将它们放在ABAP函数中,同时将它们保存在javascript函数中,以便它们可以在另一个逻辑中使用。这是我现在拥有的:

<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>

您可以创建自定义 oData 服务,用于在后端处理从 js 发送的 ABAP 代码。使用 SEGW t 代码创建自定义服务,并实现您自己的 ABAP 代码来捕获请求。这里有一些示例博客。

在后端,您可以在 ABAP 端的运行时创建动态程序,但通常不受系统管理员的批准。代码扫描工具可能会捕获您的请求。它有风险,因为有人操纵您的代码并更改您的代码以在没有权限的情况下访问系统。

检查生成子例程池语句以在运行时运行动态 ABAP 代码。

相关内容

  • 没有找到相关文章

最新更新