[Salesforce] 個人取引先から法人取引先へ、法人取引先から個人取引先に変換するApex

Salesforce Tech

(イメージしてた通りにスコンとはいかなかったので、ソリューション考えた方がみんな幸せになる気がしている)

個人的にはこれ、もうAccount – Contact の関係性じゃなくて Acocunt – Person でいいんじゃないかって思うんだけどねえ。
単純なリレーションっでの表現ってなかなか難しい時代だと思うし。

さておき。公式ではデータローダー使って書き換えてからアップデートしろって書いてあるけど、そんな面倒な事はしたくないので、開発者コンソールからApex叩けばいいよねって。

Change business accounts to person accounts https://help.salesforce.com/articleView?id=000323364&type=1&mode=1

毎度ながらやろうとしたことは @tyoshikawa1106 さんが既にやっている。感謝。

個人取引先→法人取引先

// 法人取引先のレコードタイプ取得
// ※レコードタイプ名は組織によって異なります
RecordType recordType = [SELECT Id FROM RecordType WHERE DeveloperName = 'Corporation' AND SObjectType = 'Account' LIMIT 1];
// 変換したい個人取引先データを取得
Account personAccount = [SELECT Id FROM Account WHERE Id = '001XXXXXXXXXXXXXXX' LIMIT 1];
// 個人取引先のレコードタイプをセット
personAccount.RecordTypeId = recordType.Id;
// 更新
update personAccount;

法人取引先→個人取引先

個人取引先にする場合は、紐付いている取引先のデータが消えてしまうこともあるので、色々注意しながら進める。

// 個人取引先のレコードタイプ取得
RecordType recordType = [SELECT Id FROM RecordType WHERE DeveloperName = 'PersonAccount' AND SObjectType = 'Account' LIMIT 1];
// 変換したい法人取引先データを取得
Account account = [SELECT Id FROM Account WHERE Id = '001XXXXXXXXXXXXXXX' LIMIT 1];
// 個人取引先のレコードタイプをセット
account.RecordTypeId = recordType.Id;
// 更新
update account;

取引先と取引先責任者の所有者が実行するユーザーではないとき(自分)は下記のエラーが出るため、所有者を自分にする必要がある。

(所有者を両方別のユーザーに揃えてもダメだったので、自分に合わせたところ無事通った。この方法だとコンバート後の取引先所有者が自分になるためだろう。)

Line: 10, Column: 1
System.DmlException: Update failed. First exception on row 0 with id 0010o00002tut14AAA; first error: INVALID_PERSON_ACCOUNT_OPERATION, account cannot be converted to person-account: []

本当いつもお世話になってます…。