abOut.nsf

新旧かまわず、またお役立ち度にあまりこだわらずに、 拡張子がnsfであるNoSQLなデータベースファイルと、それを扱うコラボレーション製品に絡んでのあれこれを。

2023年2月に行われた「のの会(notes knows community) 第48回」でのスライドです。@関数Talk としては第42回。


P.12の「M33-3-3」がぴんとこなかった方のために補足すると、「明治33年3月3日」です。
明治33年は西暦年としては1900年になります。
@TextToTime、@ToTimeは、元号表記を理解し「M」を「明治」と解釈し、西暦年で返してくれる次第です。
「M」を選んだのは私の嗜好によるので、業務で実際に使用するのは「H」や「R」でしょうけど。

元号の解釈は当然ながら日本語環境だけの機能と思われます。
(また、OSの地域設定とも関連しているのかもしれません)
日本語版のNotesクライアント上でも、
設定メニューの地域プロフィールを英語(USA)に変更したところ、
「M」を理解せず2033年にされてしまいました。

いずれ、日本語を前提としない環境下では期待通りに機能しないと思います。
(その代わり、それぞれの国・地域でのローカルな表記を吸収してくれるのかもしれませんが)


私称「レプリカID形式」については、前々回から続いているお話なのでこちらもご参照ください

@関数Talk 第40回(@NewLine と @Char、@ReplicaID)
@関数Talk 第41回(@Created、@Yesterday、@Today、@Tomorrowに、@Date)

2022年12月に、日本の HCL Ambassadors が主催のイベント "DominoHub 2022" に参加させていただきました。
セッションでは、この時点での「@関数Talk 」の"まとめ"を行いました。



2024年7月の現在から見て一昨年末時点でのまとめを公開してもどうか思います
が、ご参考程度で。
この時点での41回分のまとめでした。以降、2024年7月段階で57回になっておりますがまだ公開途上であります。。

なお、まとめといえば、「のの会」トップページにて、
公開済のトークを@関数名順に並べたインデックスを公開くださっていますので、よろしければこちらもご参照ください。

2022年11月に行われた「のの会(notes knows community) 第45回」でのスライドです。@関数Talk としては第41回。




見返してみると、先頭2桁は時間帯です、と書いているところ(P.18)が、少々不親切かなと思いました。

この場では「レプリカID形式」と私称しているコード値部分の先頭2桁は、時間を含む場合
その作られた場(地域)によって値が異なるわけです。

こちら、とあるビューに、見出し通りの式を設定したもの。
20240726TimeZone

1番目は日本で作られた文書
2番目はハワイで作られた文書
3番目はエジプトで作られた文書

と、こんな感じで、先頭2桁がそれぞれの地域の時間帯を表します。
(上の画像は疑似的なもので実際には、Windowsのタイムゾーン設定を変更しながら私が文書を作ったのですが)


Notes/Dominoの開発・改修を行う中で、わからないことはヘルプで調べよう、となったとき、
ネット上で日本語で見るなら、というお話になります。

結論から書きますと、2024年春の現時点で日本語で見られる最新に近いものは
ここ👇にあるもの、といえるかと思います。

HCL Domino Designer Basic 版 ユーザーガイドおよびリファレンス
https://www.hcljapan.co.jp/software/help/DominoDesigner/index1.html

こちらは、もともとはNotes/Domino 9 のヘルプをHCLさんが公開したものでした。

前回の作文でも書いたようにNotes/Dominoの現行バージョンは14なのですが、
9.0より後のバージョンのヘルプはまだ日本語がみあたらない状態です。

上記サイトが昨年公開された時点では純粋に9のヘルプだったのですが、
HCLの担当者さんが、最近になって一工夫加えてくださっているようです。

FPを含めた、以降のリリースについての追加更新機能の記事が、間に追加されており、
それらは「※」付きの見出しになっている、というのがいま時点での状態のようです。

たとえば、私は「@関数 Talk」をやってる関係で、この関数は?
と調べたいことがあります。

