Open create ‘Form’ from sub-grid directly by avoiding associated records between entities

In MSD 365, when we add sub-grid on form by creating relation between two entities, it will gives Create (+) button and associate view button. When we click on Create (+) button, dynamics shows already created associations between these two entities, ref below screen shots…

Association

Some time we don’t require this associated records and always want to create new record by avoiding all those clicks. We can achieve it by making relation mandetory, just as shown in below image.

make it relation required

…and you are done, now go back to the subgrid and click on the ‘Create’ (+) button, it will launch new create window and won’t ask to select existing association.

Thanks.

DLL merge and MSD CRM/365 (on-prem/On-Line)

Tips & Trics

While working as a developer, many times we will have some readymade tools or class libraries / DLLs, which were developed by some other developers and they publish for developer kind. Salute to their generosity.

We use those libraries in our development and our life becomes little easier. But while deploying it on other environments we have to install those things and or keep those DLLs on another environment, if we miss it then because of those open libraries, development breaks.

 

So in such conditions, we can merge multiple DLLs in one to make our life bit easier.

If it’s exe, user following function to make one DDL.

Advantage: it will keep the original identity of the DDL.

Disadvantage: it won’t work for the library building. For e.g. CRM plugins

Here is that great function …

private static void AsseblyResolveEvent()
 {
 AppDomain.CurrentDomain.AssemblyResolve += (sender, args) =>
 {
 String resourceName = "AssemblyLoadingAndReflection." +
 new AssemblyName(args.Name).Name + ".dll";
 using (var stream = Assembly.GetExecutingAssembly().GetManifestResourceStream(resourceName))
 {
 Byte[] assemblyData = new Byte[stream.Length];
 stream.Read(assemblyData, 0, assemblyData.Length);
 return Assembly.Load(assemblyData);
 }
 };
 }

Curtsy: This function has written by Jeffrey Richter, here is his article for it.

If it’s DDL and or class libraries, ILMerge will useful.

Advantages: it’s free and lite installation. Easy to use.

Disadvantage: After merging DDLs with ILMerge, DDL will lose its identity, that’s why we can not use for CRM plugin libraries. While writing commands we need to bit careful else spelling mistake might frustrate you. 😉

You need to install it after download from here. Then by following commands, you can merge multiple DDLs together.

Steps: Once its installed, open command window with admin rights and execute it, follow the commands

Step 1: Download ILMerge utility and install it in your machine
http://www.microsoft.com/en-us/download/details.aspx?id=17630

Step 2: Compile and Publish your Project to a folder (eg: C:\Publish\)

Step 3: Use the ilmerge command to merge the exe and dll files and output single exe file

ILMerge Command

Syntax (Simple*): ilmerge <input assembly 1> <input assembly 2> /out:<output file> /target:<dll|exe|winexe>

*For the complete set of options and syntax refer ILMerge Documentation

Example:

C:\Program Files\Microsoft\ILMerge>ilmerge C:\Publish\MyProgram.exe C:\Publish\MyLibrary.dll /out:C:\Publish\MyWinApp.exe /target:winexe /ndebug

ilmerge – Command

MyProgram.exe – Output from the published folder

MyLibrary.dll – Any library used in the program

/target:winexe – We need to output a single exe file for Windows Platform

/output – Output folder and filename

/ndebug – To disable debug (.pdb file)

Curtsy: Arun Ramchandran’s blog , for more info, explore this link and this link.

Above both options won’t be useful for MSD CRM or MSD 365. 😔

So, to make those libraries useful for these environments we have to create a folder in your plugin project so it will be part of plugin project. And we don’t need to merge it anymore. 😉

Thus, we have two options available for it,

If those libraries are open source then we will get everything available online(thanks to generous great developers), just get only those classes which useful for you and ignore the rest of classes from that DDL.

But if it’s not open source then we need bit more efforts. As we need to use ILSpy or some similar add-on to decompile that code and then use in our plugin or workflow library.

There is another way for same is merging these files together along with its signature. Here are the details for it. (Courtesy: github )

Use Nuget to add ILMerge.MSBuild.Task to your Visual Studio project:

Install-Package ILMerge.MSBuild.Task

Also, install the ILMerge Package:

