ページビューの合計

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月22日木曜日

受信した #メール を簡単に #掲示板 に掲載したい

Finally, the year 2022 is almost over.
I would like to discuss a very simple case in which I have considered a user's request for improvement and converted an email document into a bulletin board application.


みなさま、こんにちは。
いよいよ2022年もあとわずか。
それにしても寒さが厳しいですね。
ところによっては災害級の積雪との事で、心配です。
コロナの噂もちらほら聞かれますので、ぜひみなさまご自愛頂き、たのしい年末年始をお迎えください。


さて今回も弊社内で発生した案件事例です。

まずは弊社背景からご紹介させてください。

ご存じの通り、弊社は薬品商社という立場のため、取引メーカーからの案内が日々メールで届きます。
この届いたメールを都度担当者が専用掲示板に転記するという作業がルーチンのひとつとなっています。
この場合、届いたメールと掲示板の新規作成の画面を行き来しながら、タイトル・本文・さらには添付ファイルとコピペの往復が必要になります。
この対象となるメールが一日25から、多い日で50を超えることがあり、簡素化できないかということが発端になります。

最初に考えたのが、専用のメール受信データベースを用意して、直接受信したメールを掲示として扱うというものでした。
しかしながらたくさんある取引先様に、メールの種類によって宛先を変更頂くことは困難であり、この案は断念となりました。

次に簡単な方法は、届いたメールを担当者が専用のメール受信データベースに転送するというもの。
こちらは悪くないのですが、社内用のカテゴリを必須としているため、結局は転送した先のメールを編集するという作業になります。


そこで今回採用したのが、届いたメールをコピペして掲示にしてしまおうという案になります。

作業としては、担当者に届いたメールをコピー[Ctrl+C]して、専用の掲示板アプリに貼り付け[Ctrl+V]し、カテゴリだけ追加するという流れになります。

ポイントとしては、メールのフォーム設計を掲示板のフォームの設計でも利用することだけになります。

具体的には掲示板のフォーム別名は"Memo"とします。
これにより届いたメールをコピペした先でも、デフォルトフォームの設定が"Memo"となり、違和感なく文書を開くことができます。

同じようにメール件名である"Subject"を掲示板のタイトル
本文である"Body"を掲示板本文に設定します。

こちらは良し悪しですが、作成者に"From"を設定してやると、メール送信者が作成者とすることができます。

ということで、以下が実際のフォームの設計になります。


コピペした内容により、上記でいうと「メーカー」「カテゴリ」以外は一切触ることなく掲示板の準備ができます。

あとはビューを作成し、アプリケーションとして仕上げていけば、完成です。


いかがですか?

ごく簡単なことですが、担当者の作業工数は半分以下にできました。
この程度の事でも、ユーザーの満足度はあがるんです!!

もし同じような作業を行っている会社様ございましたら、お試しください。
検証まではできていませんが、テンプレートはこちらにおいてあります。


2022年12月13日火曜日

古い = 悪 なの?

“No one says Excel is old. Notes/Domino is not old, simply released early in the world”.
This phrase made me wonder a bit, so I gave it some thought.


みなさま、こんにちは。

さて先日の #Dominohub での1場面が強く心に残ったので、今回は少し趣向が異なりますが、記事にさせて頂きました。

その内容とは・・・この一文です。

「誰もExcelを古いとは言わない。Notes/Dominoはただ早かっただけだ。」

そういえば、ここ最近のユーザーの意見として、

「まだノーツなんて使ってるの? 古いよ」

といった理由で、他社製品に移られるという事例が結構あると聞きました。

実際にノーツは古いのか?

そこでちょっと調べてみました。

Excelの発売日:Mac版が1985年、ウィンドウズ版は1987年
Noteの発売日:1989年

Excelのほうが古いじゃん。
じゃあ、Excel = "悪" ?

おそらくそんなことを言う方はごく少数派ではないかと推測されます。

ではなぜ、Notesだけが古いように言われるのでしょう?


そこで、「古い = 悪」について、考えてみたいと思います。
ここではデザインはともくかく、機能について考えてみます。

Excelは当初は.xlsというファイル形式がデフォルトであり、現在もその形式での読み書きは可能です。
最新版のファイル形式は.xlsx
例えば.xlsの限界である65536行を超えるデータのブックはその形式では保存できません。
しかし実運用に耐えられる下位互換性は十分備えられていると判断して良いかと思われます。

対してAccessですが、現在のファイル形式は.accdb。2007以前のバージョンでは.mdbとなっており、このふたつは下位互換性という意味では少し難ありです。

