555 Views
March 27, 23
スライド概要
2023/03/17 テクてくLotus技術者夜会発表資料
HCL Domino,LeapとIBMiをMagic xpiを介してリアルタイムでやり取りをする資料です。
これでも古いといいますか!?・・・the 2nd IBMi のデータをREST API化して HCL Dominoで利用してみた ノーツコンソーシアム 大阪研究会 萩原 健補
自己紹介 ⇒ 省略
今回の要件 販売管理 ( IBMi )
手段 ▶ODBCで直接参照 ⇒ユーザーレベルで任意の特定レコードを指定することが困難 ▶HEIを利用 ⇒任意の特定レコードのみの抽出はできない ▶Excelを経由して取得 ⇒可能だが、これがベストチョイスか? ▶REST接続 ⇒選択肢としてベストだが、IBMiが対応できるか?
IBMi に REST 接続するには・・・ ▶最近のIBMi には「統合アプリケーション・サーバー」という機能が搭載されてお り、設定すれば利用が可能であることが判明も・・・ ▶手順を取り寄せて作業してみたのですが、ハードル高っ ▶弊社担当SEに相談してみましたが、知識がないと一蹴される
たまたま導入してたETL 別案件で9月に導入したETLが使えるのでは!?
Magic xpi のアダプタ例
データマッパーの中身
トリガー
Magic xpiでやっていること ①HTTPRequest ④JSON ②SQL要求 ③SQLレスポンス 販売管理 ( IBMi )
Domino Leapの設定
ではNotesは? ----- おことわり----私、萩原のLotusscriptの知識は、 昨年開催しました初級講座を受けた程度です。 ▶みなさまご存じ? 「鬼わか」をいじくりながら、挑戦!! 第 6 回「NotesからREST APIを呼んで郵便番号検索をしてみよう #鬼わか 解説」 https://support.hcltechsw.com/csm?id=kb_article&sysparm_article=KB0074172
しか~し ▶私の浅いLotusscriptの知識では追い付かず・・・まずはサポートの方へ。 ⚫ Magic xpi から出力されたJSONのヘッダが Content-Type: text/html だった
しか~し・・・の続き ▶私の浅いLotusscriptの知識では追い付かず・・・まずはサポートの方へ。 ⚫ Magic xpi から出力されたJSONのヘッダが Content-Type: text/html だった ⚫ 原因は戻ってきたJSONがUTF-8のBOM付きだった(汗
そもそもBOMとは!?
BOMを外すスクリプト json = Mid(returnValue,2,Len(returnValue)) i=0 ReDim json(UBound(returnValue)-3) ForAll x In returnValue If i > 2 Then json(i-3) = x End If i=i+1 End ForAll
さらに、しか~し ▶仕上がったスクリプトでくみ上げたのですが・・・ ⚫ 数値データが取り込めない・・・orz
数分で解決策が!! Cstr(jsonElement2.Value) とするだけで回避できると思いますよ
今回のスクリプト Sub Click(Source As Button) Dim ws As New NotesUIWorkspace Dim uidoc As NotesUIDocument Dim session As New NotesSession Dim http As NotesHTTPRequest Dim url As String Dim returnValue As Variant Dim textCode As String Dim json As String ' フィールドの値を取得して、リクエストURIを生成 Set uidoc = ws.CurrentDocument textCode = uidoc.FieldGetText("【発注番号】") url = "【呼び出すURL】" url = url + textCode ' Getリクエストを実行し、結果を取得 Set http = session.CreateHTTPRequest() Call http.SetHeaderField("Accept", "application/json") http.Preferstrings=True returnValue = http.Get(url) ' BOMを取り除く json = Mid(returnValue,2,Len(returnValue))
つづき 'JSON パース Dim jsonNav As NotesJSONNavigator Dim Item As NotesItem Dim jsonElement1 As NotesJSONElement Dim jsonElement2 As NotesJSONElement ' JSON データを JsonNevigator 型にデータにセットする Set jsonNav = session.CreateJSONNavigator(json) ' jsonElementに各値をセット Set jsonElement1 = jsonNav.Getelementbyname("【受注番号値(テキスト)】") Set jsonElement2 = jsonNav.Getelementbyname("【発注日付値(数値)】") ' 開いているフォームのフィールドに値をセット Call uidoc.FieldSetText("[受注番号フィールド]", jsonElement1.Value) Call uidoc.FieldSetText("[発注日付フィールド]", CSTR(jsonElement2.Value)) Call uidoc.Refresh() End Sub
今回の要件 販売管理 ( IBMi )
参考資料 ▶Wireshark(ネットワークプロトコルアナライザー) https://www.wireshark.org/download.html ▶Postman(APIテスト) https://www.postman.com/downloads/ ▶Chrome DevTools Chromeを開き、[F12]を押す ▶YouTubeチャンネル https://www.youtube.com/@notes-domino