Continuing with the Asset Management example from THIS previous post, I had a requirement to be able to create a view showing all assets that do not have a document library location created on SharePoint. Usually, for an asset, at the minimum, a specifications sheet must be attached, including the installation notes.

This is a very simplistic approach, using a Two Options field type, set to default Yes/No to use for filtering, and a workflow to update this field when documents are added.

So, first step, add the field to the entity. I will name it Documentation (asm_documentation), and set it default to No. You don’t necessarily have to add it to any form, as it’s not relevant on the asset property.

Next, create a view based on the Active Assets default view. I named it “Active Assets with no Documentation”. Add a column to the view showing the Documentation field we just added, as well as other fields that make sense. Add a filter to only show records with the Documentation value of No.

image

Next, the workflow we create will update the value of the Documentation field to Yes if documents are attached to the record. We do this by running the workflow against the Document Location entity. Set it as a background workflow. Set the conditions as described in the screenshot below.

image

Save and Activate the workflow. Publish all customizations.

Now start loading some assets into your asset management. Add documents to some, and leave others with no documents attached. Once done, navigate to the “Active Assets with no Documentation” view. You will see a listing of assets that are missing the documentation library on SharePoint. You can then add the necessary documentation, assign the records to the proper team for documentation management or trigger a process to request the installation team to load the required documentation.

image

And with that, you can determine which records do not even have a related SharePoint document library created.

NOTE: Once you navigate to Documents on the respective record, the folder is created on SharePoint and triggers the process to update the Documentation field value to Yes. This does NOT determine if any documents are actually loaded in the respective SharePoint folder. We’ll tackle a process to determine if various types of documents are attached to a record in another post.

Enjoy!

Advertisements

Seems like this is a topic of interest. My previous post HERE is still one of the most popular posts, even though it was published way back in April 2014. As such, and since I was recently putting together a small POC that involved this functionality, I decided to revisit this topic.

As I was saying, recently I had the opportunity to look at an asset management solution that integrates assets from Esri with other sources for enhanced data, as well as Customer Service and Field Service. Lots of integration work, as well as some interesting challenges along the way.

It is unfortunate that Esri decided a while back to pull support for their Dynamics CRM solution. Now we can only integrate to bring data into Dynamics 365. Even the support for the old 2015 version has been retired at the beginning of June 2017. It’s even more interesting, since they seem to support SharePoint, but I digress.

The part I want to focus on, and to come back to why I mentioned the original article, is simple. It deals with leveraging Google Maps to locate assets on a visual map.

Through integration, I can get my needed details on asset type, description and location in the form of Latitude and Longitude. This being a physical asset, like a tree, bench, bus stop, or any other type of urban furniture, an address does not apply and the coordinates are tracking the exact location of the item. IoT provides additional data points on the assets, depending on the asset, but that will be a different topic one day.

So, on my asset record, I am tracking the Latitude and Longitude data fields in two fields named asm_latitude and asm_longitude. Similarly to the approach described in the referenced article, I’m using a HTML web resource to present the location.

The Google API has evolved, and you will find references stating that as of v3 a key is not required anymore. While technically that is correct, pay close attention to the licensing model. This is an asset tracking application, and, as described HERE in the Pricing and Plans section, a Premium Plan is required for Asset Tracking Use Case. Obviously, contact sales for a price. And HERE is the description on the usage limits.

But, back to the record form, the format I chose for this POC is quite simplistic. See the screenshot below.

image

The displayed map is nothing more that a Web Resource of type Webpage (HTML).

The code to make it render, based on the Latitude and Longitude coordinates in the asset form is below (remember, this goes in the web resource, in the Source of the page).

NOTE: I’m not showing any kind of error handling for simplicity. Build your own error handling to make sure no unexpected behavior is impacting the user experience.

<html><head>
<meta name="viewport" content="initial-scale=1.0, user-scalable=no">
<meta charset="utf-8">
<style>
#map {
    height: 100%;
    margin: 0;
    padding: 0;
}
</style>
<meta charset="utf-8"></head>
<body style="word-wrap: break-word;">

var point_lat = window.parent.Xrm.Page.getAttribute(“asm_latitude”).getValue();
var point_lng = window.parent.Xrm.Page.getAttribute(“asm_longitude”).getValue();

function initMap() {
    var point_location = new google.maps.LatLng(point_lat, point_lng);
   
    var map = new google.maps.Map(document.getElementById(‘map’), {
        zoom: 15,
        center: point_location
    });
   
    var marker = new google.maps.Marker({
        position: point_location,
        map: map
    });
}

