ページビューの合計

2017年5月22日月曜日

ExcelのデータをNotes文書にするVBA

皆様、こんにちは!!
先週末のテクてくLotus技術者夜会 ザ・大阪編、いかがでしたでしょうか。
私の発表はともかく、他の皆様の内容は非常に興味深いものばかりでした。

近々資料もアップロードされるかと思いますので、参加できなかった皆様もぜひご一読いただければと考えております。

さて今回は前回記載しましたユニバーサルテンプレート アクション編を次回にまわさせて頂き、テクてくにてI様が触れられていたExcel VBAを利用したNotesの運用にヒントを頂き、早速社内業務に適用してみましたので、そちらについて記載させて頂きます。

I様の事例では、ExcelシートにNotesアプリケーションのデータを呼び込むというものでした。
弊社では基幹システムからデータをExcelに呼び出し、CSV化してNotesにインポートするという業務が複数あり、都度colファイルを切り替えながらという手間がありました。

今回はExcelに呼び出したデータをVBAを利用し、Notesの新規文書として保存する手順を記載させて頂きます。
※データ項目数はかなり多いものですが、今回は割愛して紹介させて頂きますので、ご了承ください。

まず従来呼び出していたExcelファイルです。


A列から、部課コード・担当者コード・取引先コード・取引先支店コードの4項目がセットされています。

早速ですが、VBAのコードです。

-----------------------------------------------------------------------------------------
 Public Sub import_notesdb()

  Dim Session As Object
  Dim db As Object
  Dim doc As Object

  Set Session = CreateObject("Notes.Notessession")
  Set db = Session.GetDatabase("サーバー名", "DB名.nsf")
  Set doc = db.createdocument(db)

  doc.form = "フォーム名(別名)"
  doc.フィールド名1 = Range("A1").Value
  doc.フィールド名2= Range("B1").Value
  doc.フィールド名3 = Range("C1").Value
  doc.フィールド名4 = Range("D1").Value

  Call doc.Save(True, True)

 End Sub

-----------------------------------------------------------------------------------------

赤字の部分は貴社環境に合わせて変更してください。
特に難しいコードはひとつもありませんね。

Excelブックを保存し、「import_notesdb」を実行します。
Notesアプリケーションを開くと、インポートされていることがわかります。


文書を開くと、


指定したフィールドに値がセットされています。

とっても簡単ですね!!
今まで苦労していましたので、かなり便利になりました。
また副産物としてCSVデータをNotesに呼び出した場合、先頭の"0"が消えるという現象がありましたが、このVBAではこちらも回避できるようになりました。

あとは複数行のデータを繰り返すように組み替えれば完成です。

従来Notesのインポート操作を一般ユーザーに教えるのは少し難しいところがあったのですが、Excel VBAですと誤った操作をしてしまうことも回避できるため、こちらも大きな進歩になりました。

I様、重要なヒントありがとうございました!!


次回はユニバーサルテンプレートに戻る予定です。

2017年5月15日月曜日

ユニバーサルテンプレート~ビュー①~

みなさま、こんにちは!!
いよいよ今週ですね、
テクてく Lotus 技術者夜会 ザ・大阪編(テクてく大阪)

関西では年1回のイベントです。
今年はライトニングトークということで、私含めたくさんの方が話題を持ち寄って参加致します。
近隣の方は、ぜひご都合つけて現地へ。
また東京でもパプリックビューがございますので、首都圏の方はそちらにご参加ください!!
皆様とお会いできることを楽しみにしております。

さて今回は先日のフォームに続きまして、ユニバーサルテンプレートのビューについて記載致します。
ビューの場合、デザイン部分を除けば、フォームほどの設定項目がありません。

既存の(無題)ビューをクリックし、[F2]キーで名前と別名を変更します。
私の環境では

名前: 一覧
別名: all

としました。

続いてビューの選択式を設定します。
特にテンプレートですので設定の必要もありませんが、実際に作るアプリケーションで複数のフォームを利用することも考えられますので、参考ということで設定致します。

ビューの選択
 [使用フォームにより検索] - [ライブラリ]


続いてビューのプロパティを開き、[スタイル]タブにてデザイン要素を設定します。
加えて未読行の表示色も設定します。


 未読: 赤

また[詳細]タブでも

未読マーク: 標準

にしておきます。

列の内容については、デザイン要素の設定を行います。

また弊社ではビューの行の色を制御して目立つようにしたアプリケーションが結構ありますので、こちらの機能を追加します。

ビューの1列目を選択し、

タイトル: [ブランク]
色で値を表示にチェック
詳細タブで「列を非表示」にもチェック


続いてフィールドの式に以下を設定します。

red := 255:0:0;
blue := 0:0:255;
yellow := 255:255:0;
pink := 255:193:253;
white := 255:255:255;
black :=  1:1:1;
apricot := 255:155:133;
plain:= 0:0:0;
@If (フィールド名!= "***";0:0:0;black:yellow)


この例ですと、「フィールド名」が「***」である場合、
 背景:黒
 文字:黄色