それではNotes。
Notesデータベース(現 アプリケーション)は、以前から変更なく.nsfです。
基本的に過去のバージョンで作成されたデータベースも最新版のNotes/Dominoで利用できるのです。
※但し、ODSのバージョンという考慮点がありますが、強く意識する必要はなさそうです。
 →詳しくは中野アンバサダーの「ODS ってなんだ?」をご覧ください。

実際、弊社環境でもR4.6時代に作成したアプリケーションが、何の違和感もなく動いています・・・設計変更含め、なにもせず・・・

これら強固な下位互換を含めても。「古い = 悪」なのでしょうか。

ユーザーの立場しては、「長く使えるもの = 良」と判断していいかと思います。

つまり「長く使えるもの ≒ 古い ≒ 良」が実際には正しい判断のひとつと言っても過言ではないかと思います。


次にNotesは本当に古いのか? について考えたいと思います。

まず何をもって古いと言われているのでしょうか?
単にデザインの事を言っているのでしょうか?

ちなみに弊社は「Coolで使いやすいNotesアプリデザイン講座」のデザインを採用することで、利用者の満足度は飛躍的に向上しました。
・・・しかもタダで

もしそれ以上を求めるなら、デザイナーを雇って、見た目を変更すればいい。
Notesの全機能を違うプラットフォームに移すなんて、ほぼ無理な話。
その上で一部アプリは放棄して、さらにアプリの移植に〇億円使うのなら、プロのデザイナーにテンプレートを作ってもらえば、今までの機能にいっさい手を加えることなく、業務が行える。


他に「古い」理由ってありますか?


逆に新しいを証明することはできます。

例えばNomad Mobileを利用したマルチデバイス対応。
しかもアプリの設計変更なく利用が可能である。
iPhoneに社内アプリを登録する場合、どれほど手間が掛かるかはご存じの方も多いかと思います。

 1.Certificate, Profile などの設定
 2.Xcodeを使ってコードを記述、デバッグ
 3.App Store Connect にアプリをuploadするため登録
 4.XcodeからアプリをArchiveしApp Store Connectにupload
     TestFlightなど実機によるテストを含む
 5.App Store Connect にアプリ提出のための情報を登録
 6.審査へ提出する

Nomadアプリなら、今まで通りにDomino Designerでアプリを作って、公開するだけ!!

次にPWA技術も利用できるNomad Web
自宅PCにノーツクライアントをインストールする必要もなく、ノーツ環境がほぼすべて使える。テレワーク社員の負担を大きく減らすことができるのです。

まだまだあります。
K〇〇〇〇〇E のような操作でアプリがノーコードで作れるDomino Leap。
正しくはKよりできることは多いのでは?

まだまだ書き足りないのですが、これ以上長くなると要点がさらにぼやけてしまいそうなので、一旦ここらでとめさせて頂きます。


いったい、どのような理由でNotesは古いという間違った判断が広まってしまったのでしょう。

----- ここからはあくまで個人的見解 -----

これはきっと競合製品による誤った情報提供によるものが強いのではないのか?


ただNotes側に原因がないとは言えないとも感じています。
それはテンプレートデザインの見た目が、追いついていない・・・。
このあたりを先の他社製品が、揚げ足を取るような製品営業を促してしまったのかもしれません。

例えばGoogleのマテリアルデザインキットのような、時代にマッチした、統一的なデザインを随時採用していれば、単に「古い」だけで敬遠されることはなかったのではないでしょうか。


さて今回はとりとめもない話題になってしまいました。

もちろん他製品を否定するつもりはありません。
ユーザー企業には、その企業の風土や仕事内容、流れにあった製品があるはずです。
しっかりと本質を見つめて頂き、最適解を見出して頂くことがユーザーの社内SEにとって重要な役割です。

もしかしたら経営者層からのトップダウンがあるのかもしれませんが、その場合でもすぐにあきらめずに、物事の本質・課題をしっかり見つめなおす時間を取っていただければと思います。



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も同じくローコードツールの部類にも含まれます。

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


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

2022年11月4日金曜日

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

 I recently posted about the prerequisites for using an external REST API with Domino Volt.

However, I thought that this was not enough, so I created a video in which I actually implemented an application that retrieves data from an external REST API in Domino Volt in a short time and with no code.

みなさま、こんにちは。

さて先日、

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

という記事を掲載しましたが、設定だけを公開しても・・・ということで、今回は実際に外部のREST APIからデータを取得する手順を短い動画にしましたので、公開致します。

