ページビューの合計

ラベル REST の投稿を表示しています。 すべての投稿を表示
ラベル REST の投稿を表示しています。 すべての投稿を表示

2025年6月24日火曜日

#Domino #REST #API ( #DRAPI ) ・・・での凡ミス💦~私の備忘録として~

Hello everyone.

Thank you very much for your support last week at #DominoHub 2025 Tokyo.

We would like to thank you again for your participation and watching our event, despite the fact that we were a group of amateurs in organizing the event.

I would like to take this opportunity to write about a trivial mistake I made, as a reminder not to repeat it in the future.


みなさま、こんにちは。
先週は #DominoHub 2025 東京にてたいへんお世話になり、ありがとうございました。
イベント開催については素人の集団での開催にもかかわらず、たくさんの皆様にご参加・ご視聴頂けましたこと、重ねてお礼申し上げます。

また19日のオンラインセッション時にはイベントポータルがダウンしてしまい、たいへんなご迷惑をお掛けしてしまいましたことを深くお詫び申し上げます。

当日の様子は浜さんのブログにも公開されておりますが、今後も出てくるかと思いますので、もうしばらくお待ちください。


さて今回はDomino REST API (DRAPI)について、超凡ミスでまたまたサポートの方に無駄なお仕事をお願いしてしまいました。
二度と同じことを起こさないため、自分への備忘録も兼ねて記事として残しておきます。


早速ですが、まずは発端です。
既存本番環境で使用しているアプリを DRAPI に追加して、外部連携をさせたいとの目的から、そのアプリを DRAPI に追加するという作業の中で発生しました。

具体的には、DRAPIにログインし、Configurationを開きます。


開きましたら、続いてDatabase Management -REST API を開きます。


開きましたら、右上の[+ Add Schema]をクリックしてスキーマの作成を進めます。
※DRAPIの概要についてはここでは触れません。
HCL様サイトで3回に分けて公開されておりますので、そちらをご参照ください。


今回は新規でスキーマを作りますので、[Create Schema]をクリックします。


以下の画面が表示されますので、一覧から対象のアプリを選択します。


しかしながら今回追加したいアプリがリストされておりません。
手入力で指定してもアプリが存在しないと怒られてしまいます。

確かにこの時点が何か簡単なミスをしているような気はしました。
もちろんHCL様サポートポータルで検索してみたのですが、それらしき記事が見つかりませんでした。

ということで、今回もサポートの方を頼ったのです。


はじめはブラウザのキャッシュクリアの指定を頂きました。
確かにそれまで実施していませんでしたので、早速実行

・・・変化なし

念のためDominoサーバーをマシンごと再起動

・・・変化なし

致し方なくサポートの方へ状況報告しました。

夕方遅い時間にも関わらず、すぐに次のステップの案内が届きました。
記載されている内容には以下の記載がございました。

[Add Schema] ボタンを押して [Create Schema] を選択して、[Database] のリストには、通常は Data ディレクトリの全てのデータベースがリストされています。
念のため load catalog コマンドを実行して、データベースカタログの更新を行ってみてください。

この内容を読んで、「はっ」としました。


結論を書く前にまずは弊社の環境について少し触れておきます。
現時点で社員数は130名ほどになりますので、従来から全く問題なく1サーバーですべてを賄っておりました。
しかしながら年々Dominoの重要性が増してきていることから、先般クラスター環境を作って頂きました。
あまり複雑なことが発生することは避けたかったため、基本は本番サーバー1台で運用し、障害発生時のみクラスターサーバーに切り替わる、いわゆる Active/Standby の構成になります。

そこにDRAPIを追加したのですが、本番DominoではLeapなども動いており、念のため負荷の少ないクラスターサーバーへインストールを実施しました。

以下のような構成になります。


さてここまで書きましたら、既に気付かれた方もいらっしゃるのではないでしょうか。

ということで原因・・・凡ミス・・・です。

はい。
DRAPIに追加したいアプリは本番Dominoにのみ存在し、クラスターには存在しておりませんでした。

つまりDRAPIが参照するはずのクラスターDominoサーバーのカタログにはリストされておらず、もちろんそのためにDRAPIのリストにも表示されないというオチでした💦

対象のアプリを本番Dominoからクラスターへ複製し、再度ブラウザのキャッシュをクリアしたところ・・・無事表示され、DRAPIのスキーマ追加が完了しました。

