フォルダ監視での自動処理を行う設定について、基本的な概念や作り方を紹介します。
また、eDocArrangement2の設定方法は、製品のヘルプや以下のオンラインヘルプに詳しく記載してます。
また、製品Webサイトにも設定例等を紹介してます。
eDocArrangement2では、バッチ設定を作成して、そのバッチ設定をスケジューラー、サービス、プラグインなどから呼び出すことができます。
バッチ設定の作り方については以下の製品マニュアルで詳細に説明しています。
Visual Studio CodeはMicrosoftが開発しているソースコードエディタです。
Visual Studio Codeと、以下のeDocArrangement2 マクロスニペットモジュールをインストールすれば、VS CodeでeDocArrangement2のマクロを編集しやすくなります。
https://www.technostyle.net/edoc/edocarrangement2/vscode/index.html
Visual Studio CodeはWeb版も用意されており、インストールを行わなくてもブラウザで利用可能です。eDocArrangement2 マクロスニペットモジュールのインストールができませんが、INIファイルなどの言語モードを選択することで括弧の対応や色分けがされるようになり、編集の助けになります。
eDocArrangement2は、対象のファイルを繰り返し処理する設定が簡単作成できます。
仮に、ファイルの繰り返し処理の中にファイル削除の処理を追加した設定を作成した場合、最悪、大量のファイルを削除してしまいます。
そのため、ファイルを削除する処理は極力作成しないようにしてください。特に、監視対象のファイルを削除する処理は絶対に作らないことを強く推奨します。
例えば、あるフォルダを監視して、ファイルの更新日が1ヶ月以上前のファイルを削除する設定を作って運用したとします。あるとき、PCのシステム日付が変わってしまい、来年の日付になったとします。その場合、監視しているフォルダの全てのファイルが削除されることになります。
ファイルを削除してほしいという要望をユーザー様から頂いた場合は、削除を行う設定は作成せず、不要なファイルを格納するゴミ箱フォルダを作成して、そこに移動する処理を作ってください。
そして、そのフォルダをユーザー様自身で内容を確認して、定期的に(年に一回など)手動削除して頂くようにします。
バッチ設定を作成したらテストを必ず行ってください。
テストは正常系、異常系に分けて行います。
全通過テスト
設定には条件分岐や繰り返しの処理がありますが、データを変えて、全ての処理を実行して確認していきます。
条件分岐なら、満たしている場合、満たしていない場合ぞれぞれの処理が動作するようにデータを用意して処理します。
繰り返しの処理場合、一回だけ動作するパターンと、複数回動作するパターンなど実際のケースを想定してテストします。例えば、XDW文書の場合、1ページのみの文書、複数ページの文書を用意してテストします。
アノテーションを読み取る場合、同じアノテーションが2つあった場合、1つもない場合など、考えられるケースを想定してテストします。
負荷テスト
業務で想定されるデータで最も多いデータ量、将来的に増加していくことを想定したデータ量のデータを用意してテストを行います。
ファイルの数や、1文書のページ数など実際に発生する量を想定してデータを用意してテストを行います。
全通過テスト
異常系についても、全てのエラーを一度は確認するようにテストを行います。
QRコードが読み取りできない場合、アノテーションが存在しない場合など、エラーになるデータを用意してテストを行います。
人が入力した値を処理した場合に発生するエラー
人が入力したアノテーション、ファイル名などを文字列処理する場合に、想定しないデータが発生する場合があります。例えば、ファイル名の左5文字を取得するマクロはファイル名が3文字しかない場合、エラーは発生しませんが、取得される文字は3文字になるので、要件的に問題がないか確認します。
文書属性のタイプエラー
文書属性に数値型、日付型、真偽値型を使う場合は、設定する値がタイプにマッチしないデータの場合、エラーが発生します。
XDW文書のオープンエラー
XDW文書のオープンエラーは、以下の方法で作成したファイルでテストできます。
新規のテキストファイルを作成して、拡張子を.xdwに変更します。これで0バイトの不正なXDW文書が作成できます。実際にはこのようなファイルが業務で発生することはないと思いますが、XDW文書が破損して正しくオープンできないケースの想定と同様のテストが行えます。
XDW文書が破損することも実際にはほとんどないと思いますが、XDW文書の書き込み中にPCの電源が失われた場合や、ハードディスクが故障した場合などに発生する可能性があります。
最近ではPCやディスクの性能も向上して、ファイルが破損することも少なくなっていますので、そこまで厳密なテストは行わなくてもよいかもしません。ですが、このように簡単にテストできますので、できれば、条件分岐でエラーが0回以上発生した場合の処理として、想定しておくとよいと思います。
eDocArrangement2では、アノテーション読み取り、OCR読み取り、QRコード読み取り、正規表現文字列抽出マクロ、正規表現文字列置換マクロ等で正規表現を使用できます。
正規表現は.NET FreameWorkのライブラリを使用しています。
よく使う正規表現の記号の意味は以下の通りです。
正規表現 | 意味 |
---|---|
. | 改行(Lf(0A))以外の文字。WindowsOSは改行がCrLf(0D0A)なので注意が必要。次の正規表現を使うことをお奨めします。 |
[^\r\n] | 改行以外としたい場合はこちらを使います。Cr(0D)、Lf(0A)以外という意味になります。 |
+ | 直前の文字の1文字以上の繰り返し。 |
* | 直前の文字の0文字以上の繰り返し。 |
() | 括弧の中をキャプチャ(取得)する。 |
^ | 文字の先頭。 |
$ | 文字の末尾。 |
? | 最短部分。(左から右に見た場合の最短) |
\d | 数字。 |
\t | タブ記号。 |
[] | []内の何れかの文字。例 [A-Z]でA~Zの文字の何れか。 |
[^] | [^]内の何れかの文字以外。例 [^\t]でタブ以外。 |
正規表現の詳細な仕様は、書籍やネットの記事などから調べて頂くのが良いと思いますが、ここでは、eDocArrangement2でよく使う正規表現をいくつか紹介いたします。
eDocArrangement2では、REGEX_CAPTUREマクロで正規表現が使用できます。アノテーション読み取り、OCR読み取り等でも正規表現が使用できます。
REGEX_CAPTUREマクロでは、正規表現中に必ず()を1組だけ記述する仕様となっています。また、()内の文字をREGEX_CAPTUREマクロの戻り値として返す仕様となっています。
ファイル名が「A001-01.xdw」の場合、ファイル名の先頭からハイフンまでの文字を取得して、ユーザーデータ(属性,番号)にセットする。
{%SET_U(属性,番号,{%REGEX_CAPTURE(^([^-]+)-,{%GET(FileName)})})}
上記マクロ実行後は、「{%GET_U(属性,番号)}」が「A001」となります。
上記のマクロでは、正規表現の分が「^([^-]+)-」となっています。「
[^-]」がハイフン以外という意味で、「[^-]+」がハイフン以外の1文字以上の繰り返しという意味になります。先頭の「^」は「先頭」という意味なので、「^[^-]+」は先頭からハイフン以外の1文字以上の繰り返しという意味になります。
「()」は括弧内の文字を取得する意味なので、ハイフン以外の文字が取得されます。末尾にハイフンを記述するとハイフンを見つけるまでが正規表現となりますので、ハイフンが見つからない場合は結果としてマッチせず、何も取得されません。
正規表現を「^([^-]+)-」のように末尾にハイフンを記述しているので、ファイル名にハイフンが含まれないとマッチせず、空文字が返却されます。
「^([^-]+)」と記述すれば、ハイフンがない場合は、先頭から末尾までの文字を取得して返却されるようになります。
どちらが良いかは、その後の処理で取得した文字をどう扱うかによります。ハイフンがない場合はエラーにしたい場合は、ハイフンも含めた正規表現にして、空文字が返却された場合は、IFマクロで判定してエラー処理を行うことになります。
ファイル名が「A001-01.xdw」の場合、拡張子を除いたファイル名の末尾からハイフンまでの文字を取得して、ユーザーデータ(属性,枝番)にセットする。
{%SET_U(属性,枝番,{%REGEX_CAPTURE(-([^-]+)$,{%GET(FileNameWithoutExtension)})})}
上記マクロ実行後は、「{%GET_U(属性,枝番)}」が「01」となります。
「担当:伊藤」のようなテキストアノテーションから、「伊藤」部分を取得したい場合は、以下の正規表現をアノテーション取得処理の条件リスト追加します。
担当:([^\r\n]+)
アノテーション取得ではテキストアノテーションの末尾に改行あると「担当:(.+)」で取得した場合、取得される文字の末尾に\r(CR)が付いてしまいます。「担当:([^\r\n]+)」とすることで、担当: の後の改行(CRLF)以外の文字を取得するという意味になります。