Salesforce Visualforce + Apexで入力フォーム作成 (入力内容をChatWorkで通知 + メールで送信する)
はじめに
SalesforceのVisualforceページ及びApexクラスで入力フォームを作成し、フォームから入力したメッセージをChatworkへ投稿 + メール送信するプログラムを作ってみました。
Salesforceではなるべく標準機能を活用した方が良く、むやみにVisualforceページやApexクラスは作らない方が良いとは思っておりますが、自分の単純な興味と勉強がてら、Developer Editionで試してみました。
入力フォームの挙動、実際のVisualforceとApexのソースは後述致します。
実行環境
・Salesforce Developer Edition
(Salesforce.com Apex API version 42.0)
作成したVisualforce + Apex入力フォームについて
(1) 入力フォーム概要
VisualforceとApexで以下のような簡単な入力フォームを作りました。
(2) 入力フォームで入力する内容
入力フォームの各テキストエリアやテキストボックスでは、以下のような内容を入力します。
・Chatwork投稿メッセージ 及び メール本文
・Chatwork投稿メッセージタイトル 及び メール件名
・メッセージ投稿先のChatworkルーム番号( https://www.chatwork.com/#!rid******** の ridより後ろの番号部分)
・送信先メールアドレス
入力フォームにある「メッセージのChatwork投稿とメール送信」ボタンをクリックしますと、メッセージをChatwork投稿 + メール送信します。
本記事では例示用として、
・メッセージ投稿先のChatworkルーム番号は 99999999
(投稿先のChatworkルームが https://www.chatwork.com/#!rid99999999 であるという前提で記載)
・送信先アドレスは example***@gmail.com
として記載しています。
(3) 入力フォームから入力した内容のChatwork投稿
入力フォームで「メッセージのChatwork投稿とメール送信」ボタンをクリックすると、入力したメッセージがChatworkに投稿されます。
(4) 入力フォームから入力した内容のメール送信
指定した送信先アドレス宛てにもメッセージが送信されます。
Salesforce側の事前設定
Apex内ではChatworkAPIエンドポイントやAPIトークンをApexクラス内にはハードコーディングせずに「カスタム設定」から取得するようにしています。
Visualforce,Apexを動かすにあたり、事前に本節の設定を実施しました。
「設定」->「ビルド」->「開発」 ->「カスタム設定」をクリックし、ChatworkAPIトークンやURL、差出人メール等の環境変数を追加しました。
「設定」->「管理」->「セキュリティのコントロール」->「セキュリティのコントロール」->「リモートサイトの設定」をクリックし、ChatworkAPIのAPIエンドポイントURL( https://api.chatwork.com )を追加しました。
作成したVisualforceページのソース
(1) 入力フォーム用のVisualforceページ
・PostMessageFormページ
<apex:page controller="PostMessage">
<apex:form >
<apex:pageBlock title="PostMessageForm">
<apex:pageMessages />
<table class="chatwork_messages">
<tr>
<th>
Chatworkへ投稿するメッセージタイトル 及び 送信するメール件名を入力
</th>
<td>
<apex:pageBlockSection columns="1">
<apex:inputText id="chatwork_title" value="{!chatwork_title}" required="true" />
</apex:pageBlockSection>
</td>
</tr>
<tr>
<th>
Chatworkへ投稿するメッセージ 及び メール本文を入力
</th>
<td>
<apex:pageBlockSection columns="1">
<apex:inputTextarea id="chatwork_meesage" value="{!chatwork_message}" required="true" />
</apex:pageBlockSection>
</td>
</tr>
<tr>
<th>
Chatworkへメッセージを投稿する時の投稿先ルーム番号を入力
</th>
<td>
<apex:pageBlockSection columns="1">
<apex:inputText id="chatwork_post_room" value="{!chatwork_post_room}" required="true" />
</apex:pageBlockSection>
</td>
</tr>
<tr>
<th>
メッセージ送信先のメールアドレスを入力
</th>
<td>
<apex:pageBlockSection columns="1">
<apex:inputText id="to_mail_address" value="{!to_mail_address}" required="true" />
</apex:pageBlockSection>
</td>
</tr>
</table>
<apex:commandButton action="{!post_message}" value=" メッセージのChatwork投稿とメール送信 "/>
</apex:pageBlock>
</apex:form>
</apex:page>
作成したApexクラスのソース
(1) Visualforceで作った入力フォームのコントローラクラス
・PostMessageクラス
////////////////////////////////////////
// Visualforceで入力されたメッセージ内容やタイトル等をChatworkやメール配信するApexクラス
////////////////////////////////////////
public with sharing class PostMessage {
// Visualforceページのテキストエリアで入力されたChatworkへ投稿するメッセージ本文を取得
public String chatwork_message { get; set; }
// Visualforceページのテキストボックスで入力されたChatworkへ投稿するメッセージタイトルを取得
public String chatwork_title { get; set; }
// Visualforceページのテキストボックスで入力されたメッセージ投稿先のChatworkルーム番号を取得
public String chatwork_post_room { get; set; }
// Visualforceページのテキストボックスで入力されたメール送信先アドレスを取得
public String to_mail_address { get; set; }
public void post_message() {
PostChatworkMessage post_chatwork = new PostChatworkMessage();
SendMailMessage send_mail_message = new SendMailMessage();
String mail_subject = chatwork_title;
String mail_message = chatwork_message;
// Visualforceページで入力されたメッセージをChatworkへ投稿する
post_chatwork.post_chatwork_message( chatwork_title, chatwork_message, chatwork_post_room );
// Visualforceページで入力されたメッセージをメール送信する
send_mail_message.send_mail_message( mail_subject, mail_message, to_mail_address );
}
}
(2) Chatworkへのメッセージ送信クラス
・PostChatworkMessageクラス
////////////////////////////////////////
// Chatworkにメッセージを投稿するApex
////////////////////////////////////////
public with sharing class PostChatworkMessage {
// カスタム設定からChatwork APIトークン情報等を取得
private static String ChatworkApiEndPointURL;
private static String ChatworkApiToken;
private static String ChatworkApiVersion;
static {
ChatworkApiSetting__c setting = ChatworkApiSetting__c.getInstance();
ChatworkApiEndPointURL = setting.ChatworkApiEndPointURL__c;
ChatworkApiToken = setting.ChatworkApiToken__c;
ChatworkApiVersion = setting.ChatworkApiVersion__c;
}
public void post_chatwork_message(String chatwork_title, String chatwork_message, String chatwork_post_room) {
String result_message = '';
Http http = new Http();
HttpRequest request = new HttpRequest();
request.setEndpoint(ChatworkApiEndPointURL + '/' + ChatworkApiVersion + '/rooms/' + chatwork_post_room + '/messages');
request.setMethod('POST');
request.setHeader('X-ChatWorkToken', ChatworkApiToken);
request.setBody('body=' + '[info][title]' + chatwork_title + '[/title]' + chatwork_message + '[/info]');
HttpResponse response = http.send(request);
Integer status = response.getStatusCode();
if ( status == 200 ) {
result_message = response.getBody();
} else {
result_message = status.format() + response.getBody();
}
}
}
(3) メール送信クラス
・SendMailMessageクラス
////////////////////////////////////////
// メッセージをメール送信するApex
// 詳細は以下を参照。
// https://developer.salesforce.com/docs/atlas.ja-jp.apexcode.meta/apexcode/apex_classes_email_outbound_single.htm
////////////////////////////////////////
public with sharing class SendMailMessage {
// カスタム設定からメール送信設定等を取得
private static String MailReplyAddress;
private static String MailSenderDisplayName;
static {
MailSetting__c setting = MailSetting__c.getInstance();
MailReplyAddress = setting.MailReplyAddress__c;
MailSenderDisplayName = setting.MailSenderDisplayName__c;
}
public void send_mail_message(String mail_subject, String mail_message, String to_mail_address) {
Messaging.SingleEmailMessage mail = new Messaging.SingleEmailMessage();
mail.setToAddresses(new String[]{to_mail_address});
mail.setReplyTo(MailReplyAddress);
mail.setSenderDisplayName(MailSenderDisplayName);
mail.setSubject(mail_subject);
mail.setPlainTextBody(mail_message);
// メッセージをメール送信
Messaging.sendEmail(new Messaging.SingleEmailMessage[] { mail });
}
}
以上になります。
Author And Source
この問題について(Salesforce Visualforce + Apexで入力フォーム作成 (入力内容をChatWorkで通知 + メールで送信する)), 我々は、より多くの情報をここで見つけました https://qiita.com/na0AaooQ/items/6f4a5ff6229bf040c571著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .