Solution Dependencies & Management

Solutions are marvellous things. They enable us to be able to package up lots of components, and deploy them to different environments all together as one single package.

However, there have been changes over time as to how solutions are used. I’m not (for the most part) going to go into the Managed VS Unmanaged debate, which I leave to people who are more in the know….

Microsoft Dynamics 365 apps are installed using solutions. Third party apps provided by Independent Software Vendors (ISVs) also use solutions.

In Power Apps, solutions are leveraged to transport apps and components from one environment to another or to apply a set of customisations to existing apps. A solution can contain one or more apps as well as other components such as entities, option sets, etc. You can get a solution from AppSource or from an independent software vendor (ISV).

Custom development should also take place within a solution, to allow it to be deployed appropriately.

But it’s important to take a closer look at how solutions work overall, as we can be involved on multiple projects within the same environment. Not only that, some solutions may require other solutions to be present first, in order to actually work! A great example of this is Master Data Management (or MDM), which is where companies have a ‘backbone’ of data, which other parts of the system then hangs off.

To understand this concept better, let’s take a quick look at solution layering.

Solution Layering

Layering occurs on the import of solutions and describes the dependency chain of components from the root solution introducing it, through each solution that extends or changes the components behaviours. Layers are created through an extension of an existing component (taking a dependency on it) or creation of a new component or version of a solution

Managed and unmanaged solutions exist at different levels within a Microsoft Dataverse environment. In Dataverse, there are two distinct layer levels:

  • Unmanaged layer. All imported unmanaged solutions and unmanaged customizations exist at this layer. The unmanaged layer is a single layer.
  • Managed layers. All imported managed solutions and the system solution exist at this level. When multiple managed solutions are installed, the last one installed is above the managed solution installed previously. This means that the second solution installed can customize the one installed before it. When two managed solutions have conflicting definitions, the runtime behaviour is either “Last one wins” or a merge logic is implemented. If you uninstall a managed solution, the managed solution below it takes effect. If you uninstall all managed solutions, the default behaviour defined within the system solution is applied. At the base of the managed layers level is the system layer. The system layer contains the tables and components that are required for the platform to function.

The following diagram introduces how managed and unmanaged solutions interact with the system solution to control application behavior.

  • The system solution represents the solution components defined within Dynamics 365 or the Power Platform. Without any managed solutions or customisations, the system solution defines the default application behaviour. Many of the components in the system solution are customisable and can be used in managed solutions or unmanaged customisations.
  • Managed solutions are installed on top of the system solution and can modify any customisable solution components or add more solution components. Managed solutions can also be layered on top of other managed solutions. As long as a managed solution enables customization of its solution components, other managed solutions can be installed on top of it and modify any customisable solution components that it provides.
  • Unmanaged customisations. All customisable solution components provided by the system solution or any managed solutions can be customized in the unmanaged customisations
  • Unmanaged solutions are groups of unmanaged customisations. Any unmanaged customized solution component can be associated with any number of unmanaged solutions. These can be edited & modified, regardless of the environment in which they’ve been deployed to
  • The ultimate behaviour of an instance of Dynamics 365 or Power Platform application is the culmination of the system solution, any managed solutions, and any unmanaged customisations.

The official stance of Microsoft, according to its Application Lifecyle Management (ALM) documentation, is that unmanaged solutions are used for development, and that managed solutions are released downstream to further environments. For bespoke solutions, however, this may not fit, and an appropriate balance must be found.

Data ‘Backbone’ & Solution Dependencies

Given the way that companies are adopting Power Platform (and Dynamics 365, of course!) it’s highly likely that we will build out system structures that will form the backbone for multiple applications on an on-going basis. With this in mind, it’s appropriate to put in place proper planning for this, to avoid any issues that could occur in the future with appropriate system designs

Solution Dependencies

When creating system structures within an environment, using unmanaged solutions, connecting two (or more) tables together will create dependencies on each other. In simple terms, if we connect Table A to Table B, there’s a reciprocal relationship created back from Table B to Table A:

This happens even if Table A is in Solution 1, and Table B is in Solution 2. If they’re in the same environment (& both solutions are unmanaged), it will create the two-way dependency.

This will cause issues if trying to deploy each solution individually, and will fail on import, as the system will require all items to be available in the solution

Workable scenario

The way in which to handle the issue of solution dependencies is to ensure that the ‘master backbone’ of system design is created in the main development environment, and then to use that in secondary development environments as the core of additional solutions:

This is in line with the emerging recent Microsoft Best Practise information around solution management (which is likely to be moving towards having a single environment per developer, rather than multiple developers working in the same environment).

The steps for doing this are as follows:

  1. Main ‘core solution’ exists (as unmanaged) within the main development environment
  2. When a project requires this to build upon:
    1. Secondary development environment is created
    1. ‘Core solution’ is exported as managed from the main development environment, & imported into the secondary development environment
    1. Project work is carried out within the secondary development environment
    1. Once project solution is complete (or when appropriate for deployment), it can be exported from the secondary development environment
      1. If deploying directly from the secondary development environment to downstream environments, it should be exported as managed
    1. The solution should be exported as unmanaged, and imported back into the main development environment. This will not cause dependencies to be created with the ‘core solution’ in it

Note: The main ‘core solution’ should consist of the items that are needed for core system work. If additional items are needed for multiple projects to work off (eg Account Manager field), this would need to be added to the core solution, rather than the individual project solution/s, as otherwise there could be further issues downstream.

If the project is completed, but requires further work to be carried out later on (or development support), then the following should be done:

  1. Secondary development environment is created
  2. ‘Core solution’ exported from the main development environment as a managed solution, and imported into the secondary development environment
  3. Project solution exported as unmanaged from the main development environment, and imported into the secondary development environment
  4. Work and/or support can be carried out within the secondary development environment, and released appropriately

I’m expecting further information around this to be released by Microsoft in due course (I’m a little surprised there’s not more out there at the moment, to be honest!). It’s vital that we ensure that we’re working with solutions in the right way, to stop any issues occurring later on down the line.

Have you ever had a problem around this? Drop a comment below – I’d love to hear your experiences!

Mark Smith on The Oops Factor

Discovering how Mark was actually a ninja in the past (you’ll have to listen to discover how!), the importance of looking after people, and challenges when running a company.

If you’d like to come appear on the show, please sign up at http://bit.ly/2NqP5PV – I’d love to have you on it!

Click here to take a look at the other videos that are available to watch.

MB-910: Microsoft Dynamics 365 Fundamentals Customer Engagement Apps

So here’s the thing. There used to be the MB-900 exam, which was the Microsoft Dynamics 365 Fundamentals exam. This was aimed at people who had a small knowledge of Dynamics 365, and it was really the base/entry-level exam into the qualifications for it.

However, Dynamics 365 is actually comprised of two ‘parts’. There’s the ‘front office’ part that’s usually referred to as Customer Engagement (well, depending on how Microsoft wish to refer to it as, which can change from time to time!), and there’s the ‘back office’ part, which is the ERP side of things. This is the finance & operations sphere, where those functions take place.

The MB-900 was a slightly strange exam, in my opinion, because it covered both. There were questions around things like Sales, Customer Service, etc, but there were also Supply Chain Management questions as well, for example. Now I’m not saying that people shouldn’t know about both ‘sides’ of the equation, but people usually (for the most part) handle one or the other. It’s generally unusual to find someone knowledgeable about both.

Furthermore, if we take a look at the more in-depth exams in the MB range, we find that there’s a definitive split there. The MB-2xx series cover Customer Engagement, whereas the MB-3xx series covers the ERP side of things. So it’s definitely not the norm to have both sides included in a single exam.

Microsoft came to the realisation around this, and have therefore decided to update the Fundamentals space. In doing this, they’ve split things out. There’s the MB-910 exam (which is what this post is about), and the MB-920 exam, which focuses specifically on the ERP space. A good move, in my opinion..

The MB-910 launched this past weekend, and I took it around a day after it went live. Let’s go take a look at it, and recap my experience with it.

The official description of the exam is:

This exam covers the features and capabilities of Microsoft Dynamics 365 customer engagement apps.

Candidates for this exam should have general knowledge of or relevant working experience in an Information Technology (IT) environment. They should also have a fundamental understanding of customer engagement principles and business operations.

Taking it leads to the qualification for ‘Microsoft Certified: Dynamics 365 Fundamentals Customer Engagement Apps (CRM)’.

The description around the qualification is:

If you’re familiar with business operations, customer relationship management (CRM), and are IT savvy—either generally or through work experience—take advantage of this certification to highlight those skills. Validate your broad exposure to the customer engagement capabilities of Dynamics 365 to enhance your career journey.

People in different roles and at various stages in their careers can benefit from this fundamentals certification. Here are some examples:

IT professionals who want to show a general understanding of the applications they work with

Business stakeholders and others who know Dynamics 365 and who want to validate their skills and experience

Developers who want to highlight their understanding of business operations and CRM

Students, recent graduates, and people changing careers who want to leverage Dynamics 365 customer engagement capabilities to move to the next level

The official page for the exam is at https://docs.microsoft.com/en-us/learn/certifications/exams/mb-910 where it gives quite a good overview of things. Go take a look at it, and also take a look at the associated learning paths.

Once again, I sat the exam through the proctored option (ie from home). This is the way that I now usually take exams (even if I could go to an exam centre, I think that I’d be unlikely to, given the travel/time needed!). Checking in for the exam went without issues (the process definitely seems to be getting smoother each time), and I was ready to go within a few minutes.

As in my previous exam posts, I’m going to stress that it’s not permitted to share any of the exam questions. This is in the rules/acceptance for taking the exam. I’ve therefore put an overview of the sorts of questions that came up during my exam. (Note: exams are composed from question banks, so there could be many things that weren’t included in my exam, but could be included for someone else! ). I’ve tried to group things together as best as possible for the different subject areas.

  • Project Operations
    • Scheduling resources
    • Entering project time/costs
    • Skills
    • Roles
    • Different types of project costings
  • Customer Service
    • SLA’s, what they are, which ones to use
    • Omnichannel, including capabilities and channel functions/availabilities
    • Power Virtual Agents
  • Sales
    • Lead processes, deactivating & reactivating
    • Opportunity processes
    • LinkedIn Sales Navigator. How it interacts, which capabilities it has within it, how it works
    • Quotes. How they work, what’s required to handle them, document generation
  • Marketing
    • Website forms
    • Automation around responses
    • A/B testing
    • Event management
  • Field Service
    • Work orders
    • Route optimization
    • Scheduling boards
  • Document options
    • Attachments that users can access within the system, as well as outside of Dynamics 365
    • File collaboration tools, and integration with them
  • Timelines & activities
  • System currencies, default options, additional currencies, and updating them
  • Understanding different types of tables, and when you’d use each one
  • Reporting capabilities
    • How data is able to be reported on
    • Report Builder Wizard
    • Reporting on data held in Dataverse
    • Reports in dashboards
    • Usage of Power BI, including data gateways

I was slightly surprised with the level of detail in some of the areas. I wasn’t, for example, expecting the emphasis on Project Operations and Field Service that came up for me. Some of the level of detail seemed more fitting for an MB-2xx exam than this Fundamentals exam.

In a similar vein, I also wasn’t expecting Power BI and Power Automate so much. Perhaps that’s just my own perspective, though obviously with the Power Platform it would be there. However there is a PL-900 exam, around Power Platform capabilities, that I’d expect those sorts of questions to be in, rather than here in this exam.

Otherwise I think that it was generally on point for what I’d expect to find at this level of exam. The questions have definitely evolved over time, and I found myself giving more consideration to answers than I would have on the previous version.

It’s a good place to start for people who are looking to get qualified around Dynamics 365! If you do decide to take it, please drop a comment below to let me know how it was for you – I’d love to hear about your experience!

Finding Employment

I thought that, given it’s now a new year, this would be a topic that could be of use to people.
Maybe it’s making all those new years resolutions that fills you with thoughts of new possibilities, but it’s usually around this time that people consider what they want their year to look like, and whether to decide to move employers, or stay in the same place.

I frequently get messages on LinkedIn, as well as direct emails, from recruiters. What happens next usually seems to fall along the same sorts of lines. They try to get some information from me, promise me the world, etc. Usually they’d try to get me on the phone, whilst not really providing any information for me to go on, or showing why having a call with them would be of any value to me.

