microsoft dynamics 365 crm Archives - Microsoft Dynamics 365 Blog http://microsoftdynamics.in/tag/microsoft-dynamics-365-crm/ Microsoft Dynamics CRM . Microsoft Power Platform Tue, 29 Sep 2020 17:28:25 +0000 en-US hourly 1 https://wordpress.org/?v=6.5.5 https://i0.wp.com/microsoftdynamics.in/wp-content/uploads/2020/04/cropped-Microsoftdynamics365-blogs.png?fit=32%2C32 microsoft dynamics 365 crm Archives - Microsoft Dynamics 365 Blog http://microsoftdynamics.in/tag/microsoft-dynamics-365-crm/ 32 32 176351444 UCI : Disable Editable Grid for Entity list , Unable to double click lead record from entity list or getting error while opening record from Entity list http://microsoftdynamics.in/2020/09/29/disable-editable-grid-for-entity-list-unable-to-double-click-lead-record-from-entity-list-or-getting-error-while-opening-record-from-entity-list-uci/ Tue, 29 Sep 2020 17:28:25 +0000 http://microsoftdynamics.in/?p=4198 We have enabled the Editable grid for sub-grid and quite familiar how it works but using it on entity list is not so common as we have thousands of records and we don't want to mess with validation like a duplicate rule or business rule in Entity list.

But if by any chance you have enabled editable grid in Entity List it will be following up with lots of validation issues over UCI. Below are the steps to disable it. With Control option over Entity itself

The post UCI : Disable Editable Grid for Entity list , Unable to double click lead record from entity list or getting error while opening record from Entity list appeared first on Microsoft Dynamics 365 Blog.

]]>

We have enabled the Editable grid for sub-grid and quite familiar how it works but using it on entity list is not so common as we have thousands of records and we don't want to mess with validation like a duplicate rule or business rule in Entity list.

But if by any chance you have enabled editable grid in Entity List it will be following up with lots of validation issues over UCI. Below are the steps to disable it. With Control option over Entity itself

https://i0.wp.com/microsoftdynamics.in/wp-content/uploads/2020/09/ERROR-WHILE-OPRNING-LEAD-RECORD.png?fit=1744%2C830

We can see in the above image there is legacy data that is duplicate and was ignored and saved, but when Migrating to UCI the Entity list is having Editable control which does not allow to open record because of this duplicate rule but nor giving any exact error.

  1. we can disable Editable gird control from the entity.

  2.  We can do modification to duplicate rule as desired so we can avoid error in entity list

  3. Or we can review Business Rule as well especially the one with Entity as the scope

Hoping this was helpful. thanks

The post UCI : Disable Editable Grid for Entity list , Unable to double click lead record from entity list or getting error while opening record from Entity list appeared first on Microsoft Dynamics 365 Blog.

]]>
4198
Trigger Power automate using WebHook (Plugin Registration tool) and throw exception / response in real time http://microsoftdynamics.in/2020/09/14/trigger-power-automate-using-webhook-plugin-registration-tool-and-throw-exception-response-in-real-time/ Mon, 14 Sep 2020 12:53:28 +0000 http://microsoftdynamics.in/?p=4148 As we know we can use WebHooks to creating external handlers for server events, like azure service bus or any other web service.

in this post

we will create power automate with action as ” when an HTTP request is received”
Get HTTP Post URL, Will break the URL as URL and parameters
Register a webhook using the plugin registration tool
Register a step on the update of the account name.
Adding the “Response” action in power automate to see exception in CRM using webhook

The post Trigger Power automate using WebHook (Plugin Registration tool) and throw exception / response in real time appeared first on Microsoft Dynamics 365 Blog.

]]>

In our last 3 posts, we checked 3 different methods of triggering Power automate, Below are the links

In today's post, we will check 4th method of triggering Power automate flow using WebHook in the plugin Registration tool

As we know we can use WebHooks to creating external handlers for server events, like azure service bus  or any other web service.

in this post

  1. we will create power automate with action as ” when an HTTP request is received”
  2. Get HTTP Post URL, Will break the URL as URL and parameters
  3. Register a webhook using the plugin registration tool
  4. Register a step on the update of the account name.
  5. Adding the “Response” action in power automate to see exception in CRM using webhook

Check1: Create Power automate with Action "When a HTTP request is recived"

  1. Create Instant flow and select action “When a HTTP request is Received”  with Method as post and Payload generic

  2. Once Saved we will get the URL , copy the URL and Break it down as below to specify HTTP query parameter in webhook.

    https://prod-25.centralindia.logic.azure.com:443/workflows/73a854555aaa5fad8f867ac168/triggers/manual/paths/invoke
    
    api-version=2016-06-01
    sp=/triggers/manual/run
    sv=1.0
    sig=Sxfp4x5V51JDEeSYuf4mvxTXlGR2xTxn3WeQiab00yY
    

Check2: Register WebHook to trigger power atomate flow and Register an Step for acccount update

  1. Login to plugin Registration tool and register new WebHook with Below config and Http Post URL.

  2. Now Register new Step on Update of Account entity, field = account name.

  3. All Done, If we want to add some condition and throw an exception for any condition, we can do so by adding “response ” in  Power automate

It would be a kind of realtime exception even we know the flow is meant to be working in async.

The post Trigger Power automate using WebHook (Plugin Registration tool) and throw exception / response in real time appeared first on Microsoft Dynamics 365 Blog.

]]>
4148
UCI : Get Entity Record URL or Generate Dynamic Record URL of a Record in Power automate using CDs connector and Variable http://microsoftdynamics.in/2020/09/12/uci-get-entity-record-url-or-generate-dynamic-record-url-of-a-record-in-power-automate-using-cds-connector-and-variable/ Sat, 12 Sep 2020 12:14:06 +0000 http://microsoftdynamics.in/?p=4120 In Point 1 we got the environment url and from point 2 we know how to get AppId as well, but here we are not using appid and if we don't use it that doesn't it will automatically open it available app as per permission.

We created an Trigger as update of case
Using compose output and get record we got the Odata URL as well
Now we will initialize Variable just to get the final output of the dynamic record URL, we can do this directly in email as well.

 Now we will use Hyperlink or ancher html tag to use Record url in Email

