レコード作成者のユーザーIDや名前を取得したい
Pleasanterの特長として、複数ユーザーで同時にデータの更新ができます。
複数ユーザーで同じサイトを使用していると「ユーザーによって動作を変えたい」「ユーザーの上司だけに閲覧権限を付与したい」といった要件が出てきました。
そのためには、ユーザーを特定する必要があるので、そのユーザーIDや名前ってどうやって取得すれば良いか調べてみました。
拡張SQL
拡張SQLで取得する時は、以下のように記述したファイルを、WEBサーバールート\pleasanter\App_Data\Parameters\ExtendedSqls以下に拡張子をjsonにして配置したあと、IISを再起動すれば取得できました。
ただ、このままだと取得できるだけなので、実際に利用する時はupdateやinsertで、どこかのテーブルに反映する必要がありました。
{
"Description": "Sample",
"SiteIdList": [2],
"IdList": null,
"OnCreating": false,
"OnCreated": true,
"OnUpdating": false,
"OnUpdated": false,
"OnDeleting": false,
"OnDeleted": false,
"OnBulkDeleting": false,
"OnBulkDeleted": false,
"OnImporting": false,
"OnImported": false,
"CommandText": "select creator from items where ReferenceId = {{Id}}"
}
##拡張スクリプト
前提条件
拡張スクリプトを使用して、ユーザー名を取得したものを任意の項目に反映させるには、私が構築した環境では、以下のパッチがあたっていなかったので、事前に当てておく必要がありました。
https://github.com/Implem/Implem.Pleasanter/commit/6a0472233fac596fca9322a7e0f59930205d5c1d
どうやって取得するか…
バージョンアップによって、以下のコードで取得できるようになりました。
var UserId = $("#UserId").val();
以前は、以下のような方法で取得していました。
ユーザー名を取得したい時にはいまでも有効なので、参考の為に残しておきます。
新規作成ページを開き、HTMLソースを眺めていたら、新規作成時に作成者の名前とIDが担当者欄に設定されていたので、これを取得しました。
var txt = $('[name=Results_Owner] option:selected').text();
var Id = $('#Results_Owner').val(); // ユーザーID
$p.set($('#Results_DescriptionA'), txt); // ユーザー名を設定
$p.set($('#Results_NumA'), Id); // ユーザーIDを設定
拡張スクリプトを新規作成時のみに実行させるため「出力先」の「全て」の、チェックボックスのチェックを外し、「新規作成」のみにチェックを入れるようにしました。
以上で、説明Aにユーザー名、数値AにIDが入力されました。
まとめ
分かってしまえば、どうということはないのですが、拡張SQLも拡張スクリプトも作成者のユーザーIDや名前を格納している変数が用意されていないので、以上のようにして取得する必要がありました。