Quantcast
Channel: Neil Parkhurst's Groups Activities
Viewing all 1692 articles
Browse latest View live

JavaScript – OData Query

$
0
0

Whilst adding JavaScript to forms in Dynamics 365 we often use OData to query data. But what is OData and how do you write JavaScript to query data? I will try to address these questions in this post.

As CRM / Dynamics has evolved I’ve actually found that I write less and less JavaScript! Business rules, calculated fields, roll up fields, quick view forms (etc) have all added to our configuration options, each of these features has reduced the need to code. But there are some things we still need to code. Using OData to query data being one of them!

Open Data Protocol (OData) is a standard protocol for consuming data exposed by Dynamics. OData is a Representational State Transfer (REST) based protocol. It can be applied to all types of technologies, including JavaScript Object Notation (JSON).

Now at this point I think I should pause! I am not (nor do I want to be) a hardcore developer, terms like OData, REST and JSON always make me feel like I might be straying into the dark side. Well, yes but then no! Using OData can be easy, in this post I hope to show a few examples that might help shed light on how you can leverage OData queries in your solution without needing an IT Degree in Software Development.

In this post, I will try to explain how to query CRM data in easy to follow terms. Using OData to query data is pretty straight forward. I won’t do this by listing every combination instead I will show you some examples that I commonly use.

OData Simple Example

I like to explain things by showing examples, so here is a simple example of using OData. In this example, I will make use of a couple of functions I repeatedly add to my JavaScript code. MakeRequest and GetRequestObject. We don’t “need” to worry about the detail of what these functions do! We just need to understand that we pass a query string to the MakeRequest function and what gets returned are the results.

function MakeRequest(query) {
    var serverUrl = Xrm.Page.context.getClientUrl();
    var oDataEndpointUrl = serverUrl + "/XRMServices/2011/OrganizationData.svc/";
    oDataEndpointUrl += query;
    var service = GetRequestObject();
    if (service != null) {
        service.open("GET", oDataEndpointUrl, false);
        service.setRequestHeader("X-Requested-With", "XMLHttpRequest");
        service.setRequestHeader("Accept", "application/json, text/javascript, */*");
        service.send(null);
        var retrieved = JSON.parse(service.responseText).d;
        var results = new Array();
        for (var i = 0; i < retrieved.results.length; i++) {
            results.push(retrieved.results[i]);
        } // End for
        return results;
    } // End if
    return null;
} // End function
function GetRequestObject() {
    if (window.XMLHttpRequest) {
        return new window.XMLHttpRequest;
    } else {
        try {
            return new ActiveXObject("MSXML2.XMLHTTP.3.0");
        } catch (ex) {
            return null;
        } // End catch
    } // End if
} // End function

Below you can see a simple example of how we build a query and return results. In this example I am returning the job title of the owner of a record.

    // *** First of all we get the GUID of the owning user, from owner lookup field.
    var lookupObject = Xrm.Page.getAttribute("ownerid");

    if (lookupObject != null) {
        var lookUpObjectValue = lookupObject.getValue();
        if ((lookUpObjectValue != null)) {
            var lookupid = lookUpObjectValue[0].id;
        } // End if
    } // End if
    // *** Next we build a query to find that user in system user entity and return job title and name.
    var selectQuery = "/SystemUserSet?&$filter=SystemUserId eq guid'" + lookupid + "'&$select=JobTitle, FullName";
    // *** Now we make a request, using our query
    var oDataResult = null;
    oDataResult = MakeRequest(selectQuery);
    // *** And finally we can view the results.
    alert("Name = " + oDataResult[0].FullName + "\n" + "Job Title = " + oDataResult[0].JobTitle);

In my simple example the following alert is created when this code is run.

Query in Detail

Let’s look at the query in a little more detail

var selectQuery = "/SystemUserSet?&$filter=SystemUserId eq guid'" + lookupid + "'&$select=JobTitle, FullName";

Firstly we have the name of the entity “set” we want to query. Notice the case is SystemUser, you will find this is very specific! If you need to find the correct case / name to user for any entity you should, view the entity details in customizations. See below that I have highlighted the schema name for the User entity.

var selectQuery = "/SystemUserSet?&$filter=SystemUserId eq guid'" + lookupid + "'&$select=JobTitle, FullName";

The next part of our query is the filter, I will give you some more details on the filter “statement” a little later in this post. But notice that I am filtering in the GUID field of the user. Again getting the schema name and case correct on your filter fields is important. This time I looked at he fields on the entity to confirm the exact schema name.

var selectQuery = "/SystemUserSet?&$filter=SystemUserId eq guid'" + lookupid + "'&$select=JobTitle, FullName";

The final part of our query gives us a list of the fields to return. In this example they are the users job title and full name. Again getting the schema name correct is important, so just as with the filter fields I checked the schema name under fields in customizations.

$filter

In my simple example my filter included “eq” as my operator. Other operators are available;

OperatorDescription
eqEqual
neNot equal
gtGreater than
geGreater than or equal
ltLess than
leLess than or equal

We can also use logical operators;

OperatorDescription
andLogical and
orLogical or
notLogical negation

And we have these query functions;

FunctionExample
contains$filter=contains(FullName,’Park’)
endswith$filter=endswith(FullName,’Parkhurst’)
startswith$filter=startswith(FullName,’Neil’)

Tip: In our $filter we might want to filter based on an optionset, you use syntax like this for that;

$filter=<>/Value ne 100000001

Select

We have seen that a list of columns can be given in the select portion and we can then review the results.

But what if your results are a lookup or option set. How do we then view the details?

To view the value of an optionset ….

oDataResult[0].<your field name>.Value;

To view the ID and name of a lookup field …

oDataResult[0].<your field name>.Name;
oDataResult[0].<your field name>.Id;

Order Results

You can sequence your results by using $orderby and then adding asc or desc as required.

$orderby=<your field name 1>, <your field name 2> asc

Limit Results

I find it quite common that my query will potentially return multiple rows but I just want any one of them. Or maybe in other circumstances you want the top 3 records. (etc.)

