2009-12-25

FileMaker V10による在庫管理、一考 その3

前回作成した在庫アプリ(ZaikoTestV0.fp7)の課題メモ

0.在庫と商品のテーブル分離
複数ユーザによる同時アクセス競合をできるだけ回避するため、在庫と商品のテーブルは分離し、在庫以外の商品情報はもっぱら商品テーブルに持たせる。 在庫テーブルは在庫データ専用とする。

1.競合発生時の処理
1-1 書き込みループ 
ZaikoTestV0.fp7では在庫更新時に競合エラーが発生すると、最終保存時点までRevert(ロールバック)してしまうので、競合するユーザの在庫書き込み処理が終了し、自身の在庫書き込みが成功するまで、書き込みをループさせる(最大ループ数有)。

1-2 遅延オプション
FileMaker Server 10 Advanced を使用すると、スペック的には999ユーザまでが同時アクセス可能となる。 つまり、最大999ユーザが特定の商品の在庫数を同時更新する可能性がある。
人気の新商品のリリース時に膨大な数の受注が想定される場合は、逐次処理を行うのではなく、一定間隔で明細レコードを集計して、在庫を更新するようなオプションを考慮する。 もちろん、在庫の算出は、“一定間隔”の分、遅延する。

2.在庫算出時点
特定の日付を指定して、その日付時点の在庫数を算出する場合は、「商品別末日時点在庫テーブル」を作成して月次処理を行い、この際に各商品の末日時点の在庫数をこのテーブルに書き込む。
これにより、日付指定により在庫を算出する場合でも、クエリの対象となるデータを最大1~2カ月程度に限定できる(高速化)。

以上


【関連リンク】


2012/8/1追記:
当社の在庫管理の講習で使用してるサンプルシステム「FMEasy在庫」を公開しました。フリー版/開発版のダウンロードは→こちら

【FMEasy在庫 の画面】

2009-12-24

FileMaker V10による在庫管理、一考 その2

前回作成した在庫アプリは新規出庫しか在庫と連動していなかったので、出庫伝票の更新/削除時も在庫が変更するように、修正してみた。 どんなものか見てみたい方は下記からどーぞ(パスワードはかかってませんよ)




【関連リンク】

2012/8/1追記:
当社の在庫管理の講習で使用してるサンプルシステム「FMEasy在庫」を公開しました。フリー版/開発版のダウンロードは→こちら

【FMEasy在庫 の画面】

ODBC ドライバ DataDirect SequeLink を使って FileMaker Pro にアクセスしたときの問題点

 FileMaker Pro 対応の ODBC ドライバは DataDirect SequeLink となっていますが、今回はこのドライバを使って FileMaker Pro にアクセスした場合の問題点について書いていきます。

備考:
1. php から ODBC 接続する方法として PDO を使っています。PDO を有効にするには、php.ini の以下の行を追加し、Web サーバを再起動しておく必要があります。

  extension=php_pdo.dll
  extension=php_pdo_odbc.dll

2. PDO ではシステム DSN を指定する必要があるため、SequeLink ドライバを指定して適当な名前のシステム DSN を事前に登録しておく必要があります。
php ソースの記述例は次のとおりです。
//$dbh = new PDO ("odbc:DSN=データソース名;UID=ユーザー名;PWD=パスワード");

try {
     $pdo = new PDO("odbc:dsn=test;host=127.0.0.1", "Admin", "somePWD");
 $sql = "select * from testdb where recno=1";
 $rec = $pdo->query($sql);
               //レコードセットから特定の列を取りだすときは bindColum を使用
 $rec->bindColumn("ID", $ID);
     $rec->fetch();

 echo $ID;

} catch(PDOException $e){
    var_dump($e->getMessage());
}

 上記のような php スクプトを連続操作を実行すると、ODBC ドライバの動作が不安定になることがわかりました。
 
 返されたエラーは次のとおりです。

1) Session refused by service, connection closed.

 このエラーはサーバプロセスが接続要求を受理できなかったときに発生します。
 このエラー発生後、FileMaker Pro ファイルを閉じたり、一度 Windows をログオフしたりしたのですが、それでも現象が改善せず、マシンを再起動することによってようやく復旧しました。

2) Maximum number of sessions reached.

 このエラーは設定済のアクティブセッション数を超過した場合に発生し、その後のクライアント接続要求は拒否されてしまうようです。
 このエラー発生後、ファイルメーカー Pro ファイルを一度閉じることによって復旧しました。

 以下のサイトにエラーコードの一覧が用意されていますので、その他のエラー内容と原因も参照できます。
SequeLink のエラーメッセージ一覧

 ただ、これだけ動作が不安定だと、ODBC 接続実験としては面白いですが、とても運用レベルには耐えられないという印象です。また、CD に付属の SequeLink は 64bit 対応ではないため、別途購入する必要がある(しかも金額不明)というのも利用者を遠ざける原因になってしまうかもしれません。
SequeLink® 5.5 Client for ODBC 製品紹介ページ


ODBC 接続に関する続きの記事はこちら:
API 別/サーバ別FileMaker カスタムWebパフォーマンス比較

2009-12-22

IIS の php から FileMaker Pro ファイルをオープンするのに四苦八苦

 Windows Server 2003 の IIS で php ファイルから FileMaker Pro ファイルを開くという操作を試しているのですが、どうもうまくいきません。

【目標】
 IIS で公開されている test.php というファイルからサーバディスクに配置した dbopen.vbs を起動し、vbs から FileMaker Pro ファイル test.fp7 を開く。

dbopen.vbs の中身は次のとおりです。ここでは、FileMaker Pro アプリケーションのインスタンスを作成し、それからローカルコンピュータの test.fp7 を開いて showMSG というスクリプトを実行するという流れになっています。このファイルを作って単独で実行すると正常に動作することは確認済みです。


Dim FMApp
Dim FMDocs, myOpenFile

Set FMApp = CreateObject("FMPRO.Application")
FMApp.Visible = True
Set FMDocs = FMApp.Documents
Set myOpenFile = FMDocs.Open("c:\hoge\test.fp7" ,"Admin","somePwd")
myOpenFile.DoFMScript ("showMSG")

Set myOpenFile = Nothing
Set FMDocs = Nothing
Set FMApp = Nothing



