Quantcast
Channel: Sam's Activities
Viewing all 3363 articles
Browse latest View live

Microsoft Flow: Is it possible to filter D365 Update flow?

$
0
0

Hi All,

Is it possible to filter dirty fields when using D365 CE "When a record is updated?" flow trigger? I wanted to run or trigger the flow when only the Status field is updated. 

Thanks!


Save and refresh record entity after finishing dialog process

$
0
0

Hi All, I have created a dialog process, I call it when a button on the ribbon is clicked.
I wanna when dialog has finished its job( the dialog window closed and finished) the record entity save and reload.

Here is the code that run the dialog :

(function() {
Develop1_RibbonCommands_runDialogGrid = function(ids, objectTypeCode, dialogId) {
    if ((ids == null) || (!ids.length)) {
        alert(window.LOCID_ACTION_NOITEMSELECTED);
        return;
    }
    if (ids.length > 1) {
        alert(window.LOCID_GRID_TOO_MANY_RECORDS_IWF);
        return;
    }
    var rundialog = Mscrm.CrmUri.create('/cs/dialog/rundialog.aspx');
    rundialog.get_query()['DialogId'] = dialogId;
    rundialog.get_query()['ObjectId'] = ids[0];
    rundialog.get_query()['EntityName'] = objectTypeCode;
    openStdWin(rundialog,buildWinName(null),615,480,null);
}
Develop1_RibbonCommands_runDialogForm = function(objectTypeCode, dialogId) {
    var primaryEntityId = Xrm.Page.data.entity.getId();
    var rundialog = Mscrm.CrmUri.create('/cs/dialog/rundialog.aspx');
    rundialog.get_query()['DialogId'] = dialogId;
    rundialog.get_query()['ObjectId'] = primaryEntityId;
    rundialog.get_query()['EntityName'] = objectTypeCode;
    var hostWindow = window;
        if (typeof(openStdWin) == 'undefined') {
            hostWindow = window.parent; // Support for Turbo-forms in CRM2015 Update 1
        }
        if (typeof(hostWindow.openStdWin) != 'undefined') {
            hostWindow.openStdWin(rundialog, hostWindow.buildWinName(null), 615, 480, null);
            // window.location.reload(true);
        } 

}
})();

Depending on this source code, how can it be possible?

Integrating Dynamics 365 with Azure Functions – Part 3

$
0
0

Introduction:Copy of Clone Multiple Quotes or Invoices in Dynamics 365 CRM in a One Click (14)

In our last post about Azure functions, we saw how to register the workflow assembly and execute the workflow using Microsoft Flow in Dynamics 365. Continuing with our series to call webhooks from CRM, let us register the Azure function created as a Webhook. We register this using the Plugin Registration Tool (PRT)

From the PRT choose Register → Register New Webhook

Integrating Dynamics 365 with Azure Functions Part 3

In the Endpoint URL provide the function URL.

Choose Authentication method as WebhookKey and provide the key. This key is what you passed as the code querystring earlier.

Note: Webhook is registered as Service End Point in CRM

Integrating Dynamics 365 with Azure Functions Part 3

You can now register a step for this webhook just like we do for a plugin assembly.

Integrating Dynamics 365 with Azure Functions Part 3

When you create an Account the PluginExecutionContext is received in the message body of the httprequest in your Azure function. You then need to parse that to get context related details.

Once registered as webhook, you can also invoke this through a workflow by executing the endpoint using the following code:

string serviceEndPoint = WebhookURL.Get(executionContext);
                IWorkflowContext context = executionContext.GetExtension<IWorkflowContext>();

                string fetch = @"<fetch><entity name='serviceendpoint' ><attribute name='serviceendpointid' /><attribute name='name' /><attribute name='authtype' /><attribute name='url' /><filter type='and'><condition attribute='contract' operator='eq' value='8' /><condition attribute='url' operator='eq' value='" + serviceEndPoint + @"' /></filter></entity></fetch>";
                EntityCollection coll = crmWorkflowContext.OrganizationService.RetrieveMultiple(new FetchExpression(fetch));

                if (coll != null && coll.Entities.Count > 0)
                {
                    IServiceEndpointNotificationService endpointService =
                             executionContext.GetExtension<IServiceEndpointNotificationService>();

                    crmWorkflowContext.Trace("serviceEndPoint found: " + coll.Entities[0].Id.ToString());
                    endpointService.Execute(coll.Entities[0].ToEntityReference(), context);
                }

Once again you receive the Workflow context in the message body that you can parse to read the information passed.

Conclusion:

There are other ways to invoke Azure functions from D365. Azure functions can be called through Logic Apps and you could register Logic Apps on D365 entities and actions. That’s content for another post. So Keep visiting this space :)

Generate Your Own New Leads Now Within Dynamics 365 CRM with Maplytics

Retrieve Role Privileges and export into XL Sheet

$
0
0

Hi,

I have an requirement where user can select security role and need to exports all the related privileges to Xl sheet . Any suggestions.

Thanks in advance

