2020年3月30日月曜日

グループの入れ子レベル

ドミノディレクトリにグループを作成して、そのグループのメンバーとして別のグループ名を追加することがあります。

このように別のグループをメンバーに追加している状態をここでは「入れ子」と呼びますが、例えば次のように入れ子(ネストとも言う)のレベル(階層とも言う)が深くなった場合、どのレベルまでサポートされるかご存知でしょうか。

11.0 の Administrator ヘルプにある「Domino 命名規則」には(つい最近まで)次のように記載されていました。

メール配信では、グループを5つのレベルまで入れ子にできます。メール配信以外の目的では、6つのレベルまで入れ子にできます。

この制限がどのバージョンからあったかは不明ですが、ずいぶん前からあったように思います。

ところが、アクセス制御リストの画面にある「有効なアクセス権」ボタンを押して、あるユーザーのアクセス権を調べていた時「6つよりレベルが多いこと」に気付きました。

そこで、ドミノディレクトリへグループ文書を 20 作成して次のように設定しました。

グループ "Group1" のメンバー欄へ Group2 を追加
グループ "Group2" のメンバー欄へ Group3 を追加
グループ "Group19" のメンバー欄へ Group20 を追加
グループ "Group20" のメンバー欄へ Test User/v10 を追加

Group20 に追加したユーザー「Test User/v10」は入れ子のレベルが 20 です。

データベースの ACL へグループ "Group1" だけ追加して、「有効なアクセス権」ボタンから調べてみたところ、なんと「Test User/v10」はアクセスできそうでした。

実際に Test User/v10 がこのデータベースへアクセスすると、拒否されることなく開くことができました。


この結果をサポートへ報告してみたところ、次のことがわかりました。

  • メール配信時の入れ子の制限は、グループを Domino 側で展開する場合は制限が無く、クライアントから送信する場合は20レベル以上の階層はエラーになる
  • メール配信以外の入れ子の制限はなくなった
  • 入れ子の制限は変わっているが、ヘルプの更新がされないまま現在に至っている

制限が緩和されていたことを知りませんでした...

これを受けて、Notesクライアントでメールを作成して、宛先へ "Group1" を指定して送信してみたところ、20 レベルのユーザーのためエラーが表示され送信できません。


グループをクライアント側で展開しているためにエラーとなったようです。

次に、グループを Domino 側で展開させるために宛先を「Group1@v10」に変えて送信してみると、今度はエラーなしに送信できました。


さて、メール配信時の入れ子の制限はグループを展開する場所によって違うことを確認できましたが、Domino のメールへアクセスする方法はいくつかあります。どのアクセス方法が制限を受けるのでしょうか。

これまたサポートに聞いてみたところ、次の回答がありました。

【入れ子の制限なし:グループをDomino側で展開】
  • iNotes
  • Verse
  • Traveler
※CAA ではメールをブラウザ iNotes で開きますので入れ子の制限はありません

【入れ子の制限あり:グループをクライアントで展開、「グループ名@ドメイン名」の場合はDomino側で展開】
  • Standard版
  • Basic版
  • Nomad

入れ子と言えば、私が過去に書いた「グループの入れ子を洗い出す」というエントリがあるのですが、これも書き換えないと...

Nomad (iPad) は新元号に対応していました

iPad 版を皮切りに iPhone 版, Android 版もリリースされています「スマートデバイス対応Notes クライアント」とも言うべき HCL Nomad (以下 Nomad )について、新たに分かったことがありますので共有したいと思います。

Notes と Domino にも元号を表示する機能があるということで、昨年の改元に先立ち、新元号「令和」を表示するための対応を実施されたかたもいらっしゃると思います。 

改元のタイミング(2019年5月1日)で Nomad (当時は IBM Domino Mobile Apps 1.0.1 でした)が対応していたかどうかは、私は確認したという記憶が定かではありません。が、おそらく対応していなかったように思います。
※追記:サポートによるとiOS版 HCL Nomad は「1.0.5 から対応」とのこと

新たに分かったことというのは、Nomad でも「新元号が表示される」という事実です。

新元号に対応していない状態では、改元した日付を「平成 31年05月01日」と表示します。
対応している場合「令和 1年05月01日」と表示します。

今回 Nomad でも新元号を表示できることを確認しました。
下図は iPad の Nomad でのスクリーンショットです。

このビューの最初の列の値として「日付/時刻」タイプのフィールド「date1」を指定しています。その列では「年」の表示形式として "ggge" を指定しています。

上の図で「令和 1年05月01日」と表示されている文書を、Notesクライアントから文書のプロパティで見てみると、フィールド「data1」の値が 2019/05/01 であることがわかります。



ところで、私の iPad は、言語設定が「日本語」ですが、これを「英語」に変えると元号はどのように表示されるのでしょうか。

下図をご覧ください。最初のタブが「ホーム」ではなく「Home」と表示されているだけでなく、元号表示も変わりました。

元号は 「Reiwa」「Heisei」と表示されています!

年月日が漢字のままなのはご愛敬ですね。まあ Notes Standard でも「インターフェースの言語」を"英語"にすると同じ結果になるので...