【試した操作】
1. IIS 経由で php を実行すると、その実行者は IUSR もしくは NETWORK SERVICE になるため、実行権限を必要なファイル群に与える必要があります。dbopen.vbs は WScript.exe から起動させるため、System32 ディレクトリの中にある WScript.exe に IUSR の実行権限を付与しました。
2. これだと dbopen.vbs で CreateObject を使って FileMaker のインスタンスを作成する時に書き込みエラーが発生するため、IUSR ではなく、ログイン中のユーザアカウントで実行できるよう、PsTools の psexec.exe を使って vbs のみログインユーザ権限で実行するようにしました。

PsTools の紹介とダウンロードはこちら

以下のように test.php のソースに指定しました。


$retval = `C:\hoge\PsTools\psexec.exe -u Administrator -p somePassword1234 -d WScript.exe C:\hoge\dbopen.vbs`;


備考:
1. psexec.exe に IUSR アカウントを割り当て、実行権限を付与しておく必要があります。
2. ``で囲ったコマンドラインがシェルコマンドとして解釈されるため、ここでは exec()関数を使用していません。
3. -d はスクリプトの終了を待たずに psexec を終了させるためのスイッチです(異常終了時のプロセス残留回避)。
4. vbs ファイルは単体では認識されないため、WScript.exe を明示的に指定する必要があります。

 このように設定してから Web ブラウザより test.php を実行すると、ブラウザが読み込み中状態となってしまいます。そこでタスクマネージャを起動して確認してみると、実行者 NETWORK SERVICE のプロセスとして psexec.exe が残っていることがわかりました。

【現象】
 psexec の実行ユーザが NETWORK SERVICE になっていると、デスクトップにそのアプリケーションが表示されず、バックグランドプロセスとして残留してしまいます。
 二台の Windows Server 2003 環境で実行したところ、一台は test.fp7 がデスクトップに表示され、showMSG スクリプトまで表示されたのですが、もう一台のマシンがどうもうまくいきません。

 psexec に NETWORK SERVICE を割り当てて実行権限を付与したり、IIS マネージャのアプリケーションプールのセキュリティアカウントを NETWORK SERVICE 以外に設定するなど試したのですが、やはりプロセスがバックグランドで残留したままの状態となります。


 IIS で運用中の php スクリプトからシェルコマンドでアプリケーションを起動し、そのアプリケーションをデスクトップに表示させる方法をご存じの方は、情報をお待ちしております。

2009-12-11

FileMaker V10による在庫管理、一考

久々のFileMaker(以下、FM)の話題。
V9以前のFMでは、在庫を算出する場合は、在庫テーブルで以下のようにやっていたのではないだろうか?

在庫::在庫(計算) = 在庫::前月分在庫 - Sum(出庫明細::出庫数) + Sum(入庫明細::入庫数)


このやり方は簡単でいいのだけれど、出庫明細や入庫明細のレコード数が多いと、1つの商品の在庫の算出にさえ、数十秒から数分の時間がかかってしまう可能性がある。 よって、商品数と伝票枚数(商品取引)が多く、リアルタイムの在庫を即時把握したいような業種では、FMは使えなかった。
言い換えると、在庫や各種残高算等、あるテーブル(上例では、出庫明細、入庫明細)のフィールド値に基づき計算を行いその結果を他テーブルの(計算フィールドではない)フィールドに精度を確保しながら保存する、ということができないということは、1995年のV3リリース以来、FMの長年の弱点の一つであった。

そんなところにFM V10が現れたのは一年程前だったか。 このバージョンでFMはイベント発生時のスクリプト起動(以下、スクリプトトリガ)に対応した。 スクリプトトリガ、特に、レコード保存時にスクリプトを実行する「OnRecordCommit」により、上記の弱点が解消される可能性がでてきたように思われる。
以下、その原案。

1. 想定(目標)
以下のような簡単な在庫管理データベースがあり、出庫伝票作成時に各商品の出庫数を在庫数から差し引くことを目的とし、その実装(スクリプト)を考えてみる。
尚、出庫伝票は新規作成のみであり、明細の更新は不可(ホンナ無茶な)とする。

【図1】


【図2】

図1の出庫伝票で、[出庫数]に入力をしレコードを保存する動作を行った時に、在庫リストの[在庫数]の値が[出庫数]を差し引いた値に更新されればいい。 但し、このとき在庫リストの[在庫数]は計算ではなく、数値フィールドである、というのが今回の肝である。


2.実装
まずレコードを保存(Commit)時に在庫テーブルの[在庫数]フィールドから[出庫数]を差し引くスクリプトが必要である。

【図3】


という具合に、出庫明細を1行づつ移動して、関連する在庫レコードの[在庫数]から[出庫数]を差し引き、[在庫数]にセットする。 途中あるエラー処理は、[出庫数]更新時にエラーが発生した場合、このスクリプトで行ったすべての処理を取り消し、レコードを最後に保存した状態に戻すためのものである。

では、ユーザの操作(クリック)に依存せず、レコード保存(Commit)時に必ずこのスクリプトを実行するにはどうしたらよいか? ここでFM V10の新機能、スクリプトトリガの「OnRecordCommit」を使用する。 詳細はマニュアルを見ていただくとして、下図のように上記で作成したスクリプトを登録すればよい。

【図4】

以上で完了。


3.テスト
テストをしてみると、一応、機能する。
図1の出庫伝票入力後に保存を行うと、商品1~3の[在庫数]は正しく「9」に更新される。

また、[在庫数]更新時にエラーが発生すると、その出庫伝票が最後に更新されたときの状態に戻り、在庫レコードも元の状態に戻る。
たとえば、商品1と2の[在庫数]の更新には成功したが、商品3の[在庫数]の更新に失敗すると、すべての処理が取り消され、最後の保存状態に戻る。 このとき、出庫レコード自体が一度も保存されていなければ、明細レコードだけではなく、出庫レコードも保存されない(作成されない)筈である。 


4.課題
さて、上記のように当初の思惑は達成されたが、いくつかの課題と懸念がある。
  1. 今回は出庫伝票は新規のみである、ことを前提としているが、当然、これでは実用には耐ええない。出庫明細の更新、削除にも対応する必要がある。
  2. 在庫テーブルで極力競合が発生しないようにテーブル設計する必要がある。
  3. 十分なテスト --- マルチユーザで競合が発生しないこと、また競合発生時も整合性が確保されること。
  4. 上記実装が正しく機能しているか、検証する仕組みの構築

