本文介绍SAP后端系统基于数据结构创建OData服务过程。

1.创建数据字典

 

2.创建OData service

 2.1创建Gateway service project

 事务码:SEGW

 

 点击Create Project 按钮

 

 

 Gateway service Project分四个部分:

 ♦ Data Model: 数据模型,主要包括 Entity type,( 比如说 product entity,customer entity 等),Entity set (Entity 的集合,多笔数据) 和 Association (Entity 之间的关联)

 ♦ Service Implementation: Entity set 的 CRUD 实现

 ♦ Runtime Artifacts:基于Entity set 的代码框架,包括数据模型 (Data model),数据提供者 (Data provider)

 ♦ Service maintenance:注册服务,测试服务

 2.2创建Data Model

 2.2.1创建Entity

 选中Data Model,右键,Import->DDIC Structure

 

 输入Entity Name以及数据表结构 ZRICO_USR,若勾选Create Default entity set则自动创建Entity set

 

 选中所有字段,点击NEXT

 

 选择字段MANDT、USRID为主键,并将Name值按照规范首字符需大写,如下图所示。

 

 点击Finish

 

 完成后查看Entity属性

 

 2.2.2调整Entity Sets

 设置Entity集合可CRUD 

 2.3Generate runtime objects

 选中项目名,右键Generate Runtime

 

 保持所有值默认,点击Continue按钮,运行

 

 系统生成Runtime objects

 

 2.4服务注册

 若之前已创建了Gateway Service别名,则在Service Maintenance下可以看到。

 

 此时Register Status是没有状态的,点击Register按钮

 

 选择系统别名LOCAL

 

 确认后,完成服务注册,状态已经改变。

 

 2.5测试OData Service

 可以通过Browser或是Sap Gateway Client进行测试。

 点击Maintain进入激活并维护服务界面:

 

 

 调用浏览器测试,如下图所示,测试成功:

 浏览器测试可能存在问题:

 A.点击 Call Browser 按钮,系统显示 host name 或 port 没有配置好,使用事务码 SMICM,然后通过菜单 Goto -> Services,看看主机和端口是否配置好,是否启用。

 B.如果服务器没有在 Internet 上公开,这个 host name 不能通过 Internet 网进行访问,则需要设置本机的 hosts 文件,让本机指向这个域名。hosts 文件的位置在 C:\Windows\System32\drivers\etc 文件夹中。

 Gateway客户端测试:

 

 客户端测试,当前连接出错,未配置Fiori外部服务环境,可跳过,不影响后续测试,正常测试如下: 

 2.6服务实现

 服务实现是指提供 CRUD 的具体实现,因为读取数据的时候,存在 Entity 和 EntitySet,SAP 一般把读取 Entity 叫做 Read,把读取 EntitySet 叫做 Query。

 在 SEGW 界面中 展开 Service Implementation:

 

 需要编写具体的代码,这样外部才能实现对 SAP 数据的增删改查。