In Output we can see our URL which can be with or withour CMDBAR and NAVBAR

The post UCI : Get Entity Record URL or Generate Dynamic Record URL of a Record in Power automate using CDs connector and Variable appeared first on Microsoft Dynamics 365 Blog.

]]>

We would be using power automated flow to generate a dynamic record URL, we will also check how to get the Current Record URL in power to automate

The Scenario we had is when a case is resolved, send an email to the manager of the record that the Case is resolved including Record URL.

As per the above image, the URL contains 3 parts

  1. URL of Environment: when we talk about the dynamic Record URL it should also consider when we move from UATto production we should not change it in the Production manual it should automatically take the URL of Environment.DVMSKEUAT.CRM.Dynamics.com to DVMSKEPROD.CRM.Dynamics.com
  2. App ID: Each App has it unique Id if you want that Entity to open in a specific App we need to Define it in the URLappid = GUID 
  3. CMD Bar: CRM Bar is the bar where we navigate throw cmd buttons. We can remove/add-in from window by putting cmdbar= false/true

  4. NavBar: This is the Blue bar of CRM where we navigate app and entity history, We can Remove/add in form window by setting navbar=on/off

  5. PageType: it is used to define type of page , Example pagetype=dashboard , pagetype=entitylist , pagetype=entity  E.T.C

  6. ENT: ent stands for Entity where we define the name of entity example account, contact, incident in our case
  7. ID: this defines GUID unique id of the page type or entity we want to retrieve data for example if we  using pagetype= Dashboard it will need GUID of Dahsboard

Check 1: Get Environment in Power automate flow

  • As per the Scenario, we added trigger as an update of the case with a filter as status should be equal to 5 (problem resolved)

  • Now ideally we should get Environment URL in the Dynamic field OdataID as below but that will not come up when the trigger happens from CDS
  • So we will use Action to Get Case using Trigger ID, We know its repeated step but this is needed to get Environment URL, and we can limit attribute retrieving. We are using Compose action to verify our output

  • Here we get the full Odatat URL, not just the Environment URL, so we will be using an Expression uriHosts(outputs(‘URL’)
  • Compose action: uriHosts(outputs(‘URL’) , Where outputs is output of compose and (‘url’) action name refer screenshot
  • Other Action: uriHost(body(‘ActionName’)?[‘@odata.id’]) 

Check 2: Get Appid in power automate

AppId can no be retrieved directly in Power automate.

  1. we use a configuration ” organization config”  where we store multiple appid example sales hub , customer hub etc
  2. We will use get record action to retrieve the required appid.

Check 2: Generate dynamics record URl in power automate and use in Email

In Point 1 we got the environment url and from point 2 we know how to get AppId as well, but here we are not using appid and if we don’t use it that doesn’t it will automatically open it available app as per permission.

  1. We created an Trigger as update of case
  2. Using compose output and get record we got the Odata URL as well
  3. Now we will initialize Variable just to get the final output of the dynamic record URL, we can do this directly in email as well.

  4.  Now we will use Hyperlink or ancher html tag to use Record url in Email

In Output we can see our URL which can be with or withour CMDBAR and NAVBAR

The post UCI : Get Entity Record URL or Generate Dynamic Record URL of a Record in Power automate using CDs connector and Variable appeared first on Microsoft Dynamics 365 Blog.

]]>
4120
Automatic create case or lead record from Email Received Using Automatic Record Creation and update Rule , Convert Email to Case or lead http://microsoftdynamics.in/2020/08/16/automatic-create-case-or-lead-record-from-email-received-using-automatic-record-creation-and-update-rule-convert-email-to-case-or-lead/ Sun, 16 Aug 2020 14:58:14 +0000 http://microsoftdynamics.in/?p=4028 The scenario is When an Email is received to a ServiceSupport Queue System should automatically create a Case (or lead) then Send an Auto response email saying
"Dear Customer, We have created a case for this and our customer service agent will contact you in 24 hours, thanks"

So we have

A ServiceSupport queue where we are receiving email.
Then on that Queue itself or from service management, we will create  " Automatic  Record  Creation and  Update  Rules "
in "Automatic Record Creation and Update Rule", we will "Specify Autoresponse  Settings" for auto-response email
then we will "Specify Record Creation and Update Details" to add create action and conditions

The post Automatic create case or lead record from Email Received Using Automatic Record Creation and update Rule , Convert Email to Case or lead appeared first on Microsoft Dynamics 365 Blog.

]]>

Using Automatic Record Creation and Update Rule We can create records like case , lead , Contact, etc from the email received in CRM.
We can also send automatic response to the email received example, Dear customer, A case is created e.t.c

https://i0.wp.com/microsoftdynamics.in/wp-content/uploads/2020/08/img_5f3948b13261c.png?fit=999%2C594

The scenario is When an Email is received to a ServiceSupport Queue System should automatically create a Case (or lead) then Send an Auto response email saying
“Dear Customer, We have created a case for this and our customer service agent will contact you in 24 hours, thanks”

So we have

  • A ServiceSupport queue where we are receiving email.
  • Then on that Queue itself or from service management, we will create  ” Automatic  Record  Creation and  Update  Rules “
  • in “Automatic Record Creation and Update Rule”, we will “Specify Autoresponse  Settings” for auto-response email
  • then we will “Specify Record Creation and Update Details” to add create action and conditions

Check1: Create a new Queue "Service Support" (if not already in system)

We can create a new Queue if not already present

  1. Navigate Setting -> Business Management -> Queues

  2. Create a new Queue with email ID (remember we are not creating user as if support user is in created in the system it will have its own queue) also when queue is created it creates it mailbox

  3. Once done Approve email then Test and Enable Mailbox

Check2: Create a "Record Creation and Update Rule" for auto-creation of case

There are 2 ways to create “Record Creation and Update Rule”

  1. Create a form Setting -> Service Management -> Select Automatic Record Creation and Update Rules
  2. 2nd Way is to go to Quote and create ” Record Creation and Update Rule ” from subgrid

  3. Fill in values as below

