2020年10月11日日曜日

サービス実行後に実行するプログラムを登録する

今回のテーマは、タイトルは違いますが前回のエントリと同じです。

前回のエントリでは、REST API の戻り値が複数ある場合に HCL Domino Volt のページ上にある表へセットする方法について紹介しました。REST API が戻した JSON の値を Volt のフォーム上の表へセットするために、フォームのイベントへ「サービス構成」を行うものです。

前回のおさらいをすると、REST API が返す JSON は次に示すような構造でした。

{
  "results": [
    {
      "formatted_address": "値(住所)",
    },
    ・・・
  ]
}

この JSON から "results" という配列にあるオブジェクトから "formatted_address" というキーの値を取り出しました。"results" は配列なので、複数のオブジェクトが存在する場合があります。

今回扱う JSON は次に示すとおり、配列の中にあるオブジェクトの中にさらに配列がある「入れ子」構造です。

{
   "Feature": [
      {
         "Property": {
            "WeatherList": {
               "Weather": [
                  {
                     "Type": "observation",
                     "Date": "202009212320",
                     "Rainfall": 0
                  },
                  ・・・
               ]
            }
         }
      }
   ]
}


ただし今回扱いたかった JSONでは、上位の配列 "Feature" にはオブジェクトが1つだけ存在し、そのオブジェクトの中の配列 "Weather" は複数のオブジェクトを持つ、という約束があるようでした。
下位の配列のオブジェクトにある Type, Date, Rainfall の値を Volt の表で表示したいのです。


REST API が返す JSON に配列の入れ子(配列の中に配列)が存在し、かつ最下層の配列から値を取得したい場合、現状の Volt では表の中に表を作るなどして、入れ子の階層をレスポンスの配列階層と合わせなければ「サービス構成」による構成中に「割り当てが無効です。ソースとターゲットは祖先と同じ数のリスト(または表)を持つ必要があります。」(下図赤枠)と表示され、構成できません。


そこで試してみたところ、表の中に表を作ることは可能でしたので、なんとなく入れ子の表を作ってみました。

下位の表には列として3つの単一行エントリを配置しています。


するとサービス構成で割り当てすることができました。 ただし、構成した後にプレビューしてみると、入れ子構造の表を表示することができません。


現状では JSON で入れ子の配列の値を取得できても、それを Volt の表で表現することができないようでした。


このことをサポートへ報告したところ「入れ子にされた表の表示を現状サポートしていない」(※2020年9月の話です)とのこと。

食い下がってなんとか表示する方法について聞いてみたところ、奥の手のような回避策をご提案いただきました。

今回はその回避策をご紹介します。


実は、「サービス構成」で入れ子の表(にあるフィールド)へ割り当てた場合、表示はできませんでしたが、値は割り当てたとおりにセットされていたのです。


この回避策は「サービス構成」によって入れ子の表に値がセットされていることを前提としていますが、「サービス構成」で作成したサービスが終了したタイミングで、次のようなプログラムを実行する、というものでした。

  1. 「サービス構成」で取得できた値を表から取り出しながら
  2. <table>...</table>等のHTMLタグを付加して加工した文字列を作成
  3. 作成した文字列をHTMLフィールドへセット


まずは「サービス構成」で定義した処理の終了後に実行するプログラムです。

var srv = form.getServiceConfiguration( "SC_ServiceConfig0" );
srv.connectEvent( "onCallFinished", function( success ) {
  if ( success ) {
    var s = app.getSharedData().printTable( BO.F_Table1 );
    form.getPage( "P_NewPage1" ).F_HTMLArea1.setContent( s );
  }
});

ここで "SC_ServiceConfig0" は、onShow イベントで「サービス構成」を設定する際に「4.詳細」タブに指定したIDです。ここではIDにデフォルト値として設定されていたものを使っています


このサービスに onCallFinished というイベントを設定しています。onCallFinished を設定することで、サービス構成で設定した処理の終了時に任意の処理を実行することが可能になります。

サービス構成で設定した処理が正常に終了した場合(if (success) の部分)に実行するプログラムとして、printTable を指定しています。printTable の頭についている "app.getSharedData()." ですが、これはフォーム上にある「カスタムJavaScript」を定義したり呼び出す場合に使います。ここで呼び出しているプログラムが次に示すプログラム printTable です。このプログラムを記述するために app.getSharedData() を使っています。

