2021.09.10 【ABAP随笔】-BTP-简单的iflow调用OP的OData服务

CPI简单调用OP本地OData服务

接着上次从SAP API Hub上参考创建的OData 服务:OData -SAP OP 中使用SAP API Hub的API

今天玩一下如何在BTP平台上来调用这个OData服务

首先我们进入到BTP平台-Integration suite

点击它,进去,我们选择第一个页签,进行集成设计和开发

点击右边设计按钮,如果没有包得话需要点击右上方按钮创建一个包

 

 

 输入名称和技术名称

 

 然后点击右上方保存按钮,然后点击部件页签,选择Integration Flow

 

 然后填入iFlow的名称和标识,点击确认

 

 如下图我们创建好了一个空白默认的iFlow,点击进入

如下图所示,我们可以看到有发送端,集成进程和接收端,由于简单演示,我们就不需要发送端了,同时我们采用计时器来驱动事件,点击右上角编辑按钮

删除Sender 和 Start

点击上方事件按钮,选择计时器,放置到Integration Process中

选择功能:运行一次  (既部署的时候运行一次),然后将Start Time 1 和end 连起来

接着选择外部调用->请求回复

 

然后选择连接器,连接Request Reply 1 到 Receiver

这时会弹出选择适配器类型,我们选择OData->OData V2

 

点击Connection 填上地址,这个地址就是OP 的OData外网暴露的地址,如果你的OP的OData服务无法进行外网暴露的话,请使用cloud connector 连接到OP

 

这里先保存下配置,对于Authentication,我们需要用OP 账号密码来登陆,所以需要先创建一个(Security Material) ,点击监控器

点击安全材料这个页签,

 

点击用户凭据:输入凭据名称(PO_OData_User),账号和密码(sap 登陆账号密码)

点击部署,用户账号就创建好了

我们返回刚才的IFlow 继续操作,选择Basic类型的权限,然后填入我们刚才创建的security material

 

切换到Processing页签,选择Get方法,然后选择Resource Path

 

选择远程数据源,然后点击步骤2,我们可以在选择实体中选择需要的数据集

同时选择所要的字段

点击完成即可

我们就可以看到再Query Option中自动生成了所需的字段

 

接下来我们选择消息转换器->脚本->Groovy脚本, 这个脚本的目的时获取返回的消息

 

我们可以点击创建按钮,直接生成一个系统默认的Groovy脚本进行修改

 

我们需要对其中的内容进行修改->

import com.sap.gateway.ip.core.customdev.util.Message;
import java.util.HashMap;
def Message processData(Message message) {
    //Body 
    def body = message.getBody(java.lang.String) as String;
    def messageLog = messageLogFactory.getMessageLog(message);
    def properties = message.getProperties();
    
    messageLog.setStringProperty("Logging","Printing Payload as Attachment");
    messageLog.addAttachmentAsString("[2]Payload after mapping", body , "text/xml");
    return message;
}

到此我们就完成了BTP上的所有配置了,然后点击保存->部署

然后我们点击 监控器

可以看到刚才触发的IFlow 已经完成

点击附件中的文件,我们可以查看返回的消息

可以看到返回的PO信息

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ABAP OData 服务中,可以使用 Function Import 来实现动态调用函数模块。下面是具体步骤: 1. 在 SEGW 中创建一个 OData 服务。 2. 在 Service Implementation 中,选择 Function Import。 3. 点击右键,选择 Create Function Import。 4. 在 Function Import 的 Properties 中,设置 Function Module 的名称和输入参数。 5. 在 Function Import 的 Code 中,使用 FUNCTION MODULE 语句调用函数模块,并将输入参数传递给函数模块。 例如,以下代码演示了如何动态调用函数模块: ``` FUNCTION zfm_test. DATA: ls_input TYPE zinput, ls_output TYPE zoutput. FIELD-SYMBOLS: <fs_input> TYPE any, <fs_output> TYPE any. * 获取输入参数 TRY. cl_rest_runtime=>deserialize( EXPORTING iv_json = request->get_data( ) IMPORTING es_data = ls_input ). CATCH cx_rest_runtime_error INTO DATA(lx_error). response->set_status( i_code = lx_error->status_code i_reason = lx_error->message ). RETURN. ENDTRY. * 动态调用函数模块 ASSIGN ls_input TO <fs_input>. CALL FUNCTION 'Z_FUNCTION_MODULE' EXPORTING p_input = <fs_input> IMPORTING p_output = <fs_output>. * 获取输出参数 ASSIGN ls_output TO <fs_output>. cl_rest_runtime=>serialize( EXPORTING iv_data = <fs_output> IMPORTING ev_json = lv_response ). response->set_data( lv_response ). ENDFUNCTION. ``` 在上面的代码中,我们使用 FIELD-SYMBOLS 来动态获取输入和输出参数,并使用 ASSIGN 语句将其分配给 FIELD-SYMBOLS 变量。然后,使用 CALL FUNCTION 语句调用函数模块,并将输入参数传递给函数模块。最后,获取输出参数,并将其序列化为 JSON 格式返回给客户端。 希望这可以回答您的问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值