Submitting Time/Expense entries on my behalf through delegate in Dynamics 365 (PSA)

$
0
0

Introduction:

Many times it happens that due to some reason i.e. long vacation/absence user unable to create/submit time entry or expense records. So user might want for that particular time slot, let the other authorize user make the time/expense entries on behalf of him. And hence get rid of the headache of missing any of time/expense entries during leave period. In Dynamics 365, you can create “Delegate” record to achieve this.

To let the other user be your delegate follow below simple steps:

1. Navigate to Project Service→Delegations

Submitting Time Expense entries1

2. Let say there are two resource managers (Mike and Sam), and in absence of one manager other has liability to create/submit the time or expense entries.

Under this “Delegations” entity create the new Delegation record as shown below, you can create the record with Type=Time Entry or Expense as below:

Submitting Time Expense entries2

Note: Before creating Delegate record make sure that “Mike Roy” and “Sam Developer” should be present as bookable resource record with “Resource Type=User” in D365. And user atleast has Resource Manager role.

Submitting Time Expense entries3

3. Lets continue creating the Delegation record with “Type=Time Entry” as below, Let say Mike is on leave for the period 25 May to 30 May 2018 and Mike want Sam to be his delegate for the mentioned period.

Submitting Time Expense entries4

Upon creation of above record, the record will appear in “Active Delegations” view as below:

Submitting Time Expense entries5

4. Now, whenever Sam logged in, and willing to submit the Time entries by navigating to Project Service→Time Entries, Sam could see the delegation options, defaulted to his name i.e. Sam Developer.

Submitting Time Expense entries6

5. Sam now willing to make time entries on behalf of Mike then, select the user, so timesheet will be appear as below:

Submitting Time Expense entries7

Note: As shown above only those time entries will appear of Mike which falls in between 25 May to 30 May 2018. As we have created the Delegate for this period only.

Please note that while logging the time entries as Mike through, Sam might get below error:

Submitting Time Expense entries8

So, make sure that Sam has assigned with the “Delegate” role as well as shown below:

Submitting Time Expense entries9

6.Now, Sam can go on creating “Time entries” on behalf of Mike for only assigned period for which above delegate record created for.

Submitting Time Expense entries10

7. The above created time entries would be logged actually against the Mike, and Mike can easily have access of this time entries as if he has created this.

You can follow above steps as it is for creating the Delegation records with Type=Expense, and can submit the Expenses by navigating to Project Service→Expenses.

Conclusion:

Simply by using the delegate concept in Dynamics 365 user can submit the time and expense entries in Project Service Automation even in their abscense without delaying the work.

CRM 2016 Online Email Signature issue

$
0
0

I have created a email signature in my personal options, however, whenever I click on "insert signature" I get a generic error - "An error has occurred. Please return to homepage and try again".  I have system Admin security role. I have tried on internet explorer 11, chrome v52.0.2743.116. Does anyone else get the same issue ? See below screens for series of steps.

1. Created an email signature under personal options and set it as default.

2.  Clicked on quick create to create an email activity but the email signature did not automatically get populated in the body of the email. See below screen. Even if I go to a case and create an email activity from there it does not populate the email signature automatically.

3. Now if I click on "insert Signature" button to manually insert the signature I get an error.

Error on create entity on dynamics portal

$
0
0

Hello!

When i create record of an entity on dynamics portal then following error display which is not understandable for me so kindly help me about this!

An unknown failure has occurred. Error ID # [4e5d8146-3f62-42fe-b368-56731bd180ce]

How to fetch intercept table data and display using c#

$
0
0

Hi Guys,

How to get the records for each active contact which has a field called job title. And display that using C#

I tried this:

RetrieveMultipleRequest RM = new RetrieveMultipleRequest()
{
Query = new FetchExpression(linkFetch.ToString())
};
EntityCollection entityResults = ((RetrieveMultipleResponse)_service.Execute(RM)).EntityCollection;
foreach (var entity in entityResults.Entities)
{
String output = String.Empty;
if (entity.Attributes.Contains("job title"))
MessageBox.Show("" + entity.Attributes["job title"]);
}

I wanted to display job title for each active contact .. please help me 


Save and refresh record entity after finishing dialog process

$
0
0

Hi All, I have created a dialog process, I call it when a button on the ribbon is clicked.
I wanna when dialog has finished its job( the dialog window closed and finished) the record entity save and reload.

Here is the code that run the dialog :

