FavoriteLoading
0

通过几篇文章入门gateway(2)

接着上文我们已经成功创建出来gateway工程之后。这篇文章主要介绍通过服务来对我们的数据进行增删改查。

首先我们进入transaction /IWFND/MAINT_SERVICE, 还是按照上篇文章的方法通过filter按钮找到我们创建的服务:

选中我们的服务,通过下面的SAP Gateway Client按钮进入我们的gateway界面:

我们可以通过这个界面来模拟前台调用我们后端的gateway服务,在这里我们要注意下面三个区域:

第一个区域是method类型,很常用的是GET得到数据,POST增加数据,PUT修改数据,DELETE删除数据。

下面第二个区域是URI,调用的哪个服务,获得或者删除哪条数据

下面第三个区域是HTTP Request的内容区域,这里是用来做什么的呢?举个简单的例子你想增加一条数据或者修改一条数据,你不只是要把method类型调整了,你还要告诉系统你要增加的这条数据的内容,这个区域就是这个这个作用了,告诉系统你要加的数据或者修改的数据的内容。

接下来让我们实际操作一下。在操作中发现问题学习解决问题。首先我们点击EntitySets,就是找一下我们要获取什么数据:

我们在import数据模型的时候只传入了一个student的模型所以这里只有这一个。我们做练习就选择这一个就好。在我们选择之后我们的URI会发生改变,我们在选择GET method然后执行就是获取所有的student的意思:

然后我们就成功的获得了一个错误消息:

'STUDENTSET_GET_ENTITYSET 这个mothod在DPC class中没有被实现。我们点击Service Implementation按钮来展示这个服务的详细信息。然后我们双击Data Provider Class: ZCL_ZSTUDENT_DDIC_DPC_EXT。

进入这个class之后的界面大家可能和我的不太一样,大家可能会出现蓝色method,这个是由于filter的选项没有勾选,他会把父类以及interface的method也都显示出来:

这里我说一下,咱们这个数据提供的class是咱们创建gateway工程的时候自动生成的。咱们现在操作这个class后缀带有EXT是子Class,他继承自ZCL_ZSTUDENT_DDIC_DPC。当前的class ZCL_ZSTUDENT_DDIC_DPC_EXT里面没有任何的method。所以再调用GET的服务的时候它会调用它的父类的相同名字的Method。

如图在这里我们找到了蓝色的method STUDENTSET_GET_ENTITYSET。也就是我们获得错误消息的那个。我们双击它看一看。

这里会给我们一个提示,这个method在他的父类中有实现。

我们点击对勾看一看:

进入了这个method,我们可以发现上面标注的这个是他的父类的method。而且下面这里是报的错误,就是提示method STUDENTSET_GET_ENTITYSET没有被实现。

我们返回前一个界面然后点击按钮Display object list:

打开Methods -> Inherited Methods 右键点击method STUDENTSET_GET_ENTITYSET,选择Redefine

重定义之后我们先在代码中打一个外部断点:

然后我们回到gateway界面重新执行一下我们的服务:

不出意外的话我们会成功进入断点,如果没进入的话查看一下自己是不是redefine了一个错误的method.如果没错那检查自己打的是不是外部断点,注意,这里一定要打外部断点。

我们查看一下参数,由于我们只是在URI位置告诉系统我们要Student的entityset并没有告诉别的所以我们的输入参数IV_ENTITY_SET_NAME 为StudentSet 输出参数ET_ENTITYSET是一个内表 他需要的是所有的student 信息,于是我们接可以写简单的取数逻辑:

大家这里可以注意一下ET_ENTITYSET 这个表的结构,会发现他的结构就是我们import时候一样,所以我们直接把数据全部取出来就好。

重新测试一下,这回我们把表里的数据全部取了出来:

我们取消断点,点击F8让程序直接往下走,我们会发现这个GET method调用成功了并且取到了所有student信息:

到这里我们成功地实现了gateway query的功能,本来打算在这篇文章中把其余的几个method也都说了。但是光一个get就写了这么多篇幅。看来只能再出第三篇文章了。

以上。