忍者ブログ
全くIT系ではない製造業の社員がイントラ上でColdFusionと格闘。システム構築を外部委託するとき「できればColdFusionでお願いします」と頼むのだが・・・・
[1] [2] [3] [4] [5]
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

オシム氏は、オシムシが、おしむしの・・・・・
"オシムシ"って何か耳障り。
そろそろ"オシム監督"になるから気にならなくなるかな。

さて、

今朝ほどある部門の人に、「80人くらいに一斉メールを送りたい」 と相談がありました。
あるのは名前とメールアドレスが入ったエクセルのリスト。
聞くと、年に何度か送る必要が出てくるとのこと。送信者リストは追加削除がたまに発生する様子。

ということで、チャラっと作ってさし上げました。

リストはMS Accessでもいいというので、Accessにしてもらい、サーバー上のAccessを直接編集してもらうことにして、ColdFusionサーバーでデーターソースを設定。データーソース名は"mdsendmail"

短いのでソースは全部掲載します。
内容的にはColdFusionでメールを送ったことの無い、初心者向けです。

=====[mdsendmail.cfm]================================================
<cfprocessingdirective pageencoding="UTF-8">
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>更新メール通知</title>
</head>
<cfquery datasource="mdsendmail" name="send">
select username , email from md_user
</cfquery>
<body>


<cfmail from="okurinushi@hoge.co.jp" to="#email#" subject="ほにゃららのお知らせ" query="send">
お世話になっております。
━【 お知らせ 】━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
 このメールは、
 ほにゃらら 
 な方にお送りしております。
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━【 お知らせ 】━

#username# 様

うららうららうらうらら。
じゅげむじゅげむごこうのすりきれず。かいじゃりすいぎょのすいぎょうまつ
うんらいまつふうらいまつ。

くうねるところにすむところ。

━【  発信元  】━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
 ほにゃらら株式会社
  ふがふが部
 住所:東京都
  okurinushi@hoge.co.jp
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
</cfmail>
</body>
</html>
=========================================================================

ほぼ見ての通り。このページ、mdsendmail.cfm をブラウザで呼べば、80人全員に1通ずつ、メール本文中にご本人のお名前入りでメールが送られます。

ColdFusion初心者向けに解説。
◆1 <cfquery・・・> で、送信対象リストを取得します。ここでは、md_userテーブルにある、emailusername を全部取ってきます。クエリ名はsendとしました。

