当ブログではアフィリエイト広告を利用しています

サンプルコード

カスタマーポータルユーザの作成(Apex Class サンプルコード)

今回のサンプルは、取引先責任者IDを使ってカスタマー取引先ポータルのユーザを作成するApexコードのサンプルをご紹介します。

主に以下のような用途で利用いただけます。

・ポータルサイトを使って、お客様からのお問い合わせの管理を行ったり、お客様に向けてナレッジなどの情報を提供する

【必要なライセンス】

カスタマー取引先ポータル(カスタマーポータル)を利用するためには、カスタマーポータルユーザライセンス(※1)が必要となります。

※Experience Cloudユーザライセンス(外部ユーザラインセンスとして、Customer Community、Customer Community Plusのいずれか)

代理店などの自社パートナーに対しては、別のパートナーコミュニティラインセンス(Partner Community)が用意されているので注意

チロ
Developer Edition環境を使えば動作検証は可能です

Developer Edition(無料の開発環境)を持っていない方は、以下の記事を参考にSalesforce組織を取得してください。

参考セールスフォースの基礎Ⅰ(3)Developer組織の作成~ログインまで

【第三回】セールスフォースの基礎講義 前回の記事では、インスタンスとリージョンの考え方や基礎用語について解説しました。 今回は実際にSalesforceの開発環境を作成して、実際に操作しながら学ぶため ...

続きを見る

カスタマーポータルユーザの作成(ApexTriggerサンプルコード)

ポータルユーザ作成処理

/**
 * クラス名:CreateCommunityUser 
 * 処理概要:
 * 作成者:CreativeContentLabTokyo
 * 作成日:2022/06/10 
 *  
*/
global class CreateCommunityUser{

    //カスタムExceptionの定義
    public class CustomException extends Exception {}
    
    /** 
     * メソッド名:createCommunityUserByContactId
     * 処理概要:取引先責任者のIDを使って、コミュニティユーザを作成
     * 引数:取引先責任者ID
     * 戻り値:ユーザレコード
    **/
    WebService static User createCommunityUserByContactId(String contactId) {
    
      //取引先責任者のIDを使って、氏名とメールアドレスの情報を取得
      Contact contactRec = [SELECT FirstName,LastName,Email,AccountId 
                        FROM Contact WHERE Id =: contactId LIMIT 1];
                           
      //カスタマーコミュニティユーザのプロファイル名を指定してプロファイルIDを取得
      //Profile prof = [SELECT Id,Name FROM profile WHERE name='Customer Community User' LIMIT 1];
      //標準のCustomer Community Userの利用は推奨されないため、コピーしてカスタムプロファイルを生成しておく
      Profile prof = [SELECT Id,Name FROM profile WHERE 
                     name='Custom Customer Community User' LIMIT 1];
      
      //ユーザ名生成
      String strUserName = contactRec.Email + 'ccltPortail';

      //ニックネーム生成
      String strNikcname;
      if(contactRec.FirstName == null){
          strNikcname = contactRec.LastName + Math.random();
      } else {
          strNikcname = contactRec.FirstName + Math.random();
      }
      
      //Alias生成(姓名の文字列短い場合を考慮してパディングしておく)
      String strAlias = String.valueOf(contactRec.LastName.substring(0,1) 
                  + Math.random() ).leftPad(3,'0').substring(0,5);
      
      //カスタマーコミュニティユーザを作成 
      User newCommunityUser = new User(contactId = contactId, 
                          username = strUserName, 
                          firstname = contactRec.FirstName,
                          lastname = contactRec.LastName, 
                          email=contactRec.Email,
                          communityNickname = strNikcname,
                          alias = strAlias, 
                          profileid = prof.Id, 
                          emailencodingkey='ISO-2022-JP',
                          languagelocalekey='ja', 
                          localesidkey='ja_JP', 
                          timezonesidkey='Asia/Tokyo');                  

    try {
          insert newCommunityUser ;
          
    //例外発生時処理
    } catch(DMLException ex) {
        //その他例外処理
        Throw new CustomException('[Exception]'+ex.getMessage());
    }
    //正常終了の場合、作成したユーザレコードを返却
      return newCommunityUser ;

    }
}

テストクラス(CreateCommunityUserTest.cls)

/**--------------------------------------------------------------------------
 * プログラム名:CreateCommunityUserTest
 * 概 要 :CreateCommunityUserテストクラス 
 * 作成日 :2022.06.10
 * 作成者 :cclt
 * --------------------------------------------------------------------------**/
@isTest(SeeAllData=false)
private class CreateCommunityUserTest {

    // テストデータのセットアップ
    @testSetup
    static void initTest(){ 
        // 取引先の作成
        Account acc = new Account(Name='クリエイティブコンテンツラボトウキョウ');
        insert acc;
        // 取引先に紐づく取引先責任者を作成
        contact con = new Contact();
        con.FirstName ='David';
        con.LastName ='cclt';
        con.AccountId = acc.Id;
        con.Email='cclt.customerportaltest@gmail.com';
        insert con;
    }

    @isTest static void Test_Case_createCommunityUser() {   

        //取引先責任者IDを取得
        Contact con = [select id,FirstName,LastName,AccountId,Email 
                        From Contact limit 1];
        User portalUser;
        //テスト開始
        Test.startTest();
            //カスタマーコミュニティユーザ作成処理実行
            portalUser = CreateCommunityUser.createCommunityUserByContactId(con.Id);
        
            //テスト終了
        Test.stopTest();

        //検証
        System.assert(portalUser != null);
        System.assert(portalUser.Email.equals(con.Email));
        
    }   

    @isTest static void Test_Case_ContactNameNull() {   

        // 不正な取引先責任者を作成
        contact con = new Contact();
        con.FirstName ='';
        con.LastName ='cclt';
        insert con;
        User portalUser;
        //テスト開始
        Test.startTest();
            try {
                //カスタマーコミュニティユーザ作成処理実行
                portalUser = CreateCommunityUser.createCommunityUserByContactId(con.Id);             
            } catch (Exception ex) {
                //検証
                System.assert(ex.getMessage().contains('FIELD_INTEGRITY_EXCEPTION'));
            }
            //テスト終了
        Test.stopTest();
        
    }   
}

 

サンプルコード一覧へ戻る場合は、こちらへ

参考サンプルコード(テンプレート)Apex/Lwc/Visualforce/Flow

Salesforceの開発を行うときにベースとなるサンプルコードを探すことが多いので、カテゴリごとにサンプルをまとめてみました。 Apex Apex処理サンプル タイトル サンプルコード 説明 カスタ ...

続きを見る

-サンプルコード
-, , , , , ,