2012-02-18

Force.com : Apex でカスタマポータルユーザを作成したい


Apex でカスタマポータルユーザを作成したい



○ カスタマポータルユーザ作成
    // 取引先作成
    Account account = new Account(Name='取引先名');
    insert account;

    // プロファイル取得
    Profile cpprofile = [select id from Profile where name='Customer Portal Manager Custom'];

    // カスタマポータルユーザ作成

    // Worker(デフォルト)
    Contact contact = new Contact(email='test_cp@test.co.jp', firstname='foo', lastname='boo', accountid=account.id);
    insert contact;
    User cp = new User(alias = 'standt', email=contact.Email,
        emailencodingkey='UTF-8', lastname=contact.LastName, languagelocalekey='en_US',
        localesidkey='en_US', profileid = cpprofile.Id,
        timezonesidkey='America/Los_Angeles', username='test_cp@test.co.jp',
        contactId=contact.Id);
    insert cp;

    // Manager
    Contact contactManager = new Contact(email='test_cp_m@test.co.jp', firstname='foo', lastname='boo', accountid=account.id);
    insert contactManager;
    User cpManager = new User(alias = 'standt', email=contactManager.Email,
        emailencodingkey='UTF-8', lastname=contactManager.LastName, languagelocalekey='en_US',
        localesidkey='en_US', profileid = cpprofile.Id,
        timezonesidkey='America/Los_Angeles', username='test_cp_m@test.co.jp',
        contactId=contactManager.Id, PortalRole='Manager');
    insert cpManager;

    // Executive
    Contact contactExecutive = new Contact(email='test_cp_ex@test.co.jp', firstname='foo', lastname='boo', accountid=account.id);
    insert contactExecutive;
    User cpExecutive = new User(alias = 'standt', email=contactExecutive.Email,
        emailencodingkey='UTF-8', lastname=contactExecutive.LastName, languagelocalekey='en_US',
        localesidkey='en_US', profileid = cpprofile.Id,
        timezonesidkey='America/Los_Angeles', username='test_cp_ex@test.co.jp',
        contactId=contactExecutive.Id, PortalRole='Executive');
    insert cpExecutive;



◆ メモ
■ 注意
  • User オブジェクトの DML 操作を行うと
    System.DmlException: Insert failed. First exception on row 0; first error: MIXED_DML_OPERATION,非設定オブジェクトを更新した後の設定オブジェクト上の DML 操作 (またはその逆) は、許可されていません...
    等というエラーが発生する場合がある。(Ex. ユーザ insert 後に PortalRole の update を行う)
    その詳細は ここ を参照。仕方ない、仕様なのだから。



◇ 環境

  • Salesforce - Enterprise Edition - API バージョン 24.0



◇ 参考


0 件のコメント:

コメントを投稿