Install-Package ilmerge

Build your project. The merged assembly will be stored in an ILMerge folder under the project output.

Merge Assemblies With Copy Local = True

By default, all references with Copy Local equals true are merged with your project output.

Creating a Static List of Assemblies to Merge

It is also possible to use a static list of assemblies instead of inspecting the Copy Local property. This can be done through a configuration file added to the root of your project. Create a JSON file and name it as follows:

ILMergeConfig.json

The following snippet uses the InputAssemblies property to specify the files to be merged into the project output.

{
	"General": {
		"InputAssemblies": [
		  "$(SolutionDir)libs\\XrmUtils.Plugins.Abstractions.dll", 
		  "$(SolutionDir)libs\\XrmUtils.Plugins.Utilitiesd.dll" 
		]
	}
}

You don’t have to specify a path if assemblies are expected to be in the target directory:

{
	"General": {
		"InputAssemblies": [
		  "XrmUtils.Plugins.Abstractions.dll", 
		  "XrmUtils.Plugins.Utilities.dll" 
		]
	}
}

See Configuration File complete reference.

That’s it for now.

Thanks!

Few more ref

  1. http://develop1.net/public/post/2018/10/21/ILMergeNotSupported
  2. https://medium.com/capgemini-dynamics-365-team/using-gov-uk-notify-in-a-dynamics-crm-plugin-without-ilmerge-cf89f372cd5d 

Continue reading “DLL merge and MSD CRM/365 (on-prem/On-Line)”

Date Issue

linq

In MS CRM, we have multiple date time zone setting, each user can set his own time zone as per his requirement.

Thus, Microsoft Dynamics CRM stores all DateTime fields in UTC time, so by using the ‘DateTime.UtcNow’ approach our dates will be converted into UTC time before hitting the database. Continue reading “Date Issue”

Consume Web-request from Plugin

web

Generally, CRM not works alone, it includes many other application, such time we needs to move data from one application to another. In this situation we needs integration; We do integration with either “HttpWebRequest” or “BasicHttpBinding”.  Continue reading “Consume Web-request from Plugin”

Special privileges in CRM Security Roles

Awesome article …

CRMguru

There are several privileges in Dynamics CRM that control access to things like settings and user personalisation features, rather than data records. If users are missing some of these then they might not be able to sign in to CRM at all, or might not be able to use it properly. In particular, there are six privileges that can only be set at User level

Privileges that can be set at “User” Level only

There are a few privileges that you can only set to User level or None in any security role. Five of the entities for which this is true are on the Core Records tab, and you can easily find out which they are by looking at the System Administrator security role (shown below). Even this “super user” does not have global rights to these items so they stand out as the only rows not covered in…

View original post 1,561 more words

Error: An error has occurred. Please return to the home page and try again

In MS CRM 2013 – on premise,

When I try to create a new Email activity in the opportunity page and insert one of the existing templates, I get the below error message

“An error has occurred. Please return to the home page and try again.” Continue reading “Error: An error has occurred. Please return to the home page and try again”

Deployments – Asynchronous Solution Import

solution-mgmt

Introduction:

Often you must have noticed that importing solution often slows down CRM to the extent that it is almost unusable for the period during which the Import action is being processed.

To improve performance, a new request has been introduced in CRM 2013 which supports to importing solutions asynchronously. This is however available only to developers and the Import Solution action from the CRM Interface still locks CRM out for any practical use by CRM users. Continue reading “Deployments – Asynchronous Solution Import”

Deployments – Keep GUID sync

deploymnet

During deployments we have to keep same GUID’s across the environments, it will reduce the over headache like workflow/business rule validation. Here  are some methods ..

Manual Method

Exporting the data out of your DEV CRM (ticking for reimport), turning the files into CSV files, this will have the guid each row.  You can import these into different CRM instances

Create a CRM SDK Console app

Continue reading “Deployments – Keep GUID sync”

Working with Goals – Rollup Query

rollup

We can create Rollup Queries using CRM SDK (plugin or workflow or some external tool). In this entity, MS CRM provided similar to advance find capability for Query attribute, CRM stores it in database as ‘fetchxml’ attribute in fetch-XML (XML) format. Continue reading “Working with Goals – Rollup Query”