Search This Blog

Thursday, November 23, 2017

Open Lookup window in CRM V9.0

XRM.Utlity

Property Name
Type
Required
Description
allowMultiSelect
Boolean
No
Indicates whether the lookup allows more than one item to be selected.
defaultEntityType
String
No
The default entity type to use.
defaultViewId
String
No
The default view to use.
entityTypes
Array
No
The entity types to display.
showBarcodeScanner
Boolean
No
Indicates whether the lookup control should show the barcode scanner in mobile clients.
viewIds
Array
No
The views to be available in the view picker. Only system views are supported.

Xrm.Utility.lookupObjects(lookupOptions).then(successCallback, cancelCallback)
var lookupOptions =new Object();
lookupOptions.allowMultiSelect=false
lookupOptions.defaultEntityType='contact'
var arr=new Array()
arr.push('A2D479C5-53E3-4C69-ADDD-802327E67A0D')
lookupOptions.viewIds=arr

lookupOptions.defaultViewId='A2D479C5-53E3-4C69-ADDD-802327E67A0D'

var arr2=new Array();
arr2.push('contact');
lookupOptions.allowMultiSelect=false;
lookupOptions.entityTypes=arr2;
Xrm.Utility.lookupObjects(lookupOptions).then(successCallback, cancelCallback)
function successCallback(objResult){debugger;

}
function cancelCallback(){}






















Dynamics CRM 365 V9.0-Client Side Development features-Part2

CRM 2016
V9.0
Xrm.Page
ExecutionContext.getFormContext (Special rules apply to this)
Xrm.Page.context
Xrm.Utility.getGlobalContext
Xrm.Page.context.getQueryStringParameters
formContext.data.attributes
Xrm.Page.context.getTimeZoneOffsetMinutes
globalContext.userSettings.getTimeZoneOffsetMinutes
Xrm.Page.context.getUserId
globalContext.userSettings.userId
Xrm.Page.context.getUserLcid
globalContext.userSetings.languageId
Xrm.Page.context.getUserName
globalContext.userSettings.userName
Xrm.Page.context.getUserRoles
globalContext.userSettings.securityRoles
Xrm.Page.context.getIsAutoSaveEnabled
globalContext.organizationSettings.isAutoSaveEnabled
Xrm.Page.context.getOrgLcid
globalContext.organizationSettings.languageId
Xrm.Page.context.getOrgUniqueName
globalContext.organizationSettings.uniqueName
Xrm.Page.data.entity.save(string)
Xrm.Page.data.entity.save(saveOptions)
Xrm.Page.data.entity.getDataXml
No changes in addition to using type names rather than type by lookup fields
GridRow.getData
GridRow.data
GridRowData.getEntity
GridRowData.entity
Xrm.Mobile.offline
Xrm.WebApi.offline
parent.Xrm
Brug HTML web resource
addOnKeyPress
Use a Custom Control
removeOnKeyPress
Use a Custom Control
showAutoComplete
Use a Custom Control
hideAutoComplete
Use a Custom Control
Xrm.Utility.alertDialog
Xrm.Navigation.openAlertDialog
Xrm.Utility.confirmDialog
Xrm.Navigation.openConfirmDialog()
Xrm.Utility.isActivityType
Xrm.Utility.getEntityMetadata
Xrm.Utility.openEntityForm
Xrm.Navigation.openForm
Xrm.Utility.openQuickCreate
Xrm.Navigation.openForm
Xrm.Utility.openWebResource
Xrm.Navigation.openWebResource
Thanks to Henrik Jensen
http://crmblog.dk/post/2017/07/09/Dynamics-365-v9-API-relateret-funktionalitet-som-udgar.aspx

Dynamics CRM 365 V9.0- Client Side Development features-Part1

New Client API in Dynamcis CRM V9.0

Xrm.UtilityShowProgressIndicator
Display the progress dialog

This dialog message also update for the subsequent request.



Xrm.Utility.showProgressIndicator(message)

To close progress dialog
Xrm.Utility.closeProgressIndicator()

Xrm.Utility.lookupObjects(lookupOptions).then(successCallback, cancelCallback)
var lookupOptions =new Object();
lookupOptions.allowMultiSelect=false
lookupOptions.defaultEntityType='contact'
var arr=new Array()
arr.push('A2D479C5-53E3-4C69-ADDD-802327E67A0D')
lookupOptions.viewIds=arr

lookupOptions.defaultViewId='A2D479C5-53E3-4C69-ADDD-802327E67A0D'

var arr2=new Array();
arr2.push('contact');
lookupOptions.allowMultiSelect=false;
lookupOptions.entityTypes=arr2;
Xrm.Utility.lookupObjects(lookupOptions).then(successCallback, cancelCallback)
function successCallback(objResult){debugger;

}
function cancelCallback(){}


Xrm.Utility.getEntityMetadata('account')
Get the entity metadata based on the attribute

var arr=new Array();
arr.push('fullname');
Xrm.Utility.getEntityMetadata("contact",arr).then(successCallback, errorCallback)


Xrm.Utility.invokeProcessAction(name,parameters).then(successCallback, errorCallback)

Call the action from client side

parameter:
 It is an object with key value pair where key is a string

Xrm.Utility.invokeProcessAction(name,parameters).then(successCallback, errorCallback)

Xrm.Utility.getGlobalContext().userSettings
Get the CRM logged in user information

var userSettings = Xrm.Utility.getGlobalContext().userSettings;


 Xrm.Utility.getGlobalContext().organizationSettings

var organizationSettings = Xrm.Utility.getGlobalContext().organizationSettings

organizationSettings.uniqueName
organizationSettings.organizationId
organizationSettings.languageId

Xrm.Panel.loadPanel(url, title)
Xrm.Panel.loadPanel('https://octmid.crm.dynamics.com/main.aspx?etc=1&extraqs=&histKey=597090480&id=%7b80DBEA7A-C5CA-E711-A94F-000D3A34AFA9%7d&newWindow=true&pagetype=entityrecord&sitemappath=SFA%7cCustomers%7cnav_accts#698913490')




Xrm.WebApi
All the below request are  work only in "asynchronous"

Xrm.WebApi.createRecord(entityType,data)

//Create an account with lookup value set
var data =
    {
        "name": "TestData",
        "primarycontactid@odata.bind": "/contacts(321b158c-841c-e511-80d3-3867eb348ba8)"
    }

// create account record
Xrm.WebApi.createRecord("account", data).then(
    function success(result) {
        console.log("Account created with ID: " + result.id);
        // perform operations on record creation
    },
    function (error) {
        console.log(error.message);
        // handle error conditions
    }
);


Retrieve Record:
Xrm.WebApi.retrieveMultipleRecords

Xrm.WebApi.retrieveMultipleRecords("account", "?$select=name&$filter=name eq 'test'").then(
    function success(result) {
        for (var i = 0; i < result.entities.length; i++) {
            console.log(result.entities[i]);
        }                    
        // perform additional operations on retrieved records
    },
    function (error) {
        console.log(error.message);
        // handle error conditions
    }
);


Delete Record:
Xrm.WebApi.deleteRecord("account","38E44DF0-BFCA-E711-A94F-000D3A34AFA9")


Refer Link :https://docs.microsoft.com/en-us/dynamics365/customer-engagement/developer/clientapi/reference/xrm-webapi/

Tuesday, November 21, 2017

Dynamics 365 V9.0 Multiselect option

Get Value from Multi select control
Xrm.Page.getAttribute('new_testmultiselect').getValue()

Set Value from Multi select control
var arr=new Array();
arr.push(100000002);
arr.push(100000001);

Xrm.Page.getAttribute('new_testmultiselect').setValue(arr)
or
Xrm.Page.getAttribute('new_testmultiselect').setValue([100000002,100000001])

Set null/empty Value from Multi select control
Xrm.Page.getAttribute('new_testmultiselect').setValue(null)

Multiselect control is not applicable for the following 

  • Set multiselect field values through the business rule
  • Set multiselect field values through a workflow


Friday, October 6, 2017

Dynamically add Embeded/attach image in Email body in Dynamics CRM

IS it possible to Embeded/attach image in Email body in Dynamics CRM 

Embeded image in email body:

To add dynamically image in the email, usually we write code to create email.

There are three ways our image will add in the CRM

  • Public images hosted in external website
  • Webresource
  • Notes( add through attachment)

The below code is for "Public images hosted in external website" and "Webresource"
//Uploaded image in the Webresource .
string webresource = "<html> <img  src='~/WebResources/new_image'  width='205' height='150'></html>";

//published Image Url Link
string crmModule = "<html> <img  src='http://images.all-free-download.com/images/graphiclarge/beautiful_nature_landscape_05_hd_picture_166223.jpg'  width='150' height='150'></html>";


 
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
//CRM SDK Namespace
using Microsoft.Xrm.Sdk;
using Microsoft.Xrm.Sdk.Query;
using Microsoft.Crm.Sdk.Messages;