Check3: Automatically reply to email = yes

  1. In Step three of ” New Record Creation and Update Rule” , There is a option to select Automatically reply to email = yes
  2. Select an Email Template in lookup.
    Example: “Dear Customer, We have created a case for this and our customer service agent will contact you in 24 hours, thanks”

Check4: Specify Record Creation and update Details , Condition to Evaluate and Actions to take

Once all Step above are saved, Go to Subgrid ” step two: Condition to Evaluate and Actions to take ” and for Legacy Web Client it will be “Specify Record Creation and Update Details”

  1. Open ” RECORD CREATION AND UPDATE RULES”  once saved , click new from “SPECIFY RECORD CREATION AND UPDATE DETAILS”
    NOTE: Try doing this from the Legacy app as it might give error

  2. Fill in details like Name and add conditions: Conditions are almost the  same as we add in Workflow or advance find query

  3. Now we will add action, click Add Step, and select create a record. we will be presented with a list of entities , in our case, we will select case,

  4. Once Done Save and Close the record.

Last Step is to Activate the Automatic Record Creation and Update Rule

 

The post Automatic create case or lead record from Email Received Using Automatic Record Creation and update Rule , Convert Email to Case or lead appeared first on Microsoft Dynamics 365 Blog.

]]>
4028
ENABLE OR DISABLE TRACKED TO DYNAMICS 365 FROM OUTLOOK http://microsoftdynamics.in/2020/08/14/enable-or-disable-tracked-to-dynamics-365-from-outlook/ Thu, 13 Aug 2020 19:45:46 +0000 http://microsoftdynamics.in/?p=3999 Server-side synchronization now allows tracking of emails, appointments, and tasks in Outlook and adds a new Category Tracked to Dynamics 365
For version 9.1.0.4039 or higher, category Tracked to Dynamics 365 is by default on, We can disable this for an organization using Admin settings

The post ENABLE OR DISABLE TRACKED TO DYNAMICS 365 FROM OUTLOOK appeared first on Microsoft Dynamics 365 Blog.

]]>

Server-side synchronization now allows tracking of emails, appointments, and tasks in Outlook and adds a new Category Tracked to Dynamics 365
For version 9.1.0.4039 or higher, category Tracked to Dynamics 365 is by default on, We can disable this for an organization using Admin settings

https://i0.wp.com/microsoftdynamics.in/wp-content/uploads/2020/08/img_5f3592de5d47f.png?fit=1497%2C728

Disable or Remove Category Tracked to Dynamics 365 on all Exchange mailboxes of the Dynamics 365

There are 2 Option

  1. Remove Category Tracked to Dynamics 365 using setting from OrgDBOrgSetting/Releases and same can be used to Enable setting
    https://github.com/seanmcne/OrgDbOrgSettings/releases/

  2. From admin.powerplateform.microsoft.com disable setting-> Access https://admin.powerplatform.microsoft.com as an administrator
    -> On the Environments tab, click  next to the name of the environment and then click Settings.
    -> Click Email Tracking.

    -> Locate the option People can use categories to track emails and appointments and switch the option to Off.

->Disabling this setting will remove the category Tracked to Dynamics 365 on all Exchange mailboxes of the Dynamics 365 for Customer Engagement organization which have server-side synchronization enabled in about 15 minutes.

The post ENABLE OR DISABLE TRACKED TO DYNAMICS 365 FROM OUTLOOK appeared first on Microsoft Dynamics 365 Blog.

]]>
3999
Rich Text Editor – HTML Designer for Microsoft dynamics 365 CRM Using JavaScript- NO PCF http://microsoftdynamics.in/2020/07/16/rich-text-editor-html-designer-for-microsoft-dynamics-365-crm-using-javascript-no-pcf/ Thu, 16 Jul 2020 12:38:37 +0000 http://microsoftdynamics.in/?p=3953 one recent requirement needed to have a temporary Rich-text HTML designer for Question Field in KB article and instead of using CK entire js library and using other managed solution we used below HTML Web resource which fulfilled our quick and temporary requirement 

NOTE: The current best practice suggestion is to use PCF control to use PCF.Gallery to get Prebuild PCF control for Rich Text Editor
Step1: Create 2 field - New_Questionhtml and new_questionplain

Step 2: Create an HTML web resource and use above HTML in the source.

step 3: We have not used Parameter and hardcoded HTML field and plain field as below

Step 4: Insert Web resource on form and select web resource created above

Step 5: Save and Publish , our Rich Text HTMl field is ready to use 

The post Rich Text Editor – HTML Designer for Microsoft dynamics 365 CRM Using JavaScript- NO PCF appeared first on Microsoft Dynamics 365 Blog.

]]>

There are lots of posts regarding Creating and HTML designer Rich Text Editor for a field in Microsoft dynamics 365, But almost all of them require some Managed or unmanaged Solution import with lots of JS and HTML web resource.

Below is a simple HTML WebResource which using CKeditor JS.

https://i0.wp.com/microsoftdynamics.in/wp-content/uploads/2020/07/Rich-Text-Editor-–-HTML-Designer-for-Microsoft-dynamics-365-CRM-Using-JavaScript-NO-PCF.jpg?fit=1885%2C852

one recent requirement needed to have a temporary Rich-text HTML designer for Question Field in KB article and instead of using CK entire js library and using other managed solution we used below HTML Web resource which fulfilled our quick and temporary requirement

NOTE: The current best practice suggestion is to use PCF control to use PCF.Gallery to get Prebuild PCF control for Rich Text Editor

