データの重複チェック

関数式で示そう

xoBlos の中間処理は慣れてきましたか?

さて、今回は処理対象と成ったデータから、重複データをチェックしてみましょう。手段は幾らかあるかもしれませんが、代表的なのを 2つ、以下に挙げます。

f:id:xoblos:20180912104757p:plain

上図左側は、存在チェック先である列全体を見て、同行のデータを比較対象にしています。見つかれば "重複" という文言を出すようにしています。別の手段として上図右側は、左図のように処理列を要さず、Excel の標準機能「条件付き書式設定」で重複を示そうとしています。自身の値と、同列全体を比較させていますね。

f:id:xoblos:20180912104802p:plain

各、生成結果です。重複データを速やかに判断することができますね。こちらが最終生成結果であるならば、見易い方の手段を選択して問題ありません。

しかし、後続処理が存在して且つ、その処理内容が「重複データのみ」或いは「重複データ以外」を取り扱うとなりますと、上図右側は実装手段としては相応しくありません。何故なら、xoBlos の抽出は セルの色情報を判断することができない為です。

【corabo】セキュリティ例外設定

Windows 標準のアプリ/xobQuery の実行許可

前回記事で、「ServerSettingWindow.exe」の設定について記しましたが、ここ最近のバージョンでは「xoBlosLockService の実行設定」ではなく「セキュリティ例外設定」と表現しています。(実行/設定方法は従来と同じなのでご安心ください。)

f:id:xoblos:20180831173228p:plain

さて、今回はその中でも「外部アプリケーションの実行」手順を持った業務の、実行許可を行う部分に触れてみたいと思います。Windows 標準の機能である――コマンドプロンプト処理やスクリプト処理の作成に慣れている、或いは現行の運用で使用している方は、xoBlos の外部アプリの実行にも活用なさることがあるでしょう。しかし出来上がった業務ファイルを、Designer 単独で動かす分には何も問題ありませんが、corabo へ乗せるとなるとセキュリティ例外設定が必要になります。

f:id:xoblos:20180831173235p:plain

使用する外部アプリは、xoBlos の業務一式の(フォルダの)内側にあれば判断し易いのですが、Windows 標準のプログラムは決められた場所にあるので、注意が必要です。‥‥設定をし忘れる方が結構いらっしゃいます。特に、上図の『b.実行するファイル(必須)』項に慣れて「%ComSpec%」を手打ちされる方、或いは前項の『a.関連付けられたアプリケーションで実行しますか?』項を「はい」にし、アプリ本体ではなく処理ファイル(バッチファイルやスクリプトファイル)を指定される方‥‥

これにより、corabo 上で出るエラーメッセージに対し、「何をどう許容すれば良いのか?」となる可能性もあります。環境変数が設定されていたら、上図右方の「環境変数」一覧の「値」から、対象を特定しましょう。スクリプトの実行プログラムに関しても、対象はコマンドプロンプトと同じ階層に置かれている筈です。

また、「::\helper\xobQuery.exe」を設定し、『xobQuery』を実行している方は、xoBlosHome 下を許容設定してください。

C:\Windows\System32\cscript.exe  ‥‥ コンソール向け
C:\Windows\System32\wscript.exe  ‥‥ 対話向け
C:\xoBlos\bin\helper\XobQuery.exe ‥‥ xobQuery

取得データの分離文字を "スペース" にしたい!

使えないなら使えるようにしてしまおう。

生成キーワード『取得データの分離』は、分離の基準となる文字を指定すれば、それを境目に区分けされたそれぞれの情報を取り扱える、便利なキーワードです。しかし残念なことに、この分離文字にスペース(全角/半角いずれも)を指定することはできません

f:id:xoblos:20180816144124p:plain

スペースが区切り目である情報は、幾らでもあることでしょう。上図のように、住所より「建物」の部分は別の枠へ生成――等は大いに有り得ますね。そのような場合、『取得データの分離』は活躍できないのでしょうか。‥‥いえ、『取得データの分離』だけでは活躍に成らないのです。

f:id:xoblos:20180816144129p:plain

分離文字にスペースが扱えないのであれば、スペースを扱える文字に置換してしまえば良いのです。更に、実際のデータには入り得ない文字に置換するのが望ましいです。(上図例では「@(アットマーク)」に置換しています。)キーワード『文字列編集』は、『取得データの分離』よりも先に処理が行われます。

