...
...
...
...
...
...
...
Info |
---|
hmm, error.
Even though I’m within the dates of the preview as specified here https://developer.salesforce.com/docs/atlas.en-us.220.0.sfdx_dev.meta/sfdx_dev/sfdx_dev_scratch_orgs_version_selection.htm |
Tip |
---|
This is fixed now! (As of 10-Jan) So try again! |
So I start again without the Preview Org and run the command and I have a scratch org.
Open the scratch org with
Code Block |
---|
sfdx force:org:open |
...
...
...
And there it is, Dreamhouse app ready to go.
Now, Commit to ensure Git is all nice and clean ready for the next step.
...
...
...
Next Day
When opening VS Code again and trying to log back into the scratch org it was interesting that it wasn’t just connected. All the sandboxes I am connected to are still connected when I do force:org:list. So I had to do
...
...
...
For me for now, I’m just going to forget brokers, and manually deal with Record Types. It’s a cop out, I know, but this project is just to get me started with Scratch Orgs.
...
Install an App
Of course you will need to install apps in your Scratch Org. I need to install Doug Ayers Mass Action Scheduler. Thankfully Doug provided the Package IDs on his release page https://github.com/douglascayers-org/sfdx-mass-action-scheduler/wiki/Release-Notes but you can usually see them in the install URLs for the version you are installing.
Code Block |
---|
sfdx force:package:install --package "04XXXXXXXXXXXX" |
OMG how easy is that! (Of course I don’t know how easy it is to do with all the options you need like restricting profiles, but for regular installs it’s easy).
Doug’s app is one that requires a Connected App and Named Credential set up. So this is going to get difficult when setting up the scratch org again. The Named Credential comes down when I pull the source, but the endpoint is hard coded to the My Domain, which won’t exist in a new scratch org. So the Named Credential will have to go into .forceignore and these steps will have to be done manually. (There could be a way to do this with scripting but I don’t need to know this yet).
Also, the configuration in MAS is data and there is not an easy way to move configs between orgs yet, and it relies on the Named Credential so I will just have to create it each time… there is only one MAS configuration for my demo so that’s fine.
Get a Password
The last thing I need to do for my demo is export data from a report into Excel using Enabler4Excel. For that I need to be able to log into the org using OAuth, and therefore I need a Password. To get a password you do
Code Block |
---|
sfdx force:user:password:generate |
Interestingly I had to use Sandbox as my OAuth endpoint to login. I thought Developer Orgs were “Production” orgs - maybe scratch orgs are different or maybe because I am using my production org as the Dev Hub. Dunno.
Re-Creating the Scratch Org
So the whole point of the Scratch Org is to re-create it from Source.
Now that the preview error is sorted, I have a preview developer org.
Tip |
---|
Let that sink in! A preview developer org. We haven’t been able to have those before. Pre-release orgs, yes, but developer orgs, no. |
So I do
Code Block |
---|
sfdx force:source:push |
Debugging Issues
And I get the dreaded message <unknown> duplicates value on record with id: <unknown>. This is where the time sink starts. How does a company the size of Salesforce allow an error of that level of bullshit even get out. It’s even worse than a Gack!
Plus I’ve got some flow errors that are related to new flow features that I’m not even using. (Similar to this).
Trying to work this out:
Disable field tracking on the one object that has it
Put my flows into .forceignore (that didn’t work).
Disable field tracking on the two fields that have it.
Delete flows completely (they are still in my git).
Hmm, that worked. Weird.
Revert my flows
Nope, same error.
So there is an error with Flows. I don’t want to have to re-create my whole 4 flows again, since flows are the basis of my demo!
But something in that flow error article made me think of the API version. Since I’m going into a preview org, maybe I need to update the API. But it should not be the case, because it should be backwards compatible. This post tells me how to set the API version.
Code Block |
---|
sfdx force:config:set apiVersion=48.0 |
But that did not work.
Ah, interesting, I think it IS something to do with my flows, my API version and the fact that I created a scratch org from a github repo. The repo is on version 45 based on metadataTypeInfos.json. But the org I built the Flows in is Winter '20 so that is version 47. And I did build a flow using a new feature with the Start Node as per the post mentioned above.
So I delete that one flow.
Nope.
Delete all but the main flow.
Nope.
But I’m starting to get somewhere now.
Flow Issues
So it seems that the new features in Winter '20 in Flows, where you do not have to manually create all the variables (great feature) is having an issue with the metadata. This Post states that it was confirmed by support. I can not see it in Known Issues though. But it seems to be the cause of the duplicate values issue also. See I had 3 Get Records lookups, all getting the same field value and because it could not understand the metadata of the {!Property from Get_VicRates.Levy_Rate__c} syntax it could not determine that {!Property from Get_NSWRates.Levy_Rate__c} was a completely different field.
Now, the thing is, I am trying to demo Spring ‘20 features, that rely on these Winter '20 features! I don’t want old fashioned Flows in my new Spring '20 flows demo. I now have to rebuild my flows to be compatible with Summer '19 so I can deploy them to a scratch org. Annoying.
Just for shits and giggles I created a Winter '20 Scratch org and tried to push my flow, built in a Winter '20 scratch org, and pulled from a Winter '20 scratch org and it is exactly the same issue. It is nothing to do withe the Preview org. It seems that flow metadata support in DX is a version behind. (Yes, I DID update the CLI before I started working today). The error is…
Code Block |
---|
Get_Property (Get Records) - Because the queriedFields field is set, you also need to set the following fields: sObjectOutputReference. |
(There is probably something more deeply involved than this, and probably a way I could do something if I sat here for another 6 hours and googled, but it’s a way forward for now, so I have to take it).
API Issues
Ah, it is waaaay more than that! Wow. So I found that my sfdx-project.json was set at version 45 - what the version was when the dreamhouse org was created. I tried to set the version to 47 and all hell broke loose! Way to many errors. (eg enableChangeDataCapture was deprecated in 46)
So, I’m trying to push a version 47 feature into an org whose metadata source is on version 45 and the only way around that is to hack the metadata to comply with the new versions. Gee this sucks. (I know why it is so, but wow, to have to do all this with each release on a huge org where you are trying to use a fully automated CI pipeline, kudos to you, because this sucks).
...