出直し!! ヘルプ

連載中

連載 終了

2023/06/30

Project KEEP 体験:#5)郵便番号検索 - Swagger UI によるテスト

Web アプリ素人が Domino 12.0.2 の新機能である Domino REST API(Project KEEP)を怖いもの見たさで触ってみた体験レポートの #5 です。

前回は郵便番号マスタ DB を Domino REST API に設定しました。今回はその設定のテストを行います。

テストは、Swagger UI を使って実施します。まずは、WEB ブラウザから Domino REST API のトップページにアクセスし、[OpenAPI v3] をクリックして、Swagger UI を起動します。


認証トークンの取得

Swagger UI を起動したら、[authentication] セクションの『/auth』API を開きます。この API は、サーバにログインして認証トークン(JWT)を取得します。具体的には、ユーザ名とパスワードを Request body 内の JSON にセットして POST すると、JWT を含む JSON が取得できます。

Resuest body の Examples の枠内にサンプルの JSON が表示されているのでパスワードとユーザ名を入力します。

入力が完了したら、[Excecute] ボタンをクリックします。結果は、Responses の Server Response、Response body に JSON が返されます。

bearer の値が認証トークンとなりますので、これをクリップボードにコピーします。Swagger UI 上部の [Authorize] ボタンをクリックし、Value 欄に認証トークンをペーストして、認証します。

これで、テスト準備完了です。


郵便番号検索のテスト

いよいよ、前回設定した API をテストします。

Swagger UI の [data] セクションの /query を開きます。説明に「Send a DQL query and get JSON documents back」とあるので、DQL を送信して検索し、文書を JSON で取得する API のようです。

まずはパラメータを確認しましょう。

必須のパラメータは2つです。dataScope には、事前に定義したスコープ名 "zipscope" を入力します。action は、"execute" のままでよさそうです。


続いて、Request body の設定です。検索するのですから、query に条件を設定するのは当たり前といえます。サンプルを以下の通り、修正します。

"query": "form = 'zip' and zipcode = '6810002'",

実行すると次のような結果が返ってきました。ヒットした件数は表示されているのですが、肝心の文書の内容がありません。

ここで行き詰ったので、HCL テクニカルサポートに問い合わせして、原因を教えていただきました。問題は下記の2点でした。

1. デザインカタログが有効になっていない

/query API は、Swagger UI にも記述がある通り、DQL で検索します。DQL を使用するには、デザインカタログを有効にする必要があるそうです。

以下のサーバコマンドで、デザインカタログを有効にしました。  

    • load updall Home\zipcode.nsf -e

DQL に関してはこれまで経験がなかったのですが、利用するのにこんな条件があるとは知りませんでした。DQL に関しては、追って調査したいと思います... 

2. mode は "default" で

Examples では、mode が "dql" となっています。これを "default" と変更すると動くとのことです。個人的には、"dql" の方が正しいような気がするのですが... 

いずれ、Examples か仕様が修正されるのでしょう...

ちなみに、Request Body に設定する JSON の仕様については、Swagger UI 内にドキュメントはないそうです。設定内容に不明な点があれば、HCL テクニカルサポートに問い合わせるしかないようです。

 

改めてテスト

 テクニカルサポートから指摘いただいた点を修正のうえ、改めてテストしたところ、ヒットした文書の情報が正常に返されました。結果の JSON は以下の通りです。

住所などの返される項目は、スキーマで設定した項目になっていて、文書内の全フィールドが返されるわけではないようです。

これで当初計画した『リクエスト時に郵便番号を渡し、その郵便番号の住所を含む JSON を返す』ができました。


最後に、Request body の Examples なのですが、無用な項目や無用な項目が含まれていそうです。そこで、順に項目を削除しながら、必須の項目を探ってみました。結果、次の項目があれば検索が実行されることを確認しました。

{
   "mode": "default",
   "query": "form = 'zip' and zipcode = '6810002'"
}

このあたりも API の仕様にあたると思いますので、Swagger UI 内にドキュメントがあればありがたいですね。

前回 Project KEEP 体験 次回

2023/06/29

Project KEEP 体験:#4)郵便番号検索 - Domino REST API の設定

Web アプリ素人が Domino 12.0.2 の新機能である Domino REST API(Project KEEP)を怖いもの見たさで触ってみた体験レポートの #4 です。

前回用意した郵便番号マスタ DB を Domino REST API に設定していきましょう。

まずは、WEB ブラウザから Domino REST API のトップページにアクセスし、[Configuration] をクリックします。 ログイン画面が表示されるので管理者アカウントでログインします。ログインが成功すると次の画面が表示されます。