リンク先の左側のナビゲータをずーっとスクロールすると、
@関数のリファレンスにたどり着くことができ、
アルファベット順に並んでいる各関数の見出しの適切な位置に
「※」始まりで後続リリースでの差分の関数が追加されてるといった感じです。


また、ずーっとスクロールは面倒だよ、という場合は検索窓を使うと
Googleベースの検索が機能するようになりました。

完全な最新版というわけではありませんが、こうした日本のご担当者さんの工夫には敬意を表したいと思います。


(冒頭の新機能情報の「※」など、現時点では英語記事にリンクするものもあるようです)


なお、HCLさん自身のブログなどでの発表がまだないことから
もしかするとこのあたりの掲載の方式形態は今後変わるかもしれませんね。


こちらは2022年10月に行われた、テクてくLotus技術者夜会
"V12.0.2 (ベータ)から Nomad, Volt まで「Notes/Domino なんでも」大発表会"での私のトークです。



テクてくLotus側で以前から公開されているリプレイ動画もあります。
> https://register.gotowebinar.com/register/7139635200306268685
なぜか申込形式になっていますが必要事項を入れて「登録する」ボタンを押せば"大発表会"当日の動画を見れます。

2024年3月のいま、Notesの最新バージョンは14になっており(験担ぎで13を飛ばしたけど)、12のクライアントについて喋ったスライドをいまさら公開しなおす意味は薄いかもしれませんが。タイミングが遅れてもなるだけ時系列をまもりたい性格でして。。

ここではクライアントに実装されてたのに取り上げられたことがなさそうな「Windows検索」に着目しました。もし、みなさんのNotesメニューにこれが含まれていたら、意外につかえそうなのでお試しください。

2022年10月に行われた「のの会(notes knows community) 第44回」でのスライドです。@関数Talk としては第40回。




@ReplicaIDの余談(いや、 @Textの余談)

Dominoのシステムデータベースのひとつに、データベースカタログ(Catalog.nsf)があります。
ドメイン内のデータベース情報を格納するデータベース、ですね。
フォームにも、ビューにも、「レプリカID」という見出しの項目があります。
設計を見ると、どちらも入っている式はこうなっています。

@Text(ReplicaID,"*")

文書に保存された
ReplicaID フィールドを文書のプロパティでチェックすると、
データタイプが日時となっていて、たとえば

2011/05/16 13:38:45 ZE9

データベースの作成日時が入っておりました。
レプリカIDとは、つまるところ日時らしいぞ、と、私が気づいたきっかけが、
たまたまこんなふうに
Catalog.nsfの設計をチェックしたことでした。

もっとも、
レプリカIDが日時であることについては、既存のブログや技術記事で
以前から言及されておりますので、ご興味がある方は検索してご確認いただければ。

2022年9月に行われた「のの会(notes knows community) 第43回」でのスライドです。@関数Talk としては第39回。




REMの余談

「REM文要らなくね?」という話をしました。
頭に REM を付けないステートメントでも、最終行で使わない限りは
表面上は実害なさそうです。

ただ、REM がついてない限りは、
処理の一部とみなされて、内部リソースが消費されるような、
微妙なムダはあるのかもしれない。

これは会場に居たAmbassadorsほかベテランからのご意見にもありました。
いちおうご留意くださいませ。

2022年8月に行われた「のの会(notes knows community) 第42回」でのスライドです。@関数Talk としては第38回。


@ReplaceSubstringについて、前回のつづきをした後、@Repolace と合わせたまとめを行いました。

そのあと REMに入りました。
まずは 「REM文を囲む文字」に関して。
このあと第39回に続きます。

2022年7月に行われた「のの会(notes knows community) 第41回」でのスライドです。@関数Talk としては第37回。



文字列を置き換えする関数 @Replace @ReplaceSubstring についてTalkさせていただきました。

あいだに、前回話した @Returnのおまけの話を混ぜ込んでいます。
他の関数内で使うと、その「戻り値」よりも 
@Return が優先されちゃうかもよ、という感じです。

