corabo+Designer:外から渡すパラメータの限界文字数って?

f:id:xoblos:20180419182246p:plain

限界文字数は取り扱い先で決まる。

xoBlos の業務に於いて、参照元も参照先も、足りない情報があればユーザ自らが xoBlos を通して伝えなければなりません。その為に、業務実行時のユーザ定義変数(パラメータ)というものが用意されています。

さてこの変数ですが、結局の所何文字まで入力することができるのでしょうか。‥‥無限、は正確な答えではありません。具体数値も決定できません。何故なら‥‥何文字入力できても、取り扱い先で取り扱えなければ不正でしかない為です。

Excel のセル内に出力させる32767 文字(Excel   の仕様)
Excel のシート名にあて込む   31 文字(Excel   の仕様)
参照パス/ファイル名に使う  234 文字(Windows の仕様)

xobQuery+Excel:異なるバイト文字の存在をチェックする

全体の文字/バイト数を比較する。

値のチェックは、前回記事のように中間処理を設けるのが適当です。必要な情報は、対象となる値の文字列数バイト数の 2つ。――そこに差があれば、全角と半角の入り交じりは確定し‥‥その比較結果を保持する為に、1列だけ変数項目(お皿)を用意しなければなりませんね。

制御シート(生成~抽出)

f:id:xoblos:20180405113953p:plain

雛形シート上に 1列(上図の列「B」)、そのお皿なる列を設けておきましょう。Excel 関数「LEN」は、対象(上図の列「A」)の文字の桁数を得ます。逆に Excel 関数「LENB」は、対象の文字のバイト数を得ます。Excel 上で、半角文字(半角カナを含む)は 1バイト、全角文字は 2バイトで数えます。これで列「B」も抽出に含めれば、条件付けすることができますね。

‥‥しかし残念なことに、バイト数を取り扱う関数(「LENB」「MIDB」「FINDB」「SEARCHB」等)は、現在の抽出高速エンジンには対応していません。(生成高速エンジンで出力することはできますが、それを正しく抽出できません。)処理速度が遅くなっても良い場合は、お勧めする方法です。

xobQuery

f:id:xoblos:20180405114001p:plain

SQL に慣れている方には、上図方法をお勧めします。xobQuery は XML to XML なので、中間処理としましても 1手順で済みます

構文「HEX」は、括弧内の文字列の文字コードを 16進数で返します。半角文字(半角カナを除く)は、一文字につき 16進数コードで 2桁を表します。その為、「2」で除算しています。半角のみなら文字列数とマッチしますし、全角が混在していればマッチしません。

Designer:累計/累積データの取り扱い

前回データと今回データを連結させる。

f:id:xoblos:20180315171939p:plain

上図のように、今回生成するデータを常に前回生成した最終データの直後に追加出力するという要件は、結構挙げられます。xoBlos は、こういった累計/累積を成す帳票要件に対し、①前回出力結果の抽出、②今回入力データの抽出、③①と②を連結して基本入力データとして 1から生成――の工程を基本としていますので、覚えておきましょう。③部分は、前回記事にて復習してください。

前回データ抽出の懸念

さて、前節までの基本事項を意識すると「それでは前回までに出力されたデータが膨大な量であったら、処理時間に影響が及ぶのではないか。」というご意見が挙げられることでしょう。‥‥もっともではありますが、xoBlos の生成で、データの繰り返しがある場合に設定が必須になるキーワード『行(列)ひな形の左上』の仕様上、どうあっても今回実行分の付け足しのみ――という作りは、通常のやり方では実現不可能なのです。

f:id:xoblos:20180315171947p:plain

生成結果に沿って、上図のような雛形シートを用意するのは適当ですが、次回実行も考慮すると他に何が必要でしょうか。‥‥ 業務を実行して、参照されるデータ件数が常に変動する場合、xoBlos が大事にしている左上~右下を特定するのに、前回の最終データが出力された場所を判断できる印を用意しなければなりません。その場合、常に参照先が固定になる Excel の標準機能『名前定義』が活躍することになりますが‥‥

f:id:xoblos:20180315171957p:plain

前節までに用意した雛形シートの、どの位置へ定義したとしても、ひな形行/列が消える以上、必ず使い続けられない問題に直面します。

‥‥しかし上図、名前定義をひな形行より下にしている後半 2つのケースをじっくり見ていると、共通の何かが言えることになります。それは‥‥「名前定義を置いた行の直前行さえ、毎回残っていれば良いのに!」