スキーマの設定

[Detabase Management - REST API] をクリックして、『Schema Management』画面を開きます。[+ Add Schema] ボタンをクリックして、スキーマを新規作成する画面を開きます。

準備作業で作成した郵便番号マスタ DB を選択し、スキーマ名を「zipschema」と入力します。


[ADD] ボタンをクリックすると作成されたスキーマのアイコンが表示されます。


作成された [zipschema] アイコンをクックし、詳細を設定します。郵便番号マスタはフォームが一つなのでシンプルな画面ですね。

[1.郵便マスタ] フォームを一度クリックして、デフォルトの設定でいったん設定します。その後、もう一度クリックして、フィールドの設定画面に入ります。

郵便番号と住所の合計 7 フィールドを追加しして、保存します。


スコープの設定

続いて、スコープを設定します。

[Detabase Management - Activation] をクリックして、『Scope Management』画面を開きます。[+ Add Scope] ボタンをクリックして、スコープを新規作成する画面を開きます。

先ほど作成した郵便番号マスタ DB のスキーマを選択し、スコープ名を「zipscope」と入力します。


[ADD] ボタンをクリックすると作成されたスキーマのアイコンが表示されます。

出来上がったアイコンの右上の緑マークが Active 状態を表しています。スコープの定義がっ完了すると、スキーマのアイコンも Active 状態となります。


以上で、郵便番号マスタ DB を Domino REST API に設定する作業は完了です。


前回 Project KEEP 体験 次回

2023/06/28

Project KEEP 体験:#3)郵便番号検索 - 準備作業

Web アプリ素人が Domino 12.0.2 の新機能である Domino REST API(Project KEEP)を怖いもの見たさで触ってみた体験レポートの #3 です。

チュートリアルがざっくり終わったので、いよいよ Domino REST API 経由で自作ノーツ DB への接続を自分で作ってみようと思います。

まずは、簡単そうな郵便番号の検索です。ノーツ DB 内に保存されている郵便番号と住所の情報の Web API 化にチャレンジします。リクエスト時に郵便番号を渡し、その郵便番号の住所を含む JSON を返すと計画です。

まずは、実現できそうな API を探すため、Swagger UI を開きます。まずは、WEB ブラウザから Domino REST API のトップページにアクセスし、[OpenAPI v3] をクリックします。

data のカテゴリに『CRUD of Domino NoSQL data in JSON format.』と説明があるのでここですね。ちなみに、CRUD って、Create / Read / Update / Delete のことなんですね。恥ずかしながら、Google 先生に聞くまで知りませんでした...

さて、data カテゴリをざっと見ると様々な API が用意されています。検索できそうな API はというと、/query となりますね。


準備作業

さて、Domino REST API の操作に入る前に、検索対象となる郵便番号マスタデータベースの紹介です。

事前に用意したは次のような単純なノーツ DB となります。また、サンプルのデータは、日本郵政の郵便番号データダウンロードサイトから鳥取県のデータをダウンロードして使用しています。


フォームの設計は次のようになっており、都道府県 / 市町村 / 町域名 毎にフィールドを分けています。


前回 Project KEEP 体験 次回

2023/06/27

Project KEEP 体験:#2)チュートリアルとデモアプリ

Web アプリ素人が Domino 12.0.2 の新機能である Domino REST API(Project KEEP)を怖いもの見たさで触ってみた体験レポートの #2 です。

前回は、インストールを行いましたので、引き続きチュートリアルを進めましょう。基本的には、チュートリアルの流れに沿って進めて、理解を進めてもらえればよいかと思います。

ここでは、各セクションで自分が少し戸惑った点などをまとめます。皆さんの評価の参考にしていただければ幸いです。


テスト用のツールのインストール

Domino REST API に限らず、外部の Web サービスをテストする際にの活用する一般的なツールですので、すでに、インストール済みかもしれませんね。

入ってなければインストールしましょう。


Domino REST API の管理画面での操作

デモアプリのインストールと管理画面を開くまでの内容です。

まず、デモアプリの入手方法をチュートリアル内に発見できませんでした。いろいろ調べていると、英語版のチュートリアル内に発見しました。リンクをクリックすると、Resources というリンクがあるのでこの中に、demo.nsf のダウンロードリンクがあります。

続いて、デモアプリのインストールです。チュートリアルでは、Docker 版で記述しています。今回の環境は、Windows であったこともあり、ダウンロードした domo.nsf をノーツの機能のでサーバにコピーし、配置するだけのノーツ屋的対応をしましたが、特に問題はありませんでした。これなら事前に設計の署名もできますしね...