(function() {
Develop1_RibbonCommands_runDialogGrid = function(ids, objectTypeCode, dialogId) {
    if ((ids == null) || (!ids.length)) {
        alert(window.LOCID_ACTION_NOITEMSELECTED);
        return;
    }
    if (ids.length > 1) {
        alert(window.LOCID_GRID_TOO_MANY_RECORDS_IWF);
        return;
    }
    var rundialog = Mscrm.CrmUri.create('/cs/dialog/rundialog.aspx');
    rundialog.get_query()['DialogId'] = dialogId;
    rundialog.get_query()['ObjectId'] = ids[0];
    rundialog.get_query()['EntityName'] = objectTypeCode;
    openStdWin(rundialog,buildWinName(null),615,480,null);
}
Develop1_RibbonCommands_runDialogForm = function(objectTypeCode, dialogId) {
    var primaryEntityId = Xrm.Page.data.entity.getId();
    var rundialog = Mscrm.CrmUri.create('/cs/dialog/rundialog.aspx');
    rundialog.get_query()['DialogId'] = dialogId;
    rundialog.get_query()['ObjectId'] = primaryEntityId;
    rundialog.get_query()['EntityName'] = objectTypeCode;
    var hostWindow = window;
        if (typeof(openStdWin) == 'undefined') {
            hostWindow = window.parent; // Support for Turbo-forms in CRM2015 Update 1
        }
        if (typeof(hostWindow.openStdWin) != 'undefined') {
            hostWindow.openStdWin(rundialog, hostWindow.buildWinName(null), 615, 480, null);
            // window.location.reload(true);
        } 

}
})();

Depending on this source code, how can it be possible?

Worried about User Adoption – Now track records opened by users in Dynamics 365 CRM

$
0
0

Automation has become a necessity in every type of business and Dynamics 365 CRM is one of the most preferred automation system implemented by various organizations around the globe. But its success totally depends upon its users, which leads us to the question, how to evaluate if it’s being adopted by its users. As an answer to this, we have a solution User Adoption Monitor. User Adoption Monitor helps managers to track various operations performed by the users in Dynamics CRM, thus increasing user adoption and also providing an overview of the organization’s productivity to the managers. This results in speeding up of the business process and thereby helps in generating more profits and ROI.

Now, what if we tell you that you can also track the entity records being opened by the Dynamics CRM users using the User Adoption Monitor? Amazing right? Yes, it’s very much possible. You can now even track the mere opening of the records along with all the other everyday actions such as Create/Update of Lead/Contact/Account, Won/Los of Opportunity, Email-Send, Appointment-Closed, etc. in Dynamics CRM.

However, to start tracking opening of the records in Dynamics CRM one needs to create the Entity Configuration for the entity to track. For this, you need to navigate to User Adoption Monitor group ->Entity Configuration. As you can see below Entity configuration is created for Case – Open entity action.

Dynamics CRM User Activity

After creating the entity configuration, you will be able to start tracking the records that are opened by the CRM users as shown below. All the details of open records will be generated in the Tracking section.

Dynamics CRM User Activity

User Adoption Monitor is a productive tool that will help in increasing the user adoption of your Dynamics CRM and also provide a glimpse of the user’s operation and business’s productivity to its managers thus helping them in taking quicker yet proper decisions further promoting the growth and productivity of an organization.

So, to increase the user adoption, to be an informed manager and to evaluate the feature track opening of the records download the 15 days free trial from our Website or Microsoft AppSource. It works on both Dynamics 365 CRM online as well as on-premises.

Parse JSON string that represents the Dynamics 365 plugin execution context received in Azure Function

$
0
0

Introduction:

In our previous blogs of this Integrating Dynamics 365 with Azure Functions series, we have gone through a walkthrough with an example of creating an Azure Function and call the same through the following,

  1. An example of directly calling an Azure function from traditional workflows.
  2. Register as a WebHook and invoke it from a workflow.
  3. Register as a WebHook and register steps for messages that you would like the custom logic to be executed for.

In this blog, we will illustrate how to parse the JSON data that we received in the Azure Function. Let’s consider that we have registered a plugin step on an update of Account record which invoke a WebHook (here in our case Azure Function).

  • Read JSON data from the request body:

When plugin triggers and invokes a WebHook, three types of data received in the request i.e. Query String, Header Data and Request Body. The Request body contains a string that represents the JSON value of the RemoteExecutionContext class. This class defines the contextual information sent to a remote service endpoint at run-time. Below code snippet reads the content from the HttpRequestMessage and converts the received JSON string to proper deserializable JSON string.

using System.Text;
using System.Net;

public static async Task<HttpResponseMessage> Run(HttpRequestMessage req, TraceWriter log)
{
log.Info("C# HTTP trigger function processed a request");

    string jsonContext = await req.Content.ReadAsStringAsync();
    log.Info("Read context: " + jsonContext);

    jsonContext = FormatJson(jsonContext);
    log.Info("Formatted JSON Context string: " + jsonContext);

    return req.CreateResponse(HttpStatusCode.OK, "Success");
}

/// <summary>
/// Function to convert the unformatted Json string to formatted Json string
/// </summary>
/// <param name="unformattedJson"></param>
/// <returns>string formattedJsonString</returns>
public static string FormatJson(string unformattedJson)
{
    string formattedJson = string.Empty;
    try
    {
        formattedJson = unformattedJson.Trim('"');
        formattedJson = System.Text.RegularExpressions.Regex.Unescape(formattedJson);
    }
    catch (Exception ex)
    {

        throw new Exception(ex.Message);
    }
    return formattedJson;
}
 