https://maps.googleapis.com/maps/api/js?key=font

</body></html>

Replace the YOUR_KEY_HERE with an API key. You can obtain one from HERE.

There’s three main pieces to this code. First off, the style in the header sets-up the page format to extend all the way. You could tinker with this, but it’s best to just maximize it.

The second part is the div with an id of map. This is our anchor point on the page, and the script is looking for this.

And lastly, the script. I’m reading the values from the Latitude and Longitude fields on the form using windows.parent to reference the record form rather than the web resource the script is running in. The rest is straight out of Google’s API documentation. Strongly recommend you browse through that for more examples, as well as the description of zoom values available (cool to know).

Wham, bam, 5 minutes jam, happy demo!

I’ve recently had the opportunity to preview a new Dynamics 365 book. I wanted to take this opportunity to give a shout-out to the author, Rami Mounla. His book is available here:

9781786464170

The book walks the reader through technical concepts, starting at the basics, with no code extensions, and moving slowly into the meat of it all. It’s covering client and server side extensions, integration and security. Solution architecture and DevOps are covered, while also introducing various tools and frameworks.

Overall, it is a good overview of capabilities from a development and technical architecture perspective. While the book is described at primarily aimed at existing Dynamics resources, I think it’s also a good resource for others starting on the journey to Dynamics 365. Jumping farther from the shallow end will make you a better swimmer.

Pick up the book, read it, learn something new or just dust-off some of that existing knowledge you’ve put away for a while.

 

Book Details

Title: Microsoft Dynamics 365 Extensions Cookbook

Author: Rami Mounla

Length: 462 pages

Edition: 1

Language: English

Publisher: Packt Publishing

Publication Date: 2017-06-07

ISBN-10: B01MD2BN8U

As it stands right now, the CRM and former AX functionality has been wrapped under the Dynamics 365 umbrella. All nice, but with the changes made to the former Dynamics AX to bring it to a modern state, and a cloud model, the old style integrations have to be “adjusted”.

As announced by Microsoft, there is an integration planned, but few month into the new platform, we’re not seeing it just yet.

The roadmap site, at roadmap.dynamics.com is now publishing some details on the expected functionality. The integration is described under the heading “Prospect to cash integration of Dynamics 365 for Sales and Dynamics 365 for Operations”. As you can see, it now all follows the business functionality model familiar to the platforms.

The proposed integration leverages the somewhat recently released Common Data Service. If you still don’t know what that is, see the description HERE.

The idea of this proposed integration is to allow users to start the sales process in Dynamics 365 for Sales, and complete the order fulfillment on Dynamics 365 for Operations. This leverages both platform functionalities for their strengths. Or does it? Let’s look at the details available so far.

Accounts and Contact

For both Accounts and Contact, the plan is to sync these records from Sales to Operations.

Nagging question here being what happens if these records get updated on the Operations side, or simultaneously on both sides? No details yet.

Workaround is to have editable access only on the Sales side, and read-only on the Operations side. As such, financial or operations users must have a Plan 2 license most likely, or possibly get away with a Team Member license for light usage. For additional licensing implications see the licensing guides, as linked to in THIS earlier post.

Product Catalog

This is to be maintained in Operations, and synchronized back into Sales.

Question here is how bundles and packaged offerings for up-sell are going to be handled. An assumption is that these groupings will be created and maintained on the Sales side, which means that a user managing products must use both Sales and Operations for maintaining the product catalog. Or maybe have a team/user maintaining the products in Operations, and another team/user managing bundles and sales artifacts on the Sales side.

Again, licensing implications, as well as additional coordination between the platforms and/or users/teams.

Possibly 3rd party products might actually help here a little? There’s an opportunity.

Quotes

These are actually following the same model as in the previous versions with the integration. Quotes are fully created and managed on the Sales side.

One could argue why even synchronize them into Operations, but this is in line with the old model where you could jump to the former AX either at the Quote or the Order level. See the next paragraph on Orders.

Orders

Now it looks like the recommendation is to proceed all the way to the order generation in the Sales module, and then sync to Operations at the Order level. This should be ok for most situations.

Invoices

Invoices are to be generated and processed, as expected, on the Operation side. No issues here. They are to be synchronized back to Sales for visibility, so I would see the Invoice records as a complete read-only on the Sales side. The financials implications of changing an invoice can not really be handled on the Sales side to begin with, so there is no real reason to have these records editable on the Sales side.