文字列置き換えについては、置き換え前と置き換え後の文字が重なった場合について
比較してみました。




2022年6月に行われた「のの会(notes knows community) 第40回」での私のスライドです。@関数Talk としては第36回。


@Repeatの余談?

リストを対象にした @Unique の、逆をいくような関数はない? と始めたのに
@Repeat 自体は文字列を繰り返すだけの関数でリスト項目を増やす関数ではありません。
スライド P.7 で、それを実現するなら @For あたりを使った式になるのでは、と書きました。

その式を作ってみました。こんな感じかな。

@For( i := 1; i <= 10; i := i+1; tmp := @If( i=1; "abc"; tmp:"abc"));
tmp

正直なところ、 "abc" を10回繰り返したリスト という言葉のイメージに比してやや長い式だなあ、
と思います。。 

なお、@For についてのTalkは今夏(2023年)に行っており、後日の公開になると思います。


@Returnの余談

式の途中で使うのが本来の役割ということをお話ししました。
が、もちろん、式の最後で使っては「動かない」というわけではありません。
複数行ある式の最後が @Return で終わっている実例は何度も見たことがあり、
使う意味はあまりないけど、もちろん式そのものは @Return があってもなくても、
ちゃんと動作します。

2022年5月に行われた「のの会(notes knows community) 第39回」での私のスライドです。@関数Talk としては第35回。

@Uniqueの余談

使ったことがある方も、多くの場合「引数付き」しかご存じないのでは。
そんな考えから、知られていない「引数なし」の方をメインで攻めてみました。
その特徴みたいなものはそこそこ押さえられように思うのですが
さて、どんな使い方が利くのかというところは、はっきりしないままです。
実利用は想定されていない、非公開関数に近いような位置づけの機能なのかもしれません。


スライドの終盤、「引数付き」の使い方でこう書きました。
202205Screen1
でも「のの会」で発表した時、参加者から
「自分はこの方法を使っているけどとくに問題ないよ」
といった声が上がったように記憶しています。

ここは、きちんとパフォーマンス計測して申し上げたというわけではないので
この見解自体、少々勇み足だったかな。
また、対象の列が、カテゴリを含むソートされた列である場合と、
ソートされていない列の場合とでも、違ってくるかもしれませんね。。

2022年4月に行われた「のの会(notes knows community) 第38回」での私のスライドです。@関数Talk としては第34回。



@UpdateFormulaContext の余談

スライドにも書いたように「知らなかった関数」だし、とりあえず理解したところを説明紹介しました。

ヘルプには「クライアントウィンドウへの式のコンテキストを更新します」とあります。

"コンテキストを更新" って…?
英語の Context を訳すと「背景」「脈絡」「状況」…うーん、どれを上に当てはめても意味が取りづらい、
別の表現で「フォーカスを移す」という表現を使ったほうが…、IT系など一部の人にそれなりに通じるんじゃないかなあ。

でも、「式が動く場所を引っ越す」と伝えるのが結局一番わかりやすそうに思います。


@Word の余談

「文字列を〇で区切った●番目を取り出す」

たとえば、InfoA に 「/」で区切られた文字列が入っているとして、その5番目だけを取り出したければ
    @Word(InfoA; "/"; 5);
といった短い1行で済みます。区切って取り出す行為の対象が1か所だけなら、この関数が楽かな。


区切って取り出すのが複数個所なら、いったんは区切った値をすべて返す @Explode 関数の方がよいかも。
仮に、2番目と5番目と7番目が欲しいなら
    tmp := @Explode(InfoA; "/"); 
と、いったんは区切った結果を変数で受けておき、続いて、こんな風に値を返す。
    tmp[2] + "、" + tmp[5] + "、"  tmp[8] ; 

InfoAが "東京都/渋谷区/代々木1-x-x/〇〇ビル/△株式会社/営業部 営業1課/03-xxxx-xxxx" の場合、