こちらも先日の掲示板に張り合い?
4分20秒で完成させたスピード作になります(笑

今回の例では、ホットペッパーグルメから公開されているAPIを利用して、キーワード検索を行い、結果をVoltに表示させるという単純なものです。

ホットペッパーグルメのAPIについては、こちらをご参照ください。
(※登録して、API Keyを取得する必要があります・・・すぐに発行して頂けました)

https://webservice.recruit.co.jp/index.html

こちらのAPIリファレンスに詳しく書かれていますが、必要な項目としては、

●リクエストURL
●検索クエリ(何を検索するのか・・・今回はkeywordを利用)
●レスポンスフィールド(どの項目を表示させるか・・・今回はname,Address,station_name,closeを利用)

となります。

リファレンス内には以下のようなサンプルがあり、リンクをクリックするとブラウザに結果が得られます。

ちなみに得られた結果はこちらになります。


・・・keyが設定されていないので、あたりまえですね。
では[APIキー]を取得したキーに差し替えてみます。


実際にはもっと長いデータになりますが、無事データを取得することができました。

それでは実際にDomino Voltに設定していきましょう。
先にも書きしましたが、今回はkeywordのみを指定して検索しますので、URLの例は以下となります。

http://webservice.recruit.co.jp/hotpepper/gourmet/v1/?key=[APIキー]&keyword=秋葉原

試しにブラウザで実行してみると、

このように結果が得れることを確認しました。

それではDomino Voltに設定していきます。

・・・いきなりですが、今回のフォームは以下となります。
詳細はお手数ですが、動画をご覧ください。


それではREST APIの設定を[検索]ボタンにサービスとして追加します。

以下のようにURLを指定します。


すると・・・


なんとエラーが出てしまいました。
応答にはデータが入ってそうです。

・・・よくよく内容を確認すると・・・
そう、APIのデフォルトがXML形式で戻ってきていたのです。

現状、VoltはJSON(のみ?)でのやり取りになるため、その設定を追加してやる必要があるということです。

APIリファレンスをよく読むと・・・


ありました。
URLに"format=json"を追加してやればいいようです。

ということで、まずは以下URLをブラウザで表示させてみます。

http://webservice.recruit.co.jp/hotpepper/gourmet/v1/?key=[APIキー]&keyword=秋葉原&format=json


ごちゃごちゃした表示が戻ってきました。
さすがにこの状態ではXMLのほうが見やすいとは思いますが、関係ありません。


ということで、このURLを使い、サービスを設定していくことで、無事結果が得られました。

こちらの詳細も申し訳ございませんが、動画にてご確認ください。
今回はまったくコードを書いておりませんので、ぜひその点にもご注目ください。






2022年11月2日水曜日

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

 I will be publishing an article on the prerequisites for connecting to external REST APIs with Domino Volt.

Since there are not many articles in Japanese, I would be happy if you find this article useful.

みなさま、こんにちは。
さて今回も告知からです。

#HCLAmbassador ノミネーション受付中!!

我こそは!!
少しでも思いつく方は、遠慮することなくエントリーを!


#DominoHub 2022

HCLアンバサダー主催のオンライン・オフラインイベント。
イベントの最後にはビアバッシュと大抽選会も!!
可能な方は、ぜひ現地でお会いしましょう。
もちろん難しい方は、オンラインでご視聴ください。

おまけ
12月8日はパブリックビューも開催されますので、こちらもお見逃しなく!!



さて本題です。
先にも触れましたがDomino Hub 2022で1コマ頂いており、現在その資料を作成しています。
いろいろと掘り返している中、Domino Volt のREST接続を久しぶりに実施したのですが、なんとうまくいかない・・・。

具体的にはAPIのURLを入力して進めようとすると、以下エラーが表示されるんです。


ホワイトリスト???

半日ほど調べたのですが、見つけられず。
今回もサポートを頼らせて頂きました。
特に急ぎでなかったので、"優先度:低"で送信したのですが、なんと1時間ほどで連絡が。

「Volt Configuraton Settings (VoltConfig.nsf) の以下の設定でサービスの Whitelist を設定します。」

すっかりこのDBのことを忘れてました。
実際には、以下コンフィグデータベースを開き、


以下、「servicesWhitelist.enabled」を編集します。



変更する場所は2か所

まず最初のラジオボタンを[Enable Setting]に切り替えます。


続いて、最下部の Setting Value を[false]に書き換えて保存します。


すると、先のエラーはなくなり、以下のようにサンプルの応答(JSON)に結果が表示されました。


今回はあらゆるサイトに対しての許可を与えることとなっていますが、接続可能な先も制御できるようです・・・さすがDomino!
サポートからの案内文は以下となりますので、参考まで・・・。



このあたりの情報も、なんとか日本語で検索できればいいのですが。

ということで、ここまでくれば、フィールドの割り当てなどを設定すれば、RESTで取得したデータをVoltアプリに取り込むことが可能になります。
しかもノーコードで!!

APIはいろいろと公開されていますので、社内で利用可能なものも手軽に作れるのではないでしょうか。

ということで、このような内容を12月8日に発表させて頂きますので、ぜひご視聴ください!!

2022年10月24日月曜日

14分で掲示板

 Recently, a variety of technical information is being distributed via video.

Although I am late I thought I would try my hand at sending out some information myself.

This time, I will show you a simple video of how to create a simple bulletin board from scratch using Notes/Domino.

Please take a look if you like.

みなさま、こんにちは。

ことしも残すところ2か月ほど。
早いですねー。

少し振り返ってみたのですが、今年は #ノーツコンソーシアム ( #notescons )の活動、がんばったかなと感じております。

●大阪研究会・・・悪だくみの会含め、いろんな情報交換ができました。新しい出会いも!!
●新教育講座・・・大阪研発。LotusScript入門講座。大成功とはいきませんでしたが、満足してよい結果になったと思います。
●ユーザー情報交換会・・・数年ぶりのオンサイト(浜松)開催。貴重な情報交換ができました。

さらにはこの12月に #HCLAmbassador 主催のイベントが企画されております。

DominoHub 2022

テーマは【Link to Domino】
システム間のつながりにフォーカスし、Notes/Dominoの役割、可能性を探る機会になればと思います。


さて今回は少し違う趣向で記事を書いてみました。

といいますのも、昨今さまざまな情報が動画配信され、その利便性の幅を広げています。


我々もその手を使うべきではとの思いから、まずは手始めとしてローコード開発ツールの老舗であるNotes/Dominoの簡単な開発画面を一発撮りでトライしてみました。

今回トライしたのはごく簡単な掲示板(タイトルとカテゴリと内容のみ)になります。
デザインも無視して、まずはノーツアプリの作成とはどんなものかというものを見て頂く機会になれば幸いです。

ちなみに目標15分と考えていましたが、ギリギリ14分を切って仕上げることができました!!

ぜひご覧ください。

※申し訳ありません、YouTubeのアカウントを変更しましたので、動画を貼り換えました(2022/11/04)


2022年9月12日月曜日

#OnTime なぜか特定ユーザーが常時表示される・・・

 This is another OnTime story.

I am happy to report that I have realized how faithfully OnTime Group Calendar reproduces Domino's calendar functionality.


みなさま、こんにちは。

今回もまずは告知から・・・

以前も案内しましたが、今年のユーザー情報交換会、改め「みんなで情報交歓会」まで約1カ月となりました。
会場宿泊の締め切りが今週になりますので、ぜひお早目にお申込みください。

今回もOnTimeで気づいたことを報告させて頂きます。

・・・決してメーカーの廻し者ではございませんので、悪しからず・・・

先日より本番で利用していたのですが、当初から利用していてずっと気になっていたことがあります。

というのは、私のカレンダーに特定のユーザーが常に表示されているんです。

こんな感じ・・・


こちらは会議室のみを選択した状態なのですが、2行目にそのユーザーのスケジュールが表示されているのです。

当初、同一部署のものは常時表示かと感じていたのですが、所属を別アプリから参照するよう変更したため、それは違うと判断しました。

ではこれはいったい・・・?

といったところでひとつ思い出しました。

ノーツのデフォルトカレンダーでこのユーザーのカレンダーをオーバーレイしていたのです。


やはり疑わしい・・・

ということでこのチェックを外して、OnTime Clientを更新してみました。


正解!!

無事消えました。

ちなみにほかにもオーバーレイしてあるカレンダーがありますが、外部のGoogleカレンダーなどは反映対象外でした。

Dominoディレクトリのみが対象となるようです。
(Office365も表示できるようになった?)

これで思う表示にすることができました。

こちらの機能を逆にうまく使うと、例えば秘書さんがご自身の担当者を常時表示するようなことが可能になるのかと思います。

奥深いですね。


ちなみに別件で、またサポートの方へご迷惑をお掛けしてしまいました(汗
こちらはWebexMeetingとの紐づけ作業になります。
Global Settingにわかりやすく[Online Meetings]という項目がありますので、ささっとこちらを登録して、


新規の会議で「オンライン会議」が追加されているのを確認して、[作成]をクリックします。


すると以下のような画面が表示され、


またこれとは別にブラウザが起動してWebexへのサインインが求められます。


すると・・・


うーん。
そのほかに設定項目を探しますが、まったく見つからずサポートへ。

そのスタート時に、「マニュアル読みましたか?」との質問。

あ゛っ

またやってしまいました。
FAQを検索はしたのですが、マニュアルを読んでない・・・orz

なんて初歩的な。

要はGlobal Settingに設定する値は、ログインの情報ではなく、Webex Appへの接続情報が必要でした。

・・・詳しくはマニュアルをご参照ください・・・
私が言える立場ではありませんが(大汗

ということで、無事接続でき、利用が可能になりました。


まだやりたいことがあるので、随時報告致します。