プログラムの引数 "BO.F_Table1" ですが、F_Table1 は入れ子の表の上位階層にある表のIDで、その頭についている BO は Business Object の略のようです。

プログラム printTable を実行すると HTML の文字列を返します。

その HTML 文字列をページ( "P_NewPage1" )にある HTML エリア( "F_HTMLArea1" )へセットします。※HTML エリアとはパレットの「特殊」にある 「HTML」を指します(下図)


以上のプログラムと次に示すプログラムを、フォームの onLoad イベントに記述しています。


以下は、表から値を取り出しながら HTML を生成するプログラムです。入れ子の表に対応するため再帰的に呼び出し可能な関数になっています。

app.getSharedData().printTable = function( table ) {
  var s = "<table width='90%' cellpadding='0' cellspacing='0'>";
  for(var i = 0; i < table.getLength(); i++) {
    var row = table.get( i );
    s += "<tr>";
    var ol = row.getChildren();
    for( var j = 0; j < ol.getLength(); j++ ) {
      var f = ol.get(j);
      if( f.getType() === "BusinessObjectList" ) {
        var innerS = app.getSharedData().printTable( f );
        s += innerS;
      } else {
        s += "<td>";
        var v = f.getValue();
        s += v;
      }
      s += "</td>";
    }
    s += "</tr>";
  }
  s += "</table>";
  return s;
}

以上のような奥の手を使うことで実現した結果が下図にある7行3列の(Volt アプリなのに Volt アプリっぽくない)表です。


今回のように REST API が返す値を加工して表示したい場合に使えそうです。

ノーコード/ローコードのツールでここまでやるのもどうかと思いますが、JavaScriptで作りこみたい場合にこちらのドキュメントが参考になると思います。

2020年9月22日火曜日

REST API で取得した値を Volt の表へセットする

先日のノーツコンソーシアムのアプリ開発研究会で取り組んだ、Web API で取得したjson 配列の値を Volt のフォームに追加した表へセットする方法についてご紹介します。

使用する Web API は Google のジオコーディング API です。この API を使うには API キーが必要なのですが、キーを入手する方法についてはこのあたりのページが参考になるかと思います。

APIキーを入手できたら、次のURLへGET要求します。

https://maps.googleapis.com/maps/api/geocode/json?language=ja&latlng=<緯度>,<経度>&key=<APIキー>

※出力フォーマットとして json を指定します
※表示する住所を日本語にしたいので language=ja を追加しています

仮に、取得した位置情報が自由が丘駅ホーム、入手したAPIキーが "abcd1234" とすると、URLは次のようになります。

https://maps.googleapis.com/maps/api/geocode/json?latlng=35.60869829275,139.66870970056&key=abcd1234

まっとうなAPIキーをセットしたURLの場合、ブラウザのアドレス欄へ指定すると、REST API のレスポンスが表示されます(下図)。

この json から住所を取得したいのですが、位置情報から取得できる住所が複数の場合があります。上の図では縦スクロールバーのサイズから察するとおり複数の住所が取得できました。

このような複数の値が戻ってくることが分かっている値を Volt のフォーム上に表示したい場合、表を使用すると便利です。戻り値の数に応じて行数が自動で変化しますので、戻り値の数が10あれば、表に10行の住所を表示してくれます。

さて今回 json から取得する値は、results という配列にある formatted_address の値とします。

formatted_address をVolt の表の列に割り当てていきます。

今回も HCL社が用意している Application Sandbox を利用してアプリケーションを作成していきます。こちらはライセンスを持っていない方でもアカウント登録さえ行えば利用できますので、Domino Volt での開発を試してみたい方にお勧めします。

開発の流れは次のとおりです。
  1. 新規アプリケーションの作成
  2. 表を追加
  3. 列を追加
  4. イベントとサービス構成を追加
では始めます。

Sandbox にログイン後 Volt の初期画面から「新規アプリケーションの作成」をクリックします。「白紙から」を選択して[次へ]ボタンをクリックします。アプリケーション名を「住所リスト」として[作成]ボタンをクリックします。

ページに表を追加します。画面左側のパレットから「特殊」にある「表」をクリックします(ダブルクリックすると複数の表が追加されますのでシングルクリックしましょう)。するとページ内に表が追加されると思います。表をページ内の任意の場所へ追加したい場合は、「特殊」にある「表」をドラッグして、ページ内の任意の場所へドロップするほうが便利かもしれません。