サポートの皆様、毎回ほんとうに申し訳ございません。
特に最近はVoltMX GoとDRAPIで私の勘違いなども含めてお手を煩わせてしまっており、申し訳ない限りです。
が・・・何卒引き続きよろしくお願い致します。


ということで目的のアプリはDRAPIに追加できましたので、これより細かな設定(連携するビューやフォーム、フィールド)を進めて参ります。

このあたりはまたどこかの機会に発表させて頂ければと考えております。


ということで、今回は私自身の反省の意味を込めた記事にて失礼致します。




2024年12月11日水曜日

#DominoLeap ( #Leap ) 表の中のデータを活用したい

This will be another Domino Leap topic.

I want to use array data retrieved via the REST API for workflow emails, but I couldn't easily set it up.

Miyo Ambassador gave me a solution, which I will share with you here.


みなさま、こんにちは。
またまた今回もDomino Leapの話題です。

Domino Leapは簡単に外部のAPIに接続し、値が取れることはしばらく前に以下の記事でご紹介致しました。

#Domino #Volt ( #dominovolt )で 外部 #REST #API ( #restapi )を使う

単純にデータを取ってくるだけだと問題ないのですが、たとえば先日掲載しました郵便番号から住所を取得するAPIでは、戻ってくるJSONが配列になっており、Domino Leapのローコード画面で扱う場合は、表データになっています。

今回の例では、戻ってくるJSONは、以下のように[]で囲まれた配列になっています。


Domino Leapのサービスで呼び出すと、以下のように表として認識されることになります。


このデータをDomino Leapに取り込む場合、単にページに配置したフィールドで受けようとすると、以下のようなアラートが表示されます。


取得するデータと同じ数のリスト(または表)で受ける必要があるというものです。

そのため、値を受け取るにはページに表を配置し、その表に値を受け取るフィールドを作成する必要があります。
そうすることで、以下のように取り込むデータとDomino Leapの関連付けを行うことが可能となります。



ここまでは問題ないのですが、この表で受け取ったデータをさらに利用しようとした場合、普通にページに配置したフィールドと同じような取り扱いができないのです。

例えば、ワークフローでメールを送信する場合の本文・・・


このボタンを押すことで、ページ内のフィールドを本文に呼び出すことができるのですが、表内のデータはこちらにリストされていません。


これではせっかく簡単に取得してきたデータを有効活用することができません。
どうにかして表内のデータをページ上に配置したフィールドにもっていく必要がありそうです。

表内のフィールドのonItemChangeイベントや、追加で配置したデータを受け取るためのフィールドのonItemFocusイベントなどで試したのですが、うまくいきません。

