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 룸 번호( htps //w w. 제대로 rk. 이 m/#! 리 d*** 의 rid 뒤의 번호 부분)
· · 수신처 메일 주소

입력 양식에 있는 "메시지 Chatwork 게시물 및 이메일 보내기"버튼을 클릭하면 메시지를 Chatwork 게시물 + 이메일로 전송합니다.



본 기사에서는 예시용으로,
 ·메세지 투고처의 Chatwork 룸 번호는 99999999
   (투고처의 Chatwork 룸이 htps //w w. 제대로 rk. 이 m/#! 리 d99999999 라고 하는 전제로 기재)
・송신처 주소는 example***@gmail.com
로 기재되어 있습니다.

(3) 입력 양식에서 입력한 내용의 Chatwork 투고



입력 양식에서 '메시지 Chatwork 게시 및 이메일 보내기' 버튼을 클릭하면 입력한 메시지가 Chatwork에 게시됩니다.



(4) 입력 양식에서 입력 한 내용의 메일 송신



지정된 대상 주소로도 메시지가 전송됩니다.



Salesforce 측 사전 설정



Apex 내에서는 ChatworkAPI 엔드포인트나 API 토큰을 Apex 클래스 내에는 하드 코딩 하지 않고 「커스텀 설정」으로부터 취득하도록 하고 있습니다.

Visualforce, Apex를 움직일 때 사전에 본 절의 설정을 실시했습니다.

설정 -> 빌드 -> 개발 -> 사용자 정의 설정을 클릭하여 ChatworkAPI 토큰, URL, 보낸 사람 메일 등의 환경 변수를 추가했습니다.









설정->관리->보안 제어->보안 제어->원격 사이트 설정을 클릭하여 ChatworkAPI의 API 끝점 URL( htps : // 아피. 제대로 rk. 이 m )을 추가했습니다.



만든 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 });

    }

}

이상이 됩니다.

좋은 웹페이지 즐겨찾기