1.は面倒だか、明細の主キー、商品ID、更新前の[出庫数]と更新後の[出庫数]の差分を変数に記憶しておき、Commit時に個々の商品の[在庫数]からその差分を減算すれば、解決可能である。

クリティカルな環境で上記のような在庫ロジックを実装し、実際の運用まで持ち込むのはなかなか大変だと思われるが、在庫や残高の算出遅延が運用上のネックとなっているシステムでは、一考の価値があるのではなかろうかと。

以上

土屋


【関連リンク】

2012/8/1追記:
当社の在庫管理の講習で使用してるサンプルシステム「FMEasy在庫」を公開しました。フリー版/開発版のダウンロードは→こちら

【FMEasy在庫 の画面】


2009-12-08

Panda Cloud Office Protection エンジン更新後に Hyper-V 搭載サーバ機でトラブル発生

 Panda Managed Office Protection(以降MOP)がクラウド型エンドポイントセキュリティサービスの Panda Could Office Protection(以降COP) として 2009年12月1日より新サービスとして提供が始まったことに伴い、11月下旬から順次既存ユーザへのエンジンアップデートが行われました。

 今月に入ってから弊社環境でも COP エンジンの自動アップデートが行われ、つい昨日アップデート後のサーバ機の再起動を行ったわけですが、Hyper-V 搭載サーバ機では再起動時にネットワークカード(以降NIC)の挙動がおかしくなることを確認したため、今回はその現象と対応方法をまとめます。

【現象】
 COP エンジンの自動アップデート後にサーバ機の再起動を促すメッセージが出るが、ここで再起動をかけると、Hyper-V を運用中のサーバ機の NIC が正常に動作しなくなる。
 Ping チェックを行うと、実体 NIC、仮想 NIC 共に Ping 応答が断続的になったり、まったく応答がなくなったりする。

【対応方法】
 この現象は前回のMOPエンジン更新時にも発生し、当方で試したかぎりでは以下に示す方法以外では成功したことがありません。

1. Hyper-V マネージャの右ペインのメニュー項目より「仮想ネットワーク マネージャ」を選択し、稼働中の仮想ネットワークカードをすべて削除します。(削除前に設定情報はメモしておいてください)

2. Ping テストやインターネットブラウジングなどを行い、実体 NIC が正常に動作するようになっていることを確認します。
 仮想ネットワーク マネージャに戻り、左ペインより「新しい仮想ネットワーク」を選択して、右ペインで“追加”ボタンを押して新しい仮想 NIC を追加します。

3. Hyper-V マネージャの仮想マシンリストにある仮想マシンを右クリックし、表示されるサブメニューより「設定...」を選択します。
 当該仮想マシンの設定画面が表示されるので、左ペインより「レガシ ネットワークアダプタ」を選択し、上記で追加した仮想 NIC を割り当て直します。

この操作をすべての仮想マシンについて行います。
4. 仮想マシンを再起動し、Ping テストやネットブラウジングを行い、仮想 NIC が正常に動作するようになっていることを確認します。

この件については Panda にも現象を報告済みですが、もし上記の方法以外で有効な対応方法をご存じの方は情報提供していただけると大変有難いです。

2009-12-07

Microsoft Forefront Threat Management Gateway

Panda Managed Office Protection は Proxy Server が使えるらしので、 Microsoft の Proxy Server 製品を探してみた。 かつては文字どおりの Microsoft Proxy Server という製品があったが、その後継が Microsoft Internet Security & Acceleration Server となり、最新版はこの11月に Microsoft Forefront Threat Management Gateway(TMG) として、リリースされた。

ところが、このTMG、日本語ではβ版のレビューとかの記事がほとんど見当たらない。 MSのサイトからは評価版のダウンロードはできるけど、説明はほんの少しあるだけ。 しかも、 Proxy の説明は全然なし。(以下、MSサイトから引用)

【主要な利点】

多様な種類の脅威から保護
  • ネットワーク レイヤーに対する攻撃保護
  • 統合されたマルウェア対策およびウイルス対策
  • アプリケーション レイヤーへの侵入の防止
高度にセキュリティで保護された接続
  • Web アプリケーションのよる攻撃からの Web ユーザーの保護
  • リモート ユーザー向け、高度にセキュリティで保護されたアプリケーションの公開
  • サイト間およびリモート ユーザーに対する VPN 管理
シンプルな管理
  • 一元化されたネットワークのセキュリティ管理
  • 使いやすいウィザード
  • 統合された電子メールのセキュリティ管理
--------------------------- 以上、引用終わり ---------------------------

Proxy のことは一言も書いてない(もしかして、Proxy機能は無いの?)し、MSを含む業界はあんまやる気無いっぽい。

2009-11-30

SonicWALL NSA E-Class セミナー(2009/11/27)

 SonicWALL NSA E-Class テクニカルセミナーに参加してきました。
 NSA E-Class は SonicWALL 製品でも上位クラスに属する製品群で、搭載されている CPU コア数が最大 16 というだけあって、ファイアウォール と UTM を同時に有効にしても平均 1 Gbps 以上のスピードを保持できるという優れものです(ちなみに CPU が 1 個の廉価版 TZ シリーズで出せるパフォーマンスはせいぜい 50Mbps なので、その差は歴然です)。

 NSA E-Class と TZ シリーズとの大きな違いといえば、上記で述べたマルチコア構成の他に RFDPI (Reassembly Free Deep Packet Inspection) があります。
 SonicWALL に送られてきたパケットを SonicWALL 内部で一度開梱して、それをもう一度再構築して LAN に送るというのが従来の方式ですが、この再構築プロセスによって処理速度が低下してしまうのがネックとなっています。これを解決させたのが RFDPI で、パケットを開梱せずにスキャンを行う分、速度低下が発生しないようになっています。また、従来の方法では開梱したパケットを一時的にメモリに蓄えられるため、ファイルサイズが大きければそれだけメモリを消費することになり、大量のデータを一度に扱う場合はそれだけ処理速度の低下が発生したり、ファイルサイズが大きすぎるために処理不能と判断されドロップされる可能性がありますが、RFDPI なら開梱を行わずにスキャンを行うため、ファイルサイズによって処理速度が左右されることがありません。

