goo blog サービス終了のお知らせ 

技術日記

SAP MDG ABAP FIORI等々

MEANZSUB

2022-02-22 18:39:50 | 日記
MEANZSUBというDEでデータモデル拡張したら、
普段全然問題なかったんだけど、MDC->MDGの連携の際に以下のようなダンプが出た。



MEANZUSBをINT4に変更したら問題なし。
なにこれ、、、、とりあえずMEANZUSBは使用しないように。

BusinessPartnerの複製について整理

2022-02-19 16:16:57 | 日記
SAPで提供しているAPIはSOAP、ODATA二つ

ODATAは簡単にURIに入れるだけで使える。
'101'というBPをODATAで取得した場合。


Pull型だから、クライアントからS/4に要請して、「持っているBP全部くれ」見たいな要請をする。
で、その要請に対してXMLかJSONで渡す。

「全部」という言葉に引っかかるので、差分だけ取りたい場合は?
delta queryと言うものがあるらしい。

普通にOdataにqueryを投げるとGET_ENTITYSETが動いて、全件出しするんだけど
Delta Tokenをもって要請すると、GET_ENTITYSET_DELTAメッソドが動いて
該当するデータのみ渡すらしい。
らしいばっかw

 ※追加:中身みたけど、GET_ENTITYSET_DELTAにこういう記載が。。
  「Just for compatibility reasons - dispatching to get_entityset - should be overriden by anyone who wants to have proper delta support」→ えーーーー使いたいやつは自分で作って使ってくださいだと。。。?!



で、SOAPは、クライアントも何かしらしないといけない。
その何かが何なのかはさっぱり分からんがw

SOAPはクライアント作ってまたSSLが基本だから試すことも難しい。。。SOAPUI設置したけど
使い方も分からないし。。まずここからやってみようか。

で、便利だったのはODATA(REST API)だけど、なんでこれを標準にしてなかったのかな。




API応用編 - MDGに溶け込ませる

2022-02-12 17:36:45 | 日記
ABAPからAPIの値を取ってくるまでは成功。
で、これをどうやってMDGのUIに溶け込ませるか?

SAPからはEnrichmentのガイドはある。↓
https://www.sap.com/documents/2016/11/62dce789-967c-0010-82c7-eda71af511fa.html

ガイド通りだと、FPMではないWDAの仕組みで取ってきた値を見せて選べさせるようになっている。
とはいえ僕はWDAが全く分からないし、今から学ぶつもりもない。そもそもこれからUI5(Fiori)になる時点で
WDAを学ぶ気にはならない。

なので嫌でも今まで付き合ってきたFPMで作る。
良かったことに、Dialog専用のFeeder Classはすでにあるので、それを有用すれば十分。
別に見せて選択させるだけの項目なので、BPモデルを拡張する必要もないし
WireもGENIL_BOLも要らない。
呼び出し元となるUIBBのFeederはちょっと拡張が必要。
Dialogを開くAcionボタンの定義と、入力された値(都市名)を読んでAPIを呼び出して値をもってきてDialogに伝える役割。

ここから結果。
先ずTokyoでQueryを投げた時のAPI結果。二個おレコードが戻ってきた。



MDGの画面はこれ。Cityに値を入れて、下のTEST APIボタンを押すとダイアログが出る。


ダイアログでテーブル化されて表示。



一旦今回はここまで。
次はこのリストから値を選んで、元のUIの項目に値が入るようにすること。
ここまでできれば、MDG-外部APIの連携は大体できると言えるよな。。。


※追加
選択した値を元UIに反映まで成功。
親Feeder ClassにFPM Event "close_dialog "のイベントに対応するように実装すればよし。

例:House No.に選択した例のTEMPが入るように。


上の列を選んだら、そのまま値が入る。


これで終了ー
明日は遊ぼう。。。


SAP ABAP環境から外部のREST APIを呼び出し、値を持ってくる

2022-02-11 14:46:55 | 日記
MDGでの使い道だとすると、

MDGで入力したBPのアドレスを外部API(グーグルマップとか)に検証してもらうとか、
MDGから入力した情報を基に外部APIを通してQueryを掛けてもって来た値をまたMDGに入れるとか。

で、まずは簡単なことから、と思ったので
Open APIの値をSAP環境までもってくることを試してみる。

今回は僕が勝手に弄っていい検証環境だからいいけど、
実際客先環境なら相手のベーシスが色々前提作業やってくれないと困る。
外部との通信だからSSLとか、RFC接続先とか。。。

で、
その前提を全部満たした状態で。

使うクラスはcl_http_client。
ここのインスタンスにHeader設定。
後はcl_http_utilityにインスタンス入れて、URIとか設定する。
で、結果貰ってJSON形式データをStringに変換。

ここから実際の結果
ターゲットは → https://openweathermap.org/ 
都市(例ではソウル)を検索して、温度どか情報をJSONで提供する。USER/PASSWORDは要らないので簡単。
APIキーはもちろん要るけど、URIに閉じ込めてしまえばOK。実際はセキュリティー的にどうかと思うけど、検証だからいいや←適当


で、こっちがS/4の結果


STRING形式だから、何かしら加工は必要。
加工には/uI2/CL_JSONを使う。JSONをABAPの内部テーブルに、もしくはその逆に変更できるクラス。
とりあえず、一番簡単なGETでの使いは出来ると分かった。
MDGとどう連携するかーBAdIかFeeder Classかは好みで。

これで娑婆世界とも繋がるようになったんだから、色々面白いことできると思うけど
次は何してみようかな。。。