ページビューの合計

2023年4月30日日曜日

Domino #Leap でフィールドタイトルの色を変える

This time I wanted to change the color of the field labels in DominoLeap to make them stand out.

Using custom CSS, I was able to implement this easily, so I will introduce it here.

I could not find any technical documents in Japanese, so I hope this will be helpful.


みなさま、こんにちは。
ゴールデンウィークスタートしましたね。
とはいいつつ、今週は単なる土日。月末月初ということで、普段通りです。

そんな中いよいよ本格的に社内へDomino Leapワークフローの展開がスタートしたのですが、進めていく中で、フィールドを目立たせたいという課題が発生しました。

Notesなら、フォントカラーや背景色をプロパティで簡単に変更できるのですが、Leapのプロパティにはそのような項目はありません。


簡単に設定できないものか・・
ということで、気なったのが


そう、カスタムCSSクラスです。

そういえば、以前受講したDomino Leapのハンズオンでは、[表示]の[HTML]を利用して、LeapのデフォルトバナーをCSSを利用して消したことがありました。



要は、カスタムCSSクラスに新しいクラスを追加して、このHTMLに追記すれば解決するのではと考えました。

ということで、Leapで利用されているクラスの一覧が必要となります。
サポートに問い合わせようかと思ったのですが、いや、まずは自分で探そうとググッてみたところ、すぐに見つかりました。


このページの前半には記述例。
後半にクラス定義が書かれていました。

クラスは分かりやすいように、分類分けされて表示されています。

  • View Responses layout
  • Single form launch layout
  • Form items - general
  • Section
  • Survey
  • Tabbed Folder
  • Buttons
  • Dialogs
今回はフォームラベルの色を赤くしたいので、Form itemsが対象となります。


図示されていて、わかりやすいですよね。
この例でみると、クラスは [.lfFormLabel ] であることがわかります。

前半の書き方を確認して、以下のように設定してみました。

まずはカスタムCSSクラスを設定します。
例では [sales] としました。



続いてHTMLに追記します。


クラスの指定方法はこの順番になります。

プレビューしてみると、


思うような結果が得られました。

ついでに「回収予定日」と「回収方法」もカスタムCSSに [sales] を設定すると、

簡単ですね。
CSSの詳しい知識がなくても、ある程度の見た目は変更できそうです。

以上、日本語の解説を見つけることができませんでしたので、記事にさせて頂きました。

みなさま、よい連休を!!

2023年4月13日木曜日

ワークスペースの背景

 I had a user who was unable to change the background of the Notes Standard client, and support was able to resolve the issue.

In addition, I applied a workspace design in the notes.ini file, which is a favorite of different users.

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

来週4月21日(金)ですが、いよいよノーツコンソーシアム 第一回大阪研究会が開催となります。
案内はこちら

https://www.notescons.gr.jp/home.nsf/event.xsp?action=openDocument&documentId=4D71CBBB011ACB4B4925897300073E7A

今回もオンライン併催のオンサイト開催となります。

ひとつ今年から大きく変化がございます!!
大阪研究会に限ったことではないのですが、ノーツコンソーシアムの研究会の参加が、原則会員外の方も可能になったんです!!

今まで会員でないからとあきらめられていた方、チャンスです!

ぜひ大阪研究会がどんなことをやっているのか。
どんな価値があるのか。

参加してご確認ください!!


さて本題です。
本題と言いましても、今回の内容はうす~いものになります。

以前から気になっていたのですが、(確か)V11からワークスペースの背景変更が可能になっているのですが、一部ユーザーで変更できない。しかもワークスペースデザインも古いままという現象が発生しました。

以下がその一例です。


ショートカットメニューに[背景]は追加されているのですが、すべてグレーアウトして設定できないんです。

本件気になりながらも、特に利用する上で影響がないことから放置していたのですが、たまたま今週より全社員のクライアントをV12.0.1からV12.0.2に変更したことで、

「アイコンが小さくなって、使いにくくなった」

という意見があったため、あわせてサポートの方へ問い合わせてみました。