この表へ列を追加します。今回は住所だけを表示したいので1列だけ追加します。画面右側の「アウトライン」から「ページ1」の左にある > をクリックすると下に表示される「表」をクリックします。画面左側のパレットから「フィールド」にある「単一行エントリー」をクリックします。すると表に単一行エントリーが追加されると思います。表内に追加された単一行エントリーで太字で「単一行エントリー」と表示されている文字をクリックすると文字を編集できますので、これを「住所」と書き換えます。この「住所」が列のタイトルとして表示されます。

列を追加したら、ここで列幅を(デフォルトは「10文字」と狭いので)調整します。列幅は表のプロパティーから編集できます。画面右側の「アウトライン」から「ページ1」をクリックします。そして画面中央の表の右上に表示される歯車アイコン(カーソルを持っていくと「表プロパティーの編集」と表示されます)をクリックします。

「「表」プロパティの編集」ダイアログが表示されたら、その上部にあるメニューから「拡張」をクリックして、「オプション:」にある住所列の「幅(概略値)」の値を 500 までの適当な数値に書き換えます。書き換えたら[OK]ボタンをクリックしてダイアログを閉じます。

次にフォームへイベントを追加します。画面上部のメニューから「イベント」をクリックして、画面左側の「フォーム・イベント」欄の下にある[追加]というリンクをクリックします。

するとイベントのリストが表示されます。ここから onShow をクリックします。

すると onShow イベントの編集画面が表示されます。「事前定義アクション」にある「サービスの呼び出し」にチェックを付けます。すると「サービス構成の追加/編集」というリンクが現れるので、これをクリックします。

「サービス構成」というダイアログが表示されますので、ここから「API のレスポンス」と「フォーム上のフィールド」の割り当てを設定します。まずは「URLを入力」を選択します。自由が丘の位置情報とAPIキーを含むURLをURL欄へ入力します。ここでURL欄の右側にある歯車アイコンをクリックします。

「サービスの詳細」ダイアログが表示されます。ここではフォーム上のフィールドから取得可能な値をURLの各パラメータへセットしたい場合に、フィールドと紐づけさせたいURLパラメータを指定することができます。今回はURLにある3つのパラメータ「言語(language)、緯度経度(latlng)、,APIキー(key)」はどのフィールドとも紐づけしません。そのため、この画面にある「割り当て可能」についた3つの青いチェックボックスをクリックしてチェックを外した状態にして、[OK]ボタンをクリックします。※下図はチェックを外す前の状態です

「サービス構成」画面に戻ったら、その画面上部にある「3.出力」をクリックします。ここで「2.入力」をスルーするのは、フォーム上のフィールドとURLパラメータを紐づけしないからです。「3.出力」では戻ってきた json の項目("ソース"と呼びます)を、フォーム上のフィールド("ターゲット"と呼びます)へ割り当てます。画面左側の「ソースの選択」から "results" の左にある > をクリックして展開し、"formatted_address" をクリックします。するとクリックした文字が太字に変化します。続いて画面右側の「ターゲットの選択」から”表”の左にある > をクリックして展開し、"住所"をクリックします。こちらもクリックした文字が太字に変わります。"formatted_address" と "住所" の両方が太字になっている状態で、その中間にある[出力の割り当て]ボタンをクリックします。

すると画面下部の「割り当てられている出力」欄へ追加されます(下図)。[OK]ボタンをクリックして「サービス構成」ダイアログを閉じます。




以上で(見た目はさておき...)機能としては完成です。

画面右上にある[保存]ボタンをクリックして、その左にある[プレビュー]をクリックします。すると下図のような感じで表示されると思います。

この表には5行しか表示されておらず、縦のスクロールバーも表示されていませんが、実は戻り値は12個存在しました。表の上でスクロールの操作を行うことで、表示されていない残りの行も見ることができました。

今回は API の実行タイミングを「フォームを表示したとき」としたかったので「フォームのイベント」にサービスを構成しましたが、例えば、フォーム上にボタンを設置して、ボタンをクリックしたタイミングで API を実行したい場合は、今回と同様のサービス構成をボタンの onClick イベントへ追加することになります。

また今回構成したサービスでは「2.入力」をスルーしましたが、フォーム上に緯度経度のフィールドを用意することで、それらの値をURLパラメータに代入するといったサービスにしたい場合は「2.入力」の画面で設定することになります。