For this we add $top to the query.

$top=3

A Second Example

A second example, as always, I like to understand things by looking at a working example. So below I have created some code to illustrate the capabilities I have described above. This isn’t supposed to be the the most useful code in the world. I have simple created something tha contains all of the features mentioned!

My code runs from the contact entity, it lists upto three opportunities for the contact. ($top) It orders them by name. ($orderby)

And in the results, I return a lookup and also I filter ($filter) on an optionset.

Hopefully this query is a good example of everything I’ve described working together. Enjoy. J

    // *** First of all we get the GUID of the current record
    var contactId = Xrm.Page.data.entity.getId();
    // *** Opporuntities that are "InProgress have a status reason (optionset) with value 1
    // *** Next we build a query to find three opporuntities, that are open, ordered by their name field (Descending)
    var selectQuery = "/OpportunitySet?&top=3&$filter=ParentContactId/Id eq guid'" + contactId + "' and StatusCode/Value eq 1&$select=Name, ParentAccountId&$orderby=Name desc&$top=3";

    // *** Now we make a request, using our query
    var oDataResult = null;
    oDataResult = MakeRequest(selectQuery);
    // *** And finally we can view the results.
    // *** In this example we have upto three results, so lets loop round them!
    var arrayLength = oDataResult.length;
    for (var i = 0; i < arrayLength; i++) {
        var displayResult = "Opportunity Subject = " + oDataResult[i].Name + "\n";
        var displayResult = displayResult + "Account Name = " + oDataResult[i].ParentAccountId.Name + "\n"
        var displayResult = displayResult + "Account GUID = " + oDataResult[i].ParentAccountId.Id
        alert(displayResult);
    } // End for

Filed under: JavaScript Tagged: Dynamics 365, JavaScript

PSA – Box Set

$
0
0

Recently I’ve created a series of videos aimed at anyone trying to understand the basics of Project Service Automation (PSA) for Microsoft Dynamics 365. Think of this post as the box set for that series! As, its a collection of the episodes that make up the entire series.

library-488672_1920

VideoDescription
PSA – Episode OneIn this first episode I give a high level explanation of the capabilities of PSA and then continue to describe the process of creating an opportunity and quotation for a project based engagement.
PSA – Episode TwoIn this second episode I explain how to create a project plan within PSA. And also how we can integrate with Microsoft Project 2016.
PSA – Episode ThreeIn this third episode I explain project contracts.
PSA – Episode FourIn this fourth episode I will review how to build and resource your project team. Including three scenarios for resource selection. (Hard book, centralised resource management and applicants applying via the Project Finder App.)
PSA – Episode FiveIn this fifth episode I explain how resources can complete time sheets and submit expense claims. Plus how the project manager can then  approve these to update actuals against the project.
PSA – Episode SixIn this sixth episode I explain how we create, amend and confirm invoices.

I hope these videos have helped shed some light onto PSA, I am impressed with some of its features and hope you enjoy using it.


Filed under: Project Service Automation (PSA) Tagged: Dynamics 365, Project Service Automation

Unified Service Desk - Opening a CRM web-resource in a new session tab from another web resource.

$
0
0

We have two CRM HTML web resources (new_list.html and new_record.html)

1)      new_list.html contains list of accounts as hyperlinks, fetched from CRM using fecthXML.

2)      new_record.html displays the details of the account record with respect to Guid which is provided as an Input from URL.

We are able to load the new_list webresource as a CRM page in main panel by calling the navigate action from toolbar button.

Now when the user clicks on the list of accounts present in new_list,a new session should be created and new_record.html should get loaded with relevant account details.

PFB a snapshot from new_list.

 <a id="myLink1" href="#" onclick="Xrm.Utility.openWebResource('new_record?id=CFBC4D27-4BEC-E611-810B-C4346BDD8041');">A. Daum</a>

Problem : The new_record always opens in the current tab.

We tried various combinations of windows navigation rule but it seems as if the Windows navigation rule does not even triggers.

Kindly help!!

PSA, Video Guide – Episode Six

$
0
0

Project Service Automation (PSA) for Microsoft Dynamics 365 gives us powerful / flexible project management capability in “CRM”. I have recently created several blog posts explaining its capabilities. I have also created a series of videos to demonstrate PSA.

In this sixth episode I explain how we create, amend and confirm invoices.


Filed under: Project Service Automation (PSA) Tagged: Dynamics 365, Project Service Automation

JavaScript – OData Query

$
0
0

Whilst adding JavaScript to forms in Dynamics 365 we often use OData to query data. But what is OData and how do you write JavaScript to query data? I will try to address these questions in this post.

As CRM / Dynamics has evolved I’ve actually found that I write less and less JavaScript! Business rules, calculated fields, roll up fields, quick view forms (etc) have all added to our configuration options, each of these features has reduced the need to code. But there are some things we still need to code. Using OData to query data being one of them!

Open Data Protocol (OData) is a standard protocol for consuming data exposed by Dynamics. OData is a Representational State Transfer (REST) based protocol. It can be applied to all types of technologies, including JavaScript Object Notation (JSON).

Now at this point I think I should pause! I am not (nor do I want to be) a hardcore developer, terms like OData, REST and JSON always make me feel like I might be straying into the dark side. Well, yes but then no! Using OData can be easy, in this post I hope to show a few examples that might help shed light on how you can leverage OData queries in your solution without needing an IT Degree in Software Development.

In this post, I will try to explain how to query CRM data in easy to follow terms. Using OData to query data is pretty straight forward. I won’t do this by listing every combination instead I will show you some examples that I commonly use.

OData Simple Example

I like to explain things by showing examples, so here is a simple example of using OData. In this example, I will make use of a couple of functions I repeatedly add to my JavaScript code. MakeRequest and GetRequestObject. We don’t “need” to worry about the detail of what these functions do! We just need to understand that we pass a query string to the MakeRequest function and what gets returned are the results.