Remark: Add reference of System.Text so that we can use Regex expression.

 

  • Sample JSON string that gets received in the Azure Function:

Below is the sample JSON string.

{"BusinessUnitId": "f0bf3c9a-8150-e811-a953-000d3af29fc0","CorrelationId": "39499111-e689-42a1-ae8a-5b14a84514ce","Depth": 1,"InitiatingUserId": "df010dad-f103-4589-ba66-76a5a04c2a11","InputParameters": [

    {
      "key": "Target","value": {"__type": "Entity:http:\/\/schemas.microsoft.com\/xrm\/2011\/Contracts","Attributes": [
          {"key": "telephone1","value": "1111"
          },
          {"key": "accountid","value": "ec4e2f7d-9d60-e811-a95a-000d3af24950"
          },
          {"key": "modifiedon","value": "\/Date(1527757524000)\/"
          },
          {"key": "modifiedby","value": {"__type": "EntityReference:http:\/\/schemas.microsoft.com\/xrm\/2011\/Contracts","Id": "df010dad-f103-4589-ba66-76a5a04c2a11","KeyAttributes": [],"LogicalName": "systemuser","Name": null,"RowVersion": null
            }
          },
          {"key": "modifiedonbehalfby","value": null
          }
        ],"EntityState": null,"FormattedValues": [],"Id": "ec4e2f7d-9d60-e811-a95a-000d3af24950","KeyAttributes": [],"LogicalName": "account","RelatedEntities": [],"RowVersion": null
      }
    }
  ],"IsExecutingOffline": false,"IsInTransaction": true,"IsOfflinePlayback": false,"IsolationMode": 1,"MessageName": "Update","Mode": 0,"OperationCreatedOn": "\/Date(1527757530151)\/","OperationId": "08fec203-ec78-4f7a-a024-c96e329a64fe","OrganizationId": "b0714265-8e72-4d3b-8239-ecf0970a3da6","OrganizationName": "org94971a24","OutputParameters": [],"OwningExtension": {"Id": "3db800fe-0963-e811-a95a-000d3af24324","KeyAttributes": [],"LogicalName": "sdkmessageprocessingstep","Name": "D365WebHookHttpTrigger: Update of account","RowVersion": null
  },"ParentContext": {"BusinessUnitId": "f0bf3c9a-8150-e811-a953-000d3af29fc0","CorrelationId": "39499111-e689-42a1-ae8a-5b14a84514ce","Depth": 1,"InitiatingUserId": "df010dad-f103-4589-ba66-76a5a04c2a11","InputParameters": [
      {"key": "Target","value": {"__type": "Entity:http:\/\/schemas.microsoft.com\/xrm\/2011\/Contracts","Attributes": [
            {"key": "telephone1","value": "1111"
            },
            {"key": "accountid","value": "ec4e2f7d-9d60-e811-a95a-000d3af24950"
            }
          ],"EntityState": null,"FormattedValues": [],"Id": "ec4e2f7d-9d60-e811-a95a-000d3af24950","KeyAttributes": [],"LogicalName": "account","RelatedEntities": [],"RowVersion": null
        }
      },
      {"key": "SuppressDuplicateDetection","value": false
      }
    ],"IsExecutingOffline": false,"IsInTransaction": true,"IsOfflinePlayback": false,"IsolationMode": 1,"MessageName": "Update","Mode": 0,"OperationCreatedOn": "\/Date(1527757524631)\/","OperationId": "08fec203-ec78-4f7a-a024-c96e329a64fe","OrganizationId": "b0714265-8e72-4d3b-8239-ecf0970a3da6","OrganizationName": "org94971a24","OutputParameters": [],"OwningExtension": {"Id": "63cdbb1b-ea3e-db11-86a7-000a3a5473e8","KeyAttributes": [],"LogicalName": "sdkmessageprocessingstep","Name": "ObjectModel Implementation","RowVersion": null
    },"ParentContext": null,"PostEntityImages": [],"PreEntityImages": [],"PrimaryEntityId": "ec4e2f7d-9d60-e811-a95a-000d3af24950","PrimaryEntityName": "account","RequestId": "08fec203-ec78-4f7a-a024-c96e329a64fe","SecondaryEntityName": "none","SharedVariables": [
      {"key": "ChangedEntityTypes","value": [
          {"__type": "KeyValuePairOfstringstring:#System.Collections.Generic","key": "account","value": "Update"
          }
        ]
      }
    ],"Stage": 30,"UserId": "df010dad-f103-4589-ba66-76a5a04c2a11"
  },"PostEntityImages": [],"PreEntityImages": [],"PrimaryEntityId": "ec4e2f7d-9d60-e811-a95a-000d3af24950","PrimaryEntityName": "account","RequestId": "08fec203-ec78-4f7a-a024-c96e329a64fe","SecondaryEntityName": "none","SharedVariables": [],"Stage": 40,"UserId": "df010dad-f103-4589-ba66-76a5a04c2a11"

}

  • Parse JSON string to ExpandoObject dynamic object:

Below code snippet deserialize the JSON string to dynamic ExpandoObject.

dynamic dynObj = Newtonsoft.Json.JsonConvert.DeserializeObject(jsonContext);

  • Read values from dynamic object:

Simple string type,

log.Info(“BusinessUnitId: ” + dynObj["BusinessUnitId"]);

or

log.Info(“BusinessUnitId: ” + dynObj.BusinessUnitId);

Complex ParameterCollection type,

log.Info(“InputParameters->Target->LogicalName: ” + dynObj["InputParameters"][0]["value"]["LogicalName"].ToString());

  • Parse JSON string to RemoteExecutionContext object:

Below code snippet deserialize the JSON string to RemoteExecutionContext object

#r "bin/Newtonsoft.Json.dll"
#r "bin/Microsoft.Xrm.Sdk.dll"
#r "bin/System.Runtime.Serialization.dll"

using System.Net;
using System.Dynamic;
using System.Text;
public static async Task<HttpResponseMessage> Run(HttpRequestMessage req, TraceWriter log)
{
   string jsonContext = await req.Content.ReadAsStringAsync();
   log.Info("Read context: " + jsonContext);

   jsonContext = FormatJson(jsonContext);
   log.Info("Formatted JSON Context string: " + jsonContext);

   Microsoft.Xrm.Sdk.RemoteExecutionContext remoteExecutionContext = DeserializeJsonString<Microsoft.Xrm.Sdk.RemoteExecutionContext>(jsonContext);
}

/// <summary>
/// Function to deserialize JSON string using DataContractJsonSerializer
/// </summary>
/// <typeparam name="RemoteContextType">RemoteContextType Generic Type</typeparam>
/// <param name="jsonString">string jsonString</param>
/// <returns>Generic RemoteContextType object</returns>
public static RemoteContextType DeserializeJsonString<RemoteContextType>(string jsonString)
{
    //create an instance of generic type object
    RemoteContextType obj = Activator.CreateInstance<RemoteContextType>();
    MemoryStream ms = new MemoryStream(Encoding.Unicode.GetBytes(jsonString));
    System.Runtime.Serialization.Json.DataContractJsonSerializer serializer = new System.Runtime.Serialization.Json.DataContractJsonSerializer(obj.GetType());
    obj = (RemoteContextType)serializer.ReadObject(ms);
    ms.Close();
    return obj;
}

 

Remarks: Add reference of following dlls,

  • Xrm.Sdk.dll
  • Runtime.Serialization.dll

Below code snippet shows how to read values,

//read Plugin Message Name
    string messageName = remoteExecutionContext.MessageName;
    //read execution depth of plugin
    Int32 depth = remoteExecutionContext.Depth;
    //read BusinessUnitId
    Guid businessUnitid = remoteExecutionContext.BusinessUnitId;
    //read Target Entity 
    Microsoft.Xrm.Sdk.Entity targetEntity = (Microsoft.Xrm.Sdk.Entity)remoteExecutionContext.InputParameters["Target"];

    //read attribute from Target Entity
    string phoneNumber = targetEntity.Attributes["telephone1"].ToString();
    log.Info("Message Name: " + messageName);
    log.Info("BusinessUnitId: " + businessUnitid);
    log.Info("Plugin Depth: " + depth);

    log.Info("TargetEntity Logical Name: " + targetEntity.LogicalName);
    log.Info("Phone Number: " + phoneNumber);

 

Parse JSON

Conclusion:

The steps given above describes how to Parse JSON string that represents the Dynamics 365 plugin execution context received in Azure Function. To read all blogs about Azure Functions visit: http://bit.ly/inogic-azurefunctions

Copy System and Custom Entities in Dynamics CRM

Business Process Flows

$
0
0

We have several custom business process flows applied to the Opportunity entity.

We can have two concurrent business process flows running at the same time on a single record.

The issue I face is the following:

A user is opening up an opportunity and it is not showing the business process flow to which he has access.

He can switch to the proper process but the next time he opens the record, it goes back to the other process.

How does one control which active business process flow is in place when a user opens the record?

He has no access to the other process flow so why does it keep opening that one?

Thank you,

Will

Show Lookup Dialog in Dynamics 365 v9.0

$
0
0

Introduction:

In Dynamics 365 v9.0 Microsoft introduces new development feature in Dynamics 365 to show lookup dialog using Xrm.Utility.lookupObjects method.

Xrm.Internal.Opendialog is most commonly used method to open dialog where we need to provide URL. But this method is not supported in UCI or mobile app.

So, open a lookup window using JavaScript can be achieved using Xrm.Utility.lookupObjects method.

Parameters for Xrm.Utility.lookupObjects method is as follows:

  • entityTypes: provide list of the entities to be displayed.
  • defaultEntityType: Specify the default entity to be shown in lookup window.
  • defaultViewId: Specify the Guid of default view need to be displayed in lookup dialog.
  • allowMultiSelect: Specify whether want to allow user to select multiple records.
  • viewIds: Provide the list of views that need to be available for lookup dialog.