【配列の入れ子に注意しましょう】
REST API の戻り値にある配列の値を表へセットする場合、配列の構造に注意が必要です。今回の REST API では対象となりませんでしたが、「配列の中に配列がある」といった構造の場合は「フォームの中に追加した表の内側にさらに表を追加する」といったように、ソースの入れ子構造にあわせてターゲット側も入れ子構造にしなければサービスを構成することができません。しかしながら現状の Volt は入れ子の表を作ることはできるものの表をそれっぽく表示することができません。そのため取得した値を表示することができないのです。この問題をサポートへ報告したところ回避する手段を教えてもらうことができましたので、機会があれば紹介したいと思います。

2020年9月11日金曜日

パブリックアクセス権限とパブリック文書

昨晩は仕事終わりに「のの会」に参加しました。 

以前の「のの会」で、読者フィールドと作成者フィールドについてお話ししたところ、パブリック文書についてのリクエストがありました。

パブリック文書は、アクセス制御リストの画面(下図)に表示されるワードです。


今回はご要望にお応えして標記のテーマでお話しました。

内容は次のスライドにまとめています。


スライドには、実装方法とメールデータベースでの設定に加え、読者フィールド/作成者フィールドと共存した場合の挙動の検証結果をクイズ形式で記載しています。
※検証にはバージョン11.0.1FP1のNotes/Dominoを使用しています

クイズの全問正解者は(検証中の私を含め)今回の「のの会」会場には現れませんでした。

パブリックアクセス権限とパブリック文書について、みなさんは正しく理解されていることと思いますが、もしご興味がありましたらクイズにもチャレンジしてみてください。

2020年8月22日土曜日

資料をアップしました「初めての HCL Sametime」

2020年8月度の「のの会」の翌日から夏季休暇をいただいたこともあってすっかり失念しておりましたが、お話しましたことを SlideShare へアップしました。 資料公開までの間に Sametime 11.0 FP2 のリリースがありましたので、資料を少し加筆修正しました。 これから Sametime に触れる方の参考になれば幸いです。

2020年8月20日木曜日

JSON から目的の値を取り出す(2)

 以前のエントリで JSON にある配列の最初の要素から特定の項目の値を取得するコードを書きました。

今回は、配列にあるすべての要素から特定の項目の値を書き出すコードをご紹介したいと思います。


JSON 今回扱うJSON文字列ですが、 results という配列に1つ以上(以下の例では3つ)の要素があり、それぞれの要素に address1 から address3 までの項目があるものとします。


{
 "results": [
  {
   "address1":"a-1",
   "address2":"a-2",
   "address3":"a-3"
  },
  {
   "address1":"b-1",
   "address2":"b-2",
   "address3":"b-3"
  },
  {
   "address1":"c-1",
   "address2":"c-2",
   "address3":"c-3"
  }
 ]
}


ここから address1 から address3 の値を取得するコードは以下のようになります。


Dim JSON As String
Dim nav As NotesJSONNavigator
Dim elm As NotesJSONElement
Dim arr As NotesJSONArray
Dim i As Long

JSON = |{"results": [{"address1":"a-1","address2":"a-2","address3":"a-3"},{"address1":"b-1","address2":"b-2","address3":"b-3"},{"address1":"c-1","address2":"c-2","address3":"c-3"}]}|

Set nav = ss.CreateJSONNavigator(JSON)
Set elm = nav.Getelementbypointer("/results")
Set arr = elm.Value
	
For i = 0 To arr.Size - 1
	Print nav.Getelementbypointer( "/results/" & CStr( i ) & "/address1" ).Value
	Print nav.Getelementbypointer( "/results/" & CStr( i ) & "/address2" ).Value
	Print nav.Getelementbypointer( "/results/" & CStr( i ) & "/address3" ).Value
Next


コードの10行目では、GetElementByPointer メソッドを使い、JSON から要素 results を取得して NotesJSONElement クラスのインスタンス elm を作ります。

ちなみに、ここでは要素 results のタイプが配列であることがあらかじめわかっているので、elm の値を NotesJSONArray クラスのインスタンス arr へセットしていますが、タイプがわかっていない場合は NotesJSONElement クラスの Type プロパティで調べることができます。

下表は type プロパティの値を比較する際に使用できる定数の名前とその値です。
タイプ値(Integer)
Jsonelem_type_object1
Jsonelem_type_array2
Jsonelem_type_string3
Jsonelem_type_number4
Jsonelem_type_boolean5
Jsonelem_type_empty64

話を元にもどします。