curl もしくは postman で REST API の操作

チュートリアルに沿って進めていると、うまくいかない点に出くわしました。「データベースの一覧の取得」がうなく動かないのです。

HCL テクニカルサポートの方にお世話になり、すぐに解決しました。原因は、このチュートリアルは Domino REST API の Early Access 版をベースにしており、v1.0.5 とは、エンドポイントが変更されているのが原因でした。

なお、この点に関しては、現在はすでに修正済みです。迅速な対応ありがとうございます。

ちなみに、仕様変更については、以下にまとめられておりますので、必要に応じて参照してください。

HCL Domino REST API Documentation - What's New


こんな理由から別の評価に進んだので、「データベースの一覧の取得」がうまくいったことを確認して、このセクションはここで中断しました。


Swagger UI で操作する

チュートリアルに記載がある通り『Swagger UI は、API に関するドキュメントを確認しながら、動作を確認することができる UI 』です。

さらっと書いてあるので、はじめ何のことかよくわからなかったのですが、操作してみて驚きました。

ここには、API に関するドキュメントが一元管理されており、API コール時のパラメータや送信する Request Body(JSON)の説明やサンプルが表示されます。

これだけだとただのヘルプなのですが、Swagger UI では、表示されているパラメータやサンプルを修正でき、その場でコール、その結果を表示してくます。
これまで、Domino Designer ヘルプや Microsoft Learn ぐらいしか見てこなかったので、ドキュメントとテストツールが一体となって、インタラクティブに仕様の確認がことに驚き、効率的に理解できることに感動しました!

チュートリアルでそれを体験できるので是非お試しください。


ところで、Swagger UI とは、Domino REST API の専用ツールではなく、OpenAPI Specificatioinに従って記述された一般的なツールなんですね。WEB アプリの世界は進んでいますね...


OData の操作

最後のセクションが OData に関してです。Domino REST API 経由で Notes データを Export できる機能のようでなかなか便利そうです。

こちらは、少し独立した機能に見えるので、別の機会に評価したいと思います。


最後に

以上で、Domino REST API のチュートリアルのレポートは終了します。

次回からは、この経験を利用して、自作アプリを追加って REST API を体験したレポートを掲載します。


前回 Project KEEP 体験 次回

2023/06/26

Project KEEP 体験:#1)インストール

Web アプリ素人が Domino 12.0.2 の新機能である Domino REST API(Project KEEP)を怖いもの見たさで触ってみた体験レポートです。

こんな有様なので、誤解や不正確な情報などが含まれている可能性がありますので、予めご了承くださいませ。


検証環境

今回の検証は以下の環境で実施しています。

  • Windows 10
  • Domino 12.0.2 FP1 64 bit
  • Domino REST API v1.0.5

また、今回の検証(特にセットアップ)は以下のチュートリアルを参考に実施しています。

Domino Rest API (KEEP) のチュートリアル


インストーラの準備

まず、Domino REST API v1.0.5 のインストーラである  Domino_REST_API_V1.0.5_Installer.tar.gz を入手します。gzip の圧縮ファイルを解凍すると以下のファイルが入手できます。restapiInstall.jar がインストーラの本体です。

  • README.txt
  • restapiInstall.jar


インストールの補足

インストール方法については、チュートリアルの『Domino REST API のインストール (インストーラ 版)』セクションに記載があります。

インストールコマンドの解説や手順、インストールで実施される変更はそちらに記載がありますので、まずはリンクを参照ください。ここでは、いくつか補足します。


まず、インストールはコマンドプロンプトで実行しますが、必ず『管理者として実行』してください。私はうっかり、通常のコマンドプロンプトで実行しました。その結果最後にエラーが発生しました。ただ、変更箇所はすべて反映されていましたし、今のところ正常に動作しているので問題はないようですが、精神衛生上よくありませんね。


続いては、念のための記載です。

インストールコマンドの実行についてですが、Domino 同梱の JRE は Domino のプログラムフォルダの jvm\bin\ にあります。ですので、コマンドを実行する際には、restapiInstall.jar を配置したフォルダにカレントディレクトリを移動して、java コマンドをフルパスで指定するとよいかと思います。

例えば、Domino が C:\Domino にインストールされていて、Rest API を Domino フォルダ内にインストールするなら以下のようになります。

>C:\Domino\jvm\bin\java -jar restapiInstall.jar -d="C:\Domino\Data" -i="C:\Domino\notes.ini" -p="C:\Domino" -r="C:\Domino\restapi" –a


インストール

では、インストールコマンドを実行してみましょう。

