178 Views
January 30, 26
スライド概要
Notes Dominoの@関数を取り上げながら、調べたこと、経験したことを雑談してゆきます。
第57回は @DocLength について
@ -notes knows community- 2024/07/11 @関数Talk 第57回 公開版 ✔ @DocLength @ 阿部 覚 (X:) @abesat Talks around @Functions in Notes and Domino 57th
@ @DocLength で放談 @
@DocLength @ この関数をネタにしたのは とある興味からですが ひとまずは基礎的なところ @
@ @DocLength ヘルプによれば 「文書の推定サイズをバイト数で返します。」 構文 @DocLength @
@DocLength @ 推定ってどういうことかについて、ヘルプでは 「・推定サイズはユーザーデータのみを表します。文書や フィールドの見出しや式など、固定のものはサイズに含まれ ていません。 ・データベースでは、記憶領域は 64 バイト単位で割り当て られます。文書に割り当てられたこの 64 バイトの一部が使 用されていないこともあります。」 「通常、開いている文書は、閉じている文書より多くの記 憶域を使用します。@DocLength から返される値は、この 関数を実行している文書が開いている文書か、あるいは閉 じている文書か (ビューレベルで選択された文書など) に よって変わります。」 @ イマイチのみこみづらいところありますが要するに
@DocLength @ 要するに 「・推定サイズはユーザーデータのみを表します。文書や フィールドの見出しや式など、固定のものはサイズに含まれ ていません。 一部がサイズに含まれない ・データベースでは、記憶領域は 64 バイト単位で割り当て られます。文書に割り当てられたこの 64 バイトの一部が使 用されていないこともあります。」 「通常、開いている文書は、閉じている文書より多くの記 憶域を使用します。 @DocLength から返される値は、この 文書画面での値>ビューでの値 関数を実行している文書が開いている文書か、あるいは閉 じている文書か (ビューレベルで選択された文書など) に よって変わります。」 @ という理解でいいかな?
@DocLength @ じゃあ実際に見てみましょう ビューの列でシンプルファンクションの 「サイズ(バイト)」を選べば @ 式としての @DocLength です
@DocLength @ じゃあ実際に見てみましょう 文書フォームには、計算結果テキストで @DocLength を置いてみます @ フォーム内の計3か所に置いてみました
@DocLength @ もうひとつ @DocLength をプロンプト表示するエージェントを 用意しました @ 戻り値が数字なので @Prompt と使うに際して @Textを行っています
@DocLength @ とある「文書ライブラリ」のデータベースで これらの設計変更を行い、 ビューを見ると… @
@DocLength @ でも、前掲のエージェントによるアクションで 選択している文書のサイズを出すと @ 値が同じじゃないよ?
@DocLength @ その文書を開いてみます 置かれた場所によって 計算結果テキストの @DocLengthの結果値が 少々異なっており @
@DocLength @ さらにエージェントのアクションが出してくる値も違う @
@DocLength @ ただ、この文書を編集オードにすると、 一時的に統一されます @ あくまで一時的 保存してからまた普通に開くと別々の値です。。
@DocLength @ とまあこんな次第で @DocLength の推定値は、 画面がビューか文書かなんて違いにとどまらず 出し方によってすら、ずれがあるようなので 結論はヘルプ通りですが あくまで推定値、というのをご留意ください 実際に使う側としては 「厳密ではないがおおよそのサイズがわかる」 というレベルでの捉え方でよいのだと思います @
@DocLength @ ネットを調べると ほかに 特にファイルが添付されている文書に関して 圧縮によるサイズへの影響なども指摘されています たとえばこの記事 @DocLengthが返す文書Size | Lotus Notes/Domino (R) をこよなく愛して。。。。 https://ameblo.jp/iwama/entry-12101779977.html @ なおこちらのBlog、重宝されてた技術者も多いはずだけど 閉鎖を予定との記事が今年(2024) 4月に出ています(泣) チェックするなら今のうちかも (せめてこのまま残して頂けないかしらん)
@DocLength @ ここからは少し趣向を変えます @DocLength で、私が興味本位でやってみたかったこと 興味本位なのであまり仕事のお役には立たないと思いますが ここまで話したように 調べれば調べるほど「推定値」であることが分かったので 以降のトライアルの正確性は疑わしいですが @ でも、まあいいや、やりたかったことを続けてみよう
@DocLength @ Notes Dominoの文書って、 どこまで小さくできるん? ≒ @DocLengthで、どこまで小さい 値をあらわせるか @ @DocLengthは推定値なので、厳密でないのはわかってるけど (「=」イコールではなく「≒」ニアイコールだけど) どこまで小さい値を出せるもんかな
@DocLength @ というわけで問題 今回私が @DocLengthで表示させた 文書の最小値は いくつでしょうか @
@DocLength @ とにかく文書を小さくしたいと考えた場合 文書を新規作成し、何も入力せず保存したとしても 最低限保存されるものがあるので それらを極力減らしてゆくことがポイントと考えました 減らす対象は、フィールドです @
@DocLength @ 普通にフィールドが準備された業務のフォームで 文書を作成したら、たとえ何も入力せずに保存したとしても (こちらは文書ライブラリのテンプレートを 使ったアプリですが) たとえば、このくらいのサイズ感になるようです @
@DocLength @ であれば、 フィールドの数が少ないフォームがいい そこで、DBに新規フォームを作成しまして… @ フォームの名前を"a"と(短く)し、
@DocLength @ フィールドは… ま、いっか! @ 何もせずそのままフォーム a を保存しちゃいます。
@DocLength @ 見出しもフィールドもなくていいの? いいんです! 出来上がったフォーム a で 文書を作成し のっぺらぼうで 入力できるフィールドないけど Ctrl+S などで保存はできます! @
@DocLength @ 結果… 39バイト! ※今回は列式の@DocLengthで評価 文書には Form と $UpdatedBy の 2つの隠しフィールド だけが存在します @ 39バイトの大半は、フォーム名(Form)と 作成ユーザーのID名($UpdatedBy)ではと思われ
@DocLength @ $UpdatedBy この文書を 誰が更新したかを表す予約フィールド(隠しフィールド) 新規保存した文書の場合は1名のIDが記録され 前回と違うユーザーが更新する都度IDが追加されます つまり、通常なら最低でも1名のIDが記録されます @ 以上が、実験その①でした
@DocLength @実験その② 同じように のっぺらぼうの フォーム b を作成します @ フォーム a との 違いはココ
@DocLength @ 同じように のっぺらぼうの 文書を作成し、保存すると 結果… 14バイト! @
@DocLength @ フォーム b は Anonymousのフォームでした 匿名、文書の作成・更新者を内緒にする、記録しない、 というフォームです 文書プロパティを見ると$UpdatedByの代わりに $Anonymousという隠しフィールドがセットされており これが1バイトのみ、というのがポイントです @
@DocLength @最後に実験その③ これはちょっとイレギュラーな、ずるいアプローチです というのは、フォームや文書を作るのではなく こんなLotusScriptのエージェントを作って アクションとして実行します @
@DocLength @ 結果… 😏 @ 3バイト! こちらが今回の回答でした
@DocLength @ 作成された文書のプロパティには $Anonymous のみで Form もありません (Formがないから、まともに開くこともできないんですが) @
@ 今回もお付き合い ありがとうございました 😀 @