f:id:xoblos:20180315172006p:plain

上図、内容だけ素直に注目すると何事かと思われるでしょう。‥‥前節から、今必要としているのは空白一行です。‥‥では、入力データ(.xml)に空のデータが一つあれば、空の行が出せるのではないでしょうか。ダミーの意味で空のブックを制御シートと同じところにセットし、抽出対象としてしまいましょう。列項目は制御シートの設定から「ID」「Desc」と揃えられ、抽出対象のブックは空っぽなので値は Null がどちらとも入ります。

f:id:xoblos:20180315172014p:plain

冒頭とは変わり‥‥今回データと前節の空のデータを連結して、基本入力データとして生成してみましょう。期待する結果は満たせていません(空白行が常に出力されて見栄えが悪くなっています)が、抽出も生成も同じ制御シートで、前回データを一度も取り扱うことなく、累計/累積表を出力することができるようになります!

出力する順序どおりに基本入力ファイルを設定すれば、連結する必要はありません。

f:id:xoblos:20180315172028p:plain

Designer+Windows:項目数が不揃いなCSVレコードの合成

EDI(電子データ交換)などではよく見かける、ヘッダーレコード、ボディ(本体)レコード、トレーラーレコードの3部構成仕様のCSVレコード(テキスト+カンマ区切りレコード)があったとします。

0,5
1,apple,リンゴ
1,banana,バナナ
1,cat,ネコ
1,dog,イヌ
1,egg,タマゴ
2

上記の例だと、第1項目がレコード区分で、"0" のときヘッダーレコード。"1" がボディレコード、"2" がトレーラーレコードです。ヘッダーレコードの第2項目には、ボディレコードの件数が記載されています。

このような項目数が不揃いな(カンマの個数が不揃いな)CSVレコードの合成には、外部アプリでtypeコマンドを実行させる方法が簡便です。

 f:id:xoblos:20180310103451p:plain

 

mix.bat の内容

type header.csv > all.csv
type body.csv >> all.csv
type trailer.csv >> all.csv

[bat] フォルダにmix.batというバッチファイルを用意しておき、その前手順で、3種類のCSVレコードを [bat] フォルダに名前を変えてコピーしておきます。

header.csv … レコード区分 "0" のヘッダーレコード

body.csv … レコード区分 "1" のボディレコード

trailer.csv … レコード区分 "2" のトレーラーレコード

 

外部アプリとしてmix.batを実行すると、合成されたall.csvが出力されますので、次手順で出力したい場所に名前を付けてファイルコピーします。

typeコマンドのコツは、1種類目を > でそのままリダイレクト出力し、2種類目以降を >> で追記(アペンド)モードでリダイレクト出力する点です。

corabo:ネットワークドライブ指定の注意点_二の太刀

管理者権限設定の壁。

前回記事で、管理者としてネットワークドライブの割り当てを行うことで、ファイルやフォルダのパス指定にネットワークドライブが設定できるようになるお話をしました。ところが下図のように――

f:id:xoblos:20180302123417p:plain

‥‥マシン本体を再起動すると、利用不可になってしまいます。

管理者以外で設定したネットワークドライブは、暫く待てば接続を行ってくれますが‥‥。管理者として設定したそれは、起動の都度設定を行う必要があるようですね。

しかし、わざわざコマンドプロンプトを管理者として実行し、コマンドをカタカタ入力するのは非常に手間です。共通のコマンド処理というのは、本件に限らず「バッチ処理化」することが望ましいもの。そう聞くと、何やら難しそうなイメージを持つ方もいらっしゃるかもしれませんが‥‥何ということはありません、入力する内容を予めテキストファイルに記載しておき、それを実行ファイルとしてしまうだけです。

f:id:xoblos:20180302123427p:plain

メモ帳などで作成するにしても、保存の際にはファイル拡張子を「.bat」にすること、忘れないようにしましょう。

さて、上図が基本的な「バッチ処理化」の作成方法ですが‥‥今回の場合は、"管理者として" というキーワードがもう一工夫を求めてきます。何故なら、上図はあくまで管理者以外で設定したバッチファイル――つまり、コマンドプロンプト通常の方法で起動し、コマンドをカタカタ入力して実行させていることと、全く同じであるからなのです。

f:id:xoblos:20180302123439p:plain