参考:SonicWALL NSA E-Classシリーズ概要と構成例

SonicOS 5.0 以降の基本機能について

  1. Layer 2 ブリッジモード
     ネットワーク構成を変えずに、ゲートウェイアンチウィルスやIPS機能を提供

  2. アプリケーションファイアウォール
     アプリケーション別にアクセス制限をかける

  3. Active-Passive ステートシンク フェイルオーバー
     セッション情報の常時同期を行い、ハードウェア障害時にセッション情報を予備のハードウェアに引き継ぐ。

  4. パケットキャプチャ
     パケットダンプ、HTML/CAP 形式でのパケット情報出力

  5. シングルサインオン
     Microsoft Active Directory にログインするだけで SonicWALL 環境へのアクセスログインを可能に


参考:SonicWALL NSA E-Class シリーズ

SonicWALL による HA (High Availability 高可用性)構成
 現用系と予備系の SonicWALL ユニットを配置し、障害時に予備系の SonicWALL にパケット送信が切り替わるようにする構成方法です。E-Class では障害復旧時にどちらの機器に優先的にパケットを流すかも設定可能です。

構成例:Tokyo FM における HA 構成

Global Management System
 Global Management System をインストールすることにより、セキュリティポリシー一括適応、全ユニットの集中管理/監視、ライセンスの集中管理、リモート管理を可能にし、管理コスト削減を実現します。

参考リンク:
SonicWALL NSAシリーズ 価格体系
Macnica Networks

SonicWALL E-Class シリーズ紹介ビデオ(英語)
(今回の東京での講習内容がほぼ網羅されています。)

04:34 Re-Assenbly Free Inspection 解説
05:06 マルチコアデザイン解説
06:15 Active-Passive ステートシンク フェイルオーバー解説
07:10 Layer 2 ブリッジモード解説
07:19 Wireless スイッチモード解説

2009-11-02

FileMaker Pro 5/5.5/6 でファイル名を指定して PDF 形式で印刷を実行する方法

 FileMaker Pro 7 以降では、「レコードの保存/送信」を使うことによってレコードを PDF 形式で保存できるようになっていますが、それより前のバージョンでは別途 PDF ドライバを入手して印刷コマンドから PDF 保存をする必要があります。

 今回は、FileMaker Pro 5/5.5/6 を使って PDF 形式ファイルを自動作成し、そのファイルに独自の名前を付ける方法について説明します。

【用意するもの】
1. PDF ドライバ
 プリンタドライバと同様、PDF ドライバと FileMaker Pro の相性が合わないことも考えられますので、デモ版や無料版が利用可能であれば、それを利用することをお勧めします。

 実験で FileMaker との相性がいまいち合わなかったドライバ
 Primo PDF --- 自動化の際にユーザダイアログが必ず表示されてしまうので、連続実行には不向き。
 瞬簡PDF3 --- 処理の連続実行、大量処理時に FileMaker Pro がクラッシュする。

 当方のテストで比較的安定したパフォーマンスを記録したのは、PDFCreator だったので、今回は PDFCreator を使います。
PDF Creator の詳細とダウンロードはこちら

 ただし、FileMaker 側でループによるバッチ処理で PDF 作成を行うと、サイズの比較的大きいファイルを処理中に次のループが回ってしまうという現象が起こり、それによってデータの一部が欠けた PDF ファイルが作成されてしまうことがあります。
 FileMaker 側でループ待ち時間を調整することでこういったデータ欠損のあるファイルが発生することを回避することはある程度できますが、それでも FileMaker Pro とプログラム連携をさせる時点で 100% 安定したパフォーマンスが得られるわけではないことは念頭に入れておくと良いでしょう。

2. PetaExecute プラグイン
 MS-DOS コマンドを実行したときの戻り値をこのプラグインで取得します。
 PetaExecute の情報およびダウンロードはこちら

【操作手順】
1. PDFCreator をインストールし、Options 画面の Auto-save 画面で次のように設定を行います。



1) [Use Auto-save]にチェックを付けます。
2) [Filename]に任意の一時ファイル名を英字で入力します。この名前は FileMaker 側でも同じものを指定する必要がありますので、分かりやすいものがよいでしょう。
3) [Use this directory for auto-save]にチェックを付け、その下のボックスにファイルの保存先を指定します。この保存先のパス名も FileMaker 側で指定する必要があります。

2. PetaExecute プラグインを FileMaker Pro のインストールディレクトリ配下の System フォルダにコピーし、FileMaker Pro を起動してこのプラグインが有効になっていることを確認します。


 処理の流れはざっとこんな感じです。
1) 印刷実行。
2) 1) で PDF ドライバを選択した場合は、一時ファイルを所定の名前に変更(この例では PDF_本日の年月日.pdf)。

 特に留意していただきたいのは、一時ファイルが作成されるのに多少の時間がかかるため、一時ファイルがディスクに書き込まれていない段階でファイル名変更コマンド(ren コマンド)が実行されるとファイル名変更が失敗する可能性があります。
 このため、一時ファイルが作成されるまで、ファイルメーカー内で待ち時間ループを設ける必要があります。

 本操作を確認、実行するためのファイル群を用意しましたので、興味のある方はここからダウンロードしてお試しください。
PDFサンプル

【MS-DOS コマンドによる実行方法】
 PetaExecute と MS-DOS コマンドの組み合わせにより、PDF ファイルを任意の名前で変更します。
 当方で動作検証を行った結果、大量バッチ処理で安定した運用が可能であることを確認したため、基本的にはこちらの方法をお勧めします。

1. サンプルファイル PDFtest.fp5 を開き、FileMaker 環境設定のプラグインで PetaExecute にチェックが付いていることを確認します。

2. PDFCreator の一時ファイル名とファイルの保存先を FileMaker 側にも指定します。
(画面下部の[VBSファイルパス]はここでは使いません。)


3. “日記へ”ボタンをクリックして日記内容を入力し、“印刷”ボタンを押し、プリンタとして PDFCreator ドライバを選択して印刷します。
4. 1. で指定したファイルの保存先ディレクトリに PDF ファイルが作成されていれば成功です。

 このスクリプトの仕組みは、スクリプトメニューより「日記印刷_DOS」を開いて参照してください。