OData Operation HTTP Method What it meant to an ABAPer
Create POST Insert <table> from <workarea>
Read GET Select Single * From <table> into <workarea>
Update PUT/PATCH Update <table> set <workarea>
Delete DELETE Delete from <table>
Query GET Select *  From <table> Into Table
Function Import GET/POST Everything covered by GET and POST. But only use if scenario does not fit into CRUDQ operations.

 2.6.1Query重定义

 首先我们来看看 GetEntitySet 方法的编写过程。

 选中GetEntitySet(Query) ,右键,Go to Abap Workbench

 

 系统提示:

 

 点击确认按钮,进入如下界面:

 

 选中ZUSERSET_GET_ENTITYSET方法,右键,重定义,改写该方法实现过程(其他方法改写类似)

 

 方法代码改写:

 

  1. method zuserset_get_entityset.
  2. data:
  3. ls_filter type /iwbep/s_mgw_select_option,
  4. ls_select_options type /iwbep/s_cod_select_option.
  5. data:
  6. lt_range_usrid type table of zrange_vhl.
  7. field-symbols:
  8. <fs_range_usrid> type zrange_vhl.
  9.  
  10. read table it_filter_select_options
  11. into ls_filter
  12. with key property = 'Usrid'.
  13. if sy-subrc = .
  14. loop at ls_filter-select_options into ls_select_options.
  15. append initial line to lt_range_usrid assigning <fs_range_usrid>.
  16. move-corresponding ls_select_options to <fs_range_usrid>.
  17. unassign <fs_range_usrid>.
  18. endloop.
  19. endif.
  20.  
  21. select *
  22. from zrico_usr
  23. into corresponding fields of table et_entityset
  24. where usrid in lt_range_usrid.
  25.  
  26. endmethod.

 其中ET_ENTITYSET是类方法预设的参数,基于ZRICO_USR内表结构。

 

 修改完成后激活。

 然后通过Browser浏览器进行测试: 

 可以通过Gateway客户端测试:从 SEGW 进入服务维护和 Gateway client 界面。也可以通过另外的事务码:Service maintain: /IWFND/MAINT_SERVICE。这两个事务码比较

 怪,不通过/o 系统提示错误。所以应该输入 /O/IWFND/MAINT_SERVICE,SAP Gateway client: /o/iwfnd/gw_client。

 Postman使用前请先查看口令及CSRF获取过程:

 UI5-学习篇-7-Postman测试SAP OData Services

 通过Postman进行测试(Postman工具后续会大量使用):

 测试成功。

 

 2.6.2Read重定义

 选中GetEntity(Read),进入ABAP工作台

 

 

 改写方法ZUSERSET_GET_ENTITY:

 

 激活后,通过Postman测试:

 http://XXX.XXXXXXXXX.com:8000/sap/opu/odata/sap/ZRICO_STRU_USR_SRV/ZUSERSet(Mandt='300',Usrid='1')?$format=json 

 测试成功。

 2.6.3Create重定义

 选中Create,右键进入ABAP工作台

 

 方法 ZUSERSET_CREATE_ENTITY重定义:

 

 代码重写:

 

 Postman测试,需注意以下几个问题:

 ♦ Logon Error Message:Postman测试过程中登录失败,需维护账号密码,删除Cookies.

 ♦CSRF token validation failed:CSRF问题请关注https://blogs.sap.com/2014/07/11/issues-with-csrf-token-and-how-to-solve-them/

 ♦The Data Services Request contains SystemQueryOptions that are not allowed for this Request Type:

  请关注:https://blogs.sap.com/2014/03/06/let-s-code-crudq-and-function-import-operations-in-odata-service/

 ♦Run transaction /IWFND/ERROR_LOG on SAP Gateway hub system and search for entries with the timestamp above for more details:

 上述问题以下测试环节会讲解。

 Create服务测试过程:

 <1>执行GET读取单个实体/sap/opu/odata/sap/ZRICO_STRU_USR_SRV/ZUSERSet(Mandt='300',Usrid='1')
 <2>单击“用作请求”按钮
 <3>更新您的请求属性。
 <4>选择HTTP方法作为POST
 <5>执行/sap/opu/odata/sap/ZRICO_STRU_USR_SRV/ZUSERSet

 Postman测试过程:

 <1>执行GET读取单个实体/sap/opu/odata/sap/ZRICO_STRU_USR_SRV/ZUSERSet(Mandt='300',Usrid='1')

   设置权限:SAP前端系统登录账号/密码

   设置Headers参数 KEY:X-CSRF-Token  VALUE: Fetch

   执行SEND后获取CSRF Token值:a-LzHGGnL0PMiFGjzzhgvw==

   同时拷贝执行结果:

 <2>执行为/sap/opu/odata/sap/ZRICO_STRU_USR_SRV/ZUSERSet

   上一步获取了两个信息:CSRF值 及XML结果

   此步骤采用POST方式提交Create服务地址:   

   执行SEND后,获取执行结果,如下图所示,执行成功。

 2.6.4Update重定义

 选中Update,右键,进入ABAP工作台

 

 

 

 保存后激活。

 Postman测试过程:

 设置参数如下

 调整记录值:

 执行SEND,返回空值 

  查询数据表记录,如下图所示,当前记录已被更新,执行成功。

  2.6.5Delete重定义

  选中Delete,右键,进入ABAP工作台

  

  

  代码重写:

  

  代码调整后激活。

  Postman测试:

  采用DELETE方式  

  执行完成后,查询该记录,提示该记录未找到,即已删除成功。

 2.7Function Import函数导入

  如果操作不适合CRUD方案,那么您可以通过函数导入来执行。

  选中DataModel,右键,Create,Function Import

  

  输入导入名称,例如:需要根据用户名NAME查询其他信息

  

  确认后,Function Imports节点下显示创建的名称。

  

  调整Function Imports相关参数:

  Return type Kind:Entity type     Return type: ZUSER

  Return Cardinality:返回值为实体集合,则选择 0...n

  HTTP:Get方式  

  

  为Function Import创建导入参数:

  双击Function Import Parameters,

  

  选择创建按钮,输入参数名:UsrName,参数类型Edm.String,最大长度值

    

  完成后保存。

  查看元数据中相关参数定义,地址(替换域名):

  http://gxx.xxxxx.com:8000/sap/opu/odata/sap/ZRICO_STRU_USR_SRV/$metadata

  通过Postman测试如下:  

  如上图所示,已显示FunctionImport节点参数。

  下一步进行方法重定义:

  

  

  代码改写完成后激活,然后通过Postman进行测试(地址域名替换):

  http://gXXX.XXXXX.com:8000/sap/opu/odata/sap/ZRICO_STRU_USR_SRV/UserByName?UsrName='12'

 

 

