Sharperlightにおいては、データソース(データベース、Excelワークシート、APIエンドポイント等)からデータを抽出するというのが原則ですが、書き戻し(Writeback)許可を設定することでデータソースへのデータの書き戻し(Writeback)を行うことができます。
今回は、Excelアドインを使用して、シート上のデータをデータベースに書き戻してみようと思います。
データベース/テーブルの準備
既存の試験データベースにLedger(帳簿)テーブルなるものを作成しました。このテーブルに対してExcelワークシートのデータを書き込んでいきたいと思います。
データモデルの準備
まずSharperlightがデータソースと対話できるようにデータモデルを作成します。
この試験データベースに対しては既にデータモデルを作成していたので、今回追加したテーブルの情報だけを反映させたいと思います。
Sharperlightアプリケーションメニューからスタジオを起動します。
フォルダ
アイコンで対象データモデルを探します。
Tools
メニューのサブメニューStudio Connection
メニューを選び、正しく対象データベースに接続されているかを確認します。
確認が済んだら'Schema'メニューのImport Tables
メニューを選択します。
Get Tables
ボタンをクリックすると、接続しているデータベースからスキーマ情報が読み込まれます。既にデータモデルに読み込まれているテーブルについては赤色で表示され、まだ読み込まれていない新しいテーブルについては黒色で表示され、チェックも入った状態になります。
OK
ボタンを押すと、チェックの入ったテーブルの情報がデータモデルにインポートされます。
新しくインポートされたテーブルは、All Tables
ノードの下に表示されています。
このままでは、クエリビルダ等からは見えない設定なので、新しいテーブルLedgerテーブルをTable Display
ノードへ移動させます。ドラッグ&ドロップで移動できます。
Table Display
ノードに移動したLedgerテーブルを選択すると、右側にテーブルのプロパティ一覧が表示されます。その中からAllow Table Writeback
プロパティを探し出し、Trueを設定します。
これでこのテーブルにはデータの書き戻しを行うことができるようになりました。これは単にこのテーブルには書き戻しができるよ~っていう許可であり、他にもユーザー単位で許可/未許可の設定を行うこともできます。
あとDescription
プロパティに帳簿と日本語で記入します。
今度は、Ledgerテーブルをダブルクリックすると中央にはフィールド一覧が表示され、そのフィールドを選択するとそのフィールドのプロパティが右側に表示されるようになります。それぞれのフィールドのDescription
プロパティを日本語に置き換えます。
全て終わったらOK
ボタンでデータモデルを保存します。
データの準備
Excelワークシート上にこのようなデータを準備します。
列名は、データモデルのフィールドDescriptionと合わせておくといいですよ。
書き戻し定義の作成
では書き戻しの定義を行います。Sharperlight Excelアドインのリボンから書き戻しを選択します。
書き戻し定義ダイアログが表示されます。製品
には先ほどのデータモデルを、テーブル
には先ほどの帳簿テーブルを選びます。
下部フィールド
タブに帳簿テーブルのフィールド一覧が表示されます。ここでExcelシート上のデータとフィールドのマッピングを行います。
コード
フィールドの入力テキストフィールドを選択した状態で、Excelシートのテーブル内をダブルクリックします。すると自動マッピング機能が働き、このようなメッセージが表示されます。Yes
ボタンを押して先に進みます。
データテーブルの列名とデータモデルのDescriptionが一致する場合のみマッピングが設定されます。
マッピングが設定されていないフィールド、たとえば請求
に対しては、その入力テキストフィールドを選択した状態で、Excelシート上の請求額
列をダブルクリックします。すると先ほどと同じメッセージが表示されるので、今度はNo
ボタンを選択します。そうすることで個々のフィールドのマッピングを行うことができます。
Id
フィールドは、IDENTITYフィールドなのでIdがデータベースによって自動算出されるのでマッピングは不要です。
Idの左横に星印が付いていますね。これはSharperlightエンジンがこの列のデータをガイドとして使用し、どの行までデータが存在するかをチェックするためのものです。しかし、この機能はマッピングがされていないフィールドには設定できません。よって今回はコード
フィールドにこの機能を設定します。コード
フィールドを選択して右クリックメニューからドライバーを選択します。
最後に書き戻し名に帳簿と入力します。閉じる
ボタンで定義を保存すると、この名前で保存されます。
これで定義は完了。
検証
プレビュー
ボタンを押して、マッピングの設定どおりエンジンが正しくデータを拾っているかチェックしてみます。
プレビューとログが表示されます。ログをみると分かりますが、書き込みは行われていません。この機能はあくまでも正しくデータが拾われているかのチェックのみです。
検証
ボタンは、プレビューなしのデータ収集チェックです。ログだけが表示されます。
以上で上手くデータが拾えていることが確認できたので、実行
ボタンで書き戻しを実行します。
ログが表示され、正しく実行されたことが分かりました。
データベーステーブルを確認してみます。正常に書き込みが行われていました。
データの更新と追加
Excelシート上のデータを更新します。
最下行にコード S011 という新しいレコードを追加します。またコード S006 のレコードの入金額と残高を更新します。
この状態で再度書き戻しを実行すると、新しいレコードは追加され、変更があったレコードは更新されます。
書き戻しボタンの作成
今回は、書き戻しダイアログを開いて実行
ボタンを押すのではなく、ボタンを追加して書き戻しを実行します。
ボタンを配置したい位置のセルを選択した状態でSharperlightリボンのボタン->書き戻し->mdWriteBackを選択します。
書き戻し定義一覧が表示されるので、今回作成した定義 帳簿 を選択し、OK
ボタンを押します。
書き戻し専用のボタンが追加されました。
ではこのボタンを押して書き戻しを実行します。
早速データベースをチェック、正しく更新することができました。
では、失礼します。