Conclusion

While this puts us on the right path, somewhat, it is far from ideal for the following reasons:

Licensing implications could possibly require users to hold a more expensive license to be able to handle a complete business flow along with related needs.

This only covers a standard sales process. As soon as you step outside of this model, the amount of work involved could easily become similar to simply starting from scratch. This is just an assumption right now, we’ll see.

While leveraging the Common Data Service has it’s advantages, including the use of Flow and Power Apps, you now have data in flow in 3 places that must stay in sync. This brings up the next point.

Real-time or near-real-time possible issues. As discussed in Accounts and Contact, if you don’t lock the data on one side to be read-only, simultaneous updates to the same record, in Sales, Operations, etc. applications, could potentially result in unexpected results and overwrites. A robust solution with proper record locking on one side when edited on the other side becomes essential. The roadmap description does not hint to any of this. This is potentially the biggest problem here.

In the “Fast implementation” heading of the article, one work sticks out: templates. This begs the question: is this really going to be a production ready option? Or are we back to the “template” integration options available with the old versions, which almost all the times needed to be extended? Or maybe 3rd party solutions fill-in the gap? There’s an opportunity for 3rd party vendors here too.

Until additional details become clear, let’s look at this as what it’s described to be. A possible scenario, that is. A “template”.

Enjoy!

I’ve just done recently an install on-premise where I’ve encountered a number of issues. One of them is the following error message:

Action.Microsoft.Crm.Setup.Common.InstallWindowsSearchAction failed.

The service cannot be started, either because it is disabled or because it has no enabled devices associated with it. (Exception from HRESULT: 0x80070422)

image

The message is pretty explicit, in that a service is not started. Turns out, after a little investigation, that for some reason the SQL Server Service as well as the SQL Server Agent Service are off. This could be the result of a failed SQL update I just got previously, or some other issue. Simply setting these services to Automatic and starting them allows the installation to proceed further with no issue.

image

No, you do not have to restart the installation, just make sure the services are running properly.

Smooth sailing afterward.

Enjoy!

For those of us coming from a sales force automation background, in particular the Dynamics CRM realm, the introduction of Dynamics 365 adds a very important missing piece, along with a new learning curve and additional challenges.
First off, we have the two added modules, Financials and Operations. That rounds up an already comprehensive set of functionality and adds value through incorporation ERP functionality. The service offering now looks like the following screenshot of the official Dynamics 365 page:

0003-01

From a licensing perspective, I have already pointed to the licensing guides in the previous post you can find here. You can find bothe the Business edition, based of the NAV functionality, as well as the Enterprise edition, based on Dynamics AX.
Looking at the Enterprise edition, one tool that all Dynamics AX professionals are used to by now is LCS. This stands for Microsoft Dynamics Lifecycle Services. Misleading generic name in my opinion, since it only handles at the moment Dynamics AX/Dynamics 365 for Operations.
Nevertheless, for those coming from a CRM background, let us have a peek and see what this is.
If you look at the landing page for LCS, found here, the marketing buzz words are left, right and center. Predictable, Automated, Proactive.
LCS is basically a tool, in the form an Azure hosted portal and a set of services which allows us to perform various ALM (Application Lifecycle Management) actions in a planned and repeatable manner, resulting in consistency and predictability across multiple Dynamics 365 for Operations implementations. The portal capabilities also aims to provide a shared canvass for implementation partners and customers to collaborate together.
The following statement from the LCS documentation sums up the targeted intent quite well: “The goal of LCS is to deliver the right information, at the right time, to the right people and to help ensure repeatable, predictable success with each roll out of an implementation, update or upgrade.”
The application lifecycle is comprised of the following three defined phases: Define, Develop and Operate.

0003-01