function MakeRequest(query) {
    var serverUrl = Xrm.Page.context.getClientUrl();
    var oDataEndpointUrl = serverUrl + "/XRMServices/2011/OrganizationData.svc/";
    oDataEndpointUrl += query;
    var service = GetRequestObject();
    if (service != null) {
        service.open("GET", oDataEndpointUrl, false);
        service.setRequestHeader("X-Requested-With", "XMLHttpRequest");
        service.setRequestHeader("Accept", "application/json, text/javascript, */*");
        service.send(null);
        var retrieved = JSON.parse(service.responseText).d;
        var results = new Array();
        for (var i = 0; i < retrieved.results.length; i++) {
            results.push(retrieved.results[i]);
        } // End for
        return results;
    } // End if
    return null;
} // End function
function GetRequestObject() {
    if (window.XMLHttpRequest) {
        return new window.XMLHttpRequest;
    } else {
        try {
            return new ActiveXObject("MSXML2.XMLHTTP.3.0");
        } catch (ex) {
            return null;
        } // End catch
    } // End if
} // End function

Below you can see a simple example of how we build a query and return results. In this example I am returning the job title of the owner of a record.

    // *** First of all we get the GUID of the owning user, from owner lookup field.
    var lookupObject = Xrm.Page.getAttribute("ownerid");

    if (lookupObject != null) {
        var lookUpObjectValue = lookupObject.getValue();
        if ((lookUpObjectValue != null)) {
            var lookupid = lookUpObjectValue[0].id;
        } // End if
    } // End if
    // *** Next we build a query to find that user in system user entity and return job title and name.
    var selectQuery = "/SystemUserSet?&$filter=SystemUserId eq guid'" + lookupid + "'&$select=JobTitle, FullName";
    // *** Now we make a request, using our query
    var oDataResult = null;
    oDataResult = MakeRequest(selectQuery);
    // *** And finally we can view the results.
    alert("Name = " + oDataResult[0].FullName + "\n" + "Job Title = " + oDataResult[0].JobTitle);

In my simple example the following alert is created when this code is run.

Query in Detail

Let’s look at the query in a little more detail

var selectQuery = "/SystemUserSet?&$filter=SystemUserId eq guid'" + lookupid + "'&$select=JobTitle, FullName";

Firstly we have the name of the entity “set” we want to query. Notice the case is SystemUser, you will find this is very specific! If you need to find the correct case / name to user for any entity you should, view the entity details in customizations. See below that I have highlighted the schema name for the User entity.

var selectQuery = "/SystemUserSet?&$filter=SystemUserId eq guid'" + lookupid + "'&$select=JobTitle, FullName";

The next part of our query is the filter, I will give you some more details on the filter “statement” a little later in this post. But notice that I am filtering in the GUID field of the user. Again getting the schema name and case correct on your filter fields is important. This time I looked at he fields on the entity to confirm the exact schema name.

var selectQuery = "/SystemUserSet?&$filter=SystemUserId eq guid'" + lookupid + "'&$select=JobTitle, FullName";

The final part of our query gives us a list of the fields to return. In this example they are the users job title and full name. Again getting the schema name correct is important, so just as with the filter fields I checked the schema name under fields in customizations.

$filter

In my simple example my filter included “eq” as my operator. Other operators are available;

OperatorDescription
eqEqual
neNot equal
gtGreater than
geGreater than or equal
ltLess than
leLess than or equal

We can also use logical operators;

OperatorDescription
andLogical and
orLogical or
notLogical negation

And we have these query functions;

FunctionExample
contains$filter=contains(FullName,’Park’)
endswith$filter=endswith(FullName,’Parkhurst’)
startswith$filter=startswith(FullName,’Neil’)

Tip: In our $filter we might want to filter based on an optionset, you use syntax like this for that;

$filter=<>/Value ne 100000001

Select

We have seen that a list of columns can be given in the select portion and we can then review the results.

But what if your results are a lookup or option set. How do we then view the details?

To view the value of an optionset ….

oDataResult[0].<your field name>.Value;

To view the ID and name of a lookup field …

oDataResult[0].<your field name>.Name;
oDataResult[0].<your field name>.Id;

Order Results

You can sequence your results by using $orderby and then adding asc or desc as required.

$orderby=<your field name 1>, <your field name 2> asc

Limit Results

I find it quite common that my query will potentially return multiple rows but I just want any one of them. Or maybe in other circumstances you want the top 3 records. (etc.)

For this we add $top to the query.

$top=3

A Second Example

A second example, as always, I like to understand things by looking at a working example. So below I have created some code to illustrate the capabilities I have described above. This isn’t supposed to be the the most useful code in the world. I have simple created something tha contains all of the features mentioned!

My code runs from the contact entity, it lists upto three opportunities for the contact. ($top) It orders them by name. ($orderby)

And in the results, I return a lookup and also I filter ($filter) on an optionset.

Hopefully this query is a good example of everything I’ve described working together. Enjoy. J

    // *** First of all we get the GUID of the current record
    var contactId = Xrm.Page.data.entity.getId();
    // *** Opporuntities that are "InProgress have a status reason (optionset) with value 1
    // *** Next we build a query to find three opporuntities, that are open, ordered by their name field (Descending)
    var selectQuery = "/OpportunitySet?&top=3&$filter=ParentContactId/Id eq guid'" + contactId + "' and StatusCode/Value eq 1&$select=Name, ParentAccountId&$orderby=Name desc&$top=3";

    // *** Now we make a request, using our query
    var oDataResult = null;
    oDataResult = MakeRequest(selectQuery);
    // *** And finally we can view the results.
    // *** In this example we have upto three results, so lets loop round them!
    var arrayLength = oDataResult.length;
    for (var i = 0; i < arrayLength; i++) {
        var displayResult = "Opportunity Subject = " + oDataResult[i].Name + "\n";
        var displayResult = displayResult + "Account Name = " + oDataResult[i].ParentAccountId.Name + "\n"
        var displayResult = displayResult + "Account GUID = " + oDataResult[i].ParentAccountId.Id
        alert(displayResult);
    } // End for

Filed under: JavaScript Tagged: Dynamics 365, JavaScript

Parent Business Unit cannot view child business unit record

$
0
0

Hi All,

