Home » Posts tagged 'Dynamics' (Page 2)

Tag Archives: Dynamics

Dynamics 365 v9.0: Xrm.WebApi – CRUD Operations Part – 1

Introduction:

Microsoft Dynamics 365 July Update, formally known as V9.0 has come up with lots of new and exciting features. No doubt these features have been applauded by end users and developers.

One of the important enhancement that will be boon for developer is Xrm.WebApi. Earlier to v9.0, to perform CRUD operation in Dynamics CRM we need to create our own library or used other third party libraries or used XmlHttpRequest and ajax request. So Xrm.WebApi is a cool enhancement added in Dynamics 365 v9.0 which will help to make developers life simple.

In this blog, we will discuss about how we can perform CRUD operations and work with all data types using newly added WebApi in Xrm namespace.

Using Xrm.WebApi:

Below is the example where we can used Xrm.WebApi.

1. Create:

To create the record, first we need to create the object of entity and then set the required fields and its value and then call Xrm.WebApi.createRecord function to create record in CRM. The parameters of this function are shown below;

1. Entity logical name

2. Entity object

/// This function is used to create a contact record
function createContact() {
    var contactObj = null;
    try {
       
        // create the contact object
        contactObj = new Object();
        contactObj.firstname = "Mike";
        contactObj.lastname = "Morgan";
        contactObj.creditonhold = false;

        //set optionsetvalue
        contactObj.accountrolecode = 2;
        //set the lookup value
        contactObj["parentcustomerid_account@odata.bind"] = "/accounts(A8A19CDD-88DF-E311-B8E5-6C3BE5A8B200)"

        Xrm.WebApi.createRecord("contact", contactObj).then(function (result) {
            //get the guid of created record
            var recordId = result.id;

            //below code is used to open the created record
            var windowOptions = {
                openInNewWindow: true
            };
            //check if XRM.Utility is not null
            if (Xrm.Utility != null) {

                //open the entity record
                Xrm.Utility.openEntityForm("contact", recordId, null, windowOptions);
            }
        })
      .fail(function (error) {
          Xrm.Utility.alertDialog(error.message);
      });

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

 2. Update:

To update the record, first we need to create the object of the entity and then set the fields and its value that we need to update and then call Xrm.WebApi.updateRecord function to create the record in CRM. The parameters of this function are as shown below;

1. Entity logical name

2. Entity guid

3. Entity object

//this function is used to update contact
function updateContact() {
    var ownerId = null;
    var contactObj = null;
    try {

        // create the contact object
        contactObj = new Object();

        //set the properties
        contactObj.creditonhold = true;
        //set optionsetvalue
        contactObj.accountrolecode = 3;
        //set the lookup value        
        ownerId = "1809D364-F311-4B0A-98D2-198B721B2061";
        contactObj["ownerid@odata.bind"] = "/systemusers(" + ownerId + ")"

        // pass entity logical name , entity guid, entity object
        Xrm.WebApi.updateRecord("contact", "49A0E5B9-88DF-E311-B8E5-6C3BE5A8B200", contactObj).then(function (result) {
            Xrm.Utility.alertDialog("Record updated successfully.");
        }).fail(function (error) {
            Xrm.Utility.alertDialog(error.message);
        });

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

3. Delete:

To delete record from CRM use Xrm.WebApi.deleteRecord.

 The parameters of this function are shown below;

1. Entity logical name

2. Entity guid

/// This function is used to retrieve the Delete record
function deleteRecord() {
    try {
        Xrm.WebApi.deleteRecord("contact", "8DA6E5B9-88DF-E311-B8E5-6C3BE5A8B200")
      .then(function (result) {
          Xrm.Utility.alertDialog("Record deleted successfully.");
      })
      .fail(function (error) {
        Xrm.Utility.alertDialog(e.message);

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

4. Retrieve Record:

In order to retrieve record we can use Xrm.WebApi.retrieveRecord. The parameters of this function are as shown below;

1. Entity logical name

2. Entity guid

3. In last parameter pass following [select cause, filter cause etc.]

 

Note: If you want to get the value of lookup field you have use _ as prefix and _value as suffix. For example for parentcustomerid use _parentcustomerid_value

/// This function is used to retrieve the contact record
function retrieveContact() {
    try {

        Xrm.WebApi.retrieveRecord("contact", "465B158C-541C-E511-80D3-3863BB347BA8", "$select=fullname,telephone1,preferredcontactmethodcode,createdon,_parentcustomerid_value,creditlimit")
            .then(function (data) {
                retrieveContactSuccess(data);
            })
            .fail(function (error) {
                Xrm.Utility.alertDialog(error.message);
            });
    } catch (e) {
        Xrm.Utility.alertDialog (e.message);
    }
}

///retrieve success
function retrieveContactSuccess(data) {
   
    try {
        //get the values 

        //string
        var fullname = data["fullname"];

        //optionset
        var typeCode = data["customertypecode"];

        //lookup
        var customerGuid = data["_parentcustomerid_value"];
        var customerName = data["_parentcustomerid_value@OData.Community.Display.V1.FormattedValue"];
        var customerEntityLogicalName = data["_parentcustomerid_value@Microsoft.Dynamics.CRM.lookuplogicalname"];      

        //money
        var creditLimit = data["creditlimit@OData.Community.Display.V1.FormattedValue"];

        //date
        var createdonFormattedValue = data["createdon@OData.Community.Display.V1.FormattedValue"]; // gives date in following format 2017-09-30T21:10:19Z
        
        var createdon = data["createdon"]; // gives date in following format 10/1/2017 2:40 AM

        //optionset
        var preferredConMethod = data["preferredcontactmethodcode@OData.Community.Display.V1.FormattedValue"];        

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

 Conclusion:

Using Xrm.WebApi in Dynamics 365 v9.0, it is easy to perform CURD operation without performing AJAX request or creating own library or using third party libraries.

Copy System and Custom Entities in Dynamics CRM

from Microsoft Dynamics 365(CRM) Tips and Tricks http://bit.ly/2noEreZ
via IFTTT

Inline Editing for Sitemap Components in Dynamics 365 v9.0

Introduction:

Inline Editing helps user by allowing to edit any element from within that web page itself. With the release of Dynamics 365 v9.0, some new Enhancements are also added for Site map i.e inline editing for sitemap components.

In this blog, we will discuss about Inline Editing for Sitemap Components in Dynamics 365 v9.0

Earlier, there was no option to edit the components inline as you can see below.

Inline Editing for Sitemap Components in Dynamics 365 v9.0

To edit the components in V8.0, we use to Navigate to Settings -> Customization -> Customize the System.

Then Under the Components of the Default solution, select Click Extensions and select Sitemap and open it. By selecting the Area for editing the below Properties section opens to edit the name of that Area as shown in the below screenshot.

Inline Editing for Sitemap Components in Dynamics 365 v9.0

Similarly, it can be done for Group and SubArea.

How Inline Editing in Dynamics 365 v9.0 Works:

To achieve inline editing in v9.0, Navigate to Settings -> Customization -> Customize the System.

Under Components of the Default solution select Click Extensions and select Sitemap.

The other option to do this is, create a new solution and include Sitemap in it and then open it.

The below screen will appear.

Inline Editing for Sitemap Components in Dynamics 365 v9.0

To edit the Area component title, just hover the mouse over the Area component and select edit i.e. the pencil icon. On selecting it will allow to edit the text inline as below. Here, we will edit the title from “Sales” to “Portal”.

Inline Editing for Sitemap Components in Dynamics 365 v9.0

After editing, click on save and Publish. You can see the change on the Site map as seen below.

Inline Editing for Sitemap Components in Dynamics 365 v9.0

Similarly, Inline editing is also possible for Group Components and Sub Area Components.

Inline Editing for Sitemap Components in Dynamics 365 v9.0Here we will change the Group title from “My work” to “Work” and Sub Area title from “Account to “Company”.

Inline Editing for Sitemap Components in Dynamics 365 v9.0

After editing, click on save and publish. Now you can see the changes on the Site Map as below.

Inline Editing for Sitemap Components in Dynamics 365 v9.0

Conclusion:

With enhancement to Inline Editing for Sitemap Components, it’s more ease for user to edit sitemap in Dynamics 365 v9.0.

from Microsoft Dynamics 365(CRM) Tips and Tricks http://bit.ly/2n78ZSv
via IFTTT

Dynamics 365 Field Service: Payments related to Work Order and Invoice

Introduction:

Field Service remains a critically important component for most of the organizations. It radically drives customer satisfaction and builds stronger trusted relationship with the customers.

Recently, while working on field service, we came across an entity “Payments” and “Payment Details”, this created curiosity to explore more on this. And we did some research and play around to find how this entity could be related to work order/Invoice.

In this blog, we will discuss, how entities ‘Payments’ and ‘Payment Details’ could be related to Work Order and Invoice.

Payments related to Work Order and Invoice:

When field service is installed, the user would not be able to see the Payments entity. In order to bring the payment entity in the navigation of work order, the user needs to visit a form editor on work order form -> Add the Payment entity to the navigation of work order and then the payment entity will be ready to use.

Now let’s have a glance on how Payment section is related to Work Order and Invoice.

Consider a scenario, create one work order and add a product to it.

Payments related to Work Order and Invoice

Now next step is select the product and set the Line Status option as “Used”.

Payments related to Work Order and Invoice1

When the work order product’s Line Status changes to “Used” and work order is “Closed-Posted”, then the Invoice product and also the invoice related to work order is created.

In order to create invoice record, when the work order is “closed posted”, the user needs to configure the following field service setting.

Payments related to Work Order and Invoice2

Now the Total Amount of the work order is “$300”.

Payments related to Work Order and Invoice3

The invoice created for the work order “00004” and total amount to be paid is “$300”.

Payments related to Work Order and Invoice4

As we have added the Payment entity in the navigation of work order, click on “Payment” and create a new payment.

Select the Work Order, Account, Amount, and Payment Type for which the payment should be made.  “Unapplied Amount” is the calculated field.

Payments related to Work Order and Invoice5

Now, go to the navigation of the Payment. Here we can find another entity called “Payment Details”.

Create a new Payment Details. Here we need to select the invoice i.e. invoice for which the payment should be made. If the customer does not pay full amount which is on an invoice, but the customer paid some amount, then let us see how this calculation is done.

Payments related to Work Order and Invoice6

The total amount was “$300” of the invoice. When the Payment detail was created, the “Payment Amount” paid by the customer is “$50”. Hence, the Amount due on the invoice is “$250” i.e. $300 – $50 = $250.

Now from this we understand that the total amount on the invoice was “$300”, but the customer paid “$50” and hence amount due i.e. to be paid is “$250”.

Payments related to Work Order and Invoice7

So if we go and check the “Payment – 00004” in the Payment entity, the “Unapplied amount” field which is a calculated field also shows “$250”.

Payments related to Work Order and Invoice8

This is how the Payment section works.

Conclusion:

The field service has added the Payment section to Work Order and Invoice through which we can calculate the amount due i.e. to be paid by the customer. The Payment section is also used in the Field Service mobile app.

Microsoft Dynamics CRM and QuickBooks Integration

from Microsoft Dynamics 365(CRM) Tips and Tricks http://bit.ly/2rxzoxm
via IFTTT

Best of Maps Integration with Dynamics 365 CRM in 2017

The New Year 2018 has had an amazing start with a new release. Maplytics now supports Dynamics 365 v9.0 and the new App for Mobile & Tablets. With this release, users can now access location insights from within Dynamics CRM anytime, anywhere which helps organizations drive better customer engagement. Year 2017 has been an equally remarkable one with many new features added to Maplytics, let’s recap the Best of 2017 for Maplytics – Your favorite Maps integration solution for Dynamics CRM.

Maps Dynamics CRM

Before we start with the features let us first look at the biggest news of the year 2017, Maplytics™ has become one of the first geo-analytical mapping solutions to be Certified for Microsoft Dynamics (CfMD)by meeting Microsoft Corp.’s highest standard for partner-developed software.

Our focus has always been to work on new features and making it easier for us to capture customer geo-location data and engage in new opportunities with them.  As always our Microsoft Dynamics Partners played a very big role in this continuous transition and our End users who have been ensuring to keep Maplytics as the featured App on Microsoft AppSource.

Converting-your-existing-customers-into-new-opportunities

Let’s walk through the trending features of Maplytics in 2017;

  1. Multi-Language Compatibility: Maplytics is one of the few mapping solutions for Dynamics CRM to offer multi-language support! It currently supports six different languages namely English, French, German, Portuguese, Spanish and Turkish! Team Maplytics has prepared a general framework to expand the capabilities beyond the currently supported languages. We aim to support all languages in the future and with the general framework in place, it will only take few weeks for Team Maplytics to deliver your favourite mapping tool for Dynamics CRM in your language of your choice!
  2. Plot Related Records: User can easily plot related (Child) records and analyze a particular record in detail. User can plot 1:N relationship of one entity with the other. You can also plot related records on the individual map, giving you insights right where you need them!
  3. Save Search Criteria as a Template: Radius search allowed users to narrow down their searches but you have to search for the same search criteria repeatedly! With this new release, you can now save search criteria with filters and zoom level, as a template effortlessly.
  4. Time Based Search: You can now perform the search based on distance or time and find leads/accounts within ‘x’ minutes of driving time. This will help you to focus on leads/accounts in the nearby region, based on traveling time!
  5. Editable Territories: With the Maplytics August Release, we added the functionality to add geographical boundaries (be it shape or region) to territories. This new release is taking this functionality further by allowing you to edit existing territories (geographical boundaries).
  6. User Personalization: Previously the Map Configuration was applied on the Organization Level, but with the new release, we have made this configuration available on a User Level and have added few more settings for further customization! Users can now define the Map Center and Zoom Level they want to see by default on loading the map.
  7. Mass Actions Button: The new release incorporates new ‘Mass Actions’ to allow users to do more with the Dynamics CRM data plotted on the map. With the new release, we have added SIXnew Mass Actions namely Add to Route, Manage Territory, Add Task, Schedule Appointment, Send Email, and Execute Workflow to allow users to get more done with the Dynamics CRM data plotted on the map.
  8. Summary Card: The new release incorporates Summary Card feature allowing users to get summarized/aggregate information for any enclosed area on the map like potential revenue. By getting the summarized information of any enclosed region on the map, users can quickly analyze and devise their strategy for that particular region!
  9. Customizable Tooltip Card & Pushpins: With the new release, The user can now customize the quick call to action buttons on the Tooltip card and get the actions you need most, just a click away! The customizable pushpins feature allows users to customize the shape and color of the pushpin for different Entity Category and Entity Views.
  10. Improved Heat Map: With the new release, we have improved Heat Maps and added a new No Boundary visualization to allow users to create a Heat Map based on the density of the measure and analyze their data covering the whole geographical spread.

With a big release at the start of 2018, we will continue to make this experience more innovative with your feedback and be on a mission of converting customer relation to customer relationships!

Get started with Maplytics and be productive on the go! Download your free trial for Dynamics 365 Customer Engagement v9.0 today!

from Microsoft Dynamics 365(CRM) Tips and Tricks http://bit.ly/2Du9PlA
via IFTTT

Open Progress Indicator using Xrm.Utility in Dynamics 365 v9.0

Introduction:

A few months back Microsoft has announced the release of Dynamics 365 v9.0 and has come up with many cool features.

Where some of them are related to functionality while others are related to UI.

Well! The list of newly added features is quite long though not exhaustive.

Open Progress indicator using Xrm.Utility in Dynamics 365 v9.0

The one of interesting addition that we saw and which could be a boon for developers is Progress Indicator functionality. With this functionality, user can display the Progress dialog/Indicator using “showProgressIndicator” function of XRM.Utility namespace.

To achieve this previously, we need to create a web resource which contains the custom logic to display the Progress Indicator/dialog in the CRM, and then use this web resource in order to show the Progress Indicator.

Now with the release of Dynamics 365 v9.0, we can display the Progress Indicator/dialog by using out of the box “showProgressIndicator” function of XRM.Utility namespace, the syntax of the function is as given below.

Xrm.Utility.showProgressIndicator(message);

Where,

message: Is a required argument of type string, message contains the string value which is displayed while showing the Progress Indicator.

Example: Xrm.Utility.showProgressIndicator(“Processing Record”);

We used this function in our JavaScript and the working of this function is cool as seen in the below screenshot.

Open Progress Indicator using Xrm.Utility in Dynamics 365 v9.0

Note: In order to closed the above Progress Indicator we would need to call Xrm.Utility.closeProgressIndicator() of Xrm.Utility namespace.

closeProgressIndicator() function don’t have any input argument, and if there is any Progress Indicator is displayed using showProgressIndicator(arg) function, then closeProgressIndicator() closes the progress indicator otherwise closeProgressIndicator() do nothing.

So whenever a user needs to close the Progress Indicator user can use closeProgressIndicator() function.

Conclusion:

Now user can display the Progress Indicator by using out of the box function “showProgressIndicator(arg)” in Dynamics 365 v9.0.

Export Dynamics CRM Reports

from Microsoft Dynamics 365(CRM) Tips and Tricks http://bit.ly/2Di8MSA
via IFTTT

Fixed – “Unable To Load Plug-in Assembly” Error in Dynamics 365

Introduction:

Recently we had a business requirement where we created plug-ins and asynchronous workflows for ON-Premise CRM and in the plug-ins, we used some third party dll like Newtonsoft.Json.dll. But when we tried to register the plug-ins using ILMerge approach, the third party dlls did not get merged with plugin dll and other required dlls. So we have no option other than registering the plugins on “Disk” Mode.

However, it was working fine in Dev environment.

Also, when we moved it to the Production following the same steps as we did for Dev, the plug-ins were working fine when they were triggered on their respective events. But when Asynchronous workflows on the same entity (as of Plugins) were fired it started failing with error as shown in the below screenshot.

Unable To Load Plug-in Assembly" Error in Dynamics 365

At first, we were not able to understand the reason why such error was occurring in the workflow as we correctly registered all plugins and it was working fine on individual events of the plugins like an update of an entity.

Then after some research and play around we found that the only difference was that the Production environment was distributed to multiple servers i.e. Dynamics CRM was installed on one server and SQL in other. So was their Frontend server and Backend servers which were hosted on different machines.

Whereas in Dev environment, all the services were installed on one machine where the CRM was installed. Also, the plugins were registered on disk there too. So for Dev CRM, we had copied our Plug-in dll file and other dependent .dll files in the following path below

C:\Program Files\Microsoft Dynamics CRM\Server\bin\assembly

on the machine where CRM was installed and as well as CRM services were running and SQL Server was present.

So during deployment to PROD, we copied our .dll files in the same path of the machine which was Application server where ONLY CRM was installed. And as mentioned earlier, due to the distributed server setup, their SQL server was at one machine and CRM services were running at Back End Server machine. At first, we only copied our dll files in Application server machine in the same path as above and registered the plug-ins and its steps in Application server machine.

But we faced the issue from asynchronous workflows in Production Environment as explained above.

Later after some research, we found that as CRM is distributed on multiple servers so we will need to copy the dlls in Back End Server machine too where CRM services were running. So we first copied dll files to the path mentioned above in the machine where CRM is installed, which is Application Server. And then repeated the same task as above i.e copied the plug-in dll and dependent other dlls in the path of the machine where CRM services are present, which is Back End Server in our case. And then we registered the plug-in the CRM installed machine.

Woah! It worked and resolved our issue.

 If you try to copy the dlls in the CRM services installed machine AFTER registering the plugin, then the issue will still be there. In such cases, you may need to do an IISRESET

(Note: I didn’t do it as it was a Production environmentJ)

 So the safe option is to make sure you copy dlls in both servers first and then register plug-in.

NOTE: If there’s no “assembly” folder in the bin folder of Server folder of Microsoft Dynamics CRM in the machine were CRM services are installed, then create one and copy dlls.

Hope this Helps!

Copy_clone Dynamics 365_CRM Records

from Microsoft Dynamics 365(CRM) Tips and Tricks http://bit.ly/2DiTzDK
via IFTTT

Announcing Maplytics release for Dynamics 365 v9.0 and the new app for mobile & Tablets

Microsoft Dynamics 365 v9.0 brings some of the most awaited UX enhancements, extensibility, and app platform enhancements and the new Unified Interface framework that not only makes the application faster but also improves the user experience across devices.

We have been working on a comprehensive Maplytics solution for Dynamics 365 v9.0, and we are excited to announce the Maplytics release for v9.0.

With this release, our core focus was to utilize the Unified Interface framework and the capabilities it opened up for mobile and tablet client. Yes, Maplytics, your favorite Maps Integration with Dynamics CRM now supports the cool new Dynamics 365 v9 and also works within its new mobile and tablet app.

Announcing Maplytics release for Dynamics 365 v9.0 and the new app for mobile & Tablets

The v9.0 release brought some much needed unified interface refresh for the Dynamics 365 App for Phones and Tablets, and we are pleased to inform users that Maplytics is now available on Mobile/Tablet devices as well. Organizations can now utilize the location-based business insights from their Dynamics CRM data anywhere & anytime across multiple devices!

We have received a lot of inquiries about the mobile capabilities, and one of the most asked questions was to find nearby customers around the current GPS location of the mobile device. Manually entering the current location on the small screens of mobile devices when they were on the field was cumbersome for users and most of the time users didn’t even know the exact address!

With this new release, Maplytics simplifies the process of finding the user’s current location (GPS location). Now users just need to click on the current location button, and Maplytics will locate the current GPS location of the user and allow them to perform Radius Search right on their mobile devices!

Announcing Maplytics release for Dynamics 365 v9.0 and the new app for mobile & Tablets

You don’t need another app, Maplytics work within the new Dynamics 365 App for Phones and Tablets. The user just needs to add Maplytics Dashboards to their existing App on the Dynamics 365 UCI framework.

To access Maplytics from Dynamics CRM App, Choose CRM Hub > Dashboard > Maplytics Detail Map.

Get started with Maplytics and be productive on the go! Download your free trial for Dynamics 365 Customer Engagement v9.0 today!

from Microsoft Dynamics 365(CRM) Tips and Tricks http://bit.ly/2mdwoAo
via IFTTT

%d bloggers like this: