- PR -

◆【ClickOnce 運用上の疑問点】ClickOnceデータ・ファイル(mdf)のバックアップやmail送受信管理は?

投稿者投稿内容
One.net
大ベテラン
会議室デビュー日: 2008/03/01
投稿数: 202
投稿日時: 2008-06-26 23:37
ClickOnceアプリケーションのデータ・ファイル(mdf等)をバックアップしたり、サーバとの間でmail送受信
したり又は年次更新するためには、従来の一般的な配布方法と比べ次のような複雑さが増加したと思われます。
1.クライアントに配布するClickOnceデータ・ファイル保存場所は事前に取得できないこと
2.ClickOnceアプリケーションの更新処理やロールバックによって保存場所が変化すること
3.従来のC:\Program Files保存と比べ、データ・ファイルパスの階層が深く、見つけるのに困難なこと
4.開発環境下のデータ・ファイル保存場所とクライアントでのデータ・ファイル保存場所は大きく違うこと
以上のことから従来は手作業で可能な処理もプログラム化する必要があると考えております。
【質問内容】
上記した作業の中でも特に、あるクライアントのデータ・ファイルに大きな変更や複雑な更新が発生
した場合等、サーバからmeil添付で送信したデータ・ファイル(圧縮)をClickOnceデータ・ディレクトリ
に上書き保存させることはほとんど不可能と考えます。こんな処理をClickOnceアプリケーションの簡単な操作で
行う方法はないでしょうか。
ご存知方法があれば教えていただきたくアップしました。

修正:meil添付で受信 → meil添付で送信

[ メッセージ編集済み 編集者: One.net 編集日時 2008-06-27 09:06 ]
ぴんふ
ベテラン
会議室デビュー日: 2006/07/13
投稿数: 80
投稿日時: 2008-06-27 11:08
こんにちは。ぴんふです。

クライアントはデータファイルのメールをどうやって受信するのですか?
One.netさんが作ったClickOnceアプリケーションにメール受信機能があるのですか?それともクライアントのメーラー(OutLookやらベッキーやら)で受信するのですか?
One.net
大ベテラン
会議室デビュー日: 2008/03/01
投稿数: 202
投稿日時: 2008-06-27 11:24
ぴんふさん、いつもありがとうございます。
引用:

ぴんふさんの書き込み (2008-06-27 11:08) より:
クライアントはデータファイルのメールをどうやって受信するのですか?


サーバーからクライアントに通常のOutlook Express等を使って修正されたClickOnceアプリケーションの
データ・ファイル(mdf等)を添付して送信し、クライアントはこれを受信する一般的な
メール通信で行います。
データ・ファイルに大きな変更や複雑な更新が発生した場合だけで、実際には大変少ないケースですが、
このようなクライアントの個別対応が出来なければ訪問するなどの手間が要してしまいます。
引用:

One.netさんが作ったClickOnceアプリケーションにメール受信機能があるのですか?


クライアントからサーバーへのClickOnceデータ・ファイル送信はボタン1つで送信する機能を備えていますが、
クライアント側の受信方法をどのようにすればよいかを検討しているところです。
このアプリケーションはチエンストアーと本部や営業所と本社などを想定下さい。

修正:メール受信機能の追加、アプリケーションの想定を追加

[ メッセージ編集済み 編集者: One.net 編集日時 2008-06-27 11:52 ]
ぴんふ
ベテラン
会議室デビュー日: 2006/07/13
投稿数: 80
投稿日時: 2008-06-27 11:55
ベタな方法ですがこれじゃだめ?

1.アプリケーション側の実装
(1)データファイルがシステムドライブの特定フォルダに保存されていることを前提とした作りにする。
システムドライブ名はEnvioromentクラスのメソッドで取得
特定フォルダ名はApp.configにでも定義
(2)データ保存機能(画面)を追加。
SaveFileDialogでも使って任意のフォルダから(1)の特定フォルダに上書きできるようにする。
※データファイルが実行ファイルと同じフォルダだというのであれば1.(1)は不要ですが。

2.ユーザの対応
(1)メール添付のデータファイルはユーザが任意のフォルダに一旦保存。
(3)1.(2)のアプリケーションのデータ保存機能で(1)のフォルダから特定フォルダに上書き。

修正します。
×(3)1.(2)のClickOnceアプリケーションのデータ保存機能で(1)のフォルダから特定フォルダに上書き。
○(3)1.(2)のアプリケーションのデータ保存機能で(1)のフォルダから特定フォルダに上書き。
理由:ClickOnceのウィザードに「データ保存機能」があると勘違いされないようにするため。

