【Salesforce】portal account owner must have a role

【Salesforce】portal account owner must have a role

SalesforceのApexコードにて、テストクラスを作成していました。

テストを実行するポータルユーザを作成する処理でエラーが発生したのでメモです。

System.DmlException: Insert failed. First exception on row 0; first error: UNKNOWN_EXCEPTION, portal account owner must have a role

ポータルの取引先はロールを設定する必要があるとのこと。

ポータルユーザはロールを設定しろということでしょうか。

ちなみに、イメージ的にはこんなテストコードでした。

Profile p;
Contact c;
User u;

// プロファイルを取得する
p = [select Id from Profile where Name = 'ProfileName' limit 1];

// 取引先責任者を作成する
c =  new Contact();
c.lastName = lastName;
c.Email = 'TEST + 'Date.today().format() + '@test.com';
insert c;

// ユーザを作成する
u = new User();
u.ProfileId = p.Id;
u.ContactId = con.Id;
u.lastName = 'TEST';
u.Alias = 'TEST';
u.Email = c.Email;
u.UserName = c.Email;
u.CommunityNickname = c.LastName;
u.EmailEncodingKey = 'ISO-2022-JP';
u.TimeZoneSidKey = 'Asia/Tokyo';
u.LocaleSidKey = 'ja_JP';
u.LanguageLocaleKey = 'ja';
insert u;   // ここでエラー

ポータルユーザのロールは、取引先から自動で作成されますね。

しかし、作成した取引先責任者には取引先が設定されていないため、ロールを作成することができません。

そのため、ユーザを作成した際にロールを設定することができず、エラーとなったようです。

取引先責任者に取引先を設定することで解決できます。

Profile p;
Account a;
Contact c;
User u;

// プロファイルを取得する
p = [select Id from Profile where Name = 'ProfileName' limit 1];

// 取引先を作成する
a =  new Account();
a.Name = 'TEST';
insert a;

// 取引先責任者を作成する
c =  new Contact();
c.AccountId = a.Id;
c.lastName = lastName;
c.Email = 'TEST + 'Date.today().format() + '@test.com';
insert c;

// ユーザを作成する
u = new User();
u.ProfileId = p.Id;
u.ContactId = con.Id;
u.lastName = 'TEST';
u.Alias = 'TEST';
u.Email = c.Email;
u.UserName = c.Email;
u.CommunityNickname = c.LastName;
u.EmailEncodingKey = 'ISO-2022-JP';
u.TimeZoneSidKey = 'Asia/Tokyo';
u.LocaleSidKey = 'ja_JP';
u.LanguageLocaleKey = 'ja';
insert u;   // ここでエラー

ちょっと分かりづらいメッセージではありますよね。

No comments.

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です