もうひとつどうでもいい情報です。
元号表示は3桁表示まで対応しているようです。
西暦3017年は令和1000年に該当しますが、ggge での表示は「令和 *年」とアスタリスクに変換されてしまいました。

上の図は iPad の Nomad でのスクリーンショットですが、Notes クライアントでも同じ表示になりました。

2020年3月4日水曜日

セクションの境界線のスタイルを指定するには

LotusScript を使ってリッチテキストフィールドへセクションを追加したい場合があります。

次のコードのように NotesRichtextItem クラスの BeginSection メソッドを使うと、リッチテキストフィールドの最後に追加できます。
Dim ss As NotesSession
Dim dc As NotesDocumentCollection
Dim doc As NotesDocument
Dim body As NotesRichTextItem
Dim style As NotesRichTextStyle
Dim col As NotesColorObject

Sub Initialize
    Set ss = New NotesSession
    Set dc = ss.Currentdatabase.Unprocesseddocuments
    Set doc = dc.Getfirstdocument()
    Set body = doc.GetFirstItem( "Body" )
    
    Set col = ss.Createcolorobject()
    Call col.Setrgb( 0, 0, 255 )
    Set style = ss.Createrichtextstyle()
    style.Fontsize = 12
    style.Notescolor = COLOR_DARK_YELLOW
    
    Call body.Beginsection( "this is section title", style, col, True )
    Call body.Appendtext( "this is the string in the section" )
    Call body.Endsection()
    Call doc.Save( True, False )
End Sub

上のコードで追加したセクションは、下のように表示されます。

文書を編集モードに切り替え、セクションを選択した状態から「セクション」のプロパティを表示すると、「セクションタイトルと境界線」タブの中に「境界線」の「スタイル」という設定項目があります。※英語のプロパティ画面(下図)では Border の Style を指します


境界線の「スタイル」の選択肢は、現行バージョン(11.0)で11種類あります。

上のコードで追加したセクションの境界線の「スタイル」は、何も指定しない場合の(デフォルトの)スタイルになりました。

では、この境界線の「スタイル」は、どうやって指定できるのでしょうか。

BeginSection メソッドの第2パラメータでは NotesRichtextStyle のオブジェクトを指定できます。
Call NotesRichTextItem.BeginSection( title, titleStyle, barColor, expand )

けれども、このオブジェクトには境界線の「スタイル」に該当するものが見当たりません。境界線の「色」は、第3パラメータで指定が可能です

ちなみにセクションを扱う NotesRichTextSection クラスには、境界線の「スタイル」を設定したり取得できそうなメソッド/プロパティはありません。

どうやら標準のクラスでは、新たに作成するセクションの境界線の「スタイル」をデフォルトから変更したり、既存の境界線のスタイルを変更することができないようです。

それでは、このエントリで紹介した XML (Domino DTD = Domino文書型定義)を使う方法で新規に作成する場合はどうでしょうか。

まずは境界線のスタイルを変えて11種類のセクションを追加した文書を作成し、その文書を XML へ出力したものから、境界線のスタイル(borderstyle)の名前を調べてみました。

プロパティの表示
borderstyle
shadow
none
single
double
triple
twoline
windowcaption
gradient
tab
tabdiag


※表にあるスタイルの名前はこのヘルプ文書にも記載があります
※表の最下行の境界線は バージョン 8 で新たに追加されたスタイルらしいのですが、これはヘルプ文書に記載がありません。また XML へ出力しても borderstyle は設定されませんが、これは KKOOBM8D5V で報告されています。

出力した XML を参考に、borderstyle として tab を指定(21行目)したセクションを、ビューで選択している最初の文書へ追加してみます。

Dim ss As NotesSession
Dim db As NotesDatabase
Dim dc As NotesDocumentCollection
Dim doc As NotesDocument, tmpdoc As NotesDocument
Dim rtitem As NotesRichTextItem
Dim stream As NotesStream
Dim importer As NotesDXLImporter
Dim xml$, nid$

Sub Initialize
 Set ss = New NotesSession
 Set db = ss.CurrentDatabase
 
 xml = |





this is title string inner text
| '文書作成用のxmlをストリームへ書き込み、文書へ変換する Set stream = ss.CreateStream Call stream.WriteText( xml ) Set importer = ss.CreateDXLImporter( stream, db ) importer.DocumentImportOption = 2 'DXLIMPORTOPTION_CREATE Call importer.Process '変換した文書のリッチテキストフィールドの内容を選択文書へ追加する nid = importer.GetFirstImportedNoteId Set tmpdoc = db.GetDocumentByID( nid ) '変換した文書 Set dc = db.UnprocessedDocuments Set doc = dc.GetFirstDocument '選択文書 Set rtitem = doc.GetFirstItem( "Body" ) 'セクションを追加するリッチテキストフィールド Call rtitem.AppendRTItem( tmpdoc.GetFirstItem( "Body" ) ) Call doc.Save( True, True ) '変換した文書を削除する Call tmpdoc.Remove( False ) End Sub

実行後にビューで選択していた文書を開くと、下図のとおり tab スタイルのセクションを追加できていました。

既存のセクションの境界線のスタイルを参照したり変更できるプロパティとメソッドが欲しいので、アイデアとして投稿しました。ご賛同いただけるのであれば投票(Vote)してくださると嬉しいです。