[ メッセージ編集済み 編集者: ぴんふ 編集日時 2008-06-27 12:33 ]
ぴんふ
ベテラン
会議室デビュー日: 2006/07/13
投稿数: 80
投稿日時: 2008-06-27 12:04
本題からは外れますが、
引用:

このアプリケーションはチエンストアーと本部や営業所と本社などを想定下さい。



となるとデータは本部・本社のサーバに置いて、チェーンストア・営業所のクライアントはWebや専用線でサーバに接続しデータ参照・更新をする方式にすべきではないですか?

せっきー
会議室デビュー日: 2006/10/16
投稿数: 3
お住まい・勤務地: 神田
投稿日時: 2008-06-27 12:34
ClickOnceで作ったPOSレジシステムですが、
http://www.dtpnet.jp/main/cvnet/cvpos.html
ローカルに置くデータのパスは以下のようにしています。
string appData = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);
string folder = appData + "\\" + System.Windows.Forms.Application.CompanyName + "\\" + System.Windows.Forms.Application.ProductName;
if(!System.IO.Directory.Exists(folder)) {
System.IO.Directory.CreateDirectory(folder);
}
return folder;
参考までに。
One.net
大ベテラン
会議室デビュー日: 2008/03/01
投稿数: 202
投稿日時: 2008-06-27 12:53
ぴんふさん、ありがとうございます。
現在ぴんふさんの投稿(投稿日時: 2008-06-27 11:55)を検証しています。検証でき次第報告
いたしますが、先の提案についての返事ですが、チェーンストア・営業所だけではなく会員や
クラブ、同好会など資本関係のないケースもプランに入れておりますので Webや専用線等は
難しいと考えています。とりあえずお返事まで・・・・・

せっきーさん、ご親切にありがとうございます。
最初の質問に書きましたデータファイルのバックアップ及びその復元やデータファイルの年次更新
又はクライアントからサーバーへのデータファイル(mdb等)のメール送信機能は既に
完成済みですがサーバーからクライアントへのメール送信に関するアイデァがなく困っていました。
もう少し検討します。
One.net
大ベテラン
会議室デビュー日: 2008/03/01
投稿数: 202
投稿日時: 2008-06-27 13:06
ぴんふさん、せっきーさんありがとうございました。
そういえば市販のソフトで2つのソフトがあり、片方のソフトの処理結果(データ)をもう一方のソフトに
渡している処理がありました。そのソフトもぴんふさんのいわれるようにあらかじめ定められたフォルダーに
あらかじめ定められた名前のファイルがあれば、そのファイルを定められた場所にコピーしていました。
この方法をヒントに、私なりに次のような処理を考えました。

まず、メールで受信した添付ファイルを「名前をつけて保存」の既定場所でありますMy Documentsフォルダに
あらかじめ定めた名前(例えばABC)のフォルダを次のように自動作成しておきます。

引用:

Imports System.Deployment.Application '------------Imports の設定
Dim ABC_Path As String = Environment. _
GetFolderPath(Environment.SpecialFolder.Personal) & "\ABC"
'----------My Documents にABCフォルダがなければABCフォルダを作成
System.IO.Directory.CreateDirectory(ABC_Path)

'--ABC_Path に"Access.gz" が存在するかをチェックし、
' 存在すれば自動的に解凍して自動的にClickOnceデータ・ディレクトリ
' に次のように上書き保存します。
Dim outFile As String
Dim gzipFile As String = ABC_Path & "\Access.gz"
If System.IO.File.Exists(gzipFile) = True Then '--ファイルの存在のチェック
outFile = ApplicationDeployment.CurrentDeployment.DataDirectory
Back_restore(gzipFile, outFile) '--Back_restore() は解凍モジュール
System.IO.File.Delete(gzipFile) '--gzipFileの削除
End If



以上のようにクライアントへClickOnceDataFile(Access.gz)をメール送信する場合にメール本文に
添付ファイルの保存方法を図面入りで詳しく説明すれば階層の深いClickOnceデータ・ディレクトリ
にも容易に上書き保存することが可能となるはずです。
実際にテストしてみて結果をこのスレッドに報告しますが、取り急ぎありがとうございました。


_________________
編集:引用の範囲を変更、"Dim ABC_Path As String ="に変更

[ メッセージ編集済み 編集者: One.net 編集日時 2008-06-27 19:01 ]

[ メッセージ編集済み 編集者: One.net 編集日時 2008-06-28 10:10 ]

スキルアップ/キャリアアップ(JOB@IT)