インストールが成功したら、コマンドプロンプトに次のメッセージが表示され、インストーラが終了します。

Installation: success (Exit code 0)


成功したら、変更箇所がすべて更新されているか確認しましょう。

  • Notes.ini の ServerTasks に restapi が存在
  • プログラムディレクトリに nrestapi.exe が存在
  • ライブラリディレクトリにファイルが存在(主に jar ファイル)


すべて OK なら、Domino を起動します。コンソールを見ていると、次のような初期化メッセージが表示されます。

2023/06/22 19:12:46 {
2023/06/22 19:12:46   "name" : "HCL Domino REST API core API",
2023/06/22 19:12:46   "desc" : "Next generation APIs for HCL Domino",
2023/06/22 19:12:46   "version" : "v1.0.5 (Build 1.18.3-6)",
2023/06/22 19:12:46   "vendor" : "HCL Labs",
2023/06/22 19:12:46   "image-build" : "2023-05-08T19:58:47Z",
2023/06/22 19:12:46   "Verticles loaded" : 0,
2023/06/22 19:12:46   "Active handler classes" : 0,
2023/06/22 19:12:46   "active requests" : 0,
2023/06/22 19:12:46   "active agents" : 0,
2023/06/22 19:12:46   "apiPlatform" : "server",
2023/06/22 19:12:46   "runtime" : "0 days, 0 hours, 0 minutes, 1 seconds."
2023/06/22 19:12:46 }
2023/06/22 19:12:46 Domino Rest API Initialization complete.



Project KEEP 体験 次回

2023/06/25

Notes - Excel 連携:#12)グラフのオブジェクト構造

前回は、Shapes オブジェクトの AddChart2 メソッドを使って、とりあえずグラフを作成してみました。グラフに関する細かな操作に入る前に、ここまでのオブジェクト構造を整理しましょう。

Shapes.AddChart2 メソッド (Excel)


Shapes オブジェクト

まず、AddChart2 メソッドが定義されている Shapes オブジェクトです。

Shapes オブジェクト (Excel)

Microsoft Learn の説明の通り、Shapes オブジェクトは、オートシェイプや画像画像など、シート内に配置できる様々なオブジェクトのコレクションです。このオブジェクトの一つにグラフも含まれるということですね。

Shapes オブジェクトも Workbook コレクションや Worksheets コレクションと同様に Count プロパティが存在し、引数にインデックス番号を指定すると単一のオブジェクトが取得できる仕様となっています。

メソッドは、グラフを作成する AddChart2 のほかに、AddPicture2 や AddTextbox など様々なオブジェクトを追加するメソッドが用意されています。

さまざまなオブジェクトをまとめて管理するコレクションであることがよくわかりますね。


Shape オブジェクト

AddChart2 メソッドの戻り値は、グラフを表すオブジェクトではなく、Shape オブジェクトでした。

Shape オブジェクト

この Shape オブジェクトは、グラフだけを表すオブジェクトではなく汎用的な仕様となっています。

例えば、プロパティを確認すると、オブジェクトの位置を表す Left や Top プロパティがあり、サイズを表す Width や Height があります。

プロパティの一つにオブジェクトの種類を表す Type というプロパティがあます。このプロパティがとりうる値である『MsoShapeType 列挙 (Office)』を見ると、様々なオブジェクトが含まれることがよくわかりますね。

Shape.Type プロパティ (Excel)

MsoShapeType 列挙 (Office)

ほかにも、オブジェクト内にグラフが存在するかを表す HasChart というプロパティももあります。AddChart2 で作成された Shape オブジェクトは、この プロパティが True となっています。

実際のグラフ本体は、Chart というプロパティから取得できる Chart オブジェクトとなります。


Chart オブジェクト

グラフ全体を表すオブジェクトが Chart オブジェクトです。

Chart オブジェクト

Chart オブジェクトのプロパティを確認すると、グラフの種類を表す ChartType やグラフのタイトルである ChartTitle、タイトルを持っているかを表す HasTitle が存在します。

軸の設定や配色など、グラフにかかわるすべての操作は、このオブジェクトを経由して行うことになります。


まとめ

ここまでのオブジェクト関連を図にすると以下のようになります。


前回のコードに Chart オブジェクトを取得するコードを追加すると次の通りとなります。ほとんど変わり映えないですが...

Sub Initialize

  Dim oXls As Variant
  Dim oSheet As Variant
  Dim oShape As Variant
  Dim oChart As Variant

  'Excel の準備
  Set oXls = CreateObject("Excel.Application")
  Call oXls.Workbooks.Add
  Set oSheet = oXls.Workbooks(1).WorkSheets(1)

  'サンプルデータのセット
  Call xSetSampleData(oSheet)

  'グラフの作成
  Set oShape = oSheet.Shapes.AddChart2(, 4, 200, 1, 500, 200)
  Set oChart = oShape.Chart

  oXls.Visible = True

