[SalesForce] SFDX PersonAccount: ERROR: Entity of type ‘RecordType’ named ‘Account.Business_Account’ cannot be found

Here is my issue: ERROR: Entity of type 'RecordType' named 'Account.Business_Account' cannot be found.

What I did

  • Converted existing managed package into SF DX project.

  • The project uses PersonAccount and State and Country/Territory Picklists.

My steps

  • Check sfdx version:
$ sfdx -v

sfdx-cli/6.1.19 (darwin-x64) node-v9.4.0

$ sfdx plugins

no plugins installed
  • Create new scratch org, org definition:
{
    "orgName": "basepack1",
    "edition": "Enterprise",
    "country": "US",
    "description": "",
    "hasSampleData": "false",
    "features": ["PersonAccounts"],
    "orgPreferences": {
        "enabled": ["S1DesktopEnabled"]
    }
}
  • Before first push check remote status:
$ sfdx force:source:status -r

=== Source Status
STATE       FULL NAME                 TYPE        PROJECT PATH
Remote Add  Account.Business_Account  RecordType
  • Try to pull even with -f and see the error:
$ sfdx force:source:pull

ERROR:  Entity of type 'RecordType' named 'Account.Business_Account'
cannot be found.
  • Open scratch org, enable State&Countries, then PUSH project, create new PermSet no problems here.

  • Check status local and remote:

$ sfdx force:source:status

=== Source Status
STATE       FULL NAME                 TYPE           PROJECT PATH
Remote Add  Account.Business_Account  RecordType
Remote Add  Address                   Settings
Remote Add  ScratchPermSet            PermissionSet
  • Try to pull even with -f flag, same problem.
$sfdx force:source:pull -f

ERROR:  Entity of type 'RecordType' named 'Account.Business_Account'
cannot be found.

What I tried so far:

  1. Add to .forceignore this line: force-app/main/default/objects/Account/recordTypes/Business_Account.recordType-meta.xml

UPD

I was able to reproduce the issue using clean project. I assume my project is not corrupted and it is a bug.

The issue is in Scratch orgs with Person Account AND Namespace.

Here are the steps:

$ sfdx force:project:create -n geolocation
$ sfdx force:config:set defaultdevhubusername=_HubWithNameSpace_
set namespace in sfdx-project.json
set Person account feature in project-scratch-def.json
$ sfdx force:org:create -f config/project-scratch-def.json --setalias geons --setdefaultusername
$ sfdx force:source:status

=== Source Status
STATE FULL NAME TYPE PROJECT PATH
Remote Add Account.Business_Account RecordType

$ sfdx force:source:pull
ERROR: Entity of type 'RecordType' named 'Account.Business_Account' cannot be found.

$ sfdx force:apex:class:create -n MyClass
$ sfdx force:source:status

=== Source Status
STATE FULL NAME TYPE PROJECT PATH
Local Add MyClass ApexClass force-app/MyClass.cls
Local Add MyClass ApexClass force-app/MyClass.cls-meta.xml
Remote Add Account.Business_Account RecordType

$ sfdx force:source:push
=== Pushed Source
STATE FULL NAME TYPE PROJECT PATH
Add MyClass ApexClass force-app/MyClass.cls
Add MyClass ApexClass force-app/MyClass.cls-meta.xml

$ sfdx force:source:pull
ERROR: Entity of type 'RecordType' named 'Account.Business_Account' cannot be found.

After that you can ONLY push your changes, BUT will not be able to pull anything from org.

Please share your ideas how to solve this, thanks.

Best Answer

I'll answer as I did find some kind of workaround

Those steps allow me to work DX-style with Managed Package, Namespace and Person Account

1 Create scratch org WITHOUT Namespace, using flag -n, --nonamespace

sfdx force:org:create -f config/project-scratch-def.json -a ScratchNONameSpace -s -n

2 First thing is to pull Account.Business_Account, which works as expected

$ sfdx force:source:status -r

=== Source Status
STATE       FULL NAME                 TYPE        PROJECT PATH
Remote Add  Account.Business_Account  RecordType

$ sfdx force:source:pull

=== Pulled SourceSTATE  FULL NAME                 TYPE        PROJECT PATH
Add    Account.Business_Account  RecordType  force-app/main/default/objects/Account/recordTypes/Business_Account.recordType-meta.xml

3 Create scratch org WITH Namespace

sfdx force:org:create -f config/project-scratch-def.json -a ScratchWithNameSpace -s

4 Check status, you'll see conflicts

$ sfdx force:source:status
=== Source Status
STATE                      FULL NAME                 TYPE        PROJECT PATH

Local Add (Conflict)       Account.Business_Account  RecordType  force-app/main/default/objects/Account/recordTypes/Business_Account.recordType-meta.xml
Remote Changed (Conflict)  Account.Business_Account  RecordType  force-app/main/default/objects/Account/recordTypes/Business_Account.recordType-meta.xml

5 Push your code using flag -f, --forceoverwrite

$ sfdx force:source:push -f
=== Pushed Source
STATE  FULL NAME                 TYPE        PROJECT PATH

Add    Account.Business_Account  RecordType  force-app/main/default/objects/Account/recordTypes/Business_Account.recordType-meta.xml

$ sfdx force:source:status
=== Source Status
No results found

After that you would be able to push/pull without issues.