<html><head><meta><meta><meta></head><body onfocusout="parent.setEmailRange();" style="overflow-wrap: break-word;">

    
        <meta charset="utf-8">
        <meta name="robots" content="noindex, nofollow">
        <title></title>
        <script type="text/javascript" src="../../ClientGlobalContext.js.aspx"></script> 
        <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script>
         <!--<script src="../Scripts/new_ckeditor.js" type="text/javascript"></script>-->
       script src="https://cdn.ckeditor.com/4.6.2/standard-all/ckeditor.js"></script>
        <!--<script src="http://cdn.ckeditor.com/4.6.2/basic/ckeditor.js"></script>-->
    
    
        <textarea cols="80" id="editor1" style="width:100%" name="editor1" rows="30"></textarea>
        <textarea id="editor2" name="editor2" style="display: none"></textarea>
        
        <!--Utility Script-->
        <script>
            function entityToHtml(string) {
                for (var i in entity_table) {
                    if (i != 38) {
                        string = string.replace(new RegExp(entity_table[i], "g"), String.fromCharCode(i));
                    }
                }
                //string = string.replace(new RegExp("&#(x?)(\\d+);", "g"), String.fromCharCode(((p1 == 'x') ? parseInt(p2, 16) : p2)));
                string = string.replace(new RegExp("&#(x?)(\\d+);", "g"), function (match, p1, p2, string) {
                    return String.fromCharCode(((p1 == 'x') ? parseInt(p2, 16) : p2));
                });
                string = string.replace(new RegExp(entity_table[38], "g"), String.fromCharCode(38));
                return string;
            }

            var entity_table = {
                // 34: "&quot;",     // Quotation mark. Not required
                38: "&amp;",        // Ampersand. Applied before everything else in the application
                60: "&lt;",     // Less-than sign
                62: "&gt;",     // Greater-than sign
                // 63: "&#63;",      // Question mark
                // 111: "&#111;",        // Latin small letter o
                160: "&nbsp;",      // Non-breaking space
                161: "&iexcl;",     // Inverted exclamation mark
                162: "&cent;",      // Cent sign
                163: "&pound;",     // Pound sign
                164: "&curren;",    // Currency sign
                165: "&yen;",       // Yen sign
                166: "&brvbar;",    // Broken vertical bar
                167: "&sect;",      // Section sign
                168: "&uml;",       // Diaeresis
                169: "&copy;",      // Copyright sign
                170: "&ordf;",      // Feminine ordinal indicator
                171: "&laquo;",     // Left-pointing double angle quotation mark
                172: "&not;",       // Not sign
                173: "&shy;",       // Soft hyphen
                174: "&reg;",       // Registered sign
                175: "&macr;",      // Macron
                176: "&deg;",       // Degree sign
                177: "&plusmn;",    // Plus-minus sign
                178: "&sup2;",      // Superscript two
                179: "&sup3;",      // Superscript three
                180: "&acute;",     // Acute accent
                181: "&micro;",     // Micro sign
                182: "&para;",      // Pilcrow sign
                183: "&middot;",    // Middle dot
                184: "&cedil;",     // Cedilla
                185: "&sup1;",      // Superscript one
                186: "&ordm;",      // Masculine ordinal indicator
                187: "&raquo;",     // Right-pointing double angle quotation mark
                188: "&frac14;",    // Vulgar fraction one-quarter
                189: "&frac12;",    // Vulgar fraction one-half
                190: "&frac34;",    // Vulgar fraction three-quarters
                191: "&iquest;",    // Inverted question mark
                192: "&Agrave;",    // A with grave
                193: "&Aacute;",    // A with acute
                194: "&Acirc;",     // A with circumflex
                195: "&Atilde;",    // A with tilde
                196: "&Auml;",      // A with diaeresis
                197: "&Aring;",     // A with ring above
                198: "&AElig;",     // AE
                199: "&Ccedil;",    // C with cedilla
                200: "&Egrave;",    // E with grave
                201: "&Eacute;",    // E with acute
                202: "&Ecirc;",     // E with circumflex
                203: "&Euml;",      // E with diaeresis
                204: "&Igrave;",    // I with grave
                205: "&Iacute;",    // I with acute
                206: "&Icirc;",     // I with circumflex
                207: "&Iuml;",      // I with diaeresis
                208: "&ETH;",       // Eth
                209: "&Ntilde;",    // N with tilde
                210: "&Ograve;",    // O with grave
                211: "&Oacute;",    // O with acute
                212: "&Ocirc;",     // O with circumflex
                213: "&Otilde;",    // O with tilde
                214: "&Ouml;",      // O with diaeresis
                215: "&times;",     // Multiplication sign
                216: "&Oslash;",    // O with stroke
                217: "&Ugrave;",    // U with grave
                218: "&Uacute;",    // U with acute
                219: "&Ucirc;",     // U with circumflex
                220: "&Uuml;",      // U with diaeresis
                221: "&Yacute;",    // Y with acute
                222: "&THORN;",     // Thorn
                223: "&szlig;",     // Sharp s. Also known as ess-zed
                224: "&agrave;",    // a with grave
                225: "&aacute;",    // a with acute
                226: "&acirc;",     // a with circumflex
                227: "&atilde;",    // a with tilde
                228: "&auml;",      // a with diaeresis
                229: "&aring;",     // a with ring above
                230: "&aelig;",     // ae. Also known as ligature ae
                231: "&ccedil;",    // c with cedilla
                232: "&egrave;",    // e with grave
                233: "&eacute;",    // e with acute
                234: "&ecirc;",     // e with circumflex
                235: "&euml;",      // e with diaeresis
                236: "&igrave;",    // i with grave
                237: "&iacute;",    // i with acute
                238: "&icirc;",     // i with circumflex
                239: "&iuml;",      // i with diaeresis
                240: "&eth;",       // eth
                241: "&ntilde;",    // n with tilde
                242: "&ograve;",    // o with grave
                243: "&oacute;",    // o with acute
                244: "&ocirc;",     // o with circumflex
                245: "&otilde;",    // o with tilde
                246: "&ouml;",      // o with diaeresis
                247: "&divide;",    // Division sign
                248: "&oslash;",    // o with stroke. Also known as o with slash
                249: "&ugrave;",    // u with grave
                250: "&uacute;",    // u with acute
                251: "&ucirc;",     // u with circumflex
                252: "&uuml;",      // u with diaeresis
                253: "&yacute;",    // y with acute
                254: "&thorn;",     // thorn
                255: "&yuml;",      // y with diaeresis
                264: "&#264;",      // Latin capital letter C with circumflex
                265: "&#265;",      // Latin small letter c with circumflex
                338: "&OElig;",     // Latin capital ligature OE
                339: "&oelig;",     // Latin small ligature oe
                352: "&Scaron;",    // Latin capital letter S with caron
                353: "&scaron;",    // Latin small letter s with caron
                372: "&#372;",      // Latin capital letter W with circumflex
                373: "&#373;",      // Latin small letter w with circumflex
                374: "&#374;",      // Latin capital letter Y with circumflex
                375: "&#375;",      // Latin small letter y with circumflex
                376: "&Yuml;",      // Latin capital letter Y with diaeresis
                402: "&fnof;",      // Latin small f with hook, function, florin
                710: "&circ;",      // Modifier letter circumflex accent
                732: "&tilde;",     // Small tilde
                913: "&Alpha;",     // Alpha
                914: "&Beta;",      // Beta
                915: "&Gamma;",     // Gamma
                916: "&Delta;",     // Delta
                917: "&Epsilon;",   // Epsilon
                918: "&Zeta;",      // Zeta
                919: "&Eta;",       // Eta
                920: "&Theta;",     // Theta
                921: "&Iota;",      // Iota
                922: "&Kappa;",     // Kappa
                923: "&Lambda;",    // Lambda
                924: "&Mu;",        // Mu
                925: "&Nu;",        // Nu
                926: "&Xi;",        // Xi
                927: "&Omicron;",   // Omicron
                928: "&Pi;",        // Pi
                929: "&Rho;",       // Rho
                931: "&Sigma;",     // Sigma
                932: "&Tau;",       // Tau
                933: "&Upsilon;",   // Upsilon
                934: "&Phi;",       // Phi
                935: "&Chi;",       // Chi
                936: "&Psi;",       // Psi
                937: "&Omega;",     // Omega
                945: "&alpha;",     // alpha
                946: "&beta;",      // beta
                947: "&gamma;",     // gamma
                948: "&delta;",     // delta
                949: "&epsilon;",   // epsilon
                950: "&zeta;",      // zeta
                951: "&eta;",       // eta
                952: "&theta;",     // theta
                953: "&iota;",      // iota
                954: "&kappa;",     // kappa
                955: "&lambda;",    // lambda
                956: "&mu;",        // mu
                957: "&nu;",        // nu
                958: "&xi;",        // xi
                959: "&omicron;",   // omicron
                960: "&pi;",        // pi
                961: "&rho;",       // rho
                962: "&sigmaf;",    // sigmaf
                963: "&sigma;",     // sigma
                964: "&tau;",       // tau
                965: "&upsilon;",   // upsilon
                966: "&phi;",       // phi
                967: "&chi;",       // chi
                968: "&psi;",       // psi
                969: "&omega;",     // omega
                977: "&thetasym;",  // Theta symbol
                978: "&upsih;",     // Greek upsilon with hook symbol
                982: "&piv;",       // Pi symbol
                8194: "&ensp;",     // En space
                8195: "&emsp;",     // Em space
                8201: "&thinsp;",   // Thin space
                8204: "&zwnj;",     // Zero width non-joiner
                8205: "&zwj;",      // Zero width joiner
                8206: "&lrm;",      // Left-to-right mark
                8207: "&rlm;",      // Right-to-left mark
                8211: "&ndash;",    // En dash
                8212: "&mdash;",    // Em dash
                8216: "&lsquo;",    // Left single quotation mark
                8217: "&rsquo;",    // Right single quotation mark
                8218: "&sbquo;",    // Single low-9 quotation mark
                8220: "&ldquo;",    // Left double quotation mark
                8221: "&rdquo;",    // Right double quotation mark
                8222: "&bdquo;",    // Double low-9 quotation mark
                8224: "&dagger;",   // Dagger
                8225: "&Dagger;",   // Double dagger
                8226: "&bull;",     // Bullet
                8230: "&hellip;",   // Horizontal ellipsis
                8240: "&permil;",   // Per mille sign
                8242: "&prime;",    // Prime
                8243: "&Prime;",    // Double Prime
                8249: "&lsaquo;",   // Single left-pointing angle quotation
                8250: "&rsaquo;",   // Single right-pointing angle quotation
                8254: "&oline;",    // Overline
                8260: "&frasl;",    // Fraction Slash
                8364: "&euro;",     // Euro sign
                8472: "&weierp;",   // Script capital
                8465: "&image;",    // Blackletter capital I
                8476: "&real;",     // Blackletter capital R
                8482: "&trade;",    // Trade mark sign
                8501: "&alefsym;",  // Alef symbol
                8592: "&larr;",     // Leftward arrow
                8593: "&uarr;",     // Upward arrow
                8594: "&rarr;",     // Rightward arrow
                8595: "&darr;",     // Downward arrow
                8596: "&harr;",     // Left right arrow
                8629: "&crarr;",    // Downward arrow with corner leftward. Also known as carriage return
                8656: "&lArr;",     // Leftward double arrow. ISO 10646 does not say that lArr is the same as the 'is implied by' arrow but also does not have any other character for that function. So ? lArr can be used for 'is implied by' as ISOtech suggests
                8657: "&uArr;",     // Upward double arrow
                8658: "&rArr;",     // Rightward double arrow. ISO 10646 does not say this is the 'implies' character but does not have another character with this function so ? rArr can be used for 'implies' as ISOtech suggests
                8659: "&dArr;",     // Downward double arrow
                8660: "&hArr;",     // Left-right double arrow
                // Mathematical Operators
                8704: "&forall;",   // For all
                8706: "&part;",     // Partial differential
                8707: "&exist;",    // There exists
                8709: "&empty;",    // Empty set. Also known as null set and diameter
                8711: "&nabla;",    // Nabla. Also known as backward difference
                8712: "&isin;",     // Element of
                8713: "&notin;",    // Not an element of
                8715: "&ni;",       // Contains as member
                8719: "&prod;",     // N-ary product. Also known as product sign. Prod is not the same character as U+03A0 'greek capital letter pi' though the same glyph might be used for both
                8721: "&sum;",      // N-ary summation. Sum is not the same character as U+03A3 'greek capital letter sigma' though the same glyph might be used for both
                8722: "&minus;",    // Minus sign
                8727: "&lowast;",   // Asterisk operator
                8729: "&#8729;",    // Bullet operator
                8730: "&radic;",    // Square root. Also known as radical sign
                8733: "&prop;",     // Proportional to
                8734: "&infin;",    // Infinity
                8736: "&ang;",      // Angle
                8743: "&and;",      // Logical and. Also known as wedge
                8744: "&or;",       // Logical or. Also known as vee
                8745: "&cap;",      // Intersection. Also known as cap
                8746: "&cup;",      // Union. Also known as cup
                8747: "&int;",      // Integral
                8756: "&there4;",   // Therefore
                8764: "&sim;",      // tilde operator. Also known as varies with and similar to. The tilde operator is not the same character as the tilde, U+007E, although the same glyph might be used to represent both
                8773: "&cong;",     // Approximately equal to
                8776: "&asymp;",    // Almost equal to. Also known as asymptotic to
                8800: "&ne;",       // Not equal to
                8801: "&equiv;",    // Identical to
                8804: "&le;",       // Less-than or equal to
                8805: "&ge;",       // Greater-than or equal to
                8834: "&sub;",      // Subset of
                8835: "&sup;",      // Superset of. Note that nsup, 'not a superset of, U+2283' is not covered by the Symbol font encoding and is not included.
                8836: "&nsub;",     // Not a subset of
                8838: "&sube;",     // Subset of or equal to
                8839: "&supe;",     // Superset of or equal to
                8853: "&oplus;",    // Circled plus. Also known as direct sum
                8855: "&otimes;",   // Circled times. Also known as vector product
                8869: "&perp;",     // Up tack. Also known as orthogonal to and perpendicular
                8901: "&sdot;",     // Dot operator. The dot operator is not the same character as U+00B7 middle dot
                // Miscellaneous Technical
                8968: "&lceil;",    // Left ceiling. Also known as an APL upstile
                8969: "&rceil;",    // Right ceiling
                8970: "&lfloor;",   // left floor. Also known as APL downstile
                8971: "&rfloor;",   // Right floor
                9001: "&lang;",     // Left-pointing angle bracket. Also known as bra. Lang is not the same character as U+003C 'less than'or U+2039 'single left-pointing angle quotation mark'
                9002: "&rang;",     // Right-pointing angle bracket. Also known as ket. Rang is not the same character as U+003E 'greater than' or U+203A 'single right-pointing angle quotation mark'
                // Geometric Shapes
                9642: "&#9642;",    // Black small square
                9643: "&#9643;",    // White small square
                9674: "&loz;",      // Lozenge
                // Miscellaneous Symbols
                9702: "&#9702;",    // White bullet
                9824: "&spades;",   // Black (filled) spade suit
                9827: "&clubs;",    // Black (filled) club suit. Also known as shamrock
                9829: "&hearts;",   // Black (filled) heart suit. Also known as shamrock
                9830: "&diams;"   // Black (filled) diamond suit
            }
        </script>

        <!--Utility Script-->
        <script>
            var protos = document.body.constructor === window.HTMLBodyElement;
            validHTMLTags = /^(?:a|abbr|acronym|address|applet|area|article|aside|audio|b|base|basefont|bdi|bdo|bgsound|big|blink|blockquote|body|br|button|canvas|caption|center|cite|code|col|colgroup|data|datalist|dd|del|details|dfn|dir|div|dl|dt|em|embed|fieldset|figcaption|figure|font|footer|form|frame|frameset|h1|h2|h3|h4|h5|h6|head|header|hgroup|hr|html|i|iframe|img|input|ins|isindex|kbd|keygen|label|legend|li|link|listing|main|map|mark|marquee|menu|menuitem|meta|meter|nav|nobr|noframes|noscript|object|ol|optgroup|option|output|p|param|plaintext|pre|progress|q|rp|rt|ruby|s|samp|script|section|select|small|source|spacer|span|strike|strong|style|sub|summary|sup|table|tbody|td|textarea|tfoot|th|thead|time|title|tr|track|tt|u|ul|var|video|wbr|xmp)$/i;

            function sanitize(txt) {
                var // This regex normalises anything between quotes
                    normaliseQuotes = /=(["'])(?=[^\1]*[<>])[^\1]*\1/g,
                    normaliseFn = function ($0, q, sym) {
                        return $0.replace(/</g, '&lt;').replace(/>/g, '&gt;');
                    },
                    replaceInvalid = function ($0, tag, off, txt) {
                        var
                            // Is it a valid tag?
                            invalidTag = protos &&
                                document.createElement(tag) instanceof HTMLUnknownElement
                             || !validHTMLTags.test(tag),

                            // Is the tag complete?
                            isComplete = txt.slice(off + 1).search(/^[^<]+>/) > -1;

                        return invalidTag || !isComplete ? '&lt;' + tag : $0;
                    };

                txt = txt.replace(normaliseQuotes, normaliseFn)
                         .replace(/<(\w+)/g, replaceInvalid);

                var tmp = document.createElement("DIV");
                tmp.innerHTML = txt;

                return "textContent" in tmp ? tmp.textContent : tmp.innerHTML;
            }
        </script>

        <script>     
            var _htmlCommentField = "new_question";
            var _plainTextCommentField = "new_questionhtml";

            $(document).ready(function () {
                var qStringCollection = pareseQueryString(window.location.search);

                if (qStringCollection.length > 0) {
                    var param = (($.grep(qStringCollection, function (n, i) { return (n.ParamName == "htmlcommentfield") })));
                    _htmlCommentField = param.length > 0 ? param[0].ParamValue : _htmlCommentField;

                    param = (($.grep(qStringCollection, function (n, i) { return (n.ParamName == "plaintextcommentfield") })));
                    _plainTextCommentField = param.length > 0 ? param[0].ParamValue : _plainTextCommentField;
                }

                // Render CKEditor
                (function () {
                    //alert(CKEDITOR.basePath);
                    var editor2 = CKEDITOR.replace('editor2', {
                        removePlugins: 'sourcearea',
                        removeButtons: 'Source,Save,NewPage,Preview,Print,Templates,Cut,Copy,Paste,PasteFromWord,Redo,Undo,Find,Replace,SelectAll,Scayt,Form,Radio,TextField,Checkbox,Textarea,Select,Button,ImageButton,HiddenField,Bold,Italic,Underline,Strike,Subscript,Superscript,CopyFormatting,RemoveFormat,NumberedList,BulletedList,Indent,Outdent,Blockquote,CreateDiv,JustifyLeft,JustifyCenter,JustifyRight,JustifyBlock,Language,BidiRtl,BidiLtr,Link,Unlink,Anchor,Table,Image,Flash,HorizontalRule,Smiley,SpecialChar,PageBreak,Iframe,Styles,Format,Font,FontSize,TextColor,BGColor,ShowBlocks,Maximize,About',
                        forcePasteAsPlainText: true
                    });

                    var editor1 = CKEDITOR.replace('editor1', {
                        removePlugins: 'sourcearea',
                        removeButtons: 'About',
                        //forcePasteAsPlainText: true
                        height: '250px'
                    });

                    editor1.on('change', function (ev) {                        
                        if ($.trim(window.parent.Xrm.Page.getAttribute(_htmlCommentField).getValue()) != $.trim(editor1.getData())) {
                            editor2.setData(editor1.getData(), function () {
                                window.parent.Xrm.Page.getAttribute(_htmlCommentField).setValue(editor1.getData());
                                window.parent.Xrm.Page.getAttribute(_plainTextCommentField).setValue(sanitize(entityToHtml(editor2.getData())).replace(/\n\s*\n/g, '\n'));//.replace(/<(?:.|\n)*?>/gm, '');
                            });
                        }
                    });

                    editor1.on('instanceReady', function (ev) {
                        if ($.trim(window.parent.Xrm.Page.getAttribute(_htmlCommentField).getValue()) != null)
                            editor1.setData(window.parent.Xrm.Page.getAttribute(_htmlCommentField).getValue());
                    });

                    editor2.on('instanceReady', function (ev) {
                        document.getElementById("cke_editor2").style.visibility = 'hidden';
                        document.getElementById("cke_editor2").style.display = 'none';
                    });
                })();
            });
            
            // Utility Scripts
            function pareseQueryString(data) {
                var queryStringData = decodeURIComponent(data.split("?")[1]).replace("&data=", "&");

                var queryStringArray = queryStringData.split('&');

                var qStringCollection = [];
                for (var count = 0; count < queryStringArray.length; count++) {
                    var paramsArray = queryStringArray[count].split('=');

                    if (paramsArray.length > 0) {
                        var qString = {};
                        qString.ParamName = paramsArray[0].toLowerCase();
                        qString.ParamValue = paramsArray[1];

                        qStringCollection.push(qString);
                    }
                }

                return qStringCollection;
            }
        </script>
    
</body></html>

Step1: Create 2 field – New_Questionhtml and new_questionplain

Step 2: Create an HTML web resource and use the above HTML in the source.

step 3: We have not used Parameter and hard coded HTML field and plain field as below

Step 4: Insert Web resource on form and select web resource created above

Step 5: Save and Publish, our Rich Text HTML field is ready to use

The post Rich Text Editor – HTML Designer for Microsoft dynamics 365 CRM Using JavaScript- NO PCF appeared first on Microsoft Dynamics 365 Blog.

]]>
3953
Migration from Legacy WebClient to UCI – Ribbon Button Icon issue – Old Legacy WebClient Button not supported in UCI – ModernImage -SVG http://microsoftdynamics.in/2020/07/11/migration-from-legacy-webclient-to-uci-ribbon-button-icon-issue-old-legacy-webclient-button-not-supported-in-uci-modernimage-svg/ Sat, 11 Jul 2020 14:05:56 +0000 http://microsoftdynamics.in/?p=3942 Migration from Legacy Webclient to UCI - Unified client interface - Step by Step move from Legacy WebClient to Unified Client Interface UCI -