で表示するというものです。
余談ですが、この配色は弊社では「タイガースカラー」として一番目立たせる際の配色パターンになります。

結果の一例では、下記のように表示することができます。


主な色を一時変数に与えておりますので、自由に組み合わせて使用することが可能になります。

残りはアクションバーのプロパティにてデザイン要素を変更します。


以上で非常に簡単ですが、ビューのテンプレートについては完成とさせて頂きます。

もちろん一般的に使う列を先に組み込んでおくことも可能ですが、今回は設定していません。

次回はアクションについて記載する予定です。



2017年5月8日月曜日

ユニバーサルテンプレート~フォーム①~

みなさま、こんにちは!!
ゴールデンウィークも終ってしまいましたね。
弊社ではこの期間を利用し、本社事務所内の床の貼り替えと什器の入れ替えを行いました。
綺麗な事務所で、心機一転といきたいところですが、個人的にはすべて出勤でしたので、ちょっと疲れが・・・。

さて少しネタに困って参りましたので、ユニバーサルテンプレートの整備について、小出しにさせていただこうかと考えております。
そもそも弊社ではアクションボタンや、フォームのフィールド式を保存した「ライブラリ」というノーツデータベースがあり、設計要素をコピーして利用しておりました。
そんな中、昨年のノーツコンソーシアム 大阪研究会にてH様・・・先日公開しましたアプリケーション管理アプリをご紹介頂きました・・・よりまたしても、重要なヒントを頂いたものです。

H様がアプリケーションを新規作成する場合、必ずひとつのテンプレートから作成されるそうです。
そのテンプレートにはさまざまな設計要素が準備されており、コアな部分をそのまま流用するというものでした。
もちろんテンプレートの設計引継ぎは解除して作成することになります。

もっともテンプレートとして用意するか、設計要素をコピーするかの違いではありますが、先般の林様の「Cool で使いやすい Notes アプリデザイン講座」の要素も含めると、テンプレート化した方が使いやすいのではと感じた次第です。

ということで、ブログを書きつつも、実は実際にテンプレートを作りながらというところが現実の姿になります。
ですから、後々に修正や追加は当たり前のように生じることになるはずですので、ご了承ください。

それでは今回はフォームについてご紹介させて頂きます。

新規でアプリケーションを作成し、新規のフォームを作成します。(各名称は自由)

フォームのウィンドウタイトルに

@If(@IsNewDoc;"新規●● 作成中";タイトルフィールド名)

と入力します。


赤字部分を実際に構築するアプリケーションに合わせて変更することで、ウィンドウのタイトルを制御します。
新規作成時・・・「新規●●作成中」
既存文書時・・・「タイトルフィールド名」

とノーツクライアントのタブとウィンドウのタイトルに表示されます。


続いて一般ユーザーへの非表示の表を作成します。
こちらに設計内容等を記載しておくことで、後々の参考にすることができます。
ノーツコンソーシアムの研究会でも、なかなかアプリケーションのドキュメントが残せないという意見が多くありました。
フォーム上に残しておくことで、改めてドキュメントを作成する必要を回避するものになります。・・・こちらもH様より頂いた情報になります。

フォームの上部に表をひとつ作成し、色は表・文字ともにグレーにしています。
ロールで[DBMgr]に割り当たっている方のみ表示できるように設定しますので、プロパティの段落非表示タブにて、

[式により段落を非表示] にチェックし、式には
!(@UserRoles="[DBMgr]")

と記述します。
もちろんACLでロールに[DBMgr]を追加し、管理者には割り当てておく必要があります。


続いて実際に表示させる表を追加します。
デザイン要素は先に記載の通り、林様セッションの内容を加味したものとしております。


次にフィールドです。
主に使う要素として、
・デフォルト値
・入力の変換
・入力の確認

を設定してあります。


入力の変換の例として、
@Narrow("")


として入力された内容の半角化を行っています。もちろん他の@Wideで全角化も可能ですし、他の式でも使えます。

入力の確認としては、よく使用するブランクチェックとして以下の式を設定します。
@If(フィールド名="";@Failure("[フィールド]の指定は必須です。");@Success)


こちらも赤字部分の書き換えが必要です。

デフォルト値については、それ自体難しいものではありませんが、後日紹介予定のアクションとセットでnotes.iniへの値のやり取りを想定した設計を組み込んでおります。

YOMI=@Environment("ini_name");
@If(YOMI!="";YOMI;"")


この式そのものは、notes.ini 内の ini_name に値がなければブランクを、値があればその値をフィールドにセットするというものです。

続いてアクションバーのデザインを変更しておきます。

最後にフォームとは異なりますが、サブフォームにて登録日・登録者・編集日・編集者の情報をまとめております。


現在は以上となります。
プリビューでは以下のようになります。


実際に使用するには、赤字部分を修正し、内容に合わせた表組みにするなどが必要ですが、アプリケーション開始時にここまで組まれていると楽に進められるのに加え、設定ミスを防ぐことができます。


今後はビューやアクションなどについても同様に進めさせて頂きます。