I'm working on Dynamics CRM online 2016, the requirement is to create a new entity field inside all the entities that we have in a third party vendor solution (unmanaged).
I'm wondering what is the way to solve this requirement. Because that Solution is huge and it has more than 20 entities.
The third party vendor told me that I have to create a new solution and add all the entities to this new solution and then add the field in each entity. I guess that they want to keep separately new configurations and customizations.
However, my boss told me; you are free to choose working in that solution (third party solution) or to create a new one.
I think it's better and easier to work in the third party solution (because at the end, when I need to migrate these changes to our other instances, I will export and import this solution), however I'm fairly new in Dynamics and in terms of migration process, I do not know what is the best approach.
I really appreciate any suggestion from you guys.
It is fine to work in the third party solution, which I would recommend. If for some reason you prefer, it is also fine to work from a new solution you create.
The key is to understand that solutions do not really matter: The entities themselves exist in the layer of unmanaged customizations of the system. Solutions are simply containers that point to these unmanaged entities.
No matter how many solutions you have that point to a given entity, any modification made will be made directly to the entity.
Since you are using CRM 2016 you have the possibility of choosing which fields from an entity to include in your solution. This could be used if you for some reason really want to have one solution with and one solution without your newly added field.
MSDN has the following note about having multiple solutions with shared components:
Some components can be included in more than one solution as long as
any changes that were made to them are compatible with all other
solutions that use them. It is important that all the solutions share
the same solution publisher. If the solution publisher is not
identical, organizations will not be able to install more than one of
your solutions.
Related
Before: We had (still working) a couple of CRM 4.0 servers working: A productive one and a test one. We would perform any changes on the test server first and, after testing, replicate them in the productive server. For entities (custom or not) this would mean using the "Export Customizations"/"Import Customizations" functionalities. Pretty straight-forward stuff.
Now: we're testing CRM 2013 and trying to do the same with a couple of servers. We set up our data structure by hand (took some time) including the creation of all our custom entities, which are not few in number.
My question then is: How can I perform a bulk entity export-import in the same manner as it was with 4.0? I've tried selecting saving the entities to a Solution package, export the package from one server and import it onto the other. System entities feature in the target-server's import list but not the custom entities! And they are a part of the original solution packet (both checking it through CRM itself or the package file's XML code directly)
The lack of online help on this may imply that I'm not approaching this in the right way and I presume this is something already standard in CRM 2011.
Can someone give me a hint?
Thanks in advance!
Ok, I have no time to delve into reasons and explanations but things got solved.
I tried to export ONLY the custom entities and their related entities and it ended up working out.
Afterwards, trying again to export ALL entities ended up working just fine!
Therefore, i'm still not fully convinced I was not doing anything wrong. Most likely I just missed some essential basic small step or detail no one thought of due to it's "self-evident" nature.
(I guess being too stuck to CRM 4.0's "modus operandi" takes it's toll when updating...)
we are currently working on a specific CRM development. As part of this development we are working with a different supplier who have provided us with a 'core' managed solution, a toolkit of sorts. This toolkit contains a number of entities/web resources etc but crucially contains the case and contact (renamed to customer) entities. As part of our development we need to extend these entities by adding attributes/amending form layout etc for both these entities.
should i create a new unmanaged solution - select add existing - choose the customer entity.
I can then make my changes (new attributes, form layout changes etc)
I then publish my unmanaged solution as a managed solution to import into a UAT/Prod environment.
Would this approach work ok?
What if the supplier make changes to their core entity and provide us with an updated release? what happens then or what should i do?
There are a couple of attributes (title and ethnicity) that are part of their entity but i need to work of global option sets so i have create 2 new attributes and these are displayed on the form in place of their's. I have not removed theirs but could this cause issues?
any help appreciated
chris
You are right on in the first paragraph, you would need to create a new solution and amend their entities. When you import their changes it will add on any additions to those entities. Importing customizations should never remove anything, you have to do that manually. Although unlikely, it is possible that the vendor may release a new version that requires you to roll back your customizations and reinstall it. In this instance you would need to come up with an upgrade plan and take into account all of the dependencies of the system.
I would imagine that those attributes would be dependencies of their managed solution and suspect that CRM won't let you delete them. If you are able to delete the fields and recreate them using global option sets there should be no issues so long as you use the same picklist integer values and schema names for the fields. Microsoft CRM basically copies all of the global option set values to the entity that you put them on so externally there is no difference between the standard and global option sets. Obviously a future upgrade by the vendor may force you to delete it all and recreate everything again manually (or via code using the CRM web services), but that is something you would have to take into account.
What the disadvantage here is, is if you create an entity, attribute or relationship in Dev and deploy to forward facing entity, if you then remove that entity, attribute or relationship in Dev, you must "uninstall" that solution. Of course, if you have critical data in that forward facing environment, it is gone when that solution is removed. So, if you deploy from Dev to forward facing, if in the future you no longer need that entity, attribute or relationship, although you can remove it from forms, it will always remain an artifact in your system. This is a disadvantage when working with Managed solutions.
Assuming I received a managed solution from another developer which contains an amended contact entity. How should I best make changes to that entity without affecting theirs'?
The changes would be additions as opposed removing anything they have done but ultimately for the end user I want them to see a mix of their original contact entity plus my changes. Is it best I simply create a new unmanaged solution, add their existing contact entity and make changes that way? Or do I start afresh adding in the contact entity from the system layer.
If you are working with these solutions internally in your organization you should almost always use an unmanaged solution. Managed solutions are for the most part a way to box your CRM customizations in order to sell them and protect them from being changed. If this is the case you are dealing with you can probably still amend the entity but you would have to do it in the default solution or another solution - sounds like you are already going down this track. I haven't tested importing a managed solution and changing an entity customization but this is how I would expect it to work.
Yes, the best option is to create managed solutions will which will not override the existing customizations but it will add any extra customization without affecting the existing ones.
You should use managed solutions only when you want to have the feature to install or an uninstall changed you have imported.
Only if the 'Customization' field for the amended contact entity is set to true, you can directly modify the update and include your changes there. Otherwise, you can create your own managed solution that has the contact entity modifications and import it to your system. Dynamics CRM will then merge your changes with the other ones.
I am trying to sort out a best practise approach to organising solutions and more specifically what should be included in the 'base solution' or 'library solution'.
The SDK says the following:
Solution Libraries For an ISV with multiple solutions or a large
enterprise deployment, it is expected
that many solution components will
have to be shared. The best ways for
solutions to share components is to
create solution libraries. You create
a solution library by creating an
unmanaged solution in a separate
organization and then package those
components into a managed solution.
Install the managed solution into
another organization and let
developers reference these shared
components from the solutions they
create.
The Microsoft Dynamics CRM Solutions
Framework lets you build layers of
solutions that depend on each other.
Typically, you create a solution
library representing a ”base”
solution. Other solutions can be built
on top of this base solution.
What components should ideally be placed in the base/library solution? Core business entities and option sets? Core functionality and workflows?
There doesn't seem to be a great deal of guidance on the dynamics documentation.
If you have any functionality that you plan to share across multiple organizations that will be revisioned separately from the rest of your organization, then I would consider putting that in a separate solution.
For example, say you have multiple regions in your business that will each have their own CRM organization, but each of them uses a standard way of scoring and assigning leads. In this scenario, I'd create a solution that encompasses that functionality and install it on each organization, and that way when the process changed, the same solution could be pushed out to all the orgs and everyone would get the same changes.
Another possibility would be a common set of JavaScript libraries and plugins that you'd use across multiple organizations, maybe for things like autonaming or autonumbering records, or some custom business logic validation. That way if you found any bugs in them, you again could push the same changes to all orgs.
If you don't have multiple CRM organizations or you're not an ISV, I wouldn't bother with solutions. They're a great leap forward for CRM, but it's definitely the first pass around, and there are some quirks and headaches to working with them.
We offer multiple packages with features for our clients with Microsoft Dynamics CRM.
Is there a way where we can publish our sollutions with our modifications for certain entities without overwriting the form layout that already existed.
How should we organise our sollutions so there will be no conflicts within the entities in our sollutions nor with the entities that were already modified by our clients where we want to install our sollution?
now we have to modify most entities manualy...
I hope you have some experience you want to share with us.
We broke up each section of our project into solutions. For example, entities, reports, plugins, etc.
This allowed us to deploy bits and pieces of our project as we went along (moving from dev -> test -> production).
You can't break out pieces of entities (or exclude things like the forms), but you could export the existing solution, make your changes and then re-import (as a manage or unmanaged).
There's a really good diagram here under "Conflict Resolution".