Identify the most critical components and the commonly shared component (which almost no effect)
Setup Development environment for UCI upgrade and keeping in mind we also have to support fixes and CR to legacy WebClient
So now we have 3 Properties control

Image 16 for 16*16 png or jpg image and used in classic Legacy WebClient
Image 32 for 32*32 png or jpg image and used in Classic Legacy WebClient
ModernImage SVG format independent of Resolution used in New UCI 

The post Migration from Legacy WebClient to UCI – Ribbon Button Icon issue – Old Legacy WebClient Button not supported in UCI – ModernImage -SVG appeared first on Microsoft Dynamics 365 Blog.

]]>
https://i0.wp.com/microsoftdynamics.in/wp-content/uploads/2020/07/Ribbon-Button-Icon-issue-Old-Legacy-WebClient-Button-not-supported-in-UCI-ModernMode.jpg?fit=1729%2C574

For New UCI Image16 and Image 32, Property Control doesn't work (PNG or JPG) and Support SVG image in New Property "ModernImage"

SVG – Scalable Vector Graphics is most suitable for the Responsive page as it can be scaled high and keeping almost same Quality and that is the Reason these images suit the New UCI Responsive page. 

Below are some advantage for Using SVG

  • SVG images can be created and edited with any text editor
  • SVG images can be searched, indexed, scripted, and compressed
  • SVG images are scalable
  • SVG images can be printed with high quality at any resolution
  • SVG images are zoomable
  • SVG graphics do NOT lose any quality if they are zoomed or resized
  • SVG is an open standard
  • SVG files are pure XML