上図例の項目「住所」のように、処理としては扱うけれども、実際の帳票上には出力させないような項目は、キーワード『セット先セル』を空欄にします。そして、参照している基本入力データ(XML)に存在しなかった項目は、「#住所前半」「#住所後半」のように、最初に「#」を付けて任意の項目名を設定しておきます。これはプログラムの世界で言う、変数のようなものですね。

【corabo】セキュリティ例外設定の設定ファイル

設定内容を持ったファイル

前回記事で、サーバのコンピュータ名を変更した際の留意点として、「ServerSettingWindow.exe」(セキュリティ例外設定)に触れましたが‥‥。この設定が余りに多い場合の、楽な修正方法は無いものでしょうか。

設定を行うプログラムは「ServerSettingWindow.exe」ですが、設定内容そのものは、実は同階層の「xoblossettings.json」が持っています。これはメモ帳等で開き、無論編集することも可能です。

f:id:xoblos:20180808150413p:plain

テキストの内容は‥‥専門的で、余り触れたくない部分ですね。しかしところどころ見ると、実際設定した内容を確り持っていることが確認できます。そして間違いなくコンピュータ名(上図緑枠)も持っていて‥‥。メモ帳の機能である『文字列置換』を使えば、一括で修正が行えますね。環境移行時には、この json ファイルもコピー対象の一つとして、覚えておきましょう!

※コンピュータ名が、コンピュータ名以外で使われていないことを確認の上、一括置換するようにしましょう‥‥。誤った編集を行うと、「ServerSettingWindow.exe」も起動しなくなるかもしれませんので、バックアップをお忘れなく!

シート名に取り扱える "カッコ"

シート名の制限

Excel のシート名は、フォルダやファイルの名前と同様、様々な制限があります。生成キーワード『シート分割』や、業務ファイル(.xob)内の変数は、シート名を決定することもありますので注意が必要ですね。

使用不可記号 ‥‥ コロン(:)、円記号(\)、スラッシュ(/)、疑問符(?)、アスタリスク(*)、左角カッコ([)、右角カッコ(])
最大表示字数 ‥‥ 31文字

上記の内――「カッコ」ですが、角カッコ以外にも幾らか種類があります。

Excel を単独で扱う分には難なく入力できる値ですが、実は xoBlos の生成高速エンジンの使用によって、それぞれの「カッコ」の制限が変わります。xoBlos で高速生成する際には充分ご注意ください。処理が正常に終了したとしても、ブック破損により、ブックが開けない/修復が発生する場合があります

f:id:xoblos:20180730134532p:plain

キーワード『取得データの組合せ』の落とし穴

項目の記述順が問われる!?

「制御シートのデザイン、記述順は余り問われない。」‥‥序盤はそのように教わる、捉えられるかもしれません。しかしキーワードの処理順序や仕様、よっては項目の記述順が問われてくる場合もあります。

取得データの組み合わせを設定した項目は、参照先項目より左側に置いてはいけないとかでしょう♪」‥‥いいえ?左右正しく置いても、落とし穴があるのです。

f:id:xoblos:20180713162528p:plain

それでは上図、一見何の変哲も無い生成制御シートを題材にしてみましょう。特別なことと言えば、キーワード『取得データの組合せ』だけで、「年」/「月」/処理年と処理月と固定文言を組み合わせた文字列を 1項目――計 3項目を生成するものですね。

f:id:xoblos:20180713162534p:plain

さて‥‥実行してみましたが、残念な結果に成って仕舞いました。何故、「%」で変数を示しているのにも拘らず、文字列と見做されて仕舞ったのでしょうか。

仕組みのお話になりますが――『取得データの組合せ』は、設定内容を基準として見て置き換えているのではありません。①先ず、キーワード『入力項目名』に設定した項目を、左から順に見ていきます。②次に、項目を見る都度、項目名を「%」で囲みます。③続いてその上で、『取得データの組合せ』の設定内容に照らし合わせます。④設定内容に「%項目名%」を見つけ次第、その項目が保持している値に置き換えます。‥‥もうお分かりですね。制御シート上の設定値「%処理年%%処理月%月度」は、項目「年」を真っ先に見つけたことで、「%処理年%年%処理月%月度」と判断されたのです。

