見出し画像

スクラッチ組織で主従関係を扱う時の注意点

スクラッチ組織で主従関係のカスタム項目を持つカスタムオブジェクトを作成し、sfdx force:source:deploy でSandboxに転送するときには注意が必要です。

作成したカスタムオブジェクトの共有設定を見ると、親レコードに連動となっています。

ところが、sfdx force:source:pullでスクラッチ組織から取得すると、カスタムオブジェクトのメタファイル(カスタムオブジェクト名__c.object-meta.xml)の公開/参照・更新可能(sharingModelがReadWrite)となります。

<?xml version="1.0" encoding="UTF-8"?>
<CustomObject xmlns="http://soap.sforce.com/2006/04/metadata">
 ・・・中略・・・
   <allowInChatterGroups>false</allowInChatterGroups>
   <compactLayoutAssignment>SYSTEM</compactLayoutAssignment>
   <deploymentStatus>Deployed</deploymentStatus>
   <enableActivities>false</enableActivities>
   <enableBulkApi>true</enableBulkApi>
   <enableFeeds>false</enableFeeds>
   <enableHistory>false</enableHistory>
   <enableLicensing>false</enableLicensing>
   <enableReports>false</enableReports>
   <enableSearch>false</enableSearch>
   <enableSharing>true</enableSharing>
   <enableStreamingApi>true</enableStreamingApi>
   <label>Webリード</label>
   <nameField>
       <label>名前</label>
       <type>Text</type>
   </nameField>
   <searchLayouts/>
   <sharingModel>ReadWrite</sharingModel> ← ココ!!
   <visibility>Public</visibility>
</CustomObject>

この状態で、Sandboxにソースを転送すると以下のエラーになります。

Cannot set sharingModel to ReadWrite on a CustomObject with a MasterDetail relationship field

対応するには、カスタムオブジェクトのメタファイルを以下のように修正します。

<?xml version="1.0" encoding="UTF-8"?>
<CustomObject xmlns="http://soap.sforce.com/2006/04/metadata">
 ・・・中略・・・
   <allowInChatterGroups>false</allowInChatterGroups>
   <compactLayoutAssignment>SYSTEM</compactLayoutAssignment>
   <deploymentStatus>Deployed</deploymentStatus>
   <enableActivities>false</enableActivities>
   <enableBulkApi>true</enableBulkApi>
   <enableFeeds>false</enableFeeds>
   <enableHistory>false</enableHistory>
   <enableLicensing>false</enableLicensing>
   <enableReports>false</enableReports>
   <enableSearch>false</enableSearch>
   <enableSharing>true</enableSharing>
   <enableStreamingApi>true</enableStreamingApi>
   <label>Webリード</label>
   <nameField>
       <label>名前</label>
       <type>Text</type>
   </nameField>
   <searchLayouts/>
   <sharingModel>ControlledByParent</sharingModel> ← ココ!!
   <visibility>Public</visibility>
</CustomObject>

これでSandboxにソースを転送できます。さらにはこのままスクラッチ組織に転送しても問題ありません。

この記事は、sfdxのバージョンがsfdx-cli/7.45.1-bc18d49798のものです。今後、バージョンアップされると解決される可能性があります。

この記事が気に入ったら、サポートをしてみませんか?
気軽にクリエイターの支援と、記事のオススメができます!
生涯現役なデベロッパーを目指しています。Typescript、Javascript、Salesforceのフルスタックデベロッパーとして日々コードを綴っています。コードを綴る中で、「これは!?」と思ったものを記事にしています。
コメントを投稿するには、 ログイン または 会員登録 をする必要があります。