What are the changes we need to do

  1. No change required for OOB system buttons when Transition happens it automatic updates
  2. For Custom Button and Icon we need to Add SVG image in MorderImage Property from Ribbon workBench and we can keep Image 16 and image 32 if you want but it recommended we change them too.

Check 1 For Custom Button Icon we need to Add SVG image in MorderImage Property from Ribbon workBench and we can keep Image 16 and image 32 if you want but it recommended we change them too.

So now we have 3 Properties control

  1. Image 16 for 16*16 png or jpg image and used in classic Legacy WebClient
  2. Image 32 for 32*32 png or jpg image and used in Classic Legacy WebClient
  3. ModernImage SVG format independent of Resolution used in New UCI

Below are the steps to add SVG image in Modern Image

  1. Create a New Web Resource with type as Vector Format (SVG) and Upload image

  2. Now Open Ribbon WorkBench, If not installed install it from here
  3. If button properties are disabled. right-click a select Customise button

  4. Publish the Ribbon and we can now see the correct image in our Button at UCI.

The post Migration from Legacy WebClient to UCI – Ribbon Button Icon issue – Old Legacy WebClient Button not supported in UCI – ModernImage -SVG appeared first on Microsoft Dynamics 365 Blog.

]]>
3942
Unable to add Variable in Subject of Forms Pro Send a Survey Resolved http://microsoftdynamics.in/2020/06/19/unable-to-add-variable-in-subject-of-forms-pro-send-a-survey-resolved/ Fri, 19 Jun 2020 10:34:05 +0000 http://microsoftdynamics.in/?p=3745 Due to this Gap i was forced to use Create an invitation action in Power Automate, If you want to know about the difference between Send a Survey and Create an Invitation Click Here 
We had raised a call and we got confirmation from them in July end Release there are many gapes which will be taken care of 
i.e Friendly name or alias name of Survey as currently Heading of survey and name of the survey are same 
Sharing of survey is mandatory if someone wants to view the Survey response
And many small but useful gaps will be solved in next release
Also for this Subject variable issue, they gave a workaround and thanks to them it working,
Use {{Variablename}} in Subject manually to map the variable in the subject as below
Also this will only work when used with power automate and not direct email.