I need an assisted about issue missing connection

So, I have business unit A (parent) and business unit B (child).

Some record related to business unit B

When I set the record view use user assigned to business unit B, it's working right

But when I set the record view for user with business unit A, it cannot see anything

(Should be see the same view as user assigned to business unit B because B is a child from A business unit)

Any missing for this issue?

Thank You

Prerequisites for learing CRM development

$
0
0

Hi all,

I am new for crm is there any requisites to learn. please suggest

Thanks all

Durga venkata.

CaféX, Live Assist – Campaign and Engagement Theory

$
0
0

I have recently been using Live Assist from CaféX to add chat capabilities into Unified Service Desk (USD) for Microsoft Dynamics 365. In this post I will highlight some of the concepts I’ve discovered around campaigns and engagements.

We use campaigns and engagements in Live Assist to target chat interactions and also customize the user experience. When you first install Live Assist you’ll have a default campaign and engagement. But quickly you will need to customize these.

Using the Live Assist campaign and engagement configuration / settings options is pretty intuitive. That is once you appreciate what is possible. Therefore in this post I’ll try to highlight the key capabilities we have available. Hopefully giving you the background knowledge to start to delve a little deeper. (Also, you will find some great training videos here that will help expand your knowledge.)

You manage the settings for campaigns and their associated engagements in the Live Assist settings. This can be accessed various ways, one being from the URL you’ll find within the Dynamics 365 settings area. (As shown below.)

In this post I give a summary of the key features for;

  • Campaigns
  • Engagements
  • Customizing Engagements
  • Customizing Engagements – Pre / Post Chat Surveys
  • Campaign Goals
  • Targeting Campaigns by Audience
  • Targeting Engagements by Location (Within your website.)
  • Targeting Engagements by Behaviour
  • Content Engagements
  • Data Tracking Configuration

Spoiler alertyou can do loads with Live Assist! I will cover as much as possible but may miss the odd feature.

Campaigns

A campaign defines the audience, timeframe and what engagement(s) are applicable. Campaigns can also optionally contain a goal to measure the success of a campaign.

Note:
Initially you will have a default campaign that is unending and has an open ended goal. Plus will be open to all visitors to your site.

The audience options can be used to focus on people from a particular geo-location, gender, age range etc.

All campaigns have at least one engagement.

Below you can see my default campaign that has no end date, no goal, is open to all visitors and has the one default engagement.

Engagements

Engagements define how live assist interacts with visitors to your site. Including defining what gets shown, to whom and when.

The default “ocean theme” will give you a pretty standard blue chat button and a blue themed chat window (Shown below). The style of the chat window and chat button can be controlled. Including their colour, position, images, text etc etc. Additionally you can control which page(s) the chat option displays on.

Initially the chat option will show to all visitors regardless of any behaviour conditions. Behaviours allow you to trigger engagements based on ” visitor flow”. Examples might include someone who has been viewing a page for more than a certain length of time or maybe someone has stalled in your ordering process. (Suggesting they might need some support.)

There are effectively two types of engagements, chat and content. Chat engagements will be designed to open chat conversations with your agents, whilst content engagements can be used to automatically direct the visitor to content.

Customizing Engagements

The chat banner can be customized in many ways! Including changing its style, placement, background colour, editing the text, changing the image etc. You can access the options to achieve these effected from the engagement.

Below you can see that I have changed the default chat button to include a revised image, alternative text and I have customized the background and board colours.

Additionally you can control other items in the engagement. Including the predefined responses available to agents and any automated messages.

Note:
It is also possible to link this engagement to skills. When we define agents / users they can be assigned skills. Meaning that chat requests would then only show to agents with the correct skills.

The chat window can be customized in a similar way, Except you cannot change the ocean theme but we can add new themes.

Below you can see that I have altered the colours of my chat window and added a very glamorous photo!

Customizing Engagements – Pre and Post Chat Survey

It is possible to also create pre and post chat surveys. Below you can see that on my engagement I have change the view from “Chat” to “Pre-chat survey”.

This might be useful if you wish to capture details about the visitor and their query before connecting with a chat agent. (Tip:
In Unified Service Desk (USD) you can access the responses to these questions in replacement parameters!)

It is a simple process to add questions into the survey. These can be text fields or option sets, as required.

For example, it my quick test I created a dropdown option set to establish if the visitor had a sales or support query.

Campaign Goals

A previously mentioned initially you will have a campaign that is ongoing and has no goal. The concept of goals is to help achieve business objectives, such as increasing sales, improving service outcomes etc. Initially the goal is simply to interact with visitors but we can edit this.

Firstly we select a goal type. Types include selling products, generating leads, completing service activity, increasing page views or “other”. You’ll use other if the pre-defined goal types don’t quite meet your requirements.

Having defined the goal type you will need to consider what indicator is used to say it the goal has been completed. The simplest approach is to use a URL. Say a potential customer completes a lead form and that form takes you to a thank you page. Or when taking an order the final step is an order confirmation page. Reaching these pages will have shown that the goal has been achieved.

A more comprehensive approach to goals is to use data tracking to confirm what records were actually created. This level of integration is more powerful but also will be more involved to configure.

Charts are available to show progress towards goals. (Which are updated hourly.) You may also want to look at the difference between goals achieved with assistance and those achieved without.

Note:
At this point in time I am simply investigating the out of the box capabilities of Live Assist. Reviewing goals does lead me to think about what else I can do with this data and if the goal data can be accessed directly in Dynamics 365 or maybe even PowerBI. (For now these will be questions I will return to another day!)

Targeting Campaigns by Audience

Initially your campaign will be for all visitors to your site. But this might be wasteful as you could be engaging with customers that don’t meet the demographic you wish to target. For example, you might waste time chatting with customers that are outside of the regions you deal with.