Consider, an example where we need to open html webresource, on html page there will be a textbox and button to select the contact. When user click on “Select Contact” button, the lookup dialog of contact will gets open which allows user to select contact.

Steps need to follow:

1. We need to create html page with textbox and “Select Contact” button.

<!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml"><head><title></title><meta http-equiv="X-UA-Compatible" content="IE=11" /><style>
        .bottomsection {
            position: absolute;
            float: right;
            margin-top: 5%;
            right: 10px;
            bottom: 5px;
            display: inline-block;
            background-color: #F8F8F8;
            border-top-color: #FFFFFF;
        }</style></head><body onload="load();"><div style="text-align:center"><h2>Contact Details</h2></div><div style="height:50px"></div><div>
        Please select Contact : <input type="text" id="TxtContact" /> <input type="button" id="btnContact" value="Select Contact" /></div><div><input type="button" class="bottomsection"  name="Ok" value="OK" /></div><script src="new_Jquery.js" type="text/javascript"></script><script src="ClientGlobalContext.js.aspx"></script><script src="../../../../_static/_controls/lookup/lookup.js"></script><script src="new_ShowContactLookup.js"></script><script type="text/javascript">
        function load() {
            this.OnContactSelectClicked();
        }</script></body></html>
2.  Next write a script for showing lookup dialog using Xrm.Utility.lookupObjects method.
function openWeb()
{
    try {
        var height = 360;
        var width = 600;
        //open the generate Work Order dialog
        //  var webResourceName = FirePro.ApiLib.getClientUrl() +    "/WebResources/xcrm_/firepro/CreateWorkOrder.html?data=" + strAgincidentId + ",agreementId=" + agreementid;
        // var webResourceName = encodeURI(webResourceName);
        //Open the Dialog
        // FirePro.CommonLib.openDialog(500, 240, webResourceName, null);
        height = height != "undefined" ? height : null;
        width = width != "undefined" ? width : null;

        if (typeof Xrm != "undefined" && typeof Xrm.Navigation != "undefined" && Xrm.Navigation.openWebResource != "undefined") {
            var windowsOption = { height: height, width: width, openInNewWindow: true };
            Xrm.Navigation.openWebResource("new_ContactDetails.html", windowsOption, null);
        } else if (typeof Xrm != "undefined" && typeof Xrm.Utility != "undefined" && typeof Xrm.Utility.openWebResource != "undefined") {
            Xrm.Utility.openWebResource("new_ContactDetails.html", null, width, height);
        } else {
            return;
        }

    } catch (e) {
        Xrm.Utility.alertDialog(e.message);
    }
}

function OnContactSelectClicked()
{
    try {

        //bind click event of select contact lookup
        $("#btnContact").click(function (e)
        {
            showContactLookupDialog();
        });

    } catch (e) {
        Xrm.Utility.alertDialog(e.message);
    }
}