JSON の配列の要素の数を知りたいとき、NotesJSONArray クラスのプロパティ Size を呼び出します。配列要素の数が1つなら、Size の戻り値は1となります。

14行目から16行目で "/Results/[配列要素の番号]/AddressX" のようにして、それぞれの要素から値を取り出します。配列要素の番号は、最初の要素が0番から始まるため、13行目では値の範囲を 0 から<Size の戻り値から1を引いた値>までとしています。


2020年7月15日水曜日

GPSセンサーの無いPCでも位置情報を取得できました

HCL Nomad では、端末の GPS 機能を利用して位置情報を取得するための LotusScript のクラスがあります。 

イマドキは GPS センサーが無い PC でもブラウザさえあれば Wi-Fi から位置情報を取得することができるらしいと噂で聞いたことがあります。

ところで先日、ノーツコンソーシアムのアプリ開発研究会に参加して Domino Volt を使ったアプリ開発を行いました。先月は Domino Volt を使ったアプリ開発のハンズオンだったのですが、今月は各自テーマを決めて自習する形式でした。※最近は全員がリモート参加のためグループでの取り組みが困難なのです

私は、Domino Volt ではまだ経験の無い Web API を利用したものにチャレンジしたかったのと、冒頭の「位置情報をGPSセンサー無しに取得する」を組み合わせて、位置情報を住所に変換する「リバースジオコーディング」アプリに取り組みました。

今回初めて Volt アプリを何もないところから作成したこともあり、研究会の限られた時間の中では Web API の部分しか実現できなかったのですが、その後 Domino Volt の Interface object についての Document の中に app.getLocation というコールバックファンクションがあることに気付き、今朝から取り組みました。

コールバックファンクションというのは、情報の取得が終わった後に呼び出される機能といったところでしょうか。

そして app.getLocation を使って取得できた位置情報から緯度と経度を取り出し、フォーム上の入力欄(単一行エントリー)へセットすることができました。

自宅PCでブラウザからこの Volt アプリへアクセスしてみたところ、取得できた緯度経度はGPSの値と大きな違いはなさそうでした。

次の画面ショットは、自由が丘駅のホームで iPhone からこの Volt アプリへアクセスしたものです。住所の精度は未確認ですが「自由が丘」というワードがあるので位置情報が大きくずれていることはなさそうです。
フォームを表示したとき、緯度と経度のデフォルト値をセット

実行ボタンをタップするとWeb APIを呼び出し、レスポンスを表へセット

これを実現するため、次のコードをフォーム「F_Form1」を表示するときに実行される onShow イベントへ設定しています。
var myForm = app.getForm('F_Form1');
var formBO = myForm.getBO();
var highAccuracy = true;
var myCallbackFunction = function (position) {
  if (position !== null) {
    formBO.F_SingleLine4.setValue(position.coords.latitude);
    formBO.F_SingleLine5.setValue(position.coords.longitude);
  }
};
app.getLocation(myCallbackFunction,highAccuracy);
フォームのイベントへカスタムアクションとしてJavaScriptのコードを追加


6行目の「F_SingleLine4」は緯度、7行目の「F_SingleLine5」は経度の入力欄です。フォームを表示すると、現在地の緯度と経度がデフォルト値としてセットされるという仕組みができました。

なお、このアプリをノーツコンソーシアムで用意していただいた Domino Volt 環境で実行すると、きちんと位置情報を取得できるのですが、私個人のPC内にある仮想環境上に構築した Domino Volt 環境では取得することができませんでした。検証できていませんが私の環境は https に対応していないことから、ひょっとすると位置情報を取得するためには https でアクセスできなければならないといったセキュリティ要件があるのかもしれません。

2020年7月2日木曜日

Sametime 関連 nsf ファイル

Sametime のインストールを経験して3ヶ月が経過した頃、管理クライアントを操作していてある事に気づきました。

「タイトルがやたら長いデータベースがある...」

それは Sametime のインストールによって追加された vpuserinfo.nsf というファイルなのですが、そのタイトルがこちらです。

Extended access controls are enabled on this database. You must modify the database on a version 6 or later Domino server.

私は検証環境として Sametime サーバーを2台構築しているのですが、他方のサーバーも同じファイル名になっていました。

ここで Sametime インストールで追加されたファイルのタイトルを見てみると「エラーメッセージか?」と感じるような明らかに変なタイトルが幾つもあることがわかりました。※下図赤枠部分のファイルです
タイトルが明らかに不正なnsfファイル