The post Unable to add Variable in Subject of Forms Pro Send a Survey Resolved appeared first on Microsoft Dynamics 365 Blog.

]]>

One of the Several Gaps in Forms Pro is that we can not add Variable in Subject of email Template of Forms Pro Send a Survey action.

Due to this Gap i was forced to use Create an invitation action in Power Automate, If you want to know about the difference between Send a Survey and Create an Invitation Click Here 

  • We had raised a call and we got confirmation from them in July end Release there are many gapes which will be taken care of
    i.e Friendly name or alias name of Survey as currently Heading of survey and name of the survey are same
    Sharing of survey is mandatory if someone wants to view the Survey response
    And many small but useful gaps will be solved in next release
  • Also for this Subject variable issue, they gave a workaround and thanks to them it working,
    Use {{Variablename}} in Subject manually to map the variable in the subject as below

  • Also this will only work when used with power automate and not direct email.

The post Unable to add Variable in Subject of Forms Pro Send a Survey Resolved appeared first on Microsoft Dynamics 365 Blog.

]]>
3745
Invalid Expression Power automate Expression – Max Character limit in power automate- Limits and configuration in Power Automate http://microsoftdynamics.in/2020/06/12/invalid-expression-power-automate-expression-max-character-limit-in-power-automate-limits-and-configuration-in-power-automate/ Fri, 12 Jun 2020 17:18:35 +0000 http://microsoftdynamics.in/?p=3603 Invalid Expression Power automate Expression - Max Character limit in power automate- Limits and configuration in Power Automate

