InfoPath 2003 互換オブジェクト モデルに用意されている Application オブジェクトの MachineOnlineState プロパティを使用すると、ユーザーのコンピュータがネットワークに接続されているかどうかをフォーム コードで確認できます。
MachineOnlineState プロパティを使用する
次の例では、ユーザーのコンピュータがオンラインかオフラインかに基づいてフォームを送信する方法を決定するロジックを、フォーム コードに追加する方法を示します。
この例では、販売報告書を送信するためのフォームが既に作成されているものとします。フォームには、報告書の対象期間 (年と月) を指定する "period" というフィールドがあります。また、データ接続、およびユーザーがオンラインのときに報告書を送信するロジックも既に定義されているものとします。
フォームを電子メール メッセージの添付ファイルとして送信するデータ接続を追加する
InfoPath マネージ コード フォーム テンプレートを作成するか開きます。
InfoPath デザイン モードで、[ツール] メニューの [データ接続] をクリックします。
[データ接続] ダイアログ ボックスで、[追加] をクリックします。
データ接続ウィザードで、[データの送信] をクリックし、[次へ] をクリックします。
ウィザードの次のページで、[電子メール メッセージとして送信] をクリックし、[次へ] をクリックします。
ウィザードの次のページで、[宛先] ボックスに電子メール アドレスを入力します。
[件名] ボックスで次の操作を行い、売り上げ期間と "Sales Report" というテキストを組み合わせます。
[件名] ボックスの隣の [数式] ボタンをクリックします。
[数式の挿入] ダイアログ ボックスで、[関数の挿入] をクリックします。
[関数の挿入] ダイアログ ボックスで、[カテゴリ] 一覧の [テキスト] をクリックし、[関数] 一覧の [concat] をダブルクリックします。
[ダブルクリックしてフィールドを挿入してください] の最初のインスタンスを、"Sales Report: " という文字列 (単一引用符を含む) に置き換えます。
[ダブルクリックしてフィールドを挿入してください] の 2 番目のインスタンスをダブルクリックします。
[フィールドまたはグループの選択] ダイアログ ボックスで、period フィールドを選択します。
[ダブルクリックしてフィールドを挿入してください] の最後のインスタンスを削除し、[OK] をクリックします。
ウィザードで [次へ] をクリックします。
ウィザードの次のページで、[このデータ接続の名前を入力してください] ボックスに「E-mail Submit」と入力し、[完了] をクリックします。
ユーザーのコンピュータの接続状態に従ってフォームを送信するロジックを追加する
InfoPath デザイン モードで、[ツール] メニューの [フォームの送信] をクリックします。
[フォームの送信] ダイアログ ボックスで [送信コマンドおよびボタンを有効にする] をクリックし、[送信先] ボックスで [フォームコードを使用したユーザー設定送信] を選択します。
[フォームのコードを編集] チェック ボックスをオンにし、[OK] をクリックします。
OnSubmitRequest イベント ハンドラの下に、次の 2 つの関数を追加します。
public void OnlineSubmit(DocReturnEvent e) { // Logic for submitting online goes here. } public void OfflineSubmitX(DocReturnEvent e) { // Access and submit to the e-mail adapter. DataAdaptersCollection myDataAdapters = thisXDocument.DataAdapters; EmailAdapterObject submitAdapter = (EmailAdapterObject) myDataAdapters["E-mail Submit"]; submitAdapter.Submit(); // Notify the user that the form was submitted offline. System.Text.StringBuilder message = new System.Text.StringBuilder(); message.Append("You submitted your Sales Report offline. "); message.Append("Your Sales Report is in your outbox "); message.Append("and will be submitted when you connect to "); message.Append("the network."); thisXDocument.UI.Alert(message.ToString()); // The submission was successful. e.ReturnStatus = true; }
OnSubmitRequest イベント ハンドラ関数に、次の if ステートメントを追加します。
// Check the computer's connection state. if (thisApplication.MachineOnlineState==XdMachineOnlineState.xdOnline) { OnlineSubmit(e); } else { OfflineSubmit(e); }
コードをテストする
ソリューション エクスプローラでプロジェクトを右クリックし、[プレビュー] をポイントし、[既定] をクリックします。
フォームにデータを入力します。
Microsoft Internet Explorer を起動します。
Internet Explorer で、[ファイル] メニューの [オフライン作業] をクリックします。
InfoPath で、[送信] をクリックします。フォームが電子メール メッセージとして送信されることを示すメッセージが表示されます。
[送信] をクリックします。フォームがオフラインで送信されたことを示すメッセージが表示されます。