ファイル名不正なタイトル
 vpuserinfo.nsf Extended access controls are enabled on this database. You must modify the database on a version 6 or later Domino server.
 stauths.nsf You cannot do a remote queue put to a pre-R5 server
 stautht.nsf You cannot administer Enterprise Directories on a pre-R5 server
stconf.nsf  Network protocol error: message from server is too large
 stconfig.nsf Accelerated replica creation cannot be used with an encrypted database
 stcs.nsf Invalid profile 
 stdomino.nsf Cannot close a database within an NSFSearchStart - NSFSearchStop loop that was opened outside of the loop
 stlog.nsf LookupExtended on server %a
 stnamechange.nsf Invalid VJournal property found


こういった事象は Sametime のフォーラム技術情報にも似たような報告がありました。



ところが、これらが私の環境と違う点は、CentOS8 でなく CentOS7 である事と、11.0 から 11.0FP1へのアップグレードではなく 11.0FP1 を新規にインストールしている事です。

そこでサポートへ問い合わせてみたところ、次の事がわかりました。

  • Linux 版 Sametime のインストールで Sametime 用のデータベースを作成する際データベースタイトル設定時にインストーラー側の問題で不正な文字列が入りタイトルにエラーメッセージのような文字列が入り不正になる
  • 技術情報では Sametime 11.0 から 11.0FP1 へのアップグレード時と記載があるがバージョンアップに限定されず、Sametime 11 や Sametime 11.0 FP1 の Linux 版 Sametime サーバー新規インストールの場合にも発生することを確認している
  • Windows 版では発生しない
  • ファイル名が正しいならば Sametime の機能上の問題はない
  • 正しいタイトルをテンプレートが保持しているため、テンプレートがあるファイルについては不正なタイトルは Design タスクが稼働すれば正しい名前に置換される。ただ、データベースの設計の引継ぎが無効にされている vpuserinfo.nsf は管理者が手動で「Sametime User Information」と変更しないと変わらない
つまりは、Design タスクを実行すればほぼ解決、という事なのですが、今回は検証環境という事で、普段は検証後にOSをシャットダウンしてしまうことから夜間に Design タスクが動いていなかったのです。

おそらく本番環境では定期的に Design タスクを実行しているでしょうから、なかなか気付く事は無いかもしれません。


ところで Sametime インストール時に追加されるファイルにはどのようなものがあるのでしょうか。こちらもサポートに聞いてみました。

 ファイル名  概要
 stofflinemessage.nsf オフラインメッセージ(チャット相手がオフラインの時に相手に送ったメッセージ)を格納するデータベース
 stlog.nsf Sametime のログデータベース
 stconfig.nsf Sametime の設定情報を格納するデータベース
 stauths.nsf Sametime SecretKeys を格納するデータベース
 stautht.nsf Sametime のサーバーのホスト名やポート番号を格納しているデータベース
 stdomino.nsf どのユーザーがオンラインであるかを格納する為のデータベース
 stnamechange.nsf Sametime で STNameChange タスクを使用し名前変更機能を使用する際使われるデータベース
 vpuserinfo.nsf ユーザーのコンタクトリストを格納するデータベース
 stcenter.nsf Sametime 8.5.2 まで提供されていた機能のひとつで、Sametime に Web ブラウザからアクセスする場合のホームページ(起点のページ)を表示していたデータベース
 stsrc.nsf Sametime 8.5.2 まで提供されていた Sametime Classic Meeting 機能を利用するための Notes データベース。Sametime 9.0 以降では Classic Meeting 機能が提供されていないので、アクセスが製品側で意図的に禁止されています。
 stconf.nsf Sametime 8.5.2 まで提供されていた機能のひとつで、Sametime Classic Meeting 機能を利用するための Notes データベース
 stcs.nsf Sametime 8.5.2 まで提供されていた機能のひとつで、Sametime Classic Meeting 機能を利用するための Notes データベース
これらのうち次のデータベースは Sametime 8.5.2 までのリリースで使用されていたデータベースで Sametime 9.x 以降、製品としてアクセスが禁止されているとの事。
stcenter.nsf
stsrc.nsf
stconf.nsf
stcs.nsf

上の4つのデータベースは、そのまま運用するか、OS レベルでリネームし NSF ファイルとして認識されない状態にして運用してほしいとの事でした。

また、stcenter.nsf と stsrc.nsf は、Sametime Community Server のインストールでは除外するよう機能改善要望が提出されているそうです。