The post Invalid Expression Power automate Expression – Max Character limit in power automate- Limits and configuration in Power Automate appeared first on Microsoft Dynamics 365 Blog.

]]>

I recently came up with a limitation on using long Expression
I was mapping a Custom Optionset label with value using the expression and came across invalid expression alert, Then I started dividing expression to find out in which line the issue was and then found it has some character limit on 8192, which i could have searched on Microsoft doc earlier and might have saved a lot of time.

https://i0.wp.com/microsoftdynamics.in/wp-content/uploads/2020/06/img_5ee3b79c2d9e4.png?fit=1911%2C255
https://i0.wp.com/microsoftdynamics.in/wp-content/uploads/2020/06/img_5ee3b7c8e3158.png?fit=1504%2C426

The post Invalid Expression Power automate Expression – Max Character limit in power automate- Limits and configuration in Power Automate appeared first on Microsoft Dynamics 365 Blog.

]]>
3603
My ClipBoard – Copy paste action in power automate tips http://microsoftdynamics.in/2020/06/10/my-clipboard-copy-paste-action-in-power-automate-tips/ Wed, 10 Jun 2020 14:20:29 +0000 http://microsoftdynamics.in/?p=3597 Sometimes power automate flow become lengthy and when there are repeating steps with few tweaks and tricks that and manually mapping everything is frustrating but there is a Copy past feature most of us has seen but I never tried it ( tried using CTRL + V )

But while working on long logic flow felt the need of knowing how this power automates action copy past work.

The best part is we can also use this copied action across different Power automate the flow

The post My ClipBoard – Copy paste action in power automate tips appeared first on Microsoft Dynamics 365 Blog.

]]>

Sometimes power automate flow become lengthy and when there are repeating steps with few tweaks and tricks that and manually mapping everything is frustrating but there is a Copy past feature most of us has seen but I never tried it ( tried using CTRL + V )

But while working on long logic flow felt the need of knowing how this power automates action copy past work.

You will notice a tab at the very end of choose an action “MY Clipboard”, if you have not copied anything , this would be blank.

https://i0.wp.com/microsoftdynamics.in/wp-content/uploads/2020/06/img_5ee0e91faae43.png?fit=1356%2C491

we can find Copy to my clipboard option on Action 3 dot section

https://i0.wp.com/microsoftdynamics.in/wp-content/uploads/2020/06/img_5ee0e9f1ee19d.png?fit=1830%2C717

After Coping thee Action, it would be available on My Clipboard

https://i0.wp.com/microsoftdynamics.in/wp-content/uploads/2020/06/img_5ee0ea0f3a087.png?fit=1617%2C469

The best part is we can also use this copied action across different Power automate the flow

But there are some pointers to keep in mind

  1. After coping we have to resolve the references
    I.e  body(‘Get_response_details_forms_lead‘)?[‘r8c8b777a372645dfb3f715f60e4c6b78’] is copied and pasted to different Section to flow, there the body name of reference can be different body(‘Get_response_details_forms_Contact‘)?[‘r8c8b777a372645dfb3f715f60e4c6b78’]
  2. Connections can be different for other flow or step

The post My ClipBoard – Copy paste action in power automate tips appeared first on Microsoft Dynamics 365 Blog.

]]>
3597