The personal targeted by this model include the Project Managers, Business Analysts, Developers and IT Administrators.
Within each of the phases, there are a set of services that assist partners and customers with the project.
The Define phase includes the ability to choose a Methodology to use with the project. The default methodology is based on the Sure Step Agile methodology, but partners have the ability to enhance this by adding repeatable components to add value and differentiate themselves from the competition. Custom methodologies can be created either starting from an already defined one, or from scratch, as needed.
The Business Process Modeller and Task Recorder services allow for defining standards across the organization and projects. With Task Recorder you can capture process flows and feed them into the Business Process Modeller for modification and version tracking. These can also be exported to Visio, as well as they can be used in creating training and documentation.
The License Sizing Estimator is the service used to determine and record the license numbers and types required based on users and roles.
The Usage Profiler service assists in determining the projected and currrent usage of a designed environment. In conjunction with the Infrastructure Estimator service, it gives us a recommendation around scaling and environment both during the planing phase, as well as during the production period. Through the ability to analyze load volumes, planning of scheduled heavy load tasks can be done to minimize impact on an environments performance.
The Develop phase includes services to assist with the implementation processes. Services include the Cloud Hosted Environments and Configuration Manager services, which assist with the planning and deployment of an environment to Azure, the creation of reusable deployment and configuration processes, and simplifies the moving of data between environments and legal entities. At a very high level, for those CRM guys out there, think of legal entities as business units in CRM.
The RapidStart is a quick wizard based configuration service that can help reduce the time and cost of an implementation.
Customization Analysis, another service in this category, uses a rules engine to identify best practices violations along with performance and upgadability issues. The output of this service are various reports that can be leveraged to produce actionable plans for developers.
The Upgrade Analysis service, last one in the Develop phase, looks at an existing implementation and helps estimate the scale of an upgrade project. This is somewhat similar to the CRM Custom Code Validation tool available with some Dynamics CRM versions.
The last phase in this set, Operate, includes services for managing an existing implementation, and is targeted primarily at IT Administrators. It includes the System Diagnostics service, which focuses on proactively monitoring the health of an environment.
The Issue Search service is the entry point into a library of knowledge base articles, hot fixes and updates. It provides structured and filtered results in a manner that helps surface the relevant results faster.
The Cloud-Poweredd Support service is looping the customer in the process, by allowing the tracking of support services lifecycle along with the ability to provide issue replication and tracking of issue resolution.
Finally, the Updates service helps with the discovery of available environment updates, as well as their impact on an existing customized environment.
This was a very high level overview of LCS, and it’s available services. While most of these services are specifically targeted at a Dynamics AX implementation, we have already seen services trickling into a standard CRM implementation. One example is the Data Loader service for Dynamics CRM. Along with that, some of the planing services can also be leveraged for a standard CRM implementation.
With the close integration of Dynamics 365 for Operations into the platform, LCS made its way as a tool for managing implementations. I strongly recommend that all former CRM implementation partners become familiar with LCS. Leveraging the tool for implementations has a definite advantage, and it could become in the future much more integrate across the entire Dynamics 365 spectrum.
For more details on LCS see the user guide available here, as well as the documentation available on the Dynamics Learning Portal (DLP).

Enjoy!

With the current and future business evolution models, globalization and ease of reach into new markets, and the increased ability of companies to reach to existing and new customers, a robust CRM system is at the core of most organizations. If it’s not, well, it should be.

Microsoft, as one of the big players in this area, recognizes the importance of a robust CRM solution, and makes great efforts to provide increased value to customers with each platform update.

Recently we’ve seen the next step in this evolution, with the launch of Dynamics 365. In this release, Microsoft positions its Dynamics platform as more than just another CRM. We’ve seen the recognition of Project Service Automation and Field Service as two of the core offerings part of the already robust package. We are also seeing an evolution and expansion into ERP, with the addition of Operations and/or Financials depending on the organization type, scale and needs.

Furthermore, licensing has been adjusted to match an a-la-carte menu, with options to pick and choose only the components needed for your business. This is an option not readily available on some other platforms, and a distinguishing value proposition.

In addition, bundle pricing provides great value, as well as promotional upgrade offerings for customers on older versions or on-premise deployments provide additional value. For public pricing consult your license provider or see the following site:

https://www.microsoft.com/en-us/dynamics365/pricing

Do not forget that additional discounts are available for certain types of organizations, as described here:

https://www.microsoft.com/en-us/Licensing/licensing-programs/licensing-for-industries.aspx

The Dynamics 365 licensing guide is available in PDF format here:

Enterprise Edition Licensing Guide

Business Edition Licensing Guide

Let’s not forget the tight integration with other existing services, including Office 365 and Azure. The sky’s the limit.

What an amazing time to be part of this evolution!

I recently reviewed an ideation platform, and looking at the new features added to Dynamics CRM 2016 Update, the Feedback features caught my attention.

Starting with the latest update, we now have a built-in entity called Feedback. Here’s the official documentation:

https://msdn.microsoft.com/en-us/library/mt728949.aspx

So, now we can not only collect feedback, but also rate records. And this applies to all records in the system, both system and custom, where enabled.