【VBScript による実行方法】
 前述の MS-DOS コマンドによる実行方法と比べるとバッチ処理の安定性が低下する可能性がありますが、VBScript の方が MS-DOS コマンドより細やかなファイル操作が可能ですので、ファイルシステムの詳細設定を兼ねながらファイル操作を行いたい場合にはこちらの方法が適していると言えます。
 今回のサンプルスクリプトでは、実行結果が MS-DOS コマンドによる方法と同様になるように VBScript を組んであります。ただ一箇所異なる点は、既存ファイルのバックアップ機能が用意されている点です。

1. サンプルファイル PDFtest.fp5 を開き、FileMaker 環境設定のプラグインで Local Data Access コンパニオンと PetaExecute にチェックが付いていることを確認します。
(VBScript でエラーが発生した場合に、FileMaker にエラーを返すために Local Data Access コンパニオンを有効にしておく必要があります。)

2. PDFCreator の一時ファイル名とファイルの保存先を FileMaker 側にも指定します。
[VBSファイルパス]には、今回の記事で配布しているサンプルアーカイブに用意されている PDFrename.vbs ファイルを格納するディレクトリを指定します。


3. “日記へ”ボタンをクリックして日記内容を入力し、“印刷VBS”ボタンを押し、プリンタとして PDFCreator ドライバを選択して印刷します。
4. 1. で指定したファイルの保存先ディレクトリに PDF ファイルが作成されていれば成功です

 このスクリプトの仕組みは、スクリプトメニューより「日記印刷_VBS」を開いて参照してください。

2009-07-07

Windows Server 2003 で Windows ファイアウォールを開こうとすると、Ipnat.sys 関連のエラーメッセージが表示される

 Windows Server 2003 で Windows ファイアウォールを開こうとすると、以下のようなメッセージが表示されてファイアウォール管理画面を開けないことがあります。

「ネットワークアドレス変換コンポーネント(Ipnat.sys)を使用している可能性がある、別のプログラムまたはサービスが実行中であるため、Windowsファイアウォールを実行できません。」

 これは環境に「ルーティングとリモートアクセス(RRAS)」サービスがインストールされている場合にプロセスの一部(Ipnat.sys)が Windows ファイアウォールのプロセスと競合を起こすために発生するエラーのようです。

同現象でお困りの方は、以下の手順で RRAS を完全に無効化することで対応できる可能性があります。

1. 「管理ツール」→「サービス」より、Routing and Remote Access を停止させ、無効にします。
2. 「管理ツール」→「コンピュータの管理」を選択し、左ペインより「サービスとアプリケーション」を選択します。
 右ペインで、「ルーティングとリモートアクセス」を右クリックし、そこに表示されるサブメニューより、「ルーティングとリモートアクセスの無効化」を選択します。

 上記 2. の手順は「サービス」からは無効化できないので、注意が必要です。

2009-03-11

EdMax のデータを Outlook Express に移行する方法

EdMax のデータを Outlook Express に移行するには少々コツが要ります。

【概要】
 EdMax のメールデータは、本文テキストと添付で保存場所が分かれている。添付ファイルについては専用のフォルダに添付データがそのまま格納されている。
 これに対し、Outlook Express のメールデータはすべて .mdb という一つのデータベースに格納されており、個々のメールは .eml という形式のファイルで取り出すことができる。また、添付ファイルもこの .eml に一緒に保存されている。

 つまり、EdMax メールの本文と添付ファイルを一つにマージさせて、それを .eml 形式に変換する操作によって移行作業を行う。

【操作方法】
1. EdMax のメールを UNIX MBOX 形式でエクスポートします。
 移行対象のメールを選択した状態で、「ファイル」→「エクスポート」の順に選択するとエクスポート用のダイアログが開きますので、次のように指定します。ファイル名には適当なものを付けてください。



(重要)[形式]には「再構成して保存(添付ファイル付き)」を選択してください。これによって、添付ファイルが本文にマージされて書き出されます。

 .mbx という拡張子を付けて“保存”をクリックします。(上記の例では exportmail.mbxと指定する)。このファイルには、選択したすべてのメールが格納されています。

 メールの添付ファイルが大きすぎたり、指定したメールの総容量が大きすぎる場合(最大サイズは 200MB の模様)、エクスポートに失敗しますので、適度なところで区切りながらエクスポートすることをお勧めします。

2. メール変換ツールを使って .mbx 形式のファイルを .eml 形式に分割変換します。
ここでは MailExp というツールを使います。今回は以下のサイトで配布されているものを使用しました。

http://www2.lint.ne.jp/~lrc/in_mailutl.htm

使い方は、入力側に .mbx ファイル(変換前のエクスポート済ファイル)を指定し、出力側に出力先のフォルダとファイル形式を指定します。ファイル形式は .eml にしてください。
“変換+分割 開始”ボタンをクリックすると、メールが連番で分割されます。

3. 2. で分割された .eml ファイル群を、Outlook Express の適切な場所(受信フォルダ、送信済フォルダなど)にドラッグします。

この操作を行うと、.eml ファイルが Outloox Express に追加され、Outlook Express で読み取りできるようになります。

2009-01-27

FileMaker Pro 9 のアクセス権設定方法(2)

 さて、前回は FileMaker Pro 9 のデータベースのアクセス権設定方法について説明しましたが、今回はログインの認証設定とFileMaker Server 9 のセキュリティ設定について説明していくことにします。

認証方法を外部サーバーにする
1. この操作を行うには、FileMaker Server 9 をインストールしてデータベースを公開しておく必要があります。以下の青で囲った部分のように、クライアント認証には「FileMaker と外部サーバーアカウント」を選択します。

 また、画面下にある接続の保護の「FileMaker Server への接続を保護する」にチェックを付けると、FileMaker Server へのアクセスが SSL で保護されるようになります。

2. FileMaker Pro 9 のメニューより、「ファイル」→「管理」→「アカウントとアクセス権」の順に選択し、表示されるダイアログから、認証方法を変更したいアカウントをダブルクリックして、「アカウントの編集」ダイアログを表示させます。

 ここで[アカウントの認証方法]には「外部サーバー」を指定します。これによって、Active Directory (Mac OS 環境では Apple OpenDirectory) による認証を FileMaker Sever 9 経由で行います。今回の記事では ActiveDirectory 環境での認証方法について説明します。

