ページビューの合計

2019年9月5日木曜日

タイムレコーダーアプリ、改築

This time, I am remodeling the time recorder app that I created before.

みなさま、こんにちは!!
しばらくあいてしまいましたが、決してサボってるのではないですよ(汗

社内のインフラリプレイスや、取引先との各種EDI関連の作業におわれてまして、実はV11のベータ版の準備もできてない状態です(大汗


ということでまずはご案内から・・・。
気が付けば、もうスタートの東京開催(9/18)まで2週間を切りました。

そう、Notes/Domino Solution 2019 です。

HCL社様からもさまざまな情報が出てきつつあり、Notes/Dominoに関わる方は参加必須のイベントです!

私は東京以外の4か所へ参加予定ですので、皆様とお会いできる日を楽しみにしております!



さてそんな中、以前掲載しました弊社のタイムレコーダーアプリを見直す必要が発生しましたので、簡単に紹介させて頂きます。

以前のアプリはこちら・・・

https://www.tanuchi.com/2017/01/1.html


今回の発端としては主にふたつ。


  1.  現在のアプリでは「出社」「退社」の打ち間違いが多い。また押したか不安になり、二重打刻もみられる
  2. 従来打刻していなかった管理職についても、実務把握のため打刻することになった
です。

1については、何かしら仕組みで回避できないか(時間によるボタンの非表示など)考えたのですが、完全に制御してしまうと問題がありました。また出社してないのに退社するなどの制御も考えたのですが、実務上そのようなパターンもあり得るため、これも不可。

ということで2を付け加えるにあたり、従来の入り口を大きく見直すことにしてみました。

ちなみに従来の入り口はこちら



いずれかをタップすると、部署一覧が表示され、自分の部署をタップし、さらに自分の名前をタップすることで打刻されます。

そこで今回の入り口は以下のように変更しました。


個人名の50音を選択するようにしました。
私の場合は「は」をタップし、

自分の名前をタップすると、


このように[出社]と[退社]が選べるようになっていますので、いずれかをタップすることになります。

ちなみにタップしますと、



このようにメッセージを表示します。
大きくしますと、


こんな感じです。

これで正しく自分の打刻ができたこと、また出社・退社のミスは減るのではないかと・・・期待してます・・・

さてこの構築なのですが、今回急を要したため・・・


このように大量のXPageを作成し、リンクさせることで動いています。
要は各行ごとのページと一人1ページという構成です。

もちろんコピペで多少手間はかかりますが、安定した作成はできたました。が!!、やはり納得できない。

おそらく一般的なプログラマーでしたら、スコープ変数を用いて、個人のランディングページはひとつにするというのがスマートな方法ではないかと考えています。


ということで・・・時間が取れましたら勉強します(汗

2019年7月17日水曜日

#LIVENESS #AccessView V1.04

This time, the latest version of LIVENESS AccessView v1.04 has been released, so I would like to look at the update procedure and new features.

みなさま、こんにちは!!

まずは告知から・・・。
今年の9月から10月にかけて、全国5都市にして Notes/Domino Solution 2019 が開催されます。
私も現時点では4ヶ所に参加させて頂く予定です。
まさに今日から参加申し込みが開始されましたので、ぜひ早めにお申し込みください。
こちらから申し込むことができます!
皆様とお会いできる日を楽しみにしております!!

さて本題です。
今回は先日紹介致しましたLIVENESS AccessViewの最新版 v1.04 がリリースされましたので、アップデートの手順と新機能について見ていきたいと思います。

まずは配布される一覧です。


基本的には前回と同じですね。
・ユーザーガイド
・テンプレート(.ntf)
・フックドライバ

から構成されています。

手順ですが、まずはDominoサーバーにフックドライバを上書きインストールします。
前回同様、Domino関連サービスを停止した上で実行してください。

続いてテンプレートの差し替えです。
ntfのファイル名が前回と同一であったため、念のため上書きするのではなく、今回のファイル名の後ろに"_v104"を付けて、DominoのDataディレクトリにコピーし、管理者IDで署名します。

続いてこちらも以前作成しました「LIVENESS AccessView設定アプリケーシヨン」を右クリックし、[アプリケーション]→[設計の置換]をクリックします。
アプリケーションの設計を置換ダイアログが開きますので、先ほどの[ls_accessview_104.ntf]を選択して、[置換]を行います。


以上でアップデート作業は完了しました。
簡単ですね!!


続いて新機能について見ていきます。

まずはアプリケーションの登録画面です。

以下のように、以前にはなかった[選択タイプ]という項目が追加され、ディレクトリ単位での設定が可能となりました。


選んでみますと、ディレクトリに"¥"、タイトルに"¥*"が表示されます。
※ブログの仕様により、¥は全角文字とさせて頂いておりますので、ご了承ください。



今回はData内の"test"というディレクトリを設定してみます。


単一データーベースの時には表示された条件式の[選択]ボタンが表示されません。
手入力で単独フォームを選択[Form = "フォーム名"]を指定しても、取得フィールドの[選択]ボタンは表示されませんでした。

つまり、いずれもあらかじめ確認しておき、手入力で設定する必要があるようです。

以上のことから、ディレクトリで選択する場合は、その中に雑多なアプリケーションがあるようなものではなく、同一テンプレートから展開した複数アプリケーションを束ねたディレクトリの場合、有効であるようです。
例えばメールはディレクトリを分けている場合が多いようですので、Mailフォルダを指定して設定することで、必要な情報がまとめて収集できるようになりそうです。


次に一括登録の機能です。
メニューの[一括登録]ボタンをクリックすると、以下のような画面が表示されます。


こちらの詳細はユーザーズガイドに書かれているのですが、所定フォーマットのcsvファイルを作成し、この機能を使って呼び出すことで、一度に複数の設定が登録できるというものです。

たくさんのアプリケーションを登録する場合は便利ですね。


次に無効化ユーザー指定機能です。
こちらはログの対象から特定ユーザーを除外するというものになります。


サーバーIDを設定することで、エージェントによるログを書かなくするなどに有効なようです。


個人的にはこの「無効ユーザー設定」が非常にありがたい機能と感じております。
ディレクトリについても便利な機能なのですが、現状の弊社環境ではディレクトリ構成が不十分なため、こちらは今後修正していこうと思います。


さて今回はLIVENESS AccessView v1.04 を見てきましたが、メーカー様によると既に更なるバージョンアップも予定しているとの事。
構想を少し伺いましたが、ここでは伏せておきます。
さらにすばらしい機能追加が予定されているようですので、楽しみにお待ちください。

なおLIVENESS様も先のNotes/Domino Solution 2019のゴールドスポンサー様ですので、各地に参加いただけるかもしれません。詳しい説明が必要でしたらぜひその際にでもお声がけください!!

2019年7月11日木曜日

個人設定で #フォーム の色を変更する

This time, I tried to set the color of the FORM for each individual, so I introduce it.

みなさま、こんにちは!!
ついに2019年も半分が過ぎました。
巷ではオリンピックチケットがあたったとか、あたらなかったとか・・・
ちなみに筆者は現時点では申し込まず、蚊帳の外でございます。

さてさて、7月ということで我々が大きく関与しておりましたICS部門ですが、ついに大きなプレスリリースが行われました。


ということで、2年連続で任命頂きましたIBMチャンピオンの称号も残すところあと半年ということになりました。
HCL社でも引き続きそのような任命制度がとの噂もありますので、そのような場合はなんとかトライしたいものです。

本題に入る前にまずは告知を・・・
Notes/Domino Solution 2019が開催されることになりました。
東京・大阪・名古屋・広島・博多の5都市を廻る一大イベントになります。
多くのIBMチャンピオンが各地に参上し、・・・以降、ヒ・ミ・ツ・・・
ぜひ近隣開催へご参加ください!!


前置きが長くなりましたが、本題です。
昨年行われましたテクてくLotus技術者夜会での今後の製品への要望セッションの中で、私含めたくさんの方が要望されたものに、ノーツアプリケーションのCSS対応というものがございました。
・・・このサイトはどうなるのでしょう・・・

要はデザイン部分について、CSSを適用することで統一化や作業軽減を図るというものになります。
ちなみに今年リリース予定のV11はNotesクライアント側の強化が予定されているという噂です。Designerを使わずにアプリが作れるようになるかも!!

ということで、先の話は置いておいて、今回はよくSaasサービスなどであるような、フォームの色を個人の好みで変更できるようにしてみましたので、記事に致します。

イメージとしては、数種類の色のサブフォームを準備し、ユーザーがその中から色を選択して使うというものです。一度設定した内容は次回以降も引き継ぐよう想定してあります。
なお今回もスクリプトなしで完結させています。

この機能を実現する手順のキーワードは、
[サブフォーム][環境変数]
です。

ということで、早速ですがサブフォームを作成します。
今回は切り替えの試験のみですので、簡単に色違いの4種類のサブフォームを作成しました。

サブフォーム [Black]

サブフォーム [Blue]

サブフォーム [Green]

サブフォーム [Red]

作り方は簡単ですよね。
ひとつ作成して、それをコピー。
罫線と文字の色を変えただけになります。

サブフォームができたら、実際に使用するフォームを作成します。
フォームには環境変数を呼び出す計算結果フィールド[refTheme]とサブフォームを配置します。

まずは計算結果フィールドです。
式には以下を設定して、環境変数[TestTheme]に値があるときはそちらを。なければブランクを表示するようにしてあります。
本来はこちらを非表示にしておくべきなのですが、動きの確認のため表示したままとしてあります。


 THEME:=@Environment("TestTheme");
 @If(THEME!="";THEME;"")



続いてサブフォームです。
[作成]-[リソース]-[サブフォームの挿入]をクリックします。


サブフォームの挿入ダイアログが表示されますので、[式の定義によりサブフォームを挿入]にチェックし、[OK]します。


すると以下のように<サブフォームの計算結果>が表示されますので、こちらの式を設定します。


今回は4つのサブフォームを@Ifのネストで組んであります。
・・・Caseが利用できるともう少し式が綺麗なのですが・・・

 @If(refTheme="Red";"Red";@If(refTheme="Green";"Green";
 @If(refTheme="Blue";"Blue";"Black")))


以上でフォームはできあがりました。

それでは肝心の環境変数をセットするプログラムです。
選択用のフォームを作ってもいいのですが、ダイアログで選択するだけで画面一面を使うのはちょっと・・・ということで、今回は@PickListを使うことにしました。

@PickListのヘルプには、
「指定されたビュー。ユーザーはこのビューで文書を複数選択できます。@PickList は、選択された文書の列の値を返します。」
と書かれています。
またパラメーターの指定により、複数でなく1つしか選択できないようにすることが可能です。

それではまずは@PickListで使用するビューを作らなければなりません。
またその元となるフォームも必要です。

早速ですが、フォームです。
今回は4文書を登録するだけですので、単純にフィールド[Color]ひとつのフォームを作成しました。


こちらをNotesでプレビューし、以下4つの値の文書を追加してあります。
[Black] [Blue] [Green] [Red]

続いてビューです。
こちらも単に1列だけ、先ほどの[Color]を表示するだけのビューを作成します。
わかりやすいように、昇順に並べてあります。


続いてビューにアクションを追加します。
今回は便宜上、このビューしか作成しておりませんので、こちらに[テーマ選択]と[新規作成]のアクションを追加します。
[新規作成]ボタンは、先に作成しましたサブフォームが埋め込まれたフォームを新規で作成する設定を施します。


 @Command([Compose];"theme")



次に[テーマ選択]ボタンです。
こちらには先ほど記載しました@PickListを使用して、選択した値を取得し、環境変数にセットするという式を設定します。


 CHOICE:=@PickList( [Custom] : [Single] ; @DbName ; "Color" ;  "Select a product" ; "テーマカラーを選択してください。" ; 1 );
 @SetEnvironment("TestTheme"; CHOICE )



それでは動きを確認してみましょう。


いい感じですね。
念のため、notes.ini も見ておきます。


最後に設定した[Red]が登録されてますね。

どうせなら左のナビゲーターも・・・と考えたのですが、現在の私の技量では手に負えませんでした。
また何か妙案思いつきましたら、記事に書かせて頂きます。

さて本来ですとここまでの記事なのですが、実はこの機能!!
DMA(Domino Mobile Apps)でも動くんです。


実はDMAの環境変数についてはまだ実際にどのように処理されているのか理解できていません(汗
ただ、iPad内のどこかに保存されているようですので、今後のアプリケーション開発でも有効に利用できることが確認できました。

さて長くなりましたが、今回は環境変数を用いて、サブフォームを切り替える手順を書きました。
内容としては色の変更として記述しましたが、例えば部署ごとにサブフォームの内容を切り替えるなどすることで、部署別のポータルフォームのような使い方もできます。
もちろんほかにも用途があるはず・・・。

難しい式は一切使用していませんので、ぜひ機会あればお試しください!!

2019年6月26日水曜日

#年度 や #期 の取り扱いについて

Treat the fiscal year with Notes.

みなさま、こんにちは!!
いまだ梅雨入りしてない神戸ですが、ようやくそれらしい雰囲気になって参りました。

さて日本企業では売上集計などを年度で取り扱う場合も多いかと思われます。
弊社も例にもれずではありますが、従来はNotesではあまり年度というものを意識することなく利用しておりました。

今回、従来Excelで行っていた、取引先向けの実績収集ファイルをNotes化しようという案件が発生したのですが、その必須項目として以下のように「年度」や「期」、「月」が要求されております。


今まではExcelで行っていたので、蓄積された前行をコピーするなどであまり意識する必要がなかったのですが、Notesでの入力はフォームで行うため、その入力作業を簡素化できればと思ったのが今回の発端です。

目的としては、「納品書発行日付」をカレンダーから選択するだけで、「年度」「期」「月」が計算結果で得られればというものです。

ということで、簡単なフォームを作成してみました。


納品書発行日付[InvoiceDate]は編集可能な日付/時刻としています。
日付/時刻制御にチェックし、年月日のみの表示としてあります。


またフォームのオプションで、「フィールドの自動更新」にもチェックしておきます。


まずは簡単な「月」からです。
こちらは計算結果のテキストとしてあります。
単純に「納品書発行日付」から「月」部分を抜き出すだけです。
※今回はうしろに「月」を付加してあります。


式は以下のようにしました。


 @If(InvoiceDate="";"";@Text(@Month(InvoiceDate))+"月")


If文は、新規作成時にはInvoiceDateがブランクのため、計算結果が得られず、エラーになることを回避させています。
文字列「月」をつなげるため、@Monthで得られた数字を@Textで文字列化しているという、単純なものになります。

次に「期」です。
今回は4~9月の場合に「上」、10~3月の場合に「下」を表示させたいと思います。

こちらも計算結果のテキストとしてあります。


こちらの式は、以下のようにしました。


 @If(Month="";"";(@If(Month="4月":"5月":"6月":"7月":"8月":"9月";"上";"下")))


先のMonthフィールドが「4月」~「9月」であった場合、「上」。それ以外は「下」を表示するというこちらも簡単なIf文になります。
複数条件をまとめるため、各月を「:」(コロン)で接続してあります。

もう少しIf文をネストする必要がありますが、これだと海外のようなQ1~Q4も実現できますね。

それでは最後に年度です。
年と年度の違いは、もちろん12月で終わるか、3月で終わるかです。
問題なのは1~3月が[本来の年]-1される必要があるというものです。
なんて考えていると複雑になってしまうのですが、要は今の日付から3ヶ月引いた時の年(Year)を取得すればいいということになります。

先と同様、こちらも後ろに「年度」の文字を接続させるため、計算結果のテキストとしています。


式は以下としました。


 @If(InvoiceDate="";"";@text(@Year(@Adjust(InvoiceDate;0;-3;0;0;0;0)))+"年度")


こちらも簡単ですね。
InvoiceDateをAdjust関数を用いて、マイナス3ヶ月としたものから年部分を取り出します。
そちらをテキスト化して、「年度」をくっつけているだけになります。

それでは実際のフォームの動きを見てみましょう。

まずは新規作成画面です。


「納品書発行日付」がブランクですので、If文で処理した通り、「年度」「月」「期」のすべてがブランクになっています。
If文がなければ、この新規作成の画面を開くことができません。

それでは本日の日付を選択してみます。


以下は選んですぐの状態です。


フィールドのフォーカスを移動させると、


予定通り、「2019年」「6月」「上」という計算結果が得られました。

それでは今年の10月1日にしてみた場合、どうなるでしょう。


こちらも正しく期は「下」となってくれました。

それでは来年3月31日では・・・


2019年の下期と表示されました。
しつこいようですが、最後に来年の4月1日です。


ちゃんと「2020年度」「上期」になりました。

以上、いまさら取り上げることではないかとも思いましたが、企業として年度ベースでものごとを見ている場合も多いため、記事にしてみました。

2019年5月30日木曜日

#カレンダー から #ics ファイルを添付した新規メールを作成する

This time I tried to create an action button with the following content.
1 Export ics file from Notes schedule
2 Display the new mail creation screen with the ics file attached

みなさま、こんにちは!!
IBM Notes/Domino Day 2019 Springツアー、各地盛り上がったようですね。
某会場では、なぜか申し込み人数より多くの参加者があったとか(笑

国内の注目、活況が証明されたようですね。

さて今回は、以前よりicsファイルのやり取りによるスケジュール追加が便利だと感じておりました。そもそもNotesのカレンダーからicsファイルが生成できるのかすら知りませんでしたのですが、「書き出し」機能のデフォルトに存在していました。


ただしこのicsファイル。基本的に自分のカレンダーには存在しているものであり、メール添付して送付することが主な利用用途になるかと思います。
ということで、自分のスケジュールからicsファイルを作成し、新規メール作成画面を表示させ、あらかじめ添付ファイルとして登録されていれば簡単に送信できるのでは!!?ということで、社内実装してみましたので、その手順をご紹介致します。

やり方は単純で、

①Notesがもっているエクスポート機能を使用して、指定したディレクトリにicsを保存。

②新規メールを作成し、①で保存したicsファイルを添付

となります。

ということで、まずは①のicsファイルのエクスポートです。
今回はメールテンプレートに共有アクションとして追加しました。


式として、以下を記述します(保存先はそれぞれの環境に合わせてください。もちろんファイル名は自由ですが、拡張子は[.ics]にします)
※半角"¥"は本ブログでは "\" になってしまいますので、便宜上全角"¥"を使用してあります。


 @Command([FileExport]; "Calendar File"; "(保存先ディレクトリ)¥¥ical.ics")



エクスポートのテストを行うため、作成した共有アクションを【($Calendar)|Calendar】ビューに追加します。


それではご自身のメールを再設計して、テストしてみます。
※再設計
  手順:メールアプリケーションを右クリックして、[再設計]をクリック
     テンプレートの場所(サーバー)を選択し、[OK]
  注意:メールアプリケーションがテンプレートから設計を引き継ぐにチェック


再設計が完了しましたら、カレンダーを開きます。以下のように[ics export]のボタンが表示されていることを確認します。



早速ですが、登録されたスケジュールのひとつを選択し、[ics export]をクリックします。

以下のように[iCal エクスポート]ダイアログが表示されますので、[選択文書]のまま[OK]します。(すべてをエクスポートする場合は、[すべての文書]を選択してください。)


指定したディレクトリに、ical.icsファイルができていればOKです。



続いての②新規メールを作成し、①で保存したicsファイルを添付の設計です。

新規のエージェント(LotusScript)を作成します。
名前/別名は自由ですが、私は両方に[ics_mail]としました。


こちらに記述する内容は以下となります。
件名や文面は自由に設定ください。


Sub Initialize
Dim session As New NotesSession
Dim db As NotesDatabase
Dim ws As New NotesUIWorkspace
Dim uidoc As NotesUIDocument
Dim doc As NotesDocument
Dim rtitem As NotesRichTextItem
Dim maildb As New NotesDatabase("","")
Dim afile As NotesEmbeddedObject 
Call maildb.OpenMail
Set uidoc=ws.CurrentDocument

Set doc = maildb.CreateDocument
Call doc.ReplaceItemValue("Form","Memo")
Call doc.ReplaceItemValue("Subject","icsファイル送信")

Set rtitem = New NotesRichTextItem(doc,"Body")
Call rtitem.AppendText("スケジュールのicsファイルを添付致します。")
Call rtitem.AddNewline(2)
Set afile = rtitem.EmbedObject( EMBED_ATTACHMENT, "", "(保存先ディレクトリ)¥¥ical.ics")
Call doc.Save( False, False)
Call ws.EditDocument(True,doc)
End Sub


次に、①で作成した共有アクションに、②のエージェントを実行する行を追加します。


 @Command([FileExport]; "Calendar File"; "(保存先ディレクトリ)¥¥ical.ics");
@Command([ToolsRunMacro];"ics_mail")

以上で保存し、再度メールアプリケーションを再設計します。

以下、動きをご覧ください。
※gifファイルを表示していますので、連続再生されています。


宛先を指定し、送信した結果は以下となります。


添付されたicsファイルの中身は、以下のようになっており、問題なくカレンダーに取り込むことが可能です。


以上、今回は少しLotusScriptを使いましたが、思うような動作を得ることができました。
これで社外の方ともスケジュールの共有が少し楽にできそうです。