End Sub


前回 Notes - Excel 連携 次回

2023/06/24

DJX の導入 #6)既存ユーザの別名設定

セットアップとマスタの初期登録が完了したので、既存ユーザに日本語別名を設定します。

『DJX 管理ツール』データベースを開き、左のメニューから [ユーザー] タブを開きます。既存ユーザに別名を付与する作業は、変更リクエストとなりますので、[変更] ボタンをクリックします。

リクエストを作成したら、まず、フォーム上部の検索機能で、対象のユーザを指定します。ユーザの情報が表示されますので、漢字とかなの氏名を入力します。

続いて、役職と所属を選択します。所属は兼任3か所分を含め、4つまで指定できます。


リクエストの実行

リクエストを保存したら、実行します。実行方法はマスタと同様です。リクエストを実行すると、AdminP のリクエストが作成されます。

AdminP リクエストが実行されると以下のログが出力されます。リクエストではどんな変更を加えるのかよくわかりませんが、ログを見ると何が処理されたかよくわかりますね。

このログが出力されたタイミングで、ドミノディレクトリのユーザ文書に別名がセットされます。

登録した所属は、[仕事/自宅] - [組織] タブに表示されます。

以上で、DJX の導入作業は完了です。



前回 DJX の導入

2023/06/23

DJX の導入 #5)マスタの登録

部署マスタの登録

ユーザが所属する部署をマスタとして事前に登録します。『DJX 管理ツール』データベースを開き、左のメニューから [部署] タブを開きます。

[登録] ボタンをクリックして、リクエストを新規作成します。

部署の名称とIDを入力し、保存します。ID は、 3 桁までの英数字という条件があります。また、部署のソート順に使用しますので、並び順を考慮して入力してください。

入力が完了したら、登録を実行します。処理したいリクエストを選択して、上部の [実行] - [選択リクエストの実行] アクションをクリックします。

実行が終了したらリクエストが消えます。実行結果は、『ログ一覧』より確認できます。

なお、部署は 0 ~ 6 までの 7 階層で設定できます。階層化は、画面上部の親文書の検索機能で指定します。ただし、すでに登録済みの部署しか選択できません。よって、部署マスタは上位の部署から順に登録する必要があります。


役職マスタの登録

部署マスタと同様の手順で役職マスタも登録します。操作は [役職] タブから行います。

入力項目は、役職名と役職 ID です。役職 ID もソート順に使用されますので、こちらも並び順を考慮して指定してください。


DJX 管理データベースの確認

マスタの登録が完了したら、『DJX 管理データベース』を開いてください。登録した、部署マスタと役職マスタが確認できます。


前回 DJX の導入 次回

2023/06/19

ノーツ新任担当者向けワークショップ(2023年7月)

今回はワークショップの告知です。

アナウンスはずいぶん前だったのでご存じの方もいらっしゃるかと思いますが、来る、2023年7月13日(木曜日)に『ノーツ新任担当者向けワークショップ』が開催されます。

内容は、Notes / Domino の基礎が学べる体験講座で、管理者編、開発編、デザイン編の3部構成です。

詳しくは以下のリンクを参照ください。

ノーツ新任担当者向けワークショップ(2023年 春開催)


ここからが本題

今回は3年ぶりに会場で集合形式での開催となります。他の受講者やスタッフとのコミュニケーションは現地参加の醍醐味ですよね!

私は、大阪サテライト会場で裏方さんとして参加いたします。なので、ここからは、大阪会場に限定したお話を進めます。

大阪は”サテライト会場”とはなっておりますが、デザイン編は、大阪会場からの配信となっており、現地で講師の話を直接聞けます。デザイン編はノーツに限らず”使えるネタ”も多いので、おすすめです!

ほかにも、HCL アンバサダーやノーツ界隈(?)で有名な方も来るはず。ワークショップだけでももちろん有益ですが、お仲間づくりにも効果があると思います。開催規模もちょうどよいですし、終了後は懇親会があるはずですしね(笑)

ぜひ、参加をご検討ください。


2023/06/18

リッチテキスト:#5)文字のスタイル設定

今回は、リッチテキストに表示する文字のスタイルをセットする方法についてです。

LotusScript では、文字のスタイルをセットするクラス NotesRichTextStyle が定義されています。今回は、このクラスの使い方を整理することになります。