3. [グループ名には] Active Directory に登録されているアカウントグループを指定します。たとえば、Administrator という Active Directory アカウントを使って FileMaker Server 認証を行いたい場合は、Administrator が所属するアカウントグループを指定します。
 以下の図は、Active Directory のグループ Domain Users が所属するアカウントについて、データ入力権限のみを与えるように設定したものです。

 この場合、Domain Users に所属する Active Directory のどのユーザアカウントでログインを行っても、FileMaker データベース側の操作はデータ入力のみとなります。"OK"ボタンを押してダイアログを終了させます。

4. 一度データベースファイルを閉じ、Domain Users に所属するアカウント名を使ってログインをしてみてください。パスワードは Active Directory のアカウントに設定されているものを使用します。
 データ入力のみが許可されているようになっていれば成功です。

2009-01-26

FileMaker Pro 9 のアクセス権設定方法(1)

FileMaker Pro 9 で開発したデータベースにアクセス権を設定することによって、データベースアクセスのセキュリティを向上させることができます。また、FileMaker Server 9 との併用によって、さらにセキュリティを向上させることができます。

基本的なアクセス権の設定方法
1. データベースを開いてから、FileMaker Pro のメニューより、「ファイル」→「管理」→「アカウントとアクセス権」の順に選択すると、「アカウントとアクセス権の管理」ダイアログが開きます。

 この図は、以前当ブログで紹介させていただいたFileMaker API for PHP を使ったアンケートフォーム作成で使用した Comment.fp7 のアクセス権を表示したものです。
 [ゲスト]、Admin、webuser という 3 つのアカウントが表示されています。そのうち、[ゲスト]および Admin は FileMaker Pro データベース作成時にデフォルトで用意されているアカウントです。
 ここでは新しいアカウント「input」を作成して、アクセス権を設定してみることにします。
 “作成”ボタンを押して、[アカウント名]の欄に input と入力し、[パスワード]に適当なパスワードを入力します。運用にあたっては、パスワードは長めで特定されにくい文字列と数値を混ぜたものを指定します。[アクセス権セット]に「データ入力のみ」を指定します。
 ここまで指定すると、ダイアログは以下の図のようになります。
 
 [アカウントの認証方法]には、次の 2 種類があります。
 「FileMaker」--- FileMaker Pro のデータベースに設定したアカウントを使って認証を行う。
 「外部サーバー」--- Active Directory(Windows ドメイン)や Apple OpenDirectory などのアカウントグループを使って認証を行う。
 外部サーバーによる認証方法については後ほど説明しますが、今はデフォルトの「FileMaker」を指定しておいてください。

“OK” ボタンを押してダイアログを閉じます。

2. 一度ファイルを閉じ、input アカウントでログインします。フィールド内容の編集やレコード作成、削除はできますが、レイアウトの編集やスクリプトの編集などはできません。

独自のアクセス権セットを作成してみる

ここまでが基礎的なアクセス権の設定方法ですが、今度はデフォルトで用意されている 3 つのアクセス権セット([完全アクセス]、[データ入力のみ]、[閲覧のみアクセス])とは別に、独自のアクセス権セットを作成して割り当てる方法について説明します。

1. 先ほどのように、「アカウントとアクセス権の管理」ダイアログを開き、input アカウントをダブルクリックして「アカウントの編集」ダイアログを開きます。ここの[アクセス権セット]の一覧の一番下に表示されている「新規アクセス権セット」を選択します。
 すると、次のようなダイアログが表示されますので、ここにデータベースへのアクセス条件を設定していきます。


2. 「アクセス権セット」には適当な名前を付けます(ここでは「編集用」という名前にします)。
仮にこのような入力条件を考えてみます。

1) レイアウトは照会することができるがデザインの編集はできない。
2) レコードへの入力はできるが、作成と削除はできない。
3) 値一覧は表示できるが、編集はできない。
4) スクリプトは実行できるが、編集はできない。
5) ファイルメーカー側のメニューコマンドは、編集絡みのものだけに限定する。
6) データの持ち出しを許可しない(データのエクスポートを禁止する)。
7) データの印刷を禁止する。
8) FileMaker Server 9 でこのデータベースを公開したときにはアクセスできるようにする。
9) そのほか、input ユーザにとって相応しくないアクセスはすべて禁止する。

これをざっと盛り込むと、設定は次のようになります。上記の条件が盛り込まれていることを画面を見ながら確認してみてください。
 注意: 2) のレコード条件については、作成と削除を禁じるための設定をさらに行う必要があるので追って説明します。とりあえずこの図では「すべてアクセスなし」という表示になっています。


3. さて、ここでレコードの扱いをさらに細かく設定します。2) ではレコード入力は許可するが、作成と削除は禁止するということですので、今「すべてアクセスなし」となっている設定を、条件一覧より「カスタムアクセス権」を選択します。すると「カスタムレコードアクセス権」というダイアログが表示されます。


 Comment というテーブルを選択すると、そのテーブルに対するアクセス条件を設定できるようになります。ここで上記の条件に沿った設定を行うと次の図のようになります。レコードの作成と削除に「なし」が設定されていることに注目してください。


4. “OK”ボタンをクリックしてダイアログを閉じ、この「編集用」アクセス権セットを input アカウントに割り当てて動作を確認してみてください。

2009-01-16

brother 複合機 MFC-820CN の設定方法(送受信環境となるマシンの移行方法)

 brother 複合機 MFC-820CN を通常の Fax, プリンタ、スキャナとして使うことはもちろんのこと、ネットワーク上のコンピュータに接続することによって、受信した FAX を当該コンピュータ上に保存できるため、ペーパーレス化を図ることができます。

 今回は、あるコンピュータに設定されている MFC-820CN ソフトウェア・ドライバ環境を別の環境に移行する方法について説明します。

 MFC-820CN に付属の CD では、今のところ対応 OS が Windows 98/98SE/Me/2000 Professional/Windows XP, Mac OS9.1~9.2/Mac X 10.24 以降とあるので、それ以外の環境に入れようとするとインストールチェックで弾かれてしまうようです。現に Windows Server 2003、Windows Server 2008 に入れようとしたら見事弾かれてしまいました。
 というわけで、今回は Hyper-V のゲストOS となっている Windows Server 2000 に入れることにしました。

 手順は次のとおりです。

