1. Using a Lookup instead
We could add two fields but that's a bit clunky so we will add a new Entity called Search Engine and a new look up from the account form.
The entity has two fields:
Name (new_name)
URL (new_url)
I have also added a new 1:N relationship to the account entity
Search Engine (new_searchengineid);
The Dynamics 365 solution can be found here.
The plug-in has been modified like this
We have landed ourselves in some trouble when it comes to unit testing again with this code as GetSearchEngine depends on the IOrganizationService, which we can't mock as discussed previously.
I've refactored the code here to remove this dependency and with unit tests.
2. Test induced Damage
Let's say that we really wanted to use mocks, so I have refactored again to allow this
The solution is here, with account plug-in and test
In order to be able to mock the data (Search Engines) I have created a ISearchEngineRetriever that has the GetSearchEngines method and inject this interface on a new class SearchEngineFinder that has our old trusty GetCorrespondantSearchEngine method.
This allows to mock away the GetSearchEngines method.
This is silly, don't do it.
You could argue that this would allow you to, in the future, inject a different ISearchEngineRetriever if you wanted to get the data from somewhere else, and that would be true but why worry about that eventuality when it might never happen and if it does happen it's unlikely to happen in the way you've anticipated.
If you do know that this data will come from another source in the future, then may be something along these lines would be reasonable, maybe.
3. Data
There is a problem in the approach that we have taken, namely adding a new entity as we now need to have that data (Search Engines) in the production environment (as well as test, etc..)
Luckily we have tools, see this post for more details
We will use the Data Migration Utility to export from our dev environment into our other environments
- Fire up Data Migration Utility (DataMigrationUtility.exe)
- Select Create Schema
- We will need to Log In
- Select Solution
- Select Entity
- Add Fields to be exported, new_name and new_url have been selected here.
- Click Save and Export
- Select appropriate files for the schema and data
- Finished !!!
The advantage of this method is that the Ids (Guids) of the entities will be preserved across environments, which means that Workflows will continue to work seamlessly, more on this here.
A Guid has 2 ^ 122 possibilities (there are six bits that are reserved) so it's extremely unlikely that duplicate Guids will happen.
To import