NotesRichTextStyle (LotusScript®)


サンプルプログラム

今回は先に NotesRichTextStyle を使用したサンプルプログラムを先に紹介します。

Sub Initialize
   Dim ns As New NotesSession
   Dim ndb As NotesDatabase
   Dim nd As NotesDocument
   Dim nrti As NotesRichTextItem
   Dim nrts As NotesRichTextStyle

   Set ndb = ns.CurrentDatabase
   Set nd = ndb.CreateDocument()

   nd.Form = "RichText"
   nd.Title = "リッチテキスト:#5)文字のスタイル設定"

   Set nrti = nd.CreateRichTextItem("Body")
   Set nrts = ns.CreateRichTextStyle()

   '1行目
   Call nrti.AppendText("デフォルトの文字のスタイル設定")

   '2行目
   Call nrti.AddNewLine(1)
   nrts.Bold = True
   Call nrti.AppendStyle(nrts)
   Call nrti.AppendText("太字の文字です。")

   Call nd.Save(True, False)
End Sub

このプログラムを実行すると以下のような結果になります。


NotesRichTextStyle の使い方と特徴

このクラスも NotesRichTextParagraphStyle と同じく、事前に NotesSession クラスの CreateRichTextStyle メソッドで事前にオブジェクトを作成します。

作成したオブジェクトに必要なスタイルをセット(サンプルでは太字の設定)、それを AppendStyle でリッチテキストに反映すると、以降リッチテキストに追加する文字がそのスタイルとなります。

NotesRichTextStyle の特徴は、1行の中でいくつもスタイルがセットできるところにあります。

Set nrti = nd.CreateRichTextItem("Body")
Set nrts = ns.CreateRichTextStyle()

Call nrti.AppendText("デフォルトでスタート。")

nrts.Underline = True
Call nrti.AppendStyle(nrts)
Call nrti.AppendText("下線の設定をして、")

nrts.Bold = True
Call nrti.AppendStyle(nrts)
Call nrti.AppendText("ここだけ太字!")

nrts.Underline = False
nrts.Bold = False
Call nrti.AppendStyle(nrts)
Call nrti.AppendText("そして元に戻します。")

Call nd.Save(True, False)

例えば、上記のように記述すると、結果は以下のようになります。


NotesRichTextParagraphStyle との違い

リッチテキストにスタイルをセットするクラスは、NotesRichTextParagraphStyle と NotesRichTextStyle がありました。どちらも似たような名前で、使い方 もNotesSession クラスから作成して、NotesRichTextItem に食べさせるので同じです。

この二つのクラスはスタイルの設定を、リッチテキストの1行全体に適用されるか、文字ごとに適用されるか、が違いとなります。

この1行をノーツ用語で段落(Paragraph)というようです。

ざっくりいうと、文字のプロパティの [フォント] タブを担当するのが NotesRichTextStyle となり、文字ごとに設定できます。

[段落] タブを担当するのが、NotesRichTextParagraphStyle で、段落単位の設定をするということになります。


前回 リッチテキストの基本操作 次回

2023/06/17

DJX の導入 #4)管理ツールの設定

DJX の利用に必要な管理ツールの設定を行います。設定は、『DJX 管理ツール』データベースを開き、左のメニューから行います。


基本設定

『DJX 管理ツール』データベースを開き、左のメニューの [設定] タブを開き、『■ 基本設定』をクリックすると設定画面が開きます。

この設定では、DJXに関連するデータベースの配置とエージェントの設定を行います。基本的には、初期値のままでよいのですが、『DJX 管理データベース』については、事前に作成したファイル名とパスを正しく設定してください。


ユーザ設定

ユーザを新規作成する処理の初期値を設定します。左のメニューの [設定] タブから、『■ ユーザー設定』をクリックします。

認証者 ID 情報のセクションでは、事前に準備した認証者 ID の設定を行います。ID のファイルを指定し、パスワードを入力します。入力したパスワードはユーザ発行時に利用されますので間違いなく指定してください。

認証者名については、[参照] ボタンより選択できます。


続いて、ユーザ登録時の初期値セクションを設定します。こちらは、発行するユーザの初期設定になります。

作成した ID ファイルの扱いや初期パスワード、認証期間などを設定します。


なお、認証者 ID のファイルパスやユーザ ID の保存ディレクトリには、クライアントとサーバの2か所がそれぞれにあります。これは、ユーザ登録など DJX の処理をどこで実行するかにより、利用する箇所が変化します。

サーバエージェントで実行する場合、サーバ側の設定が使用されます。また、設定するパスは、サーバ OS 上のパスとなりますのでご注意ください。