@Wordの式の戻り値は: "△株式会社" 
@Explodeを使った2行の式の戻り値は: "渋谷区、△株式会社、03-xxxx-xxxx"


詳細なパフォーマンスの違いは判りませんが、見た目にはこのような関数の使い分けがすっきりするかなと。

ただ、もっと付け加えると
    @Word(InfoA; "/"; 5); の代わりに

    @Explode(InfoA; "/")[5];やることも、できるといえばできます。
そうなると、@Word、別に知らなくてもいいじゃん、[]に数を入れれば @Explode で 事足りるよね、
と言われそうです。

ただ、5 の代わりに -3 など、数字をマイナスで指定して、右から何番目かを取り出すことが
@Word では可能だけど、 [] を使った方法では、これはできないようです。

こちらは2022年1月の「テクてくLotus技術者夜会」での年初ライトニングトークです。


こちらもテクてくLotus側で用意されたリプレイ動画があります。
> テクてく Lotus 技術者夜会 (2022年1月21日): Notes リンクに関する考察



ビューの「フォーム式」を使って、文書の元のフォームとは別のフォームを表示するというやり方が、
「リンク全般でも使えますよ」というお話です。

2008年ころに「NotesのWeb化」案件を担当しておりました。
Notesクライアントでは、あるフォームで作られた文書を、別のフォームへ着せ替えて表示するのに「フォームの切り替え」というメニューが使えます。
しかし、Web化を行った場合は、別のフォームで表示しようにも、ブラウザには「フォームの切り替え」メニューは無く、また相当するコマンド(@Command の [SwitchForm])が、Webに対応していません。
発表したようなフォーム式とURLの関係に気づいてから、
その代替策としてURLのビュー部分を切り替える、という方策を試したことがあります。

ただ、いまではWeb化する代わりに Nomad が使えます。
いまさらこの用途での活用は考えにくいのでは。

せっかくなので発表はしてみたものの、他になんらか役立つ使い道はないかなあと、いまだ考え中のTIPSのひとつになります。

なんの変哲も無いNotesアプリのフレームをわざわざつくる その1

このシリーズ、2019年に「その1」「その2」を出したまま、シリーズ意図も明かさないまま、しばらく続きを書きそびれていました。

2021年に、9月の「テクてくLotus技術者夜会」でのトークを打診された際に、
(そうだ、中途だったあの作文を、この機会にまとめてしまえ~)
と、続きを加えて発表させていただきました。

本作文は、その発表スライドを掲示するという形をとらせていただきますが、そんなわけで、「その3」と称しておきながら、スライドは「その1」「その2」の内容も含む"全部入り"です。


テクてくLotus側で用意されたものですが、すでに動画があります。
当日の夜会のリプレイ動画が公開されていて、最初が私のトークとなります。
動画とスライドには少々差異があり、スライドの方は夜会後に一部手直ししています。

改めてまとめますと。。

ひとつには、「フレームセット化したように見えないフレームセット化」というのをやりました。
これは言ってみれば私のこだわり遊びなので、別にまねていただく必要はないかなと。ただでさえ、昔のDBアプリはデザインの古さを指摘されがちなところ、そのままの見た目を保ってフレームセット化する必要は薄く、レイアウト・デザインについてはそれぞれでよいと思います。

もうひとつは、元のDBアプリの設計名をいっさい指定しない形で設計要素を追加しました。
つまり、いちど「フレームセット」「ページ」「アウトライン」のセットを作ってしまえば、
他のDBアプリでも
  • 作成したセットの各設計要素をそれぞれコピーしてDBアプリに挿入
  • 起動時にこのフレームセットで開くようアプリケーションのプロパティで設定を変える(P.22ご参照)
これだけで、すぐにフレームセット対応できます。
また、このセットを設計テンプレート化しておくことでフレームについてはデザイン変更などを統一感のあるメンテナンスができる、かもしれません。