namespace Sample
{
    public class Email : IPlugin
    {
        public void Execute(IServiceProvider serviceProvider)
        {
            // Obtain the execution context from the service provider.
            IPluginExecutionContext context =
            (IPluginExecutionContext)serviceProvider.GetService(typeof(IPluginExecutionContext));

            IOrganizationServiceFactory serviceFactory = (IOrganizationServiceFactory)serviceProvider.GetService(typeof(IOrganizationServiceFactory));
            IOrganizationService service = serviceFactory.CreateOrganizationService(context.UserId);

            if (context.InputParameters.Contains("Target") && context.InputParameters["Target"] is Entity)
            {

                Entity Lead = (Entity)context.InputParameters["Target"];
                string Emailid = Lead.GetAttributeValue<string>("emailaddress1");
                string Name = Lead.GetAttributeValue<string>("lastname");

                //From Current User
                Entity from = new Entity("activityparty");
                from["partyid"] = new EntityReference("systemuser", context.UserId);

                
                Entity to = new Entity("activityparty");
                to["partyid"] = new EntityReference("lead", Lead.Id);

                //Uploaded Crm webresource Url.
                string webresource = "<html> <img  src='~/WebResources/new_image'  width='205' height='150'></html>";

                //published Image Url Link

                string crmModule = "<html> <img  src='http://images.all-free-download.com/images/graphiclarge/beautiful_nature_landscape_05_hd_picture_166223.jpg'  width='150' height='150'></html>";

                //Hyperlink (or) Re-Direct Url link
                string Hyper = String.Format("<a href='https://google.com/'> Click Here</a>");

                //Create Email
                Entity Email = new Entity("email");
                Email["from"] = new Entity[] { from };
                Email["to"] = new Entity[] { to };
                Email["subject"] = "welcome Mr : " + Name;
                Email["description"] = "<h3> Dear  " + Name + "</h3>" + "<br/>" + "Microsoft Dynamics CRM 365 Module" + "<br/>" 
                    + crmModule + "<br/>" +  Hyper + "<br/>" + webresource;

                //SendEmailRequest
                Guid _emailId = service.Create(Email);
                SendEmailRequest reqSendEmail = new SendEmailRequest();
                reqSendEmail.EmailId = _emailId;
                reqSendEmail.TrackingToken = "";
                reqSendEmail.IssueSend = true;
                SendEmailResponse res = (SendEmailResponse)service.Execute(reqSendEmail);

            }
        }
    }
}



The below code is for "Notes"
string crmModule = "<html> <img src='data: image/jpeg; base64,iVBORw0KGgoAAAANSUhEUgAAABkAAAAZCAYAAADE6YVjAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw / eHBhY2tldCBiZWdpbj0i77u / IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8 + IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MEVBMTczNDg3QzA5MTFFNjk3ODM5NjQyRjE2RjA3QTkiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MEVBMTczNDk3QzA5MTFFNjk3ODM5NjQyRjE2RjA3QTkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDowRUExNzM0NjdDMDkxMUU2OTc4Mzk2NDJGMTZGMDdBOSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDowRUExNzM0NzdDMDkxMUU2OTc4Mzk2NDJGMTZGMDdBOSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI / PjjUmssAAAGASURBVHjatJaxTsMwEIbpIzDA6FaMMPYJkDKzVYU + QFeEGPIKfYU8AETkCYI6wANkZQwIKRNDB1hA0Jrf0rk6WXZ8BvWkb4kv99vn89kDrfVexBSYgVNwDA7AN + jAK3gEd + AlGMGIBFDgFvzouK3JV / lihQTOwLtOtw9wIRG5pJn91Tbgqk9kSk7GViADrTD4HCyZ0NQnomi51sb0fUyCMQEbp2WpU67IjfNjwcYyoUDhjJVcZBjYBy40j4wXgaobWoe8Z6Y80CJBwFpunepIzt2AUgFjtXXshNXjVmMh + K + zzp / CMs0CqeuzrxSRpbOKfdCkiMTS1VBQ41uxMyQR2qbrXiiwYN3ACh1FDmsdK2Eu4J6Tlo31dYVtCY88h5ELZIJJ + IRMzBHfyJINrigNkt5VsRiub9nXICdsYyVd2NcVvA3ScE5t2rb5JuEeyZnAhmLt9NK63vX1O5Pe8XaPSuGq1uTrfUgMEp9EJ + CQvr + BJ / AAKvAcCiAR + bf9CjAAluzmdX4AEIIAAAAASUVORK5CYII ='></html>";


Usually this code works in normal page but here image is not embedded with email after send. It says harmful in the email.

When I check with how inserting signature in the email works in the CRM. I have checked through sent email description column through web API and found they URL in the image tag

Check the selected item








Wednesday, August 9, 2017

Date Time value in Plugin

In the plugin values are retrieved from CRM are in "UTC" format.

Value set in the plugin or console application are based on the date time property. If the date time property is not set as 
"UTC" then values converted as UTC and saved in the database.

If  the date time property is set as "UTC" then it will save as "UTC".