When defining an audience we first define the origin and then filter based on customer info. Origins include;

  • External referral– the referral URL.
  • Search keywords– include or exclude visitors who used certain keywords. (Not forgetting that Google does not support keywords other than via Adwords.)
  • IP Range– include or exclude people from given IP ranges. You may, for example want to exclude people from your own organisation. Or include only your own people, maybe whilst testing a new campaign.
  • Platform– Currently Live Assist isn’t available on mobile clients. Therefore currently you’d want to exclude visitors from mobile devices.
  • Marketing source– data tracking can be used to establish the marketing source and there you could target people for specific campaigns differently.

Having defined the origin of our audience we next define the customer information. Many of these fields will rely on data tracking being configured. As Live Assist will need to be “told” how to determine a visitors company size etc. The most common option that you might want to use is geo-location, which doesn’t reply on data tracking. You can see above that I have included only customer from the United Kingdom and Netherlands.

Targeting Engagements by Location

By default the engagement will be applied to your entire website. But it might be that a sales campaign should only apply on your “shopping” pages. Or maybe a campaign to service your customers should only show in the support section of your website.

Locations can be defined in one of two ways. The first is to simply enter the details of the URL corresponding to that area in your website. In many circumstances this will be all you need to do.

But your URL structure might not follow a ridge layout. Or maybe your site map is likely to change which would in turn “break” your engagement set-up. For example, if you add a new page you would need to remember to add it into all corresponding engagements. In these circumstances you can add JavaScript into your website. Then refer to the sections of your website using tags. This second approach will be more complex to setup, as you’ll need to make changes to your website. But it is probably a more robust approach!

Targeting Engagements by Behaviour

Targeting engagements based on visitor behaviour can be a powerful way to encourage or discourage certain outcomes. For example, if someone abandons a shopping basket part way into the checkout flow maybe a chat with an operator may resolve their potential issue.

As with location visitor behaviour is an attribute on the engagement. And will initially default to “All Behaviours”.

Each behaviour will have a condition bases on navigation, e-commerce or visitor journey. Some of these options will require data tracking to be configured! Others reply on URLs but can be amended to work from section tags. (If you add JavaScript into your website to define the section tags.)

One example of behaviour might be flow. We might want to attempt to chat with the customer if a flow is abandoned or maybe if they move backwards in the flow. Take a checkout process as an example. If the user abandons the checkout process before completing the shipping details or if they back track just before confirming the order maybe a chat conversation would help. Flows are constructed by listing the URLs or sections that makeup the flow. We can then define if the engagement should apply if the flow has been abandoned etc.

Time on location and visited location can be used to trigger a conversation. In the example I gave above if someone paused on the “contact me” page without contacting us maybe suggesting a chat would be useful.

The concept of “About to abandon” relies on the use of Google analytics. Then if the data suggests the user might be about to abandon the current action then a chat could commence.

The other options in eCommerce and Visitor Journey will all reply on data tracking being defined. As Live Assist, for example, would need to be aware of what fields hold your product and pricing information.

It might be that a chat should begin is a visitor views or selects a particular product. Or maybe they are presented with an error. Such as an item being out of stock. In this example a chat with an operator may help suggest an alternative or discuss when stock will become available.

Content Engagements

The concept of a content engagement is actually very similar to that of a chat engagement. In that both relate to campaigns and both can be based on visitor location and / or behaviour. The only difference is that a content engagement will direct the visitor to information whilst as chat engagement will connect them with an agent.

This concept could be very useful when you don’t actually want to tie up an agent. For example, maybe the customers is viewing a low value product that doesn’t warrant engaging with an “expensive” chat agent.

We create content engagements in the same way as chat engagements. Other than the channel is set to content.

As with chat engagements there is a number of formats available.

Having selected a format you can access a number of predefined examples. A good approach might be to select something which is close to your requirement and then customize it!

Below you can see that the customization options on a content engagement are very similar to those of a chat engagement. Notice that by selecting the cog I can optionally define a URL that will be triggered if the visitor clicks on the content engagement.

Data Tracking Configuration

I have mentioned in several features that to fully utilize them you will need to configure data tracking. This is because Live Assist will not magically know what your products are or what field to use for the visitors age etc. Live Assist will need to be “taught” how to derive this information.

Live Assist uses data tracking to assist with campaigns, marketing activities or sales. It makes extensive use of data tracking when targeting campaigns and engagements, measuring goals and providing agents with insights regarding a visitor.

As you configure various options in Live Assist you will be presented with an orange button that allows you to access the “Configure tracking” option.

Alternatively you can use the data sources option from the campaigns view.

In data sources you select if you wish to define eCommerce, visitor or visitor journey attributes.

With any attribute data can be obtained by extracting the data direct from the webpage or by embedding JavaScript code on the page. Referencing the html element or a named JavaScript variable maybe the simplest approach as no changes are needed to your website. However future maintenance could result in issues. Therefore the preferred approach is to embed code into your website to interact directly with Live Assist. Meaning the values are then pushed directly into Live Assist without the need to define this mapping.

I have shown a sample of some typical code below;

I hope this post has given you a good flavour for all of the key features of Live Assist. And that with this knowledge you feel confident enough to explore these features in more depth.


Filed under: CafeX, Live Assist Tagged: CafeX, Unified Service Desk

calling crm home page in USD agent application.

$
0
0

Hi All,

I'm trying to bring CRM home page (main.aspx) in USD agent application.

I have followed below methods but none of them worked .

Method 1:

step1 : created hosted control Name: Home page

            USD component Type :CRM Page

 Hosting Type: IE Process

Allow Multiple pages :No 

Application Global :unchecked 

display group: MainPanel

Step2 : Action call

Name : Home navigate

Hosted Control*= Home Page

Action*= Navigate

Data=    url= main.apsx

step 3: 

Hosted controls ->CRM Global Manager -> nav bar-> events -> DesktopReady-> Added active action + -> Home navigate 