結論としては簡単で、
[ファイル]-[設定] ダイアログを表示させ、
[Notesクライアントの基本設定]メニューの追加のオプション一覧から

[3Dワークスペース]のチェックを外す

だけでした。


なぜ一部ユーザーだけ、こちらにチェックが入っているのかは不明ですが、こちらを外すことで、新しい背景となり、変更も可能になりました。


あわせて今回のきっかけになったワークスペースデザインの変更について、ふたつの方法で回避しましたので、ご紹介致します。
いずれもクライアントのnotes.iniに1行追加することになります。

●V12.0.1の状態に戻す
    EnableV1202WorkspaceLook=0



●ワークスペースページを過去のようにタブで表示させる
    Workspace_Navigator=0


簡単なことですが、ユーザビリティへ直接影響することですので、ぜひ利用者の方のご意見で調整されてはいかがでしょうか。

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」でも紹介頂けておりますので、よかったらご覧ください。


2023年3月3日金曜日

【告知】ウェビナーおよび #ノーツコンソーシアム ( #notescons ) 研究会募集

 I would like to make three announcements.
1) Don't let them become legacy! Renovate existing systems with data integration.
2) Would you still call it old?
3) Notes Consortium Study Group Member Registration Begins.

I will have sessions on two consecutive days.
I will present what I could not talk about on the first day on the second day.
Please attend both days if possible.

2023年1月14日土曜日

みなさま、おめでとうございます。 & ありがとうございます!!

 Thanks to all of you, I am able to be an HCL Ambassador again this year!

みなさま、こんにちは。

少し遅れましたが、毎年この時期、このタイトルからですと、おおよそ何かご理解頂けている方も多いかとは思います。

そう!! 素敵なプレゼントが届きました。



2023年度のHCL Ambassadorの任命報告

日本からは、

Lifetime Ambassadorである加藤様をはじめ、

御代様
中野様
阿部様

さらに新任で大阪から野村様!!

そして私、萩原の計6名が選出となりました。

私の選出は、ほんとうにみなさまのおかげです。
今年は先行してアフターコロナといいつつ、オフライン開催のイベント開催に力を入れていたため、直接的にアンバサダー活動に繋がることは少なかったのではと感じております。

せっかくなので、この1年間の活動を簡単に振り返ってみます。

●まずはブログ記事

今年は計16本書いてました。
おっ! なんとか昨年までの記事数下降を食い止めることができたようです。

とは言いつつも、後半は"話題"の #OnTime ネタが続いての数ですので、まさにOnTime様様です!!

●次にサンプル

こちらは2件しかリリースしてませんでした。
・Voltワークフローテンプレート
・鬼わかREST API

●次に活動

・大塚商会オンラインセミナー
・ITmedia DX summit事例提供

●その他

ITReviewの閲覧数が1000over


振り返ってみると、今年は人前で話すことが少なかったですね(汗

#テクてく ですらしゃべってないという・・・


でも・・・
冒頭に書きましたが、オフラインのコミュニティイベントはがんばった・・・とおもう

コンソ大阪研は原則すべて会場+リモートでしたし、その準備のための「悪だくみの会」や、もちろんオンラインでのやりとりなど。

ユーザー情報交換会も数年ぶりに集合開催が実施でき、大阪メンバーでジャックしたのもいい思い出になりました。

・・・と考えると、大阪研メンバーのサポートなければ、こんなこと書いてないかも・・・。

さらには冒頭に書きましたが、おなじ大阪から野村様の任命はデカい!
きっと実のある、楽しい大阪の未来が見えてくるのでは!?

ほんと、みなさまに支えられて、現在があります。


感謝! 感謝!!!

来年(既に今年ですね)は、もうちょっと話す機会を増やせれば・・・とは考えているのですが、それよりもみなさまとまたオフラインで会って、Notesだけでなく、さまざまな情報交換ができる場を提供できたらなぁ。

なんて考えてます。

まずは無事、任命頂けたことを報告して、本日は失礼させて頂きます。

これからもよろしくお願い致します!


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"を設定してやると、メール送信者が作成者とすることができます。

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


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

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


いかがですか?

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

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