よくよく考えてみると、もともと表ですから、複数行のデータが存在することが可能ですよね。
ここがちゃんと指定できていないことが原因のようでした(汗


ということで、困った時の"神"頼み。
ではないのですが、Domino Leapといえば・・・の御代アンバサダーに相談させて頂きました。
問合せて5分。
以下回答を頂きました。


きっと御代アンバサダーも同じことを考えて、既に解決策をお持ちだったんでしょう。

ということで、こちらを利用させて頂きます。


ページに「都道府県」「市区町村」「町域」の3フィールドを用意して、表のonAddイベントに取得したそれぞれの値をセットするようにしてみます。

前半部分は御代アンバサダーから頂いたスクリプトをそのまま記述しています。
後半でそれぞれ表の列データをページのフィールドに割り当てています。

・都道府県(F_HPref)に表の1列目(colid.get(0))をセット
       BO.F_HPref.setValue(colid.get(0).getValue());

・市区町村(F_HCity)に表の2列目(colid.get(1))をセット
       BO.F_HCity.setValue(colid.get(1).getValue());

・町域(F_HTown)に表の3列目(colid.get(2))をセット
       BO.F_HTown.setValue(colid.get(2).getValue());

以上の設定で、「郵便番号」を入力することで、API経由で表に値が取得されます。
表に値が追加されたことで、ページの3フィールドに値がセットされるようになりました。

こうなれば、あとは普通のページ上のフィールドと同じ扱いができるようになります。
先のメール本文のリストにも表示されました。



あとは見た目です。
ページ内の表に「都道府県」「市区町村」「町域」があり、同じフィールドがそれぞれページ上にもあるのはよくないですよね。

ということで、以下のように表を非表示にすることでこの点は解決することができました。


これで今までずっと悩んでいたことが解決できました。

・・・もっと早く聞いてたらよかった・・・

いつもながら、御代アンバサダー、ありがとうございます!!


御代アンバサダーがいらっしゃる株式会社エフ様では、さまざまな情報提供が行われております。
今さら気付いのですが、もしかしたらサンプル配布されているアプリに本件実装されているかも・・・

弊社でも「Notes/Domino開発tipsサービス」は契約させて頂いており、毎週届く内容はナレッジとしてどんどん蓄積されておりますので、ぜひご検討ください。

年内の記事はこれで終わりかな?

みなさま、よいお年をお迎えください!!

2024年11月20日水曜日

#Domino #REST #API のインストール

Today, I have installed the Domino REST API and report on it.

I hope you will find it informative, such as the lack of Java on the Windows server, and the troubles I had because I relied on the instruction manual.


みなさま、こんにちは。
先日は弊社のクラスターサーバーのOSをWindows2019にアップデートして、Domino V14をインストールするまでを紹介致しました。
今回の目的はVoltMXGoで利用するための準備になりますので、今回はこのサーバーにDomino REST APIをインストールしていきたいと思います。


モジュールは先般と同様、My HCLSoftwareでダウンロードしてください。
現在のダウンロードファイルは「Domino_REST_API_V1.1_R14_Installer.tar.gz」というファイルになりますので、まずはこちらを解凍しておきます。
Windows標準では解凍できないかと思います。弊社では7-Zipというアプリを利用して解凍しました。

結果、以下のようなフォルダを入手できます。


次のこの「restapiInstall-r14.jar」ファイルをDominoのプログラムディレクトリにコピーします。
コピーできましたら、Windowsのコマンドプロンプトを管理者として実行します。


コマンドプロンプトのディレクトリをDominoのプログラムフォルダーに移動して、以下コマンドを実行します。
※各ディレクトリはご自身の環境に合わせて変更してください。

java -jar c:\domino\restapiinstall-r14.jar -d="C:\Domino\Data" -i="C:\Domino\notes.ini" -r= "C:\Domino\restapi" -p="C:\Domino\restapi" -a

本来はここでコマンドが進んで完了のはずなのですが、弊社サーバーでは以下画面が表示されてしまいました。

どうやらjavaがインストールされていないようです。


ということで、Windows版のjavaをダウンロードしてインストールします。

一度再起動して、再度先のコマンドを実行してみますと、


何かエラー出てます?
どうもやらWindowsで最新とインストールされたJavaはJava8であったのに対し、配布されたjarファイルはJava17でコンパイルされたことが原因のような情報に行きつきました。

そこでJava17にアップグレードを行ってみました。
オラクル社サイトより"Windows x64 Installer" をダウンロードして、得られたexeを実行します。(すべてデフォルト選択で進めました)
以上で"C:\Program Files\Java\jdk-17"にインストールされました。

続いて環境変数JAVA-HOMEを変更します。
変更方法はコントロールパネル>システム>システムの詳細設定画面を開きます。
以下の「環境変数」ボタンをクリックして設定を行います。


私の環境に"JAVA-HOME"がありませんでしたので、「新規」で先のディレクトリを追加します。



追加しましたら一度サーバーを再起動して、再度コマンドを実行します。
すると・・・
かなりたくさんのメッセージなどが表示されました。
どうやら失敗してそうです(汗


書かれていた内容を読み込んではみたのですが、どのディレクトリが間違っているのかわからず、HCL様サポートへ上記内容を送付してみました。
するとほどなく本スクリプトのポイントの確認について、回答がございました。
内容は

このコマンドについて、以下のポイントを確認してください。
・-d で指定したデータディレクトリのパスが正しいか
・-i で指定したNotes.iniのパスは正しいか(Domino 14では、Dataディレクトリにあります)
・-p で指定したDominoサーバーのパスが正しいか

との事でした。
見た瞬間にわかりました。
-pがDiminoディレクトリ配下のフォルダであるrestapiを向いていたのです。
先のスクリプトを正すと、

java -jar c:\domino\restapiinstall-r14.jar -d="C:\Domino\Data" -i="C:\Domino\notes.ini" -r= "C:\Domino\restapi" -p="C:\Domino" -a

が正解でした。

こちらを実行すると、無事インストールに成功しました。
・・・手順をまるまる読んで実施し、各パラメーターの中身まで確認していなかった私のミスでした(汗
ちなみに成功画面は以下になります。


以降、notes.iniの値追加と3つのnsfとそれぞれのntfが存在することを確認し、インストールは無事完了です。

続きましては以下サイトの手順に従って進めます。


まずはCheck connectivityです。
手順によると、FQDN名と"tango"に対してPingが通るように設定します。
弊社では通りませんでしたので、hostsファイルに記述を追加します。
※hostsファイルの場所>>C:\Windows\System32\drivers\etc\hosts

追記する内容は、以下4行です。

    127.0.0.1     domino.acme.com
    127.0.0.1     tango
    ::1           domino.acme.com
    ::1           tango

保存してpingを確認すると、いずれも応答があることを確認します。


次はConfiguring portsです。
詳しい内容は読んで頂くとして、先のFQDN名に対して、8880ポートで接続してみます。


無事コンソールが開きました。
下部にはインストールされているバージョンが表示されていることが確認できます。

以上でインストール作業は完了することができました。
あとは個別の接続設定を追加して、接続環境を準備していくことになります。

こちらはあらためて記事とさせて頂く予定ですので、今日のところは一旦以上とさせて頂きます。

少しJavaの準備で手惑いましたが、とりあえず現時点(2024/11)ではこの内容で環境は構築できるかと思いますので、ご参考になさってください。

なおDomino REST APIはDominoのライセンスに附属しておりますので、有効なライセンスをお持ちでしたらみなさまご利用可能です。
いろいろ面白そうですので、機会あればぜひお試しください。

2023年3月27日月曜日

先日のコンテンツ公開!!

 I am pleased to introduce the two webinar materials I have just released, which I mentioned in my previous article.

The first one, in particular, was introduced on iWorld, the IBM i information site, so please check it out as well.

みなさま、こんにちは。
いよいよ年度末ですねー。
どたばたしているのですが、合間を縫ってでも紹介したい記事がありましたので、ぜひご一読ください。

前回の記事で触れておりました、

【ウェビナー】レガシー化させない!データ連携で既存システムをリノベーション文系情シスがIBM iとNotesを連携してみた

および

テクてく Lotus 技術者夜会 ザ・コミュニティ編(2023年3月版)

の資料準備ができましたので、公開致します!!

①の資料スライド


①の動画

②の資料スライド

ちなみにですが、①については

IBM i 総合情報サイト 「iWorld」でも紹介頂けておりますので、よかったらご覧ください。


2022年12月28日水曜日

#Magic #xpi を介した #Notes / #Domino と #IBMi の連携

Finally, the year is just a few days away.

I recently wrote an article about converting IBMi data to JSON with Magic xpi for use in DominoLeap.
This time, I report that the data is now available in Notes client using Lotusscript.
There were a few things to note in the JSON specification, which I hope will be helpful.

みなさま、こんにちは。
いよいよ今年もあとわずかですね。

早速ですが、先日

#Magic #xpi を介した #DominoVolt ( #DominoLeap ) と #IBMi の連携

という記事で、IBMiにあるデータをMagic xpiを経由することでJSON化して、DominoVolt(DominoLeap)に取得するという内容を紹介しました。

もちろん弊社にとって、要求された内容ではあったのですが、現状ノーツクライアントに依存している環境から、LeapでなくNotes側でも利用したいということは言うまでもありません。

ノーツクライアントでのREST APIについては、

#郵便番号 から #住所 を取得しよう( #鬼わか の #REST #API を適用したサンプル)

こちらの記事で、提供されたサンプルを紹介しましたので、こちらに割り当てていくことで簡単にできるのではと安易に考えていたのです。

ということで、いざ!!
とまずは鬼わかで利用したフォームごとコピーしてきてテストを開始しました。

ここで今更ながら前段・・・
私はLotusscriptをほとんど使用していない、未熟者になります。

そんな私が、鬼わかのコードを読んでいくと、いろいろと丁寧な処理が含まれていることに気づきました。

私なりにその「丁寧な部分」を外していき、シンプルな構成にしていけるだろうと実行してみたのですが結果はNG。

NotesJSONNavigatorにセットしたいのですが、以下エラーが発生しました。

「JSON 文字列を解析できません: Invalid value. offset 0」

デバッガーで見てもわからず、今回もまたサポートの方の手を煩わせることになってしまいました。

まず指摘があったのが、「レスポンスはバイト配列にはなっていない」との事でした。

そこでChromeの開発者ツールを使用して情報提供の依頼があり、対応しました。
ちなみにこの部分については、以下記事を紹介頂きました。

https://support.hcltechsw.com/csm?id=kb_article&sysparm_article=KB0039010

指示されたデータを提出すると、「レスポンスヘッダが、「Content-Type: text/html」となっている」との指摘がありました。
レスポンスヘッダの「Content-Type」に「application/json」をセットしてくださいとの指示を頂きました。

こちらはMagic側の問題と考え、マジックソフト社のサポートへ連絡して指示を仰ぎました。
そもそもJSONとしてデータを取得しているので、デフォルトでそうなっていないのが少し疑問・・・といいますか、先のDominoLeapは解釈してくれてたんだぁ・・・と違和感の残る結果ではありますが、無事サポートの指示により「Content-Type=pplication/json」をセットすることができました。

その後、再度実行したのですが、今度は以下エラーが表示されました。

「HTTP 応答コンテンツタイプはサポートされません」

上記を報告したところ、テスト用のスクリプトを提供頂き、試すこととなりました。

ここで私のミス1回目

Magic xpi ですが、開発用のサーバーでテストを行っております。
開発用の制限として、プロジェクトは24時間で自動終了するという仕様があることを忘れておりました。
つまり・・・「応答なし」状態で問い合わせを継続していたということです。

・・・申し訳ありません・・・

再度テストを行う際に、Wireshark を使ってネットワークキャプチャしたデータの提供ができないかとの相談がありました。

現時点で私のクライアントにインストールしたV12.0.2(64bit)でテストしていたため、こちらも問題なく対応し、データを提供したところ。

「Content-Type:」 と「application/json」の間に半角スペースが2つあります

との事。
あわててMagicの設定を見ると、確かにスペースが入っています。
私がどこかでコピペしたのですが、そもそもそちらに入っていたようです。

またヘッダ部分とBody部分の間に不要な文字が含まれていることも判明しました。

この文字列については再度マジック社に問い合わせたところ、BOM付きのデータになっているとの事でした。

この時点でBOMは外せなかったので、そのままテストし、Wiresharkのデータを解析して頂きました。

しかしながらやはり、BOMが邪魔のようで、Lotusscript側で外すスクリプトの提供を頂きました。

' BOM 除去
 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

その後、幾度かのやりとりがあったのですが・・・

ここで私のミス・・・2回目

先とまったく同じミス、プロジェクトが停止していました。
何度も申し訳ございません orz   お恥ずかしい限りで・・・

それでも意味の不明な動きなどもあり、最終的に以下スクリプトを頂きテストすることになりました。

Sub Initialize
 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 i As Integer
 Dim json As string

 Set uidoc = ws.CurrentDocument
 url = "URLを指定する"
 Set http = session.CreateHTTPRequest()
 Call http.SetHeaderField("Accept", "application/json")
 http.Preferstrings=true
 returnValue = http.Get(url)
 json = Mid(returnValue,2,Len(returnValue))

 Dim jsonNav As NotesJSONNavigator
 Dim jsonElement As NotesJSONElement

 Set jsonNav = session.CreateJSONNavigator(json)
 Set jsonElement = jsonNav.Getelementbyname("JSONのKEY")
 msgbox "value=" + jsonElement.Value + " type=" + CStr(jsonElement.type)
 End Sub

こちらを実行すると、想定されたメッセージボックスが表示されました!!

ここまでくれば、あとはJSONのデータを必要なフィールドに割当てるだけ。

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

 ' "zip"フィールドの値を取得して、リクエストURIを生成
 Set uidoc = ws.CurrentDocument
 textCode = uidoc.FieldGetText("zip")

 url = "REST接続するURLを記述"
 url = url + textCode

 ' Getリクエストを実行し、結果を取得
 Set http = session.CreateHTTPRequest()
 Call http.SetHeaderField("Accept", "application/json")
 http.Preferstrings=True
 returnValue = http.Get(url)
 json = Mid(returnValue,2,Len(returnValue))

 'JSON パース
 Dim jsonNav As NotesJSONNavigator
 Dim jsonElement1 As NotesJSONElement
 Dim jsonElement2 As NotesJSONElement
 Dim jsonElement3 As NotesJSONElement

 ' JSON データを JsonNevigator 型にデータにセットする
 Set jsonNav = session.CreateJSONNavigator(json)
 Set jsonElement1 = jsonNav.Getelementbyname("JSONの値1")
 Set jsonElement2 = jsonNav.Getelementbyname("JSONの値2")
 Set jsonElement3 = jsonNav.Getelementbyname("JSONの値3")

 Call uidoc.FieldSetText("address", jsonElement1.Value)
 Call uidoc.FieldSetText("address_1", jsonElement2.Value)
 Call uidoc.FieldSetText("address_2", jsonElement3.Value)
 Call uidoc.Refresh()
 End Sub

以上で指定した値をそれぞれ準備したaddressフィールドにセットすることができました。

ちなみに今回サポートの方とのやり取りは、約2週間。38回にもわたりました。

・・・本当に申し訳ございません。

ただおかげ様で、やりたかった事が無事実現できました。

ので、正月休みに作業します(汗


長くなりましたが、LotusscriptでJSONを扱い場合、今回の経験で判明した内容です。

-----まとめ-----

  • JSONのレスポンスはバイト配列の必要がある
  • レスポンスヘッダの「Content-Type」は「application/json」であること
  • 文字コードはUTF-8であること
  • (現時点で)BOM付きはエラーになるため、外すこと

単にJSONと侮っていたら、こんなことになるんですね。
皆様もお気をつけください!!

2022年12月12日月曜日

#Magic #xpi を介した #DominoVolt ( #DominoLeap ) と #IBMi の連携

In this article, I will describe the configuration of the service that Domino Leap (Volt) uses to reference IBMi data.

The procedure is realized by using Magic xpi, an ETL tool.


みなさま、こんにちは。
さて先週のDominohub2022いかがでしたでしょうか。
当日の動画は現在配信中ですので、もし登録がされていない方でも、まだ間に合いますので、ぜひお見逃しなく!!

今回は先日のDominohub2022のセッションで少し触れておりました内容について、さらに進展することができましたので、紹介致します。


さて弊社では販売管理の期間システムとしてIBMiを利用しております。

最近のOSになって、設定すればIBMiとのREST接続が可能になっているようですが、なかなか情報が少なく、うまくいかずに困っておりました。

それとは別で、弊社は商社という立場で、お客様から注文を頂き、取引先メーカーにオーダーするという一連の流れが主な収入源になります。

しばらく前からEDIやメールオーダーといった電子化が急速に進んだ環境にありながら、業務の改善ができていなかったのですが、この度RPA導入という転換点に至り、あわせてETLツールを採用し業務の自動化を図ることとなりました。

ちなみにETLツールとは


つまり、さまざまなデータを希望する形に変換して、提供するというものになります。

弊社ではMagic xpiという製品を採用しました。

なお今回の記事は、主にMagic xpi を利用して、IBMiのデータをDomino Voltで利用する手順となりますので、Magic xpiの作業内容中心となります点、あらかじめご了承ください。

シナリオとしては、DominoVoltで作成した返品申請アプリがあります。


こちらがその入力フォームになるのですが、これをすべて間違いなく手入力させるのは至難の業です。
そこで元データのあるIBMiから「受注No」をキーに、赤枠部分を呼び出したいというものになります。

さて早速ですが、Magic xpiの画面です。
既にいくつかフローが右側のソリューションエクスプローラに存在しており、その中のひとつに「返品申請」が見て頂けるかと思います。


まずはこのフローで使う変数をふたつ定義します。


F.受注番号:Voltからリクエストされる受注Noを扱う変数
F.HTML結果:Voltへ送信するjsonデータを格納する変数

次にIBMiとの接続をリソースとして登録します。


サーバー名(IPアドレス)と認証情報だけで接続できます。
次に下にある[ライブラリ]をクリックして、IBMiのライブラリを登録します。

以上でリソースの登録は完了です。

次にVoltのアクセスを受けるHTTPをサービスとして登録します。


Webサーバとエイリアスはデフォルトのままで進めます。
次にエンドポイントを定義します。


今回は**NOというエンドポイントを登録して、引数としても**NOと定義しました。
自動でエンドポイントURLが生成され、
サンプルHTMLの生成にチェックを入れると、このようにテスト用のHTMLファイルがローカルに作られます。

以上で各接続の準備ができましたので、あとは組み上げていくだけです。

まずはトリガーとしてHTTPの設定を行います。


プロパティでは先に作成したHTTPのサービスを選択し、
設定したエンドポイント**NOをフロー変数 F.受注番号 にマッピングします。
さらに戻り値もフロー変数 F.HTML結果で受け取るという設定になります。

この設定により、VoltからのHTTPリクエストをこのトリガーが受けて、フローが動作するということになります。

それではその動作内容です。

「データマッパー」と呼ばれるMagic xpiのメインツールを設定します。


こちらがデータマッパーの画面です。
左に送り元、右に送り先を設定していくというものです。

まずは送り元となるIBMiのテーブル定義を追加します。
こちらはウィザード形式での設定となりますので、画面遷移を続けておきます。


どのテーブルを利用するかを選択して(複数選択してあります)、


どのフィールドを利用するかを選択します。
ここで先の**NOが存在しています。


Where句の設定で、フロー変数 F.受注番号 と合致したデータのみを取ってくるように設定します。


今回のように複数のテーブルを利用する場合は、その結合を定義します。


と、このようにウィザードだけでSQL文を発行してくれます。


すると、このようにIBMiから取得するフィールドリストが設定されました。

次は送り先です。
こちらはjsonを設定します。


jsonの設定は、保存する先の変数 F.HTML結果 と、JSONスキーマファイルの指定です。
スキーマファイルについてはお手数ですが、詳細はご確認頂くとして、今回の例は以下のような記述になっております。


すると、



このように送り先のフィールドが設定されました。
この両方のフィールドの関連付けを行い、


このようなマッピングができあがりました。
設定は以上で完了です。

それではまずは先に生成したサンプルHTMLを確認してみます。
指定されたローカルフォルダに"エンドポイント名.html"ができていますので、こちらを開きます。


Valueに存在している受注番号を入力して、[Call Magic xpi]をクリックすると、


無事、受注No.66668560 の値を取得することができました。

続いてブラウザで試してみます。
こちらも先に生成されたURLを使用するのですが、生成されたURLは以下となります。

http://サーバー名/Magicxpi4.13/MgWebRequester.dll?appname=IFSIBMi&prgname=HTTP&arguments=-Aサービス名%23エンドポイント名

この後ろに先に設定したエンドポイントの引数名を指定します。

 &引数名=66668560


こちらも問題なく取得できました。

VoltからはこのURLを利用してアクセスすることになります。

以上でMagic xpiの準備が完了しましたので、Voltの設定に移ります。
フォームは冒頭に紹介したものになりますので、いきなりですがRESTの接続へ進みます。

今回は対象の受注番号を入力することで、そのデータをIBMiから取得するという流れになりますので、受注Noは必ず手入力になります。


そこで、この受注NoのonItemChangeイベントに組み込んでいくこととします。


受注Noを選択し、「イベント」から「onItemChange」をクリックします。



開いたウィンドウで、「サービスの呼び出し」にチェックし、「サービス構成の追加/編集」をクリックします。


サービスの選択画面では、「URLを入力」を選択し、URLに先ほどブラウザでテストしたURLを貼り付けます。
右側の歯車ボタンを押して、URLパラメーとセグメントの設定を行います。


今回は不必要なパラメーターが「割り当て可能」となっていましたので、そちらのチェックを外します。


次の入力の設定では、ソースとして先の「受注No」を選択して、ターゲットには先ほど設定したパラメーター「**NO」を選択して関連付けます。


出力では、それぞれ呼応するソース項目とVoltのフィールドを関連付けしていきます。

そのまま進めていけば、サービスの設定は完了になります。

それでは実際の動きを見てください。
(※便宜上、申請者等のフィールドを非表示にしました)


以上でIBMiにあるデータをMagic xpiでREST API化して、DominoVoltで利用するという手順がご理解頂けたのではないでしょうか。

ここでひとつ注目して頂きたいのが、今回の作業では一切のコードを書いていないという点です。
DominoVoltはもちろんローコードツールとして有名ですが、実はMagic xpiも同じくローコードツールの部類にも含まれます。

少し学べば、設定やウィザードのみでここまでできる。
すばらしいツールの組み合わせかではないでしょうか。


今回は長文になり申し訳ございませんでした!!