function showContactLookupDialog() {
    try {

         var fetch = "<filter type='and'><condition attribute='lastname' operator='like' value='%a%' /></filter>";
        var encodedURL = encodeURIComponent(fetch).replace(/'/g, "%22");
        var lookupParameters = {};
        //specify the list of entity types to be displayed in lookup dialog
        lookupParameters.entityTypes = ["contact"];
        //Sepecify the default entityType need to be displayed 
        lookupParameters.defaultEntityType = "contact";
        //Default view need to be displayed 
        lookupParameters.defaultViewId = "{00000000-0000-0000-00AA-000010001004}";
        //allow multiple selection or not
        lookupParameters.allowMultiSelect = false;
        //list multiple views available on lookup dialog
       // lookupParameters.viewIds = ["{0D5D377B-5E7C-47B5-BAB1-A5CB8B4AC105}", "{A2D479C5-53E3-4C69-ADDD-802327E67A0D}"];
        lookupParameters.customFilters = [encodedURL];
        lookupParameters.customFilterTypes = ["contact"];
        Xrm.Utility.lookupObjects(lookupParameters).then(DisplaySelectedContact, null);


    } catch (e) {
        Xrm.Utility.alertDialog(e.message);
    }
}

function DisplaySelectedContact(selectedContact) {
    try {
        if (selectedContact != undefined &&  selectedContact != null && selectedContact != "")
        $("#TxtContact").val(selectedContact[0].name);
    } catch (e) {
        Xrm.Utility.alertDialog(e.message);
    }
}
3. Add ribbon button “Contact Details” on Account form. Add “openWeb” function onclick of the ribbon button.

Show Lookup Dialog in Dynamics 365

4. Now when we click on the contact lookup button it will open the “Contact Details” html page.

Show Lookup Dialog in Dynamics 365

5. This html page consist of a textbox and “Select Contact” button. When user click on the button, lookup dialog with default entity and default view provided in parameters of lookupObjects method gets open.

Show Lookup Dialog in Dynamics 365

6. In UCI or Mobile app it opens the lookup dialog as shown in below screenshot.

Show Lookup Dialog in Dynamics 365

Conclusion:

Using the new feature introduced in Microsoft Dynamics 365 user can show lookup dialog using Xrm.Utility.lookupObjects method.

Microsoft Dynamics CRM and QuickBooks Integration

Worried about User Adoption – Now track records opened by users in Dynamics 365 CRM

$
0
0

Automation has become a necessity in every type of business and Dynamics 365 CRM is one of the most preferred automation system implemented by various organizations around the globe. But its success totally depends upon its users, which leads us to the question, how to evaluate if it’s being adopted by its users. As an answer to this, we have a solution User Adoption Monitor. User Adoption Monitor helps managers to track various operations performed by the users in Dynamics CRM, thus increasing user adoption and also providing an overview of the organization’s productivity to the managers. This results in speeding up of the business process and thereby helps in generating more profits and ROI.

Now, what if we tell you that you can also track the entity records being opened by the Dynamics CRM users using the User Adoption Monitor? Amazing right? Yes, it’s very much possible. You can now even track the mere opening of the records along with all the other everyday actions such as Create/Update of Lead/Contact/Account, Won/Los of Opportunity, Email-Send, Appointment-Closed, etc. in Dynamics CRM.

However, to start tracking opening of the records in Dynamics CRM one needs to create the Entity Configuration for the entity to track. For this, you need to navigate to User Adoption Monitor group ->Entity Configuration. As you can see below Entity configuration is created for Case – Open entity action.

Dynamics CRM User Activity

After creating the entity configuration, you will be able to start tracking the records that are opened by the CRM users as shown below. All the details of open records will be generated in the Tracking section.

Dynamics CRM User Activity

User Adoption Monitor is a productive tool that will help in increasing the user adoption of your Dynamics CRM and also provide a glimpse of the user’s operation and business’s productivity to its managers thus helping them in taking quicker yet proper decisions further promoting the growth and productivity of an organization.

So, to increase the user adoption, to be an informed manager and to evaluate the feature track opening of the records download the 15 days free trial from our Website or Microsoft AppSource. It works on both Dynamics 365 CRM online as well as on-premises.

Dynamic Content in Document Templates

$
0
0

Hello, I am playing around with the new Document Template feature for in CRM 2016.  I am easily able to include fields in my documents by inserting the content controls as plain text from xml parts.  One thing that I cannot figure out however is how to add dynamic content using "IF" statements from the values populated from the content control fields.

For example:

If country = USA "This field displays USA" "This field does not display USA".

Has anyone able to do this with Document Templates in CRM 2016?

Thanks in advance!


Automate ILMerge for Workflows/Plugins to Merge Multiple Assemblies into One in Dynamics 365

$
0
0

Introduction:

Recently we got a business requirement where we need to merge two assemblies into single exe i.e. one .net assembly and another assembly which would serialize and deserialize, so we used Newtonsoft.Json.dll for it. To merge Newtonsoft.Json.dll with .net dll in single exe it is recommended to use ILMerge.

ILMerge is a tool that can combine multiple DLLs into a single exe. For this every time, we need to manually merge the assembly using ILMerge UI as shown below.

Merge Multiple Assemblies into One in Dynamics 365

This blog explains the basics of using ILMerge to create a single Workflow/Plugin DLL without using ILMerge tool externally every time.

Step 1: Add ILMerge.MSBuild.Task using Nuget to your Visual Studio project:

Navigate to Visual Studio Project → Tools → Library Package Manager → Package Manager Console

Merge Multiple Assemblies into One in Dynamics 365

Step 2: Use command “Install-Package ILMerge.MSBuild.Task” and paste in package manager console.

Merge Multiple Assemblies into One in Dynamics 365

Step 3: Also need to install the ILMerge Package using command “Install-Package ilmerge” in the package manager console

Merge Multiple Assemblies into One in Dynamics 365

Step 4: Build your project. After successful build one new folder is created with the name ILMerge. The merged assembly will be stored in an ILMerge folder under the project output. (Need to merge Crm.Workflow.dll and Newtonsoft.Json.dll)

Merge Multiple Assemblies into One in Dynamics 365

Step 5: Merge Output is present in the ILMerge folder (Under ILMerge Folder Crm.Workflow.dll is merged output).The merged dll contains the component of both the dlls (i.e. Newtonsoft.Json.dll, Crm.Workflow.dll). Now you have to use this dll (i.e. Crm.Workflow.dll) for further processes to reflect the changes in your CRM.

Merge Multiple Assemblies into One in Dynamics 365

Step 6: By default, all references with Copy Local equals true are merged with your project output. To avoid merging of CRM SDK DLLs and Microsoft.IdentityModel.DLL into our DLL we need to select the three files and set the property “Copy Local” to false.

Merge Multiple Assemblies into One in Dynamics 365

Conclusion:

Merging of multiple dlls using external tool is time-consuming and somewhat annoying. So simply type the commands Install-Package ILMerge.MSBuild.Task, Install-Package ilmerge in package manager console of your project and after successful installation, rebuild your project and you will get newly merged dll for further processing to reflect changes in your CRM.

Generate Your Own New Leads Now Within Dynamics 365 CRM with Maplytics

 

Error on create entity on dynamics portal

$
0
0

Hello!

When i create record of an entity on dynamics portal then following error display which is not understandable for me so kindly help me about this!

An unknown failure has occurred. Error ID # [4e5d8146-3f62-42fe-b368-56731bd180ce]

The role of Geo-Analytics in Sales Territory Management within Dynamics 365

$
0
0

Sales enabled organizations are always looking for ways to improve their sales pipeline. While new organizations struggle with efficiently utilizing their sales force, more seasoned organizations apply tactics that allow them to make the whole sales process efficient!

So, what are the most used sales tactic that every successful sales enable organizations vouch for? Sales Territories!

Sales territories are one of the most critical factors for the success of sales initiatives of an organization.

Why is Sales Territories so important?

For an organization that has just started out and has a sales force of just a few professionals, explaining the benefits of sales territories would be difficult.

However, imagine an organization with hundreds of sales professionals, and now the concept of sales territories suddenly looks promising.

So, if you don’t already know what sales territories are, it’s merely dividing the area that the organizations actively serves into more manageable regions called territories.

By creating smaller territories for their market, the organization can;

  • Assign sales reps to each territory further ensuring that their sales force is efficiently utilized.
  • This also allows organizations to improve their market coverage.
  • By dividing the territories between sales reps, the organization can ensure that they have balanced the workload by diving responsibilities.
  • Also, reduce the traveling expenses and time to reduce the overall selling costs.
  • Improve the customer service and satisfaction.

Most successful organizations realize the potential of having efficient sales territories and are always on a lookout for tools that help them achieve this goal.

One of the way to better manage the sales territories is to use a CRM system like Dynamics 365 Customer Engagement, which allows an organization to organize and analyze their business data.

However, organizations need something more, something that adds more benefit to their Dynamics CRM system.

The search for that tool that allows organizations to better manage their sales territories within Dynamics 365 ends with powerful geo-analytical map visualization tools like Maplytics!

How can Geo-Analytics transform Sales Territory Management?

Having features that are specifically designed for sales territory management can add value to the sales process of an organization. Let’s understand the role of geo-analytics in sales territory management and how it can help an organization to transform the way they manage their sales territories.

1. Map Visualization to understand and analyze the sales territories geographically

Having the ability to define the geographical boundaries for the sales territories within Dynamics CRM allows an organization to understand the locational aspect of their sales territories. Unlocking the locational element augments the way an organization creates and manage the sales territories in Dynamics 365. Moreover, having the relevant sales territories assigned for the Dynamics CRM records based on their location and visualize the territories on a map further enables an organization to evaluate the sales territories geographically.

2. Measuring the KPI of each sales territory with summarized information

The assignment of Dynamics CRM records to relevant territories also allows an organization to measure the sales territories based on the KPI that they prefer. This further enhances the geographical evaluation of the sales territories. Also, having the ability to get summarized information about the KPI for each of the sales territories improves the way an organization analyzes their territories on a map within Dynamics 365.

3. Sales territory optimization for efficient sales force distribution

With the summarized information of KPI for individual sales territories further allows an organization to optimize each sales territories within Dynamics 365. The sales territory optimizations can result in efficient sales force distribution, balanced workload and better ROI for their sales initiatives. Also, by optimizing the territories, an organization can improve the customer service experience and satisfaction which is essential to retain the customers in the long term.

4. Easily update sales territories for quick turnaround

Having the ability to easily add, remove or change the geographical boundaries for sales territories makes it easier for an organization to have fast turnaround times and experience impactful changes to the sales performance in their territories. Also, this facilitates easy realignment of territories thus resulting in balanced territories that have proportional and efficient sales force distribution.

Geo-analytical map visualization tools like Maplytics™ allows organizations to define the geographical boundaries for their sales territories. Maplytics also helps the organization to assign the Dynamics CRM records to relevant sales territories based on the geo-coordinates (latitude and longitude data), visualize the territories on the map, get summarized information for each sales territory, easily reassign Dynamics CRM records to some other territory and more!

To learn more about how Maplytics can help you manage your Sales Territories within Dynamics CRM, refer to this video.

Get your free TRIAL today from our Website or Microsoft AppSource!

Happy Mapping!

Create report in PDF

$
0
0

Hello Team,

I have create a report in reporting section and now i want to create a custome work flow through that i can convert this report into pdf with the download option.

Thanks

On record create generate it as PDF, send that PDF as Email attachment and attach PDF to notes as well.

$
0
0

Hi Everyone,

Have a requirement!

On Create of Record, I have to generate it as PDF, send that PDF as an attachment in Email and send Email and store that PDF in Notes section.

But, problem is all should happen on record create.

How to achieve it. ? Help would be appreciated.

Viewing all 3363 articles
Browse latest View live


<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>