1. brother MFC-820CN に Ethernet ケーブルを接続し、LAN に参加させ、接続対象のコンピュータも LAN に参加させておく。
2. 付属の CD-ROM を使ってドライバとユーティリティソフトウェアをすべてインストールする。インストール時の接続オプションとして、「有線LAN接続」を選択してインストールを続行する。
3. すべてうまくインストールできたら、「スタート」→「プログラム」→「brother」→「MFC-820CN」→「リモートセットアップ」→「MFC-820CN」の順に選択。MFC-820CN 本体の現在の設定内容がダウンロードされてくるので、それを参考に設定を修正する。
 特に修正が必要なのは、MFC-820CN 本体に割り振る IP アドレスと、受信した Fax の扱いとなる。
 受信した Fax を印刷せずにファイルとしてコンピュータに保存する場合は、以下のように設定する。



 この後“OK”をクリックすると、設定内容が MFC-820CN にアップロードされる。

4. 「スタート」→「プログラム」→「brother」→「MFC-820CN」→「PC-FAX 受信」→「MFC-820CN LAN」の順に選択し、Fax 受信プログラムをタスクトレイに常駐させる。Fax が受信されるとこのアイコンが緑色から青色に変化し、受信された Fax は Presto! FileManager を使うことによって照会できる。

Presto! FileManager のデータファイルの移行方法
以前の環境の Presto! FileManager のデータ情報を新しい環境に移行するには、My Documents\My PageManager 配下のファイル群を新しい環境の同じ場所にコピーします。

Hyper-VゲストOSからUSB/eSATA対応外部ディスクを使う

 以下のページによると、バーチャルマシンは USB をサポートしないとあります。

次世代仮想化プラットフォーム「Hyper-V」研究
http://www.windows-world.jp/news/-/102390-2.html

Virtual Server 2005 R2以前、バーチャルマシンは非常にレガシーなハードウェアをエミュレートするものであった。エミュレートされるチップセット「Intel 440BX」は1998年の登場で、最大1GBのメモリに対応し、初めてACPI(Advanced Configuration and Power Interface)の電源機能とUSB(Universal Serial Bus)を実装したことで有名だ(バーチャルマシンはUSBをサポートしない)。


確かに今の設定では Hyper-V ゲスト OS 環境では USB が認識されない模様ですが、もっと確実な情報が収集できたところで、こちらの記事に情報を追加していきます。

2010/01/12更新
USB 接続された HDD をパススルーディスクと認識させるのは依然として無理なようですが、その代りに仮想ハードディスクを作成し、それを追加ドライブとして Hyper-V のゲスト OS に認識させることは可能ですので、ここにその方法を記述します。

1. ゲスト OS が起動中の場合は終了させます。外付け HDD はホスト OS からアクセス可能な状態にしておきます。
 Hyper-V マネージャの当該ゲスト OS の設定画面(ここでは Windows Server 2003)を開き、図のように新規の IDE コントローラにハードドライブを追加します。


 追加したハードドライブに仮想ハードディスクを割り当てます。“新規”ボタンを押すと、仮想ハードディスク作成ウィザードが表示されますので、指示に従って外付け HDD に仮想ハードディスク領域を割り当てます。

 “適用”ボタンを押し、変更を反映させます。

2. ゲスト OS を起動します。起動直後は、上記で追加した仮想ハードディスクは認識されない状態ですので、管理ツールから「コンピュータの管理」を起動し、「記憶域」配下の「ディスクの管理」を選択すると、以下のようにウィザードが表示されます。

 このウィザードは、追加された仮想ハードディスクをゲスト OS に認識させるためのディスク変換を行うためのものですので、指示に従ってディスク変換を行います。

3. ディスク変換直後はボリュームにドライブ名が付いていない状態ですので、変換したディスクを右クリックして、ボリュームドライブの割り当てとディスクフォーマットを行います。
 ドライブ割り当てとフォーマットが終了すると、以下のようになります。


 エクスプローラーで確認すると、この仮想ハードディスクが E: ドライブとして認識されていることがわかります。


 eSATA 接続された HDD についても、同様の方法で仮想ハードディスクを追加ドライブとして設定することができます。

(2010/04/27追記)
 同一の HDD に複数の vhd を事前に作成しておき、複数のゲスト OS に割り当てて認識させることも可能です。

2009-01-15

データベースの正規化

データベースの正規化、テーブル設計、ということはデータベース・アプリを開発したことがある者なら、一度はやったことがある筈。 まして、これを職業にしているならなおさら。

しかしいざ「正規化のやりかたを説明してみて」と問われると、ほとんどの開発者は困惑してしまうと思う。 文献や参考サイトをあたってみても、帯に短し襷に長し、である。
Wikipediaの正規化のページを見てると、

  • 第2正規形---あるリレーションが、第1正規形で、かつ、すべての非キー属性が、すべての候補キーに対して完全従属するとき、第2正規形 (second normal form; 2NF) であるという。つまり、第2正規形では、候補キーの一部に関数従属する非キー属性があってはならない。
とか書いてある。 これって日本語?

小社ではFileMaker というデータベース開発アプリケーションの講習を、主として初心者向けに時たま行っているが、正規化の話は避け、「同じ性質のデータをまとめて一つのテーブルにいれ、なるべく重複登録が起きないようにします」みたいに説明してきた。 「第一正規化とは…」とかやりだすと、受講生もこんがらがるし、こちらもこんがらがる。  しかし、「こんなことではいけない!」と改心し、モチベーションの高い受講者向けに正規化をできる限り噛み砕いて説明するため資料を作成してみた。 前述のWikipediaのような厳格な正規化の定義とはほど遠いが、実務上、なにかしかの役には立つのではなかろうか。
興味のある方→ こちら(PDF)こちら(Word)

以上

追記
上記の「同じ性質のデータをまとめて一つのテーブルにいれ、なるべく重複登録が起きないように」テーブルは設計する、というのはいい得て妙、だと思うんですが。


土屋

2009-01-13

セカンダリ DNS サーバを設定する

 弊社では内向き(LAN内からの参照用)と外向き(WANからの参照用)の二台の DNS サーバを運用していますが、今回外向き用 DNS サーバに対するセカンダリサーバを設置してみることにしました。

 今回使用したのは Windows Server 2008 の DNS サービスです。既存の DNS サーバは どちらもWindows Server 2000 Advanced で運用しています。

 今回成功したセカンダリ DNS サーバの設定方法は次のとおりです。
 