Enable entity for Feedback

First step is to enable an entity for feedback. The easy way (you can do it programmatically too) is to navigate to the solution storing your entity definition, and on the entity property tab to find the Communication & Collaboration section on the General tab. You will find there the option to enable Feedback.

Note that for new entities, this is enabled by default. If you don’t use it, make sure to disable it. I would not want that enabled for most entities probably, so I think it should be off by default.

image

Note also that this is one of the options that, once enabled, it can not be disabled.

Configuration

Once you have this feature enabled, you will find in your entity the relationship to feedback, as seen below:

image

Observe that, by default, you can track feedback from both internal and from an integrated portal, if you have one. So far, this serves me well for the ideation platform.

Within the feedback record, you can first observe that, by default, there is in place the ability to have the status as Proposed or Accepted. This is nice, as you can enforce an approval process for feedback, and only take into consideration approved feedback. This can be beneficial for feedback from public, captured from a portal.

image

The rating is what I was looking for. It is by default just a text field, but you can enforce rules to make sure you only capture the format you need. Let’s say I want to have a rating on the portal with 5 stars, so I’m only going to capture a value from 0 to 5.

Now that I can capture feedback and rating, I want to roll-up the rating. I want to display on the idea record the average of all ratings from the feedback.

On the Idea entity, I can add a simple roll-up field. I defined it as a Whole Number Rollup field, and added the following definition:

image

And once it’s saved and published, I modify the default idea form to add this field, and the default view to add this column.

Result

Looking at a record view of ideas, now I can quickly see the ratings, sort and filter by rating, etc. And all this without a single line of code. Sweet!

image

Enjoy!

A new feature introduced with Dynamics CRM 2016 Update on both online and on-premise is the ability to use word templates. This makes simple reporting a lot easier now, as well as provides assistance with various data print jobs. A very welcomed feature added.

But let’s have a look at what this is and how to use it.

One common question back in the day was: How do I print this record? Can I just do a print? Do I do a print screen?

Not any more. Now, with a simple template, we can print a nicely formatted record, showing exactly the information we need, in a layout that’s pleasant to both users and customer.

The process involves a few steps. Let’s have a look at the steps involved:

  • Create a template
  • Define the template (design)
  • Upload the template to CRM
  • Generate a document (test before you release)

Creating a Word template

The first step is the creation of a Word template. This is a process we start from within Dynamics CRM. Navigate to More (…) > Word Templates.

image

From the fly-out menu select Create Word Template.

Follow the prompts and select Word for template and the entity you started from. Next slide in the wizard shows you all the relationships active on the selected entity. This is a very important part of the wizard. Select the relationships you intent to use to bring into your template data fields from related record. You should understand the data model for Dynamics CRM.

If you only need to bring into your template data fields from the current record alone, nothing needs to be selected here.

Once done, click on Download Template and save it locally. Now comes the editing part.

Define the template

With the template provided saved on your machine, now it’s time to define how the final output will look like. You can make it as fancy as you need, your knowledge of Word editing being the limit.

When you open the template file you downloaded, it will show you a blank page. That’s normal!

Next, enable the Developer tab in Word. You do that from File > Options > Customize Ribbon.

As all new products, a few issues are documented by Microsoft as possibly causing crashes. They are:

  • Auto-correct – might lead to freezes when customizing word templates. Turn off auto-correct if that happens.
  • Content types – use only plain text or picture.

On the Developer tab find and select the XML Mapping option. Make sure to select from the drop-down the correct schema as seen in the screenshot below:

image

Create your page design using tables, images, headers and footers, etc. Introduce the CRM data fields at the correct locations from the XML Map.

When you are satisfied with the layout and format, you are ready to push the template back to CRM and make it available to users.

Upload the template to CRM

Now here comes the flexibility. You do not have to be an admin to use this template yourself. You can actually create your own custom templates, and use them yourself.

If you want to make the templates available to all users, you need to either be an admin, or have an admin perform the template load for you.

As a user, to load the template for personal use, you follow the same steps we covered in extracting the base template from CRM. You navigate to a record. This defines the record type for the template. From the Create Word Template wizard select Upload and load your template. Once done, this template will be available for you to use on any record of that selected type.

In order ta make a template available to all users, as an admin, go to Settings > Templates > Document Templates and upload the template there.

This makes it available to all users that have permissions to use it.

Generate a document