なお、最近のNotesやNomadには、古いDBアプリをモダナイズする機能が実装されるようになりました。デザインの刷新という意味では、今はそちらを使った方がいいのかな、私のこのやり方にもまだメリットはあるのかな、はたまた併用できるかな?は機会があったら確認したいと思います。

2021年12月に行われた「のの会(notes knows community) 第36回」での私のスライドです。@関数Talk としては第33回。

「のの会」時点では、スライドを作り切れずに一部を実画面を見せつつ補って実施しました。
2回の越年を経て(…)、ようやく追記し体裁を繕ったモノを、公開版としています。

@PickList の3回目でしたが、@PickList のメイン用途って、たぶん、ビュー画面を使って選択した文書の値を拾ってくること。
でも、@PickList 自体は、ビューを通して、ひとつの列項目しか拾ってくることができません。
文書内の、「あの項目も、この項目も、」と、複数のフィールドをいっぺんに拾うためにはどんなやり方が考えられるかな、を、知る範囲で挙げてみたものです。

3つのやり方のうち、本当は @GetDocField を使うのがもっともスマートに思えるのですが、目に見えないパフォーマンスのムダが多いそうで、できれば心置きなく使えるよう改良してほしい。
勝手に引用しちゃいますけど、
中野さんが次の改善依頼をアイデアポータルへ
投稿された由どちらかでも実現すれば楽になります。(ご賛同いただける各位は、ぜひ投票を)