"管理者として" バッチ処理を行わせるには上図の設定が要ります。先ず青枠のように、前述までで作成した .bat ファイルのショートカットを作成し、プロパティを起動します。続いて赤枠のように、プロパティ内の「詳細設定(D)...」ボタンを押下し、「詳細プロパティ」を起動します。最後に緑枠のように、「管理者として実行(R)」をチェックオンにします。これで、作成したバッチ処理内容を管理者として実行する前提が、付加できました。このショートカットは、ダブルクリックするだけで一連の設定を行ってくれます。ショートカットその物を、タスクスケジューラでスケジューリングしてしまえば、それこそ自動起動も実現しますね。

残念ながら、マシン起動時のネットワークドライブの接続は、グループポリシーの設定で「コンピュータの起動及びログオンで常にネットワークを待つ」を有効にしたとしても、効果は無いようです。マシン起動から接続の待ち時間を設けたとしても、ステータスが「利用不可」となったドライブは、いつまでも接続が行われることは‥‥決して無いでしょう。

Designer:二つの空欄(Null)

「並べ替え」は区別をしてくれる。

f:id:xoblos:20180228161802p:plain

上図のように、一つのブックに複数のシートで情報が分かれており‥‥処理の主要情報は「事業所コード」と「事業所名」の二つであったとします。「data1」と「data2」は一つの抽出制御シートを使い回しできそうですが、「data3」は別途用意する必要がありますね。

抽出結果である各 xml ファイルを確認すると、「data3」は最早、別情報です。システムの世界では、"事業所名が無いだけの差" ――は、表現として充分ではありません。

しかし xoBlos では『抽出データ並替』という手順で、これら異なる情報をすんなり結合させることが可能です。入力データの結合の基本は、前回記事をご参照ください。

f:id:xoblos:20180228161809p:plain

三つのデータを全て対象に、「事業所名」「事業所コード」の順でソート条件とし、結合してみましょう。「data3」に存在しなかった「事業所名」は、他データと合わせる為に自動で設けられました。勿論、値の考えは無いので空欄が入りました。しかし「data1」と「data2」にも、値として空欄(Null)の「事業所名」がありました。見た目としては同じ空欄であるのにも拘らず、連続して並んでいません。

手順『抽出データ並替』は、値が空欄であるデータと、元々項目そのものが存在していなかったデータの――二つの空欄(Null)を、区別することができるという訳ですね。

corabo:ネットワークドライブ指定の注意点_初太刀

ネットワークドライブをパス指定する。

前回記事で、Designer からネットワーク上にあるフォルダ/ファイルを参照する際に、ホスト名或いは IPアドレスの、2パターン使用できることをご案内しました。

では、それらの情報を割り当てたドライブの表記はどうなるのでしょうか。‥‥最初の 2パターンと同様、Designer の設定とセキュリティ例外設定は、内容が一致していなければなりません。

ネットワークドライブの割り当て

f:id:xoblos:20180223151620p:plain

上図例では、あと適したコピー先の設定さえすれば、Designer 時点では正常な動作結果を得られます。しかしこの方法は――corabo からの実行では、たとえセキュリティ例外設定を万全に行ったとしてもエラーになってしまいます。

f:id:xoblos:20180223151628p:plain

コマンドプロンプトを、管理者として開く(上図の上部)か、普通に開く(上図の下部)かで、冒頭の図で列挙した Zドライブは見え方が変わります。ここまで来ると、察しがつく方もいらっしゃるかもしれません‥‥そうです。管理者権限を前提に設定/参照ルートを成している corabo では、管理者権限を持った上で割り当て設定したネットワークドライブでなければ、取り扱えないのです。

ネットワークドライブの割り当て(管理者モード)

f:id:xoblos:20180223151637p:plain

引き続き管理者として実行したコマンドプロンプトから、ネットワークドライブの割り当てを行ってみましょう。上図の上部のように、コマンド「net use 割り当て先ドライブ(任意) 割り当て先アドレス」を入力します。割り当て先を接続する際、ユーザー名とパスワードが必要な場合は、赤枠のような入力テキストが出力されます。

現在の割り当ての詳細を一覧表示する場合は、上図の下部のように、コマンド「net use」のみで確認が行えます。

さて、これで Yドライブとして設定すれば corabo からの実行でも正常に動作するようになりました。しかし今度は逆に、Designer の方がエラーを出すようになります。‥‥テスト(Designer 実行)用/本番(corabo 実行)用と、パラメータで分けておく等の工夫が必要ですね。

f:id:xoblos:20180223151647p:plain