この問題を解消する方法は簡単です。項目「年」を、項目「処理月」より右側に書き直しましょう!

様々な今日(システム)日付の取得方法

有効性と有用性の境目。

f:id:xoblos:20180704145737p:plain

入力データから、"今日(システム)日付" を得る手段は、数あります。それこそ――たとえ何処にも明示されていなくとも、xoBlos の内部処理や Excel の関数等で得ることができますので、業務実行時の日付/日時を記録として残したい場合は深く考えず、安心して設計を行ってください。

しかしいずれの手段も、得失が必ず存在します。いくら汎用性を重視しても、慣れていない操作が発生すればそれは手間であると抱かれるでしょう。

ブック名/シート名から得る(冒頭画像①/③)

f:id:xoblos:20180704145747p:plain

こちらは、xoBlos の予約変数です。ブック名とシート名に間違いが無ければ‥‥情報としては確かなものですが、現実的ではありませんね。更に得た内容は日付書式ではないので、抽出キーワード『日時指定』で書式変更はできません。更に生成キーワード『日時指定』では「Custom」が使えないので、生成時点でも書式変更ができません。つまり、書式変更する場合には中間処理を設けなければならないのです。

"日時関連の" 予約変数から得る

前節の方法から出た問題を楽に解決させるには、抽出キーワード『対象セル』に対し、「%Today」或いは「%Now(書式パターン)」を設定することです。抽出制御シートのリファレンスにも注記がありますので、ご確認ください!

Excel 上から得る(冒頭画像②)

f:id:xoblos:20180704145753p:plain

入力データ上に "今日日付" があれば、それも纏めて抽出しておくと楽ですね。これならば抽出キーワード『日時指定』は使えます。しかし資料上に、システム情報がデータレベルで並んでいることは、かなり珍しいでしょう。Excel の関数(冒頭画像例示の「TODAY()」のように)であれば、日付値の保証はありますが‥‥Excel の自動計算が「手動」になっていたり、関数でなく固定値であったりすると、不確かな情報を得る心配があります。

実行者に入力して貰う

f:id:xoblos:20180704145758p:plain

こちらは『業務変数』を定義し、我々が "今日日付" を伝える手段です。業務の実行者が入力を間違えさえしなければ‥‥という問われがあります。しかし前日中に作業が完了せず、どうあっても "今日日付" として処理したくない――等の場合に、日付操作できる面はありますね。

corabo から実行する業務であるならば、変数名を入力する欄のプルダウンから「システム日付を取得する予約変数」を選択することもできます。自動で取得されるので、入力する必要はありませんね。これは将来、Designer 単独でも扱えるようになるかもしれません!

f:id:xoblos:20180704145804p:plain

後は業務ファイル(.xob)の『制御シートの書き換え設定』で実現可能です。抽出キーワード『対象セル』に固定値を指定する場合は、値の先頭に「#」を忘れずに付けましょう。‥‥しかし "書き換え" を行うので、万一制御シートの修正が発生した場合には、書き換え先が変動しないよう注意が必要です。なお『制御シートの書き換え設定』は、「%BOOK%」や「%SHEET%」をあて込むことができません

XML を編集する手順を使う

f:id:xoblos:20180704145810p:plain

こちらは業務ファイル(.xob)内、手順種『抽出データ編集』にて実現可能です。XML to XML なので、中間処理のように 2手順(抽出⇔生成のワンセット)ではなく、1手順節約することができます。抽出キーワード『日時指定』のような加工も可能です。‥‥ただご覧のとおり、制御シートとは別で編集定義用の XML を 1から作成しなければなりません。制御シート以上に、専門性/見易さ/修正のし易さを問う方が多いのではないでしょうか。

xobQuery を使う

f:id:xoblos:20180704145816p:plain

SQLxobQuery)に慣れている方は、一目散にこの手段を選択されることでしょう。しかし上図のように XML の項目に、明示的に項目名を設定しないと大文字は小文字になるので、生成キーワード『入力項目名』の設定時には注意が必要です。前回記事のような手段もあります。また日付書式も、上図クエリの時点で整える必要がありますね。

さて、どの手段が全面的に最良であるか‥‥皆様の中で整いましたでしょうか――。