according to this tutorial video ( (https://www.youtube.com/watch?v=EZFLYctcQ_c) but it is not showing as in his video home page is coming.

method 2: following this method that is also not working : https://neilparkhurst.com/2015/11/01/usd-create-a-home-button-in-the-toolbar/comment-page-1/#comment-4564

please someone help me regarding above issue . 

USD – Phone call, closeWindow

$
0
0

I am going to start this post with a big thank you. Thanks Srikanth your idea worked a treat. Srikanth is a good friend and fellow USD fan! Check out his blog here.

The problem I faced was connected with mark as complete on the phone call within Unified Service Desk (USD) for Microsoft Dynamics 365. The issue being that you need the form to refresh after completing a phone call as only then is the user presented with the read-only / completed version of the phone call. I describe the solution in this post.

I have attempted a few variations around this previously but none have been 100%. This variation seems to be the best solution so far. My previous attempts can be found here.

The change is simple. The steps involved are this;

  1. Create an Action
  2. Add to BrowserDocumentComplete on phone call

Step One – Create an Action

You can use a RunScript action to substitute the normal close window function with one that will close the tab “nicely” in USD. The function will need to look like this;

function closeWindow(focus) {
       location.reload();
}

My action looked like this.


Step Two – Add to BrowserDocumentComplete on phone call

Next we need to call the action, this is done from the BrowserDocumentComplete event on phone call. As shown below;

The result of this change is that after you make the phone call as complete the screen will refresh and you will then see the completed phone call.

Hopefully you will find this change useful is you face issues with mark as complete on phone call.


Filed under: Uncategorized, USD - Configuration Tagged: Dynamics 365, Unified Service Desk

Parent Business Unit cannot view child business unit record

$
0
0

Hi All,

I need an assisted about issue missing connection

So, I have business unit A (parent) and business unit B (child).

Some record related to business unit B

When I set the record view use user assigned to business unit B, it's working right

But when I set the record view for user with business unit A, it cannot see anything

(Should be see the same view as user assigned to business unit B because B is a child from A business unit)

Any missing for this issue?

Thank You

Prerequisites for learing CRM development

$
0
0

Hi all,

I am new for crm is there any requisites to learn. please suggest

Thanks all

Durga venkata.

JS to reload parent on subgrid change - different for 2016?

$
0
0

I'm using the Dynamics CRM 2016 Workflow Tools Solution to automatically update a rollup field on a parent record when child records are added.  This seems to work fine, but when I'm working in the child subgrid from the parent form, the new rollup value doesn't show up until I manually reload the page.

When I tried this out a while ago on CRM 2015, I was able to put in some JS to refresh the page - something like this:

http://andreaswijayablog.blogspot.ca/2011/08/refresh-form-after-subgrid-changes-or.html

However, this and other variations I've found and tried no longer seem to work on 2016.  I've tried what seem to be the updated functions/methods:

function Form_onLoad() {
    setTimeout("SubGridRefresh();", 2500);
}

function SubGridRefresh() {
    var grid = Xrm.Page.getControl("MySubGrid");
    if (grid) {
        grid.addOnLoad(ReloadForm);
    }
}

function ReloadForm() {
    Xrm.Page.data.refresh(true);
}


And no luck.  It gets to the ReloadForm function, but the rollup field still doesn't refresh til I reload manually.  Also tried this code for the reload:

    var id = Xrm.Page.data.entity.getId();
    Xrm.Page.data.save();
    Xrm.Utility.openEntityForm("myEntity", id);


This does reload the page, but it does it even if I try to go to the second page of the subgrid, which makes it not useful at all.

Any thoughts on how I can accomplish this?  (Specifically, the reload when subgrid data is updated.)

Accounts with no invoices last x months (Advanced Find)

$
0
0

Hello all,

 I have been using the forums for answers for a while however this is one that has stumped me and I don't seem to be able to find an answer.

I would like a list of Accounts which have NOT had an invoice in the last 3 months. I don't seem to be able to work out the criteria required. I can get Accounts where they have invoices over 3 months old, but then I want to exclude any of those who have invoiced in the last 3 months. This seems impossible. I would really like this a an advanced find option as it will be really useful for our sales people. I can easily do it in SQL however it would be far better as an advanced find.

 Any ideas would be greatly appreciated. Did I mention that my boss wants the data today!! Ahhh..

 Thanks in advance

 Dave.

Enquiries with one of the word matching

$
0
0

Hi,

I want to get the list of no. of enquiries with one of the word matching. for example if there are 5 enquiries with the below name

the fame

fame

famenine

tera

beta

the list should display all the first three name. Please help.

Rgds,


MB2-716 Certification: (Microsoft Dynamics 365 Customization and Configuration) – Introduction

$
0
0

This is the first post in a series explaining the details of the MB2-716 certification. MB2-716 was released around Feb 2017 and is the latest version of Microsoft’s Customization and Configuration exam. I have blogged in detail about the previous exam, MB2-712. During this series I will update all of my earlier posts and add in any new details specific to MB2-716.

I will try to make these posts detailed enough for the CRM Dynamics 365 novice to gain the required knowledge whilst still informative enough for experts to use these posts as revision guides. In fact the process of creating these posts will be my revision for this exam, meaning I will be going on the same journey as you!

The customization and configuration certification seems to be one that developers tend to target, however the exam is also a useful learning objective for CRM Functional Consultants and Business Analysts. A Business Analyst might not routinely customize Dynamics 365 but having a deep understanding of the products capabilities will do doubt enhance their capabilities.

First of all a word of warning for anyone about to embark on preparing for this exam!

The Customization and Configuration exam is big! By this I mean its scope is wide, the result of which is you’ll need to take in quite a bit of knowledge. But “Don’t Panic”. As learning about Dynamics 365 is rewarding and you’ll enjoy the process.

I have two key tips for anyone preparing for these types of Microsoft exam;

  1. Allow yourself plenty of time. It is not a race! Give your yourself plenty of time to learn the subject deeply before attempting the exam. The exact amount of time required will vary depending on your experience but a few hours or days is unlikely to be enough.

  2. Do not depend on theory alone. You should read as much theory as possible but this is no substitute for hands-on time working with the product. If you want to learn how to customize a system view, understanding how this is done and any limitations is best done by creating some views!

My third nugget of “wisdom” is to keep returning to the skills measured statement. Your preparation needs to be very focused to ensure you don’t’ “waste” time researching subjects not covered. I often start my exam prep by printing off the skills measured and highlighting all of the topics I know I need to focus on. These might be new features I haven’t used or areas of the product I haven’t touched for a while.

So let’s begin by reviewing the skills measured, they’re split into four sections.

  • Configuring Microsoft Dynamics 365
  • Implementing Microsoft Dynamics 365 entities, entity relationships and fields
  • Create and manage Microsoft Dynamics 365 solutions, forms, views and visualizations
  • Implement business rules, workflows and business process flows

Configure Microsoft Dynamics 365

  • Configure Microsoft Dynamics 365 settings
    • Configure auditing, document management, and collaboration; configure administration settings; perform data management tasks; perform user management; implement themes
  • Manage Microsoft Dynamics 365 security
    • Identify security roles, define permissions and privileges, configure access levels, configure security roles, assign security roles, implement multiple security roles, manage access, implement the standard security model and hierarchy security, configure business units, manage teams
  • Configure email services
    • Identify integration options, configure email server profiles and default organization email settings, enable server-side email synchronization, enable folder tracking, map exchange folders, set up and configure the CRM App for Outlook
  • Integrate Microsoft Dynamics 365 with other Office 365 offerings
    • Select the appropriate Office 365 group integration, create and configure Office 365 groups, integrate Microsoft Dynamics 365 and SharePoint, enable linking to OneNote files, set up and configure OneNote integration, configure OneDrive integration

Implement Microsoft Dynamics 365 entities, entity relationships and fields

  • Manage Microsoft Dynamics 365 entities
    • Manage entity ownership, manage entity properties, configure system entities, describe activity entities, configure entity ownership and entity properties, implement managed properties, configure custom entities and security roles, delete entities
  • Implement entity relationships
    • Define relationship types, create relationships, configure cascading rules, identify types of cascading behavior, work with hierarchical data, configure entity mapping, create connections and connection roles
  • Define and configure Microsoft Dynamics 365 fields
    • Identify field types, define field naming requirements, configure field properties and field display formats, implement option sets and two option fields, configure lookup fields and customer fields
  • Configure field customizations
    • Configure fields, configure field properties, use calculated fields, use rollup fields, configure global option sets, create alternate keys, configure field security and security roles, use status and status reasons, identify status reason transitions

Create and manage Microsoft Dynamics 365 solutions, forms, views and visualizations

  • Create and manage Microsoft Dynamics 365 solutions
    • Recommend usage patterns for Microsoft Dynamics 365 solutions, identify solution components, identify solution types, create managed and unmanaged solutions, configure publishers and versions, manage multiple solutions, import and export solutions
  • Customize Microsoft Dynamics 365 forms
    • Identify Microsoft Dynamics 365 form types, build a form, use specialized form components, implement access teams and subgrids, create editable grids, work with navigation, use multiple forms
  • Implement Microsoft Dynamics 365 views and visualizations
    • Identify view types; create, modify, manage, and delete views; customize views; create system and personal charts; identify chart types that can be combined; use available series aggregation types; customize charts; import and export charts; create dashboards and dashboard components; customize dashboards; control access to dashboards
  • Configure Microsoft Dynamics 365 for mobile devices
    • Deploy the mobile client, identify available entities for the mobile client, configure mobile navigation, design mobile form layout, create custom controls, hide mobile form content, create multiple forms, create mobile views and activity lists

Implement business rules, workflows and business process flows

  • Implement and manage business rules
    • Determine when to use business rules; describe business rule scopes; identify actions that trigger business rules; configure business rules, conditions, and actions
  • Implement and manage workflows, dialogs, and custom actions
    • Implement workflows; identify workflow types; implement dialogs and custom actions; identify when to use business process flows, workflow dialogs, and custom actions
  • Implement and manage business process flows
    • Identify business flow components; enable business process flows; implement steps, stages, and categories; implement flows that use multiple entities; use conditional branching; implement role-driven business process flows; run workflows

Microsoft provide free 30 day trial instances of Dynamics 365, so at this point your first step should probably be to create a trial instance ready to begin. You can do that here. Good luck.


Filed under: MB2-716: Dynamics 365 Customization and Configuration, Uncategorized Tagged: CRM Certifications, MB2-716

MB2-716 Certification: (Microsoft Dynamics 365 Customization and Configuration) – Configure Settings (Administration Settings)

$
0
0

As I prepare for my MB2-716 exam I’m producing a series of blog posts that collectively should help others revising for the MB2-716 Certification. (Microsoft Dynamics 365 customization and Configuration.) This time I will look at how to configure administration settings.

I often like to begin by looking at the skills measured statement. This time the specific statement I will address is shown below. (With administration settings highlighted as they will be the focus of this post, later posts will expand on documentation etc.)

Configure Microsoft Dynamics 365 settings

  • Configure auditing, document management, and collaboration; configure administration settings; perform data management tasks; perform user management; implement themes

Administration Settings

The administration area of Dynamics 365 settings contains many of the options we use when configuring Dynamics 365.

The administration area of the settings options gives access to various options. Including;

  • Announcements, manage companywide announcements.
  • Auto-Numbering to define how cases and other entities should be assigned unique numbers.
  • System Settings many settings are controlled within the system settings option. (more details later!)
  • Languages lets you install language packs when working in a multilingual organization.
  • Privacy Preferences allows the administrator to define if users in the organization can participate in the customer experience improvement program.
  • Product Updates, sign up for email alerts on product updates.
  • Yammer Configuration, enable Yammer collaboration in Dynamics 365.
  • Microsoft Social Engagement Configuration. Connect your installation of Microsoft Dynamics 365 to a Microsoft Social Engagement solution.

Note: Be aware if you enable Yammer you cannot disable it. Yammer replaces the CRM out of the box posts / wall functionality.

There are some differences in the Administration options between on-premise and online! Notice how the screen below (from an online instance) has some additional options. Including;

  • Subscriptions Management, will navigate you into Office 365 to manage payment / billing options, purchase licenses etc.
  • System notifications, view any details of scheduled outages etc.
  • Resources in Use, shows how many of the 300m available custom entities are in use. Plus contains links to view storage usage.
  • Data Performance, review, analyze and optimize data access. (Note, at the time of creating these notes details on this option were limited.)
  • Mobile Offline configuration, Dynamics 365 contains the ability to enable off line with the mobile client.


System Settings

System settings is an important option as it gives access to a lot of options which drive system behavior. Such as how email processing works, default currency, enabling auto save, skype integration etc etc. Part of your revision should involve spending time going over the options in each tab in system settings so you are every familiar with the capabilities. (Getting hands-on time is always important!)

You could face questions on the exam on any system setting. Make yourself familiar with as many settings as possible!! Below I highlight a few of the newer ones. This is not to suggest I believe these will come up in the exam. I list them here simple to bring your attention to some of the newer options. Even the most experienced of you will do well to review the system settings in detail as you will no doubt find a few new options or be reminded of settings you’ve long since forgotten about!

General Tab

Dynamics 365 contains a new concept of an app model. In the general tab you can define the name of the default app and if this should be shown in the app switcher.

Mobile Tab

A new tab called “Mobile” exists. Here you can enable / disable conflict detection when using mobile offline synchronization. (Note: This option only applied to online Dynamics 365 instances.)

Previews

With online instances you can enable a number of preview features. These are new features that allow you obtain insight into features planned for full relaese in later versions of Dynamics 365. Care should be taken wit these features as that should only be used for development / test purposes. This is because they are likely to change (or even be removed) when in later Dynamics 365 releases.

Auto-Numbering

There are nine entities in CRM which are enabled to auto-numbering. Those being contracts, cases, articles, quotes, orders, invoices, campaigns, categories and knowledge articles. You cannot add more entities to this list using this out of the box numbering but you can configure how the numbering should operate for each of these entities.


Note:
Earlier versions of CRM only had 8 entities available for auto-numbering. Categories are a newer option. These can be used when ccategorizing entity records in Microsoft Dynamics 365. They help you tag the records so that you can easily search them. Use the Category entity to create and manage a hierarchical structure of categories in Dynamics 365, and then associate entity records to one or more categories.

I hope this quick introduction to the administration settings in Dynamics 365 will have helped in your exam preparation. In my next post I will build on this concept and look at the business management configuration options.


Filed under: MB2-716: Dynamics 365 Customization and Configuration Tagged: CRM Certifications, MB2-716

HTML Name

MB2-716 Certification: (Microsoft Dynamics 365 Customization and Configuration) – Configure Settings (Business Management)

$
0
0

As I prepare for my MB2-716 exam I am producing a series of blog posts that collectively should help others revising for the MB2-716 Certification. (Microsoft Dynamics 365 customization and Configuration.) This time I will look at how to configure settings. Specifically the settings under the heading of Business Management.

Business Management

Within settings you’ll find the business management option, here you can configure a number of options that relate to business wide settings. Some of these will be expanded upon in future posts in this series! All these options relate to how a particular organization will function. Including many options used by the service scheduling module of Dynamics 365. (Such as facilities / equipment, resource groups and services.)


  • Fiscal Years Settings– Define fiscal years and periods.
  • Goal Metrics– Manage goals.
  • Business Closures– Create list of holidays and other business closures.
  • Facilities / Equipment– Add facilities and equipment for service scheduling.
  • Queues – Create and manage queues.
  • Resource Groups– Resource groups are used in service scheduling.
  • Sales Territories– Create territories and associate with territory managers
  • Services – Add new services for scheduling.
  • Sites– Each organisation can have multiple sites. (Note: Do not confuse sites with business units, that will be covered later when we review the security model.)
  • Subjects– Subjects are a hierarchy for products, sales literature and articles.
  • CurrenciesMultiple currencies with associated exchange rates are defined in business managements.
  • Connection Roles– Define roles that can be used when connection records with Dynamics 365 connections feature.
  • Relationship Roles– Standard relationships between accounts, contacts and opportunities. (Largely redundant! It is recommended you consider using Connections in preference.)
  • Automatic Record Creation and Update RulesRecord creation and update rules allow you to configure when records are automatically created within CRM. For example, you may wish to automatically create a case when a new email is received onto as particular queue.

You probably won’t receive detailed questions on every option listed under business management. But being aware of these capabilities could be important. I doubt, for example, that you would get detailed questions on service scheduling in the MB2-716 exam.

Automatic Record Creation and Update Rules

Automatic Record Creation and Update Rules are not specifically mentioned in the skills measured for MB2-716, however I would still suggest that at least being aware of these might be wise. You can use workflows to automatically create records as required but equally we also have Automatic Record Creation and Update Rules. The concept is that record creation rules can be used to automatically create system or custom entities as a result of receiving an activity. For example, you might have automatically create a case when an email is received.

Dynamics 365 supports creating records from the following activities;

  • Email
  • Social activity
  • Task
  • Phone call
  • Appointment
  • Service activity
  • Custom activity

The rules can be linked to a specific queue. For example, we may have two queues each with a mailbox. One called info@mycompany.com and one called support@mycompany.com, when an email is received on the first queue we may wish to create a lead but when an email is received on the “support@” queue we would require a case.

I have shown a simple example of a record creation rule below. One thing to note is that the rule must be activated before it begins to execute. And once activated you will need to deactivate the rule if any changes are required.

It may also be worth noting that record creation and update rules can be added into your solutions. (I will cover solutions in more detail in a later post!)

The best approach to revised record creation rules will be to create one or two as part of your prep. You may also wish to explore additional details for some of the business management options. You will find posts on many of them scattered around my blog! For example, here is one on currencies.


Filed under: MB2-716: Dynamics 365 Customization and Configuration Tagged: CRM Certifications

how Create PhoneCall Activity in background on unified service desk ?

$
0
0

hi i try scriptlet but it not working

its posible to add phonecall activity from actioncall or scriptlet in background ?

my senario is i have incoming call from lync SDK i detect it and i want create one phone call activity and add from field value from all my result account contac lead from fetchxml on windows navigation rules

sry for my bad EN

Best Regard
Mani

Viewing all 1692 articles
Browse latest View live


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