中野さんは@GetDocField の詳細なる検証の成果を、後日ののの会でも発表してくれてるのでご参照ください。



    2021年11月に行われた「のの会(notes knows community) 第35回」での私のスライドです。@関数Talk としては第32回。


    ひきつづき @Picklist 。ビューを出力する [Custom] に続いて、他のキーワードについて触れてゆきました。

    この発表の段階では、私には[Folders]の機能が謎のままでした。
    あとで頂戴した情報で補足しますと、少なくともこんな用途があります。

     ・文書を保存する際に、入れるフォルダを選択する

    作成した文書をフォルダに振り分けたい時、
     「新規保存」後に、「ビュー画面からメニューやドラッグでフォルダに入れる」
    という2回作業ではなく、保存とフォルダへの振り分けを同時に行ってひと手間減らすことができるというもの。

    Notesメールの
    アクションボタン「送信・分類」にて、使用されています。
    保存・分類





    2021年10月に行われた「のの会(notes knows community) 第34回 」での私のスライドです。@関数Talk としては第31回。


    ビュー画面を、選択用に使用する@Picklistを扱っています。
    冒頭で、「キーワードの [CUSTOM] は何で [View] と呼ばないんだろう」と書きました。
    推測でしかありませんけど

    ・ビューだけではなくフォルダにも使用できるから
    ・ほかの引数と違い、ビューやフォルダなら開発者が自分でその設計を決められる、
     つまり、カスタマイズするものだから

    というところでしょうか。
    ここでのカスタマイズは、どのビュー(フォルダ)を表示するかの選択と
    そのビュー(フォルダ)自体の設計も自分で決定できる、両方の意味でとらえられそうに思います。


    ところで前回扱った @DialogBox には [NOOKCANCAL] [NOCANCEL] といったキーワードがありました。
    これは @Picklist にはないもの? 
    なさそうです。
    試しに設定してみたところ、エラーにはならなかったけど、OK もCancel も消えませんでした。
    PicklistKeywordsTrial
    単にお知らせ画面を表示する場合もある @DialogBox と違い、「選択」がメインである @PickList にそこまでの機能は必要性が薄いのでしょうね。







    2021年7月に行われた「のの会(notes knows community) 第33回」での私のスライドです。@関数Talk としては第30回。


    前々回前回に続き、@Dialogboxの第3弾となります。

    お話し残していた引数・キーワードについて軽く扱った次第ですが、
    残っていたのは主にダイアログのボタン表示に関する制御でした。

    [NOCANCEL]によって Cancel ボタンが出てなくても
    ×」ボタンをクリックすればよいと書きました。
    この関数の誕生当時は予想されてなかったと思うけど、ネットの普及…とくにスマートフォン内の広告ポップアップ
    のおかげで、「×」で画面を閉じられることが常識化しているので、メッセージだけの画面では [NOOKCANCEL]も併用し、OK Cancelのボタンは省いてよいかもしれません。あった方が親切とは思うけど。

    [NOOKCANCEL] はスライドにある通り、OKボタンを表示しないよ、というキーワードなのですが
    なぜこれが[NOOK]でないのかは謎ですね。。開発当時に、OKを出さずにCancelだけ出して、という意図で設定したのではと想像していますが、
    [NOCANCEL]との整合性からも、揃えてほしいなぁと思います。


    2021年6月に行われた「のの会(notes knows community) 第32回 」での私のスライドです。@関数Talk としては第29回。


    前回
    に続き @Dialogbox のお話です。

    このスライドのおしまいに、「ブログで補足します」という宿題が残っています。
    そんな宿題は忘れていて、1年後にようやくブログにしようとして慌てたというのが正直な状況です。

    おさらいしますと、
    あるフォームから@Dialogboxを使ってサブフォームを表示します。
    そのサブフォームに「@Command([FileSave])」の式を持つボタンが入っている場合、どうなるの?
    というお話です。

    FilesaveinDialogbox
    フォーム・サブフォーム名は画像のタイトル通りです。またボタンにも表示通りの式が入っています

    どうなるかと申しますと、
    ・引数[NONOTE][READONLY]を使用した@Dialogboxの場合はエラーになるのですが
    それ以外は
    サブフォーム名をForm名とした文書として保存されてしまう!
    という結果になります。

    上記画像の例で申しますと、
    フォーム「DocForm01」の文書から
    @Dialogbox で サブフォーム「DiagSub01」を開き、ダイアログ内で 「@Command([FileSave])」を実行すると
    元の文書のフォーム名(Formフィールドの値)が「DiagSub01」に変わってしまいます。

    そうすると、このあと文書を閉じ、ビューから再度開こうとしても、「そんなフォームはないよ」と一蹴されて開けないなんてことになります。

    また、次回で触れるキーワード[NONEWFIELDS][NOFIELDUPDATE]の指定は意味をなさなくなり
    つまりサブフォーム内の新規フィールドもサブフォーム内でのフィールド値の更新も反映されます。
    どうやらこの2つの引数は、あくまでダイアログの「OK」ボタンの動作に対応していると考えるべきでしょう。

    2021年4月に行われた「第31回 のの会 」での私のスライドです。@関数Talk としては第28回。


    @Dialogbox について、この回から3回にわたってトークするのですが、当初はそこまで見通せてなくて、このスライドのおわりでは「もう1回くらいつづきをやるかも」と記しています。


    @Dialogbox は、どの設計要素をダイアログボックスとして表示できるか。
    スライドの通り、結論は「フォーム」「サブフォーム」「ページ」の3種類。
    実は「ビュー」「エージェント」「ナビゲータ」…などなど、他の各設計要素についてもいちおう、@Dialogboxで指定したら表示できるかを試してはみたのですが、予想通り上記3種類以外は表示できませんでした。

    さてその3つをどう使い分けるのがよいか、P.14にて個人見解として
      文言が固定のガイドやヘルプの表示を行うダイアログ用には
      「ページ」を
      表示だけでなくフィールド項目のセットも行う場合は
      「フォーム」よりは「サブフォーム」を
    と記しました。
    "「フォーム」よりは「サブフォーム」" と書いたのは、開発者としては「フォーム」はなるべく文書用であってほしいなと感じるからです。
    未知のDBアプリを開き、デザイナーで見たときに「実際に文書としては使用されていないフォーム」が多く含まれていると、紛らわしく、設計の理解が微妙に妨げられるから。どちらでもよい場合にはサブフォームを選んでほしいな、と思う次第です。

    ↑このページのトップヘ