前回 DJX の導入 次回

2023/06/15

DJX の導入 #3)認証者 ID の日本語別名の設定

DJX は、ドミノサーバ標準の別名の機能を利用して作成されています。DJX を利用する前に、認証者 ID に日本語別名を設定して、この認証者 ID にぶら下がるユーザで日本語別名が使用できるように準備します。

よって、この作業は、DJX としての作業ではなく、ドミノサーバの一般的な管理作業となります。なお、この作業はすべて Domino Administrator クライアントで行います。


認証者 ID の再認証

認証者 ID に日本語別名を設定する操作は、ID を再認証する操作で行います。

Domino Administrator クライアントの [設定] タブを開き、右のツールメニューより、[認証] - [認証] を選択します。

『認証者の選択』画面が開きますので、サーバと認証者 ID を選択しします。

認証者 ID のパスワードを入力すると『認証する ID の選択』画面が表示されます。今回は、自分自身の認証者 ID を認証するので、もう一度同じ認証者 ID を選択します。

続いて、『ID の認証』画面が表示されます。認証者リスト欄は、英字の認証者名が表示されています。ここに日本語認証を追加するので、[追加] ボタンをクリックします。


『組織名の別名を指定』画面が表示されるので、言語に”日本語”組織名に設定したい名称を入力します。

『ID の認証』画面に戻ると認証者リストに日本語の認証者名が追加されています。

[認証]ボタンをクリックすると再認証が行われます。ステータスバーに『認証しました。』と表示されれば、再認証完了です。


再認証結果の確認

右のツールメニューより、[認証] - [ID のプロパティ] を選択し、先ほど再認証した ID ファイルを指定します。

『ID プロパティ』画面が表示されるので、[ユーザー情報] - [名前] タブを開きます。日本語の別名が設定できていることが確認できます。


前回 DJX の導入 次回

2023/06/13

DJX の導入 #2)DJX の管理者の設定

DJX の管理者になるユーザの権限設定について整理します。


DJX 管理者グループの作成

作成した DJX のデータベースの ACL を確認すると DJXAdministrators とグループが管理者で登録されています。このグループのメンバーが DJX の管理者となる設計となっています。

ドミノディレクトリにこのグループを作成し、実際に DJX の管理を行うユーザを登録しておきましょう。


ドミノディレクトリの ACL

DJX では、ドミノディレクトリの更新を行いますので、ドミノディレクトリの ACL の設定が必要です。 DJXAdministrators グループに対して、管理者の権限と4つのロールを付与します。

  • [GroupCreator]
  • [GroupModifier]
  • [UserCreator]
  • [UserModifier]


エージェントの実行権限

DJX ではエージェントを使用します。ドミノディレクトリのサーバ文書でエージェントの実行権限を制限している場合には、DJXAdministrators グループに対して、実行権限を与えてください。

必要な権限は以下の2か所です。


その他 の管理DB

DJX では、システム管理要求(admin4.nsf)と認証ログ(certlog.nsf)にもアクセスするようです。LocalDomainAdmins グループに登録されていないユーザを DJX 管理者とする場合、注意が必要です。

特に、認証ログ(certlog.nsf)は、デフォルトの ACL は ”なし” となっているので、DJXAdministrators グループに作成者権限を付与してください。

システム管理要求(admin4.nsf)はデフォルトが作成者ですので作業は不要です。


前回 DJX の導入 次回

2023/06/11

DJX の導入 #1)アプリの作成と設定

現在利用しているDJX(Domino Japanese eXtension)環境は、ずいぶん前に導入した環境を使い続けています。そんな背景から、セットアップ方法をすっかり忘れてしまいました。復習を兼ねて、改めてセットアップして記録にとどめておこうと思います。


アプリの作成

まずは、DJX で使用するデータベースの準備です。以下の2つの DB を新規で作成します。

  • DJX 管理ツール
  • DJX 管理データベース

管理ツールと管理データベース... なんだかわかりにくいですよね。”ツール” と ”マスタ”にしてくれた方がよかったのでは、と思います。

それはさておき、新規で作成するアプリのテンプレートは日本語ランゲージパックを適用した環境であれば、インストールされています。テンプレートを使用して、データベースを新規作成します。



ドミノディレクトリとメール

DJX を使用して登録した日本語のユーザ名を活用するためには、ドミノディレクトリとメールの設定を DJX 用の設計にします。それぞれテンプレートが用意されていますので、設計を置換してください。



DJX の導入 次回

2023/06/07

ドミノサーバはプログラムディレクトリを消費することもある!?

以前体験したことのある話をします。