UI5-学习篇-5-SAP创建OData服务-Structure的更多相关文章

  1. sap 创建odata服务,通过http向数据库 进行增删改查

    https://blog.csdn.net/stone0823/article/details/71057172 1:通过 事物码 se11 创建 数据库表  zemp.表 zemp中 含有empid ...

  2. WCF Data Service 使用小结(二) —— 使用WCF Data Service 创建OData服务

    在 上一章 中,介绍了如何通过 OData 协议来访问 OData 服务提供的资源.下面来介绍如何创建一个 OData 服务.在这篇文章中,主要说明在.NET的环境下,如何使用 WCF Data Se ...

  3. 使用WCF Data Service 创建OData服务

    使用WCF Data Service 创建OData服务 在 上一章 中,介绍了如何通过 OData 协议来访问 OData 服务提供的资源.下面来介绍如何创建一个 OData 服务.在这篇文章中,主 ...

  4. UI5-学习篇-6-SAP创建OData服务-RFC

    1.创建项目 2.Import RFC接口 3.定义实体名 目标服务器:若连接外部服务器则需SM59配置Destination 选择RFC函数名 4.选择数据源参数 5.设置主键值 6.保存成功 7. ...

  5. nodejs学习篇 (1)webstorm创建nodejs + express + jade 的web 项目

    之前简单了解过nodejs,觉得用nodejs来做个网站也太麻烦了,要自己拼html的字符串返回,这能做网站嘛? 最近看到使用jade模板来开发,觉得挺新奇的,于是试了一把,也了解了一些特性,算是个新 ...

  6. SAP C/4HANA Sales Cloud使用OData服务和第三方系统集成的一个具体例子

    出于工作需要,Jerry写了这篇文章,给某些Partner做参考. 以前Jerry曾经介绍过SAP C/4HANA的五朵云到底包含哪些具体产品,其实在SAP官网上有更权威的中文解释: https:// ...

  7. 如何自行给指定的SAP OData服务添加自定义日志记录功能

    有的时候,SAP标准的OData实现或者相关的工具没有提供我们想记录的日志功能,此时可以利用SAP系统强大的扩展特性,进行自定义日志功能的二次开发. 以SAP CRM Fiori应用"My ...

  8. 使用C#创建windows服务续之使用Topshelf优化Windows服务

    前言: 之前写了一篇“使用C#创建windows服务”,https://www.cnblogs.com/huangwei1992/p/9693167.html,然后有博友给我推荐了一个开源框架Tops ...

  9. [水煮 ASP.NET Web API2 方法论](12-1)创建 OData

    问题 怎样用在 Web API 中创建 OData 服务. 解决方案 对于我们来说,在 Web API 中使用 OData最简单的方式就是使用 ASP.NET 模板来创建Odata Controlle ...

随机推荐

  1. jQuery的html和css

    jQuery每次返回的都是当前的集合对象: 每个方法用的时候都会把他的元素对象返回,他每次返回的都是最近的那个元素: 1.addclass() 备选元素添加一个类名 2.removeclass() 移 ...

  2. convert 批量文件的格式转换

    1.将 a.gif 转为 png 格式 convert a.gif a.png 请注意,convert 命令的基本格式为 convert 源文件 [参数] 目标文件 在上面的命令中,源文件是 a.gi ...

  3. andrid 上传图片 asp.net 后台接收并保存

    android 端代码 package com.example.uploadfile; import java.io.DataOutputStream; import java.io.File; im ...

  4. vue todolist 1.0

    <template> <div id="app"> <input type="text" v-model='todo' /> ...

  5. 获取地图文档(*.mxd)中比例尺问题

    地图比例尺的概念是建立在有投影坐标系的空间参考前提下,将地图缩放到一定大小的比例值. 在多数情况下,我们都是将一个地图文档(*.mxd)加载到地图控件中(AxMapControl)显示出来,照此去获取 ...

  6. Unreal Engine 4 动态切割模型实现

    转自:http://gad.qq.com/article/detail/33199 <合金装备:复仇>里面,有一个很有趣的设定,游戏里大部分的场景和物件都可以用主角的刀动态切割. UE4中 ...

  7. Scala 入门详解

    Scala 入门详解 基本语法 Scala 与 Java 的最大区别是:Scala 语句末尾的分号 ; 是可选的 Scala 程序是对象的集合,通过调用彼此的方法来实现消息传递.类,对象,方法,实例变 ...

  8. (转)Linux中设置服务自启动的三种方式

    有时候我们需要Linux系统在开机的时候自动加载某些脚本或系统服务 主要用三种方式进行这一操作: ln -s                       在/etc/rc.d/rc*.d目录中建立/e ...

  9. unity3d简介

    一.介绍: Unity3D软件:综合开发环境,实时三维动画等类型的多媒体内容,并支持这些内容在Windows.iOS.Android等多种平台的发布. Mono:脚本编程基于Mono技术,可使用Jav ...

  10. Socket网络编程(winform)

    [服务器] using System; using System.Collections.Generic; using System.ComponentModel; using System.Data ...