◆2 <cfmail>タグを使って、先ほどのquery="send" を指定します。
cfmailタグでquery= を指定すると、そのクエリ結果(この場合は80名)に対し、順番にメールを送ってくれます。ループ等を書く必要はありません。
その際、to= の所に、クエリ結果に含まれているメールアドレスを指定します。to="#email#"
#でくくるのはColdFusionのお約束で、変数を表します。正しく書けば to="#send.email#"となりますが、この場合は省略可能ですね。
あと、from に送信者、subjectにメールのタイトルを入れます。他にもいろいろパラメーターはありますが、最低この程度ですね。(→LiveDocs
◆3 本文を、<cfmail> </cfmail> タグ間に書きます。
改行などは、そのまま表現されます。
また、本文中に 鈴木宗男様 などと個別の名前を入れたい場合は、(クエリ結果に名前が存在する前提ですが) 直接、
 #username# 様
などと書けば、そこに当てはめてくれます。

以上で出来上がり。ブラウザでこのページmdsendmail.cfmを呼べば、送信完了です。(正確にはキューに入る)

実務上は、「送信しますか?」 の確認を出したり、一度管理者にテスト送信したりしますね。
ブラウザをリロードするだけで、もう一度同じメールが大量に送られちゃったりしますから注意が必要です。

私も何度か冷や汗をかいたことが・・・・・(^-^;A

PR
最近、再放送のチャングムにはまってます。

さて、

これの作り方、その1です。
news_sample.gif

DBのフィールドは以下の通り。
HIDUKE DATE,
SINBUN VARCHAR2(40),
KEYWORD VARCHAR2(1024),
TITLE VARCHAR2(1024),
LNO NUMBER(2,0) DEFAULT 0,
SEQ NUMBER(6,0),
DEL_F NUMBER(1,0) DEFAULT 0
2001年から人間RSSデータが溜まっています。
昔はACCESSで担当者がちまちまやっていたようですが、途中で引き継いでシステムにした経緯があります。ACCESSからOracleに移行したのですが、PK(プライマリーキー)が無いのがいただけないところ・・・・
とりあえずそのまま使ってます。

今日のところは表示だけさせてみましょう。
まずはDBにクエリを発行します。
<cfquery datasource="etc" name="portalnews">
SELECT
HIDUKE , SINBUN , KEYWORD , TITLE , LNO , SEQ
FROM EI_NEWS
WHERE HIDUKE = '#form.selectday#' AND DEL_F <> 1 ORDER BY LNO
</cfquery>
ColdFusionの大好きな所のひとつがこのSQLの発行方法ですね。
ColdFusionAdministratorでデーターソース(DBとの接続)を定義してしまえば、こんな感じに<cfquery>タグでSQL文を#変数#含め直接記述できます。
aspとかphpだと、SQLの文字列を作らなきゃならない・・・・
SQLがらみのデバッグがとてもラクだと思います。

さて、このクエリで得られたある日(#form.selectday#)のニュースサマリをFlashGridで表示するには、
<cfform format="flash" action="news_summary.cfm" style="border-style:solid; font-size:14px" timeout="60" height="350">
 <cfgrid format="flash" name="newsgrid" query="portalnews" rowheaders="no" height="300">
  <cfgridcolumn name="lno" width="30" type="numeric" header="No" >
  <cfgridcolumn name="sinbun" width="50" header="新聞名">
  <cfgridcolumn name="keyword" width="100" header="見出し">
  <cfgridcolumn name="title" header="サマリー">
  <cfgridcolumn name="SEQ" display="no">
 </cfgrid>
</cfform>
こんな感じです。
できあがりのキャプチャはこちら。
ちなみにこのキャプチャはMacromedia(Adobe)Captivate で録ってます。

<cfgrid>→LiveDocs )は<cfform>でネストする必要があります。

<cfform>

 <cfgrid>
  <cfgridcolumn>
 </cfgrid>
</cfform>
こういう関係。

<cfgrid query="portalnews"> と先ほどのクエリ名を指定する。
<cfgridcolumn name="keyword"> とselectしたフィールドを指定する所がキモ。
あとのパラメータは見栄えの部分ですね。

とりあえず今日はここまで。
愛と平和を歌う世代がくれたものは
 身を守るのと知らぬそぶりと悪魔の魂
隣の空は灰色なのに
 幸せならば顔をそむけてる

・・・・そむけても灰色です。

さて、

本日はあんまり作りませんでした。
ちょっとだけUDF(ユーザー定義関数)をつくってコリコリした程度です。
以前200くらいのクエリを発行するページの記事を書きましたが 、その続き。表示部分です。

クエリがたくさんあるので、表示もタイヘン。
できるだけループで処理するわけですが、表示するだけではなく、それぞれリンクを作ったりするわけです。
その辺の処理で使うUDF。

クエリ結果に入っている発注者名を連続表示し、発注者コードを引数にリンクを作っています。
<cffunction name="mlink" output="true">
<cfargument name="qname" required="yes" type="string">
<cfloop query="#qname#"><a href="javascript: openWindow('edit_main.cfm?hachucd=#HACHUCD#');" title="#hachucd#">#RNAME#</a>&nbsp;</cfloop>
</cffunction>

cffunction(→LiveDocs)は、javascriptなんかでも良く出てくる関数を定義するタグです。
最初に書いても最後に書いてもいいわけですが、なんか気持ち的に最初に書くことが多いでしょうか。
今回はcfc(ColdFusionコンポーネント)は使っていません。

値を返すような関数的な使う事の方が多い気がしますが、今回のように表示に使う場合、output="true"と書かないと、#変数#を使うことができません。
<cfargument>では、受け取る値の器を定義します。この場合、qnameという変数を用意しています。ここにはクエリ名が入ります。

関数を使うときは、
<cfoutput>#mlink("AA0101")#</cfoutput>
といった風に、引数としてクエリ名を書く感じです。すると、そのクエリにある顧客名を表示し、顧客コードによるリンクがずらっと生成されます。
実際は、そこをループで廻すので、
<cfloop list="#catList#" index="i">
#mlink("AA#i#")# <br />
</cfloop>
としています。

こんな感じに強引にできちゃう所もColdFusionの好きなところ。

♪土日も休まずに 築 宅 築 宅
 おじまさんといっしょに 築 宅 築 宅♪
耳から離れません。

さて、

何かの時に「プロってのは、エラー処理まで考えるんだよ」という話を聞いた覚えがあります。
エラーが出たら出っぱなしになるのがアマチュア。想定できるエラーなら処理を考えておくのがプロってことでしょうか。

まぁσ(・・*)はプロフィールにあるとおりプロじゃないわけですが、アマとしてのエラー処理くらいはやっておこうと思います。自動スケジュールものは、エラーが出ても気がつかないことが多いので、「通知」する程度のエラー処理ですが。

<cftry>
 <!--- ■RSS get --->
 <!--- ■xml解析 --->
 <!--- ■内部mt_entry更新 --->
 <!--- ■表示部分 --->
 <!--- ■html作成 --->
 <!--- ■ftpでput --->
<cfcatch>
 <cfmail from="server@hoge.co.jp" to="cfif@hoge.co.jp" subject="RSS更新のエラーでてますって!">
  #cfcatch.message#
  例外エラー、type = #CFCATCH.TYPE# を検出しました。
</cfcatch>
</cftry>

こんな感じで、エラーが想定される場所を<cftry>→LiveDocsでくくって、エラーが起きたときの処理を<cfcatch>→LiveDocs )に書くのが基本です。すると、例えばRSSのxmlをcfhttpで取れなかった時や、putに失敗した時など、何らかのエラーが発生した場合に<cfmail>→LiveDocs )でColdFusionがメールを送ってくれます。

