プログラマーのメモ書き

伊勢在住のプログラマーが気になることを気ままにメモったブログです

Pleasanter 計算式(拡張)とユーザーのタイムゾーンについて

X に投稿したこちらのやつ

を改めて整理して、まとめておきます。

  • Pleasanter 1.4.13.0, Docker 版

なお、 Docker コンテナのタイムゾーンはこちらの記事に書いたように、 postgres コンテナ / Pleasanter コンテナ / Service.json の DefaultTimeZone はすべて Asia/Tokyo を指すようにしています。

準備

まず、準備として、計算式(拡張)と計算式を設定したテーブルを用意しておきます。

サイトの新規作成で新規フォルダを追加し、その中に『記録テーブル』を追加します(フォルダのアクセス権は、全ユーザーが書込可としました)。これに対して、『テーブル管理』で、『エディタ』を選択して、『分類A』と『数値A』および『数値B』を追加します。また、これらの追加した項目の『詳細設定』を使って、

  • 分類A:読み取り専用
  • 数値A:表示名を『金額』
  • 数値B:表示名を『計算結果』、かつ読み取り専用

としておきます。

次に、『計算式』タブをクリックし、『新規追加』を行います。

ひとつは、『金額』を10倍したものを『計算結果』に設定するもの

もうひとつは、計算方法として『拡張』を選び、『タイトル』に『です』と文字列を追加して、『分類A』に設定するもの

としておきます。

こんな感じですね。

あと、計算結果をすぐに確認したいので、『エディタ』で『タイトル』と『金額』に対して、詳細設定から『自動ポストバック』を有効にしておきます。

考えられる組み合わせ

さて、テストする前に落ち着いて考えてみると、以下の 2 つのパラメータが存在します。

  • テナント設定のタイムゾーン
  • ユーザー設定のタイムゾーン

各タイムゾーンの設定値は、『未設定』(空欄)と『 Japan Standard Time 』(以下、 JST と略します)の 2 種類とします。

なので、合計 4 パターンがありそうです。ということで、これでテストしてみます。

テスト:テナント設定のタイムゾーン:未設定

テストで利用するユーザーは、書籍『入門プリザンター』でインポートしたサンプルユーザーになります。これをテストに応じて、タイムゾーン設定を変更して利用しています。

ユーザー設定のタイムゾーン:JST

ユーザー設定のタイムゾーンとして JST を設定しているユーザーでログインします。

この状態で、先ほどのテーブルを開いて、レコードの『新規作成』を行います。『タイトル』と『金額』に適当な値を入力すると、

こんな感じに、『分類A』と『計算結果』に値が表示されます。

一応、このレコードを保存しておきます。

ユーザー設定のタイムゾーン:未設定

次に別のユーザーでログインします。このユーザーのタイムゾーン設定を空欄としておきます。

この状態でさきほどのテーブルを開いて、新規作成を行うとすると

となり、新規作成ができません。

ちなみに、さきほど作成に成功したレコードを開くと、

のように、開くことはできます。が、この状態から『金額』を変更しようとすると、さきほどと同様にエラーが表示されて、更新ができなくなってました。

計算式(拡張)を削除

次に、『テーブルの管理』権限を持つユーザーでログインしなおして、『計算式(拡張)』を削除します。

この状態で、先ほどのタイムゾーン未設定のユーザーログインしなおして、レコードの新規作成を行うと、問題なく開きます。同様に、値を入力すると

『分類A』は計算式を削除したので、空欄のままですが、『計算結果』のほうは正しく求められていることがわかります。もちろん、このままレコードを作成できました。

このことから、タイムゾーン設定が、計算式(拡張)に影響していることが推測されます。

テスト:テナント設定のタイムゾーン: JST

次に、計算式(拡張)を最初と同じ状態に戻しておきます。さらに、テナントの管理を開いて、タイムゾーンを JST に設定しておきます。

この状態にして、さきほどと同じテストを行います。

ユーザー設定のタイムゾーン:JST

これは、さきほどと同じく問題なく、レコードの追加ができました。

ユーザー設定のタイムゾーン:未設定

このケースですが、ユーザーのタイムゾーンが未設定だと、テナントのタイムゾーンが設定してあっても、やはりエラーとなりました。

おまけのテスト:ユーザーのタイムゾーン設定:不正な値

テナントのタイムゾーン設定が JST のまま、ユーザーのタイムゾーンが『? 東京(標準時)』となっている場合を試します。

なぜこのようなユーザーが存在しているかというと、テストの最初のところで書いたように、ユーザーは手作業で追加したのではなく、書籍『入門プリザンター』で利用できるサンプルデータをインポートしたものとなっていました。ユーザーのインポートに使った CSV データを見てみると、

のように、タイムゾーンが『東京(標準時)』となっています。

ここで Pleasanter では下記にあるように、タイムゾーン表記は動作している OS に依存しているようです。

FAQ:プリザンターでサポートしている言語とタイムゾーンのパラメータの設定値を知りたい | Pleasanter

このため、docker (Linux) 版の Pleasanter でこのユーザーデータをインポートすると、 Linux のタイムゾーンの選択肢にない値となるため、上記の画面のように、頭に『?』がついたデータとして表示されたのではないかと思われます。

推測ですが、たぶん、このサンプルデータは Windows 上で Pleasanter を動かすことを(暗黙かもしれませんが)想定しており、このためタイムゾーン表記も Windows 用になっているものだと思われます。

ということで、このユーザーでログインを行い、新規作成を行ってみると、やはり画面下部にエラーが表示されました。

まとめ

ということで、上記の結果をまとめると、少なくとも手元の環境では

  • ユーザーのタイムゾーン設定が未設定または想定外の値だと、計算式(拡張)がエラーとなる
  • ユーザーのタイムゾーン設定が未設定または想定外の値でも、計算式(既定)は正しく動作する
  • 上記の挙動に、テナントのタイムゾーン設定は関係ない

ということになるかと思います。

まあ、ユーザー設定をちゃんとしろ、ってことなんですかね。ご参考までに。