本件のトラブルシュートは私が担当していなかったので、そこから得た事実と教訓だけ整理します。


そのドミノサーバは、Windows系で、プログラムディレクトリが C ドライブ、データディレクトリが D ドライブで運用していました。

ある日、C ドライブの空き容量が 0 になる現象が発生しました。

原因は Domino ダンプファイルと呼ばれるものが出力されているためでした。このダンプは、JVM メモリの問題を検出すると自動生成されるのですが、その出力先がなんとプログラムディレクトリだったんです。

作成されたダンプファイルは約 10 GBもありました。経験上、プログラムディレクトリは、OS と同じ C ドライブにすることが多いと思います。増える前提ではないので、空き容量は 100GB にも満たないのではないでしょうか?

数回見逃せばCドライブは枯渇する可能性が出てきます。


ちなみに、そのサーバは HTTP タスクを起動しておらず、JAVA エージェントも存在しませんでした。JVM を使用していたのは、意外にもドメイン検索のサーバタスクでした。


この問題を経験して、『サーバ監視は省力化すべきでない』と悟りました。

サーバの用途を理解していたので、データディレクトリがある D ドライブだけを監視していたのです。用途はわかっていても、動作は知らなったという、知ったかぶりが根本原因といえるかと思います。

ちょっと省略したからと言って、大した効率化にはなりません。監視業務はもっとブラックボックス的に行うべきだったということですね...

2023/06/04

Notes - Excel 連携:#11)グラフの作成

Excel とせっかく連携するなら、Notes が苦手とするグラフを作成させたいですよね。これからしばらくは、Excel グラフの操作に関して整理します。

グラフを作成するには、Shapes オブジェクトの AddChart2 メソッドを利用します。

Shapes.AddChart2 メソッド (Excel)

Sub Initialize

Dim oXls As Variant
Dim oSheet As Variant
Dim oShape As Variant

'Excel の準備
Set oXls = CreateObject("Excel.Application")
Call oXls.Workbooks.Add
Set oSheet = oXls.Workbooks(1).WorkSheets(1)

'サンプルデータのセット
Call xSetSampleData(oSheet)

'グラフの作成
Set oShape = oSheet.Shapes.AddChart2(, 4, 200, 1, 500, 200)

oXls.Visible = True

End Sub

※ サンプルデータをセットする関数は後述


このコードを実行すると以下のようにグラフが表示されます。簡単ですね!

ただ、グラフの設定はすべてExcelが自動で行っており、タイトルは表示されていませんし、横軸のラベルは見ずらいです。”とりあえず”なグラフとなって美しくないですよね。

よりよいグラフとなるよう、少しずつ調整しましょう。


サンプルデータをセットする関数

サンプルデータを準備したり、初期登録するプログラムを作成するのも面倒ですし、毎回同じデータとなるのは面白くありません。

そこで、Rnd()関数で乱数を発生させ、動きを持たせています。乱数は、-3 ~ 6 までの範囲で生成していますので、右肩上がりのグラフになる算段です。

Function xSetSampleData(voSheet As Variant)
Dim i As Integer
Dim vDT As Variant
Dim iUsr As Integer
Dim iVal As Integer
Dim iMax As Integer

'列フォーマットの設定
voSheet.Columns(1).NumberFormatLocal = "yyyy/m/d"
voSheet.Columns(2).NumberFormatLocal = "#,##0_ "
voSheet.Columns(3).NumberFormatLocal = "#,##0_ "

'ヘッダ行のフォーマット設定
voSheet.Rows(1).NumberFormatLocal = "@"

'カラム名称の設定(ヘッダ行)
voSheet.Cells(1, 1).Value = "日付"
voSheet.Cells(1, 2).Value = "ユーザ数"
voSheet.Cells(1, 3).Value = "増減"

'サンプルデータの設定
Randomize
iMax = 30
vDT = Today - iMax
iUsr = 100

For i = 2 To iMax + 1
vDT = vDT + 1
iVal = Int(Rnd()*10) - 3
iUsr = iUsr + iVal
voSheet.Cells(i, 1).Value = vDT
voSheet.Cells(i, 2).Value = iUsr
voSheet.Cells(i, 3).Value = iVal
Next
End Function

余談ですが、乱数と言っても本当の意味にで乱数ではないそうです。一般に乱数テーブルを参照し順に値を返す仕様と聞いたことがあります。乱数発効前に実行している Randmize はシステム時刻(タイマー)を使用して、乱数テーブルの読み方を指示する命令で、これにより、”ほぼ”乱数を発生しているということだそうです。

前回 Notes - Excel 連携 次回