なんでもかんでも一緒くたにメール飛ばすだけ ってところがアマチュア対応ですなぁ。


愛という字は真心で、 恋という字は下心。

・・・・最近肩こりがひどくなってきました。

さて、
取ってきたRSSから新着を取って、それをhtmlファイルにして社外にFTPでputする最後の部分です。
使うColdFusionのタグは、<cffile>→LiveDocs ) と <cfftp>→LiveDocs

まず、htmlファイルの元ネタを文字列変数にします。
<cfset htmlDoc = '
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>各ブログのRSSを取ってくる</title>
</head>'>
こんな感じで、改行含めてそのまんま変数に突っ込んでいきます。

それから
<!--- ■File書き込み --->
<cffile action="write" output="#htmlDoc#" file="/var/www/blogs/ftp/test.html" >
ここで file はサーバーの絶対パスです。windowsなら、D:\inetpub\wwwroot\・・・・とか。
これでファイルがColdFusionサーバー側に作成されます。

そんでもって、
<!--- ■FTP --->
<cfftp action = "open" username = "hoge" connection = "Blogs_new" password = "hoge" server = "hoge.co.jp" stopOnError = "Yes">
 
<cfftp action="putfile" connection="Blogs_new" localfile="/var/www/blogs/ftp/test.html" remotefile="/blogs_html/test.html">

 
<cfftp action = "close" connection = "Blogs_new" stopOnError = "Yes">


action="open" でFTPサーバーに接続して、
action="putfile" でPUT。
action="close" で接続のクローズ。
行儀良くやるとこんな感じですかね。実は今回初めて使ったタグです。

初めてでもColdFusionのリファレンス(Dreamweaverのヘルプからいつも開いてます)を見れば、ちょっとの試行錯誤ですぐ使えるので、ColdFusionが大好きです。


次回はエラー処理についてでも。
こういう自動スケジュールモノってエラーが出ても気がつかないことが多いですからね。




ブログ内検索
プロフィール
HN:
CFIF
性別:
男性
自己紹介:
もっと日本でもColdFusionが広まって欲しいです。

情報通信を生業としない企業の、システム系でもない普通の社員なので、 ColdFusionは独学。参考書が少ないのがツライです・・・・なんだかんだ、ColdFusion4.xのシリウス時代から7年くらいのおつきあい?リンコムNextのソースが教科書かも。

外注するときはよく「できればColdFusionで・・・・」とお願いするのですが、ほとんどの場合「えっ!?」と驚かれてしまい、「SEのアサインが・・・」などと営業さんが困ってしまうことが多くて悲しいです。
ちょっとしたものなら自分でシステム構築しちゃいますが、一人でやるには時間が足りませんね・・・

FlashRemotingとかもやりますが、Flexには手を出してません。
と、最初の頃書きましたが、ついにFlexに手を出しました。Flex1.5はイマイチわかりませんでしたが、Flex2は別物ですね。これで6万円でイインデスカ?
そしてFlex2とColdFusionの組み合わせなら無敵な気がしますよ。ほんとに。
最新トラックバック
カレンダー
04 2024/05 06
S M T W T F S
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
なかのひと
忍者ブログ [PR]