目次
ColdFusionを使ったシステムを考えました。
Web関係のシステムであれば、比較的簡単に作成できます。
まだまだFAXは利用されているところがあると思いますが、
送信する側は楽でも、受信する側は、紙を準備したりとか、
なにかと面倒なもの。
最近では、FAX内容が添付ファイルとして、
メール受信できるサービスもでてきました。
今回は一般的にありそうな事例を元に考えてみたいと思います。
今後店舗が増えるにつれて担当者の作業が多くなるので、自動化したい
※店舗から複数回の送信があった場合、最新のものを有効とする
時間帯によって処理内容が違うので、それと同等の処理を、
パラメータ付で実行・検証できるようにする。
今回のテストデータとして、以下のようなデータにしました。
※test@hoge.comは適当です。
<datas> <data id="1"> <tenpo>札幌</tenpo> <tenpo_kana>さっぽろ</tenpo_kana> <fax>0000000001</fax> <mail>test@hoge.com</mail> </data> <data id="2"> <tenpo>那覇</tenpo> <tenpo_kana>なは</tenpo_kana> <fax>0000000002</fax> <mail>test@hoge.com</mail> </data> <data id="3"> <tenpo>青森</tenpo> <tenpo_kana>あおもり</tenpo_kana> <fax>0000000003</fax> <mail>test@hoge.com</mail> </data> <data id="4"> <tenpo>鹿児島</tenpo> <tenpo_kana>かごしま</tenpo_kana> <fax>0000000004</fax> <mail>test@hoge.com</mail> </data> <data id="5"> <tenpo>盛岡</tenpo> <tenpo_kana>もりおか</tenpo_kana> <fax>0000000005</fax> <mail>test@hoge.com</mail> </data> <data id="6"> <tenpo>宮崎</tenpo> <tenpo_kana>みやざき</tenpo_kana> <fax>0000000006</fax> <mail>test@hoge.com</mail> </data> <data id="7"> <tenpo>仙台</tenpo> <tenpo_kana>せんだい</tenpo_kana> <fax>0000000007</fax> <mail>test@hoge.com</mail> </data> <data id="8"> <tenpo>大分</tenpo> <tenpo_kana>おおいた</tenpo_kana> <fax>0000000008</fax> <mail>test@hoge.com</mail> </data> <data id="9"> <tenpo>秋田</tenpo> <tenpo_kana>あきた</tenpo_kana> <fax>0000000009</fax> <mail>test@hoge.com</mail> </data> <data id="10"> <tenpo>熊本</tenpo> <tenpo_kana>くまもと</tenpo_kana> <fax>0000000010</fax> <mail>test@hoge.com</mail> </data> </datas>
クエリデータに変換すると、
データベースのように並び替えできたりするので便利です。
実際に使うプログラムとテスト用のプログラムの両方で使用できるように、
別ファイルに関数を作成しました。
<cffunction name="getXmlToQry" returntype="query" output="false"> <cfargument name="path" type="string" required="yes"> <cfset var qData = QueryNew("id,tenpo,tenpo_kana,fax,mail","integer,varchar,varchar,varchar,varchar")> <cfset var sData = ""> <cfset var xmlData = ""> <cfset var idx = ""> <!--- data.xmlの取得 ---> <cffile action="read" file="#GetDirectoryFromPath(arguments.path)#data.xml" variable="sData" charset="utf-8"> <!--- xmlに変換 ---> <cfset xmlData = XmlParse(sData)> <cfloop index="idx" array="#xmlData.datas.XmlChildren#"> <cfset QueryAddRow(qData)> <cfset QuerySetCell(qData, "id", idx.XmlAttributes.id)> <cfset QuerySetCell(qData, "tenpo", idx.tenpo.XmlText)> <cfset QuerySetCell(qData, "tenpo_kana",idx.tenpo_kana.XmlText)> <cfset QuerySetCell(qData, "fax", idx.fax.XmlText)> <cfset QuerySetCell(qData, "mail", idx.mail.XmlText)> </cfloop> <cfreturn qData> </cffunction>
以下は取得したXMLデータをクエリにしてダンプしたものです。
ダンプはcfdumpタグで可能です。
上記のダンプのデータに、「pdf」という項目を追加し、
メール受信のデータの添付ファイルの絶対パスをセットしたものを用意して、
店舗かな順にソートしてからPDFの結合をしたソースです。
request.work_dirは、添付ファイルを保管する場所、
request.mrg_pdfは結合するファイル名です。
<cfquery name="qData" dbtype="query"> select * from qData order by tenpo_kana </cfquery> <cfpdf action="merge" destination="#request.work_dir##request.mrg_pdf#" overwrite="yes"> <cfloop query="qData"> <cfpdfparam source="#qData.pdf#"> </cfloop> </cfpdf>
社長宛のメール送信です。
requestがついている変数名は、事前に別ファイルでセットします。
<cfmail from="#request.mail_from#" to="#request.mail_to#" subject="【FAXシステム】売上:(社長)" port="#request.mail_port#" server="#request.mail_server#" username="#request.mail_username#" password="#request.mail_password#" useTLS="#request.mail_useTLS#" > PDFは、店舗(かな)順になっています。 <cfmailparam file="#request.work_dir##request.mrg_pdf#"> </cfmail>
こちらも同様に、requestがついている変数名は、
事前に別ファイルでセットします。
generateUniqueFilenames="yes"を指定すると、
添付ファイル名が重複した場合は、自動的に重複しないようにします。
<cfpop server = "#request.mail_pop_server#" action = "getAll" attachmentPath="#request.work_dir#" generateUniqueFilenames="yes" name="qMail" username="#request.mail_pop_username#" password="#request.mail_pop_password#" >
いったんメール受信して、MessageNumberを指定して削除します。
今回は複数のMessageNumberをリスト形式にして、
一気に削除しています。
<cfset listMessageNumber = ValueList(qMail.MessageNumber)> <cfpop action="delete" server = "#request.mail_pop_server#" username="#request.mail_pop_username#" password="#request.mail_pop_password#" MessageNumber="#listMessageNumber#" >
時間帯によって処理が分岐されるか確認。
あとは、パラメータをつけて、それぞれの処理を実行し、検証。
このページの内容をまとめた無料レポートを作成しました。
そして、ソースをまとめました。
「うたらぼプライム」に参加するとダウンロードできます。
ぜひ、ソースを確認していただいて、役立ててください。