ページビューの合計

2019年2月13日水曜日

ノーツでログオン管理

This time I created an application to record the logon and logoff records in Notes, so I will introduce it.

みなさま、こんにちは!!
USではThink2019が盛り上がっているようですね。
参加されている皆様、ぜひ満喫してきてください。
また戻られましたら、いろいろと情報発信もお願いしますね!!
来週のIBM Notes/Domino Day 2019 Springでのフィードバックも期待してます!

さて今回はログオン・ログオフ時間をノーツアプリに収集することに成功しましたので、記事とさせて頂きます。
※弊社ではクライアントは全員VDIを使用しておりますが、こちらの環境でも使用できることは確認済です。

そもそも弊社では事務所入り口に置いた共有パソコンのブラウザでXPagesで作成したノーツアプリを使ってタイムレコーダー

【第1回】タイムレコーダーアプリ作成~アプリケーションの準備~
以降でご紹介

を打刻していたのですが、労働基準法改正に伴い、さらに管理を強化する必要があることから、何かしらシステムで受けこむよう指示が出ておりました。
もちろんクライアント管理サービスなども考慮したのですが、性能が良すぎて価格的には安価ではないというところがあり、それならばノーツで何かできないかと考えた次第です。

早速ですが、アプリのイメージです。
ノーツアプリそのものは至って簡単です。
フィールドとして、creator,stamp,timeの3項目のみのアプリになります。
timeのみ「作成時の計算結果」として@createdとしています。
残り2項目は「編集可能」になっています。


ビューは単純に日時順と氏名別を作成しています。
以下は日時順のイメージです。



今回のノーツアプリは単純にデータを受けこむだけのものを想定してあります。
文書の作成は curl コマンドから REST を利用してアプリに書き込むこととしてあります。
従いまして、ノーツアプリ側でRESTからアクセスを受け付ける設定が必要です。
こちらについては、御代チャンピオンのブログがたいへん参考になりますので、ご覧ください。

Notes/Domino でREST APIを使ってみよう-前半

curlについては、以下サイトが参考になりました。

IBM Domino REST API 利用ガイド

まずはwindowsでcurlを使えるように設定を行います。

こちらのサイトからcurlがダウンロード可能です。
筆者はWindows 32bit 版をダウンロードして使っています。

ダウンロードしたzipファイルを解凍し、フォルダを【curl】にリネームします。
このフォルダをどこでもいいのですが、今回はCドライブ直下に移動させました。

curlを利用するには、コマンドプロンプトからcurl.exeのあるディレクトリに移動させるだけで使用できます。

今回の場合ですと、


  cd C:¥curl¥bin


となります。


正しく稼動するかは、以下コマンドでHelpが表示されればOKです。


  cd C:¥curl¥help


それではバッチファイルを作成します。
私は以下[logon.bat]と[logoff.bat]を作成し、対象クライアントのC:¥BATCHフォルダに保存しました。

logon.bat

  ECOH OFF
  cd c:¥curl¥bin
  curl -i -H "Content-type: application/json" -X POST -d "{¥"creator¥":¥"%USERNAME%¥",¥"stamp¥":¥"ログオン¥"}" -u "管理者名":パスワード http://サーバーパス/アプリ名.nsf/api/data/documents?form=フォーム別名


curlのオプションについては、私自身理解しきれておりませんので、割愛させて頂きます。
要はcreatorフィールドに %USERNAME% を用いて、ログオンユーザーの名前をセット。stampフィールドに固定値としてログオンをセットするようなイメージです。
timeフィールドは作成時の計算結果フィールドですので、こちらでは操作していません。

logoff.batについては、先の「ログオン」を「ログオフ」にしただけのものを準備します。

バッチファイルの準備ができましたら、弊社ではADのグループポリシーに設定を行いました。
ログオンする全社員を対象にデータを取得することが目的であり、且つログオフ時にバッチを実行させるにはポリシーを使う必要があるためです。

新規でグループポリシーオブジェクトを作成(場所は各企業様で必要な場所へ作成してください)し、グループポリシー管理エディターにてスクリプトを割り当てます。
割り当てる場所は
[ユーザーの構成] - [ポリシー] - [Windowsの設定] - [スクリプト(ログオン/ログオフ)]です。


こちらのログオンにlogon.bat、ログオフにlogoff.batを割り当てます。


続いて、グループポリシーを即時有効にするため、コマンドプロンプトにて以下を実行します。


  geupdate /force


それでは試しにログオンしてみましょう。
ノーツアプリで日時順ビューを開いた画面です。



うーん、ふたつ問題がありますね。
ひとつはスタンプ。「ログオン」と表示して欲しかったのですが、やはり2バイト文字は制限があるようです。
さらに問題は日時。
単純にアプリから新規作成時には作成時の計算結果としてtimeの値が保存、表示されたのですが、RESTから送り込んだため計算が行われず、以下のように文書にtimeの値すらありません。


ということで、まずは簡単なstampフィールドからです。
先のバッチファイルの「ログオン」「ログオフ」を半角で「LogON」「LogOFF」にしてみました。
先のログインした端末をログオフすると、


当たり前ですが、うまく取得できました。

次に日時です。
エージェントでとも考えたのですが、もっと簡単にtimeフィールドもバッチ側から送り込む方法に変更することにしてみました。

先のバッチファイルを以下のように変更します。


  ECOH OFF
  cd c:¥curl¥bin
  curl -i -H "Content-type: application/json" -X POST -d "{¥"creator¥":¥"%USERNAME%¥",¥"stamp¥":¥"ログオン¥",¥"time¥":¥"%date% %time%¥"}" -u "管理者名":パスワード http://サーバーパス/アプリ名.nsf/api/data/documents?form=フォーム別名


念のため、ノーツアプリのtimeフィールドも作成時の計算結果から「編集可能」に変更し、ログオン/ログオフしてみました。


値が取得できました。

使わないですが、フォームです。


こちらもOKですね。
念のため、編集して保存してみたとろ、少しだけ違和感のある動きが・・・


そう、ノーツアプリ側の時刻の表示設定がフォームでは「時分」、ビューでは「一般」になっていたため、保存することで秒が切り捨てられたようです。
ですので、「時分秒」に設定しなおし、正しく得られるようになりました。

ちなみにノーツビューで「表形式でコピー」してエクセルに貼り付けたものがこちらになります。


日時の書式設定は「ユーザー定義 yyyy/m/d h:mm」と認識されているため、集計にも利用できるはずです。



いかがですか?
ログオン/ログオフスクリプトとノーツアプリだけで、ユーザーのログオン/ログオフが記録できるようになりました。

まずは今回の案件がパソコン使用時間の収集という目的であるため、弊社では本アプリを使うこととします。
弊社のような1人SEや専任者がいない会社様などですと、それなりに使えるのではないかと思います。

※¥マークは"/"に変換されるため、全角文字を使用しておりますので、ご注意ください。

0 件のコメント:

コメントを投稿