As mentioned before, always test before you release. You can test by loading the template for yourself only first. Once you are satisfied with the output, load it through the Documents Template menu in Settings.

Now you have a nicely formatted way of printing records. All users of Dynamics CRM should take advantage of this feature to create nicely formatted print-outs for reporting or for customer communication.

Enjoy!

Preview features are constantly being added to Microsoft Dynamics CRM Online, and as old ones roll into full features, new ones take their place. As such, this is one of the areas I like to keep an eye on to see what’s coming.

We enable preview features by navigating in our Dynamics CRM instance to Settings > Administration > System Settings. Find the Previews tab and check the “I have read an agreed to the license terms” checkbox, as seen below.

0003-01

Once you have that enabled, you can start selecting the features you want to enable. I’m going to focus now on the Organization Insights Preview feature. The feature description is available at

https://technet.microsoft.com/library/mt703628.aspx

In a nutshell, this is a new dashboard that allows us to get insights into the key CRM metrics for your organization. This feature was added as a preview with Dynamics CRM Online 2016 Update 1.

Like all preview features, this might not be complete, fully functional, and is not meant to production use. With that in mind, there is no real risk in adding a new dashboard to the organization, if used sparingly and only by the administrators of the organization.

With the feature enabled, go into any of the modules to the Dashboards section and find in the dropdown the Organization Insights Dashboard. Once selected, you are presented with a screen similar to the one below.

0003-02

As you can see, it’s a standard layout with 6 sections, just like the default dashboard. You can find this dashboard now in the organization listing of dashboards, as you can open it in edit mode. But this is where the similarities end.

The six charts displayed are not editable. First indication on the difference is the way they render, with a JavaScript fly out when hovering over elements that’s quite different from the standard dashboard experience. I would expect that this the result of the feature being in preview, and it will be aligned with the rest of the system.

You can create new dashboards, or edit this existing dashboard. You can change the order of the elements, remove them and re-add them by clicking on a section and selecting from the toolbar the Organization Insights button or the new icon, as seen below.

0003-03

So, if you remove one chart, not all is lost. You can re-add it, just not as a regular chart (that’s where I looked first).

Looking at the individual charts, we have the ability to filter the data by the time intervals provided of 2 hours, 48 hours and 30 days. Nothing in between for now.

Interesting enough, each chart has a help link at the top right in the form of a question mark in a blue circle. They all lead to the same TechNet help article located at:

https://technet.microsoft.com/library/mt703628.aspx

There you’ll find a description of each chart, as well as a description of the data aggregation intervals for each time filter criteria.

The default selection for time interval filtering is set at 2 hours (2H). Even if you try to change it when creating or editing the dashboard, once you publish it defaults back to 2H.

Likes:

  • I like how the fly-outs are bordered with the same color border as the element highlighted. This makes it so much easier to read.
  • I like the rendering and responsiveness of these new charts.
  • I like the ability to select the loopback (time filter) period.

Looking forward to:

  • Ability to customize the charts and create new ones. You are really limited to 6 out of the box right now.
  • Ability to customize the Lookback. It would be nice to not only change the lookback intervals, but default specific lookbacks per chart.
  • Remove the link to help. This is fine for a preview feature, I hope it’ll be removable once ready for production, especially since all point to the same article.
  • Refreshing it defaults you back to 2H lookback. This is really annoying.

We’ve always had to resort to all kind of tweaks to generate any kind of administrative dashboard. This is a good step in the right direction. Once this feature is completed, this kind of dashboard would be invaluable in a command and control center monitoring the environment. Throw it on a screen on the wall and have almost real-time data.

Enjoy!

 

Microsoft Business Solutions MVP

Reviewed Book

Microsoft Dynamics 365 Extensions Cookbook

Microsoft Dynamics 365 Extensions Cookbook

Check out my Book

Microsoft Dynamics CRM 2016 Customization - Second Edition

Microsoft Dynamics CRM 2016 Customization - Second Edition

Check out my Book

Microsoft Dynamics CRM Customization Essentials

Microsoft Dynamics CRM Customization Essentials

Check out my Book

Microsoft Dynamics CRM 2011 Scripting Cookbook

Microsoft Dynamics CRM 2011 Scripting Cookbook

Reviewed Book

Microsoft Dynamics CRM 2011: Dashboards Cookbook

Microsoft Dynamics CRM 2011: Dashboards Cookbook

Enter your email address to subscribe to this blog and receive notifications of new posts by email.

Join 428 other followers

Follow TheCRMwiz on WordPress.com