1. サーバーマネージャの役割から DNS サービスを追加します。
2. プライマリ DNS サーバ(外向き用)の localhost.dns および 0.0.127.in-addr.arpa.dns 以外のゾーンファイルを新しいサーバ側のゾーンファイルディレクトリにコピーします。
(ゾーンファイルは Windows Server 2000 は \WinNT\System32\dns 配下、Windows Server 2008 は /Windows/System32/dns 配下にあります。)
3. セカンダリ DNS サーバ側のゾーン追加で localhost をプライマリとして一旦登録します。
前方参照ゾーンを右クリックすると表示されるサブメニューから、「新しいゾーン...」を選択すると「新しいゾーンウィザード」が表示されますので、ここより[プライマリゾーン]を選択します。



 “次へ”をクリックして、「localhost」と入力します。これはセカンダリ DNS サーバ自身の参照を指します。



localhost のゾーンファイルを自動作成します。


“次へ”をクリックして、localhost ゾーン設定を一旦終了します。

4. 現在は localhost ゾーンはプライマリ DNS として動作するようになっているため、これをセカンダリ DNS に変更します。
localhost ゾーンを右クリックしてプロパティを開き、「全般タブ」のプライマリゾーンを以下のようにセカンダリに変更します。



次に、図のように参照先のマスタサーバ(プライマリDNSサーバ)のIP アドレスを指定します。

4. 残りのゾーンについても、一旦プライマリとして登録するという要領は localhost と同じですが、ゾーンファイルはすでにプライマリ DNS からコピーしてきたものがあるので、それを採用します。



この後にlocalhost ゾーンと同じように、セカンダリゾーンへの設定変更を行います。これと同じ操作を、前方参照ゾーン、逆引きゾーンの両方に対して行います。

ここまでがセカンダリ DNS のゾーン設定となります。

5. 次に、プライマリ DNS のゾーン転送設定を行います。これは、プライマリ DNS 側で DNS レコードの更新があった場合に、セカンダリ DNS 側にも通知を行ってゾーンの同期を行うためのものです。

 プライマリ DNS 側(今回は Windows Server 2000 Advanced)のゾーンを右クリックしてプロパティを開き、「ゾーンの転送」タブより、ゾーン転送を許可するサーバとして、今回新設した DNS サーバの IP アドレスを登録します。



 これと同じ操作を、前方参照ゾーン、逆引きゾーンの両方に対して行います。

6. 最後にゾーン転送の確認を行います。
新設したセカンダリ DNS サーバ(Windows Server 2008)側でゾーンの右クリックで表示されるサブメニューより、「マスタから転送」を選択すると、プライマリDNS からゾーン内容が転送されます。ゾーン転送が成功したかどうかは、イベントマネージャで確認できます。




補足:
メールサーバーを立てている場合は、逆引き設定をお忘れなく。これを忘れてしまうと、メール送信先のサーバで逆引きチェックが設定されている場合、送信したメールが弾かれてしまい、届かなくなってしまいます。

2009-01-07

『FlexMy売管』を作るぞ! (3) --- FileMaker から MySQLに接続できない!?


【FileMaker/MySQL関連の追加情報】
『売上猫くん on MySQL』開発日記の記事一覧
FileMaker/MySQL関連の記事が増えてきたので、目次にしました。(2012/06/25追記)

AccessとFileMakerの実行速度比較テスト記事とその動画 (2011/11/17追記)

FileMaker Pro 10/11、MySQL 5.1、ODBC 5.1.6~によるフリーウェア『売上猫くん on MySQL 5.0β』をリリースしました。ダウンロードは→こちら。 (2011/01/27追記)



前回、MySQL でデータベースとテーブルを一つ作成したので、FileMaker から接続できるか、試してみることにする。

1. 事前準備
FileMaker は MySQL には ODBC 経由で接続するので、まず、MySQLのODBCドライバ 3.51をインストール、さらにシステムDSNとして登録した。 接続テストを実行すると、「Success; connection was made!」と表示されるので、ここまでは問題ない。

2. FileMaker Pro 9 で接続できない!?いざFileMaker Pro 9を起動してテスト用ファイルを作成。[ファイル]メニュー→[管理]→[外部データソース...]を選択し、上記で作成したDSNを指定。

さらに、[ファイル]メニュー→[管理]→[データベース...]→[リレーションシップ]タグを選択し、ウィンドウ左下にある“+”ボタンをクリックしてMySQLのテーブルを選択、“OK”すると、

「必要なテーブルが見つからないため、この操作は実行できません。」

とメッセージが表示されてしまう。 そんなこと言っても、FileMaker はテーブルとして認識してるやん?
この後、いろいろやってみたが、どうも FileMaker Pro 9 は、MySQLのテーブル、コラムに日本語が使用されていると、そのテーブルは使用できないらしい。 SQL-Server は日本語使っても全然問題ないのに…
試しに、日本語を英語に変更してみると、ちゃんと使用できる。

ただ、今回はSQL-Server ベースの『FlexSql売管』をできる限り手間をかけずMySQL に移植する(テーブルさえ全部作ってDSNを入れ替えれば、『FlexMy売管』があっという間にできるだろう)ということを前提としていたので、いまさらコラム名(フィールド名)を変更する気力は、、、、無い、 全然。
ということで、FileMaker Pro 10 のリリースをまって、再度試してみる(かも)。

【メモ】
  • 実は、MySQLコマンドでもデータベース、テーブル、コラムに日本語を使用していると、文字化けする。My.iniをいじったり、コマンドプロンプトの環境をUTF8にしたりしてみたが、問題は解消せず。ただ、MySQL Administrator だけは、データベース構造に日本語を使用しても問題なく認識してくれる。
  • ODBC5.1を使用してDSNを作成しても駄目。
  • FileMaker Pro 10 プレリリース版を使用してもやっぱり駄目。
新情報
FileMaker社は公式にサポートを言っていないが、MySQL ODBC 5.1 だと、日本語OK。 昨年の3月位から某案件で使用し始め、今のところ大きなトラブルは無し。 この某案件については、時間があれば書きたいな、っとこちら
(2010/2/5追記)
(2010/2/19追記修正)
(2010/3/25ODBC5.1の部分を打ち消す)