Together with the amazing Alison Mulligan, we’ve drawn up the below. Alison is not only a seasoned recruiter, she’s also another Microsoft BizApps MVP! It’s a topic that we’ve been discussing on & off over the last few years since we first met. Alison also does a ‘One Minute Monday’ quick tips session every week. I’d strongly recommend to go & check it out!

We both chat with lots of people, and thought that giving a view from ‘both sides of the fence’ would be helpful to others. With this, we’ve put the time into drawing up a shortlist of points that both sides might think to take into consideration. Our aim here? Purely to help out – we’re not getting anything for this at all.

Tips for people looking for a new position

Why use a recruiter? Isn't it better to apply for jobs · Ambition
  1. Ensure that your CV is up to date, with all relevant information on it. Include any professional qualifications, employment history, etc, & it’s laid out well. Personally, I’m a great fan of ‘Words in Tables’ by John Moon (https://www.jmoon.co.uk/index.cfm). Free registration (or an optional charitable donation – what better way to do good for yourself and someone else at the same time) on his site will give you a great CV template that will stand out from most others (I use it myself!)
  2. Think about what you’re wanting in a new position. Be comfortable with discussing these, as you’ll need to mention them to recruiters. They could include:
    • Salary
    • Benefits
    • Career progression options
    • Volunteering
    • Work/Life balance
  3. Ensure that your LinkedIn profile is up to date, with all relevant information. Include your qualifications as well as any other experiences. Use the space available – any good recruiter will read the information that you’re including, rather than just skim the first line. A good rule of thumb is to do at least two paragraphs for each position, detailing your achievements, & what you brought to the company. You can also use LinkedIn’s own 20 steps to a better profile
  4. Use the LinkedIn ‘About’ section to describe why you’d be an asset to an employer, your skills & expertise that you bring to the table, and what you absolutely enjoy & love doing. If you don’t know what you love doing, sit down and give it some thought – start with tasks that, when you do them, get you into a ‘flow state’ (as in time seems to pass quickly)
  5. Keep your overall career plan in mind – if you haven’t done that yet, then now is a good time to start.

Above all, if someone contacts you with a role, be open and honest about things, and if you feel it’s not appropriate, you can say so. Alternatively if you think that someone else you know would be suitable for the position, you can always recommend them.

Tips for recruiters

The Pros and Cons of Using a Recruiter - HR Daily Advisor
  1. Have a proper job specification available, listing out the required & wished for items. If you don’t have one, be open about what the role is actually supposed to be, rather than guessing at it. Or at the very least have a detailed view of the company and WHY they are looking to hire. If you’re speaking to someone with more than a few years experience in their line of work, be pro-active about giving the spec to them. They’re able to take an initial look & assess whether it’s appropriate or not in much less time than you (as a recruiter) might be able to.
  2. Ensure that you actually know the salary range for the position and are happy to share it. I’ve been approached multiple times with absolutely no salary information, and when it is finally available, it turns out to be half of what I’m currently on – this feels like a giant waste of time for everyone, recruiter included, as no matter how awesome the company or role, no one is taking a 50% pay cut (unless its to work with Elon Musk or Satya Nadella)
  3. If using LinkedIn to search for candidates, take a proper look at their experience & information. All too often we’re asked about Developer opportunities, when it’s quite clear that I’m not a Developer. Use the appropriate filtering tools/options available to return pertinent results. And, we know you are under pressure in terms of time, but if you spend five minutes reading our profile (particularly if we have bothered to make it as detailed as possible), you will get a 10x greater return than if you don’t.

One final thing to keep in mind, in general. If you feel that you’re being pushed into something, take a step back, and consider if it is indeed the right move for you. It could just be the way that it’s being pitched at you, but taking a few minutes to make sure you’re alright is very important. You could also consult with a mentor around it, who we’re sure would be only too happy to help you out.

Oh, and if you have any tips you’d like to share, feel free to post them below in the comments – we’d love to see them!

Alexio Chandiwana on The Oops Factor

Chatting with Alexio about football, the amazing work that he’s doing with the Africa PowerPlatform community, & how his journey into IT started (with some pitfalls along the way!)

If you’d like to come appear on the show, please sign up at http://bit.ly/2NqP5PV – I’d love to have you on it!

Click here to take a look at the other videos that are available to watch.

Olena Grischenko on The Oops Factor

Talking about hobbies that we enjoy, though it may not fit our ‘public persona’, the importance of asking questions regardless of how we could be perceived, & work roles that can really suit our skills

If you’d like to come appear on the show, please sign up at http://bit.ly/2NqP5PV – I’d love to have you on it!

Click here to take a look at the other videos that are available to watch.

Managed Solutions, & replacing a field

Well to start with, I’m sure that I’m going to get pulled up by some people for my use of the word ‘field’ in the title. After all, officially it’s now a ‘column’! But I (still) can’t let go of calling them as I’ve done so for over a decade, so field it is.

Now to the actual topic of this blog post, which is centred around Managed Solutions. Leaving aside the whole debate about whether we should be using managed or unmanaged solutions (& when/where to do each), there is one definitive benefit of using a managed solution.

See, unmanaged solutions are additive in nature. Work is done in the development environment, then deployed. Further work is done (additional items added, etc), and deployed, and they then appear in the downstream environments. However, if you delete an item in the development environment, it’s not removed when the solution is deployed downstream.

Managed solutions, on the other hand, are both additive & detractive. As with unmanaged solutions, items added in the development environment are also added downstream when deployed. However, if an item is removed from the solution in the development environment, it will also be removed when the solution is deployed downstream. It’s one of the useful ways to ensure that you don’t end up with random unused items just lying around in Production (which have a habit then of popping up in the Advanced Find window, for example). So it’s really quite handy for a lot of reasons to go down this route.

Well, I found myself going down this route recently, but with slightly unexpected results, I’ll freely admit…

The scenario was that we had deployed a managed solution to the UAT (test) environment on a client project. Then the client changed their mind (shock & horror!!) as to a specific item, and we needed to change it from a text item to a lookup item. Obviously (as per best practise, of course) this would need to be done in the development environment, and then released downstream. Given that this is a managed solution, I’d expect this to work, without any issues. Well, it didn’t…

The change in the development environment (deleted the old item, ‘re-created’ it as a lookup with the same system name) was done, we exported it as managed, and then went to import it in the UAT environment. It took the solution file, thought about it for a while (it’s somewhat of a large solution), & then errored:

Exception type: System.ServiceModel.FaultException`1[Microsoft.Xrm.Sdk.OrganizationServiceFault] Message: Attribute mdm_field is a String, but a Lookup type was specified.

Now I was somewhat confused by this message occurring. It’s not been the first time I’ve seen it over the years, but in my previous experience I’ve seen it when handling unmanaged solutions. It’s when you delete an item in the development environment, re-create it as a different item type (with the same underlying system name), and then deploy it as unmanaged. The solution import in the second environment fails due to the different in the type (as it sees the same name). This, of course, is to be expected.

But here we’ve been using managed solutions for deployment, and as mentioned above, they’re detractive as well. The expected behaviour (at least from my side of things) would be that the system would note that the item type has changed, remove the old item, & import the new item. In my mind, that’s logical, but apparently not?

See, even managed solutions have their limitations, of which this is one of them. Having checked with several other people who I reached out to around this, I’ve discovered that it can’t work in the way that I was expecting it to. Instead, a specific process has to be followed

  1. In the development environment, remove the item, & export the solution as managed
  2. In the downstream environment(s), deploy this (interim) managed solution. This will remove the item from the environments
  3. In the development environment, re-create the item with the different system type. Then export it as managed
  4. In the downstream environments, deploy this solution. This will then add the item (with the new system type) into the environment.

This means that development & deployment teams (if separate ones) need to co-ordinate around this, to ensure it’s done in the right way. It could also be developed/exported in succession, and then imported in succession as well (either manually, or through an Azure DevOps Pipeline, for example).

This worked wonderfully for us, and to be honest, I was quite relieved after several hours of frustration with things. Even better, it was a Friday, so meant that the week could end well!

Have you ever come across this, and been frustrated as well? Have you got a similar story with something else that happened to you around solutions? Drop a comment below – I’d love to hear!