【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.