CRM 2013

Quick Create and Quick View Forms – CRM 2013

Posted on

You can configure a quick create form so that users are presented with fewer fields to complete when they first create a record. Doing this helps users to create records more quickly, by leaving some information to be completed later. A quick create form can only contain a single tab that contains three columns with one single-column section in each column. The three sections can only contain fields and spacers (or be left empty).

quick create

 

A user can access a quick create form to create a new record in four ways:
• Click the Create (+) button on the navigation bar, then click the entity that you want to create a record for, as shown in the “Create Records From the Navigation Bar” figure. This “global create” feature is always available so that a user can create a record quickly and then return to his or her work. For example, a user can create a Case to deal with an incoming support issue, and then return to an Opportunity record that he or she is working with.
• At the bottom of a lookup field drop-down list, click the New button to create a new record instead of selecting an existing record. When the record is saved, the new record link will already be completed in the lookup field.
• In a sub-grid, click New (+), click the lookup icon, and then click New instead of selecting an existing record.
• In an Associated View, click Add New <Entity>.

To create a quick create form, follow these steps.
1. Navigate to Settings > Solutions, and then double-click to open the Solution that you want to customize.
2. Expand the entity for which a quick create form is required.
3. Click Forms.
4. Click New.
5. Select Quick Create Form.
6. Modify the quick create form by using the form editor in the way you would configure any other form. Make sure that you remain within the limitations of a quick create form.
7. On the ribbon, click Save and Close.
8. In the solution, click the entity.
9. In the Data Services section, check the box next to Allow quick create.
10. On the ribbon, click Save.
11. On the ribbon, click Publish.

Note: An entity will not use quick create forms unless you also enable the entity property Allow quick create. You can enable the property first, or create the form first. However, you must perform both tasks and the entity must be published before the users can create records using the quick create form. You might have to refresh the Microsoft Dynamics CRM page in the browser for the entity to be displayed in the global create area.

 

Using Bing Maps in Dynamics CRM 2013

Posted on

A Bing Map can be added to a form to display the location of the address of the record. Bing Maps can only be added to the forms of system entities that have a composite address field. The system entities that can display Bing Maps on forms, include the following:
• Account
• Contact
• Lead
• User
• Quote
• Order
• Invoice
• Competitor
When you add a Bing Map component, you must select the address field that will be displayed, for example Address 1 for an Account, or the Ship-To Address for an Order. The Bing Maps feature uses the API of the Bing Maps service to fetch location and mapping information to display in the form.
For customers who use Microsoft Dynamics CRM Online, a connection to this service is included in the User Subscription License (USL) and no configuration is required to use the feature.

For on-premises deployments, you must sign in to the Bing Maps Portal and create an API key. Depending on the size of the deployment, the type of organization that you work for (private sector, education, or government, for example), and whether you have other license agreements with Microsoft that include your use of the service, there might be an additional cost for this service.

Bing Maps Portal URL – http://go.microsoft.com/fwlink/?LinkID=187187

To enable this feature in an on-premises deployment, you must follow these steps.

1. Obtain a Bing Maps API key from the Bing Maps Portal.
2. Open Microsoft Dynamics CRM.
3. In the navigation bar, click Microsoft Dynamics CRM > Settings > Administration.
4. Click System Settings.
5. On the General tab, scroll to the Enable Bing Maps section.
6. In the Show Bing Maps on forms section, click Yes.
7. In the Please enter Bing Maps key field, enter your Bing Maps API key.
8. Click OK.

Bing Maps can now be added to forms for the enabled system entities.

Composite fields – Dynamics CRM 2013

Posted on

Microsoft Dynamics CRM 2013 introduces a new predefined field type for some system entities that is known as a composite field. You cannot modify the behavior of a composite field or add a new composite field. However, you can select whether to use a composite field in your forms or views.

A composite field concatenates the values of multiple text fields together as one text field in the database. You can add a composite field to a form as you would add any other field. The composite field is displayed on the form as a single control that shows the primary fields in a flyout when it is clicked. Many composite fields are already included on the forms for their entities.

For example, the Contact Full Name field appears on a form as a single field. However, when the user clicks the field, a flyout appears next to the field that asks the user for the First Name, Middle Name and Last Name fields separately. When these fields are completed, the user clicks Done and the completed field is displayed as a single control again. In another example, the Account Address 1 field can be displayed as a single field that will ask the user for seven separate fields from Street 1 through Country/Region when the user clicks the Address 1 field.

This approach uses much less space on a form than separate fields and can be easier to read as one item. You can add composite fields to views and forms.

If one or more of the fields that are used in a composite field is set to a field requirement level of Business Required, the composite field will be displayed as required on a record form (using a red asterisk to remind the user). This forces the user to provide a value for the composite field, and when the user clicks the composite field, the flyout will indicate the individual fields that are required.

Composite address fields always have a name with the suffix “_composite”, for example address1_composite or shipto_composite. The fullname composite field on Contact, Lead and User has no suffix in the field name.

CRM 2013 Rollups

Posted on Updated on

Update Rollup 1 for Microsoft Dynamics CRM 2013 is available. This article describes the hotfixes and updates that are included in this update rollup.

This rollup is available for all languages that are supported by Microsoft Dynamics CRM 2013.

Note Update Rollup 1 contains stability and memory-consumption improvements.

http://support.microsoft.com/kb/2891271/en-us

Build number and file names for this update rollup

Rollup package Build number File name (32-bit editions) File name (64-bit editions)
Microsoft Dynamics CRM 2013 Server 6.0.0001.0061 Not applicable CRM2013-Server-KB2891271-LangID-amd64.exe
Microsoft Dynamics CRM 2013 for Microsoft Office Outlook 6.0.0001.0061 CRM2013-Client-KB2891271-ENU-LangID-i386.exe CRM2013-Client-KB2891271-ENU-LangID-amd64.exe
Microsoft Dynamics CRM 2013 E-mail Router 6.0.0001.0061 CRM2013-Router-KB2891271-LangID-i386.exe CRM2013-Router-KB2891271-LangID-amd64.exe
Microsoft Dynamics CRM 2013 Language Pack 6.0.0001.0061 CRM2013-Mui-KB2891271-LangID-i386.exe CRM2013-Mui-KB2891271-LangID-amd64.exe
Microsoft Dynamics CRM 2013 Reporting Extensions 6.0.0001.0061 Not applicable CRM2013-Srs-KB2891271-LangID-amd64.exe

Update rollup information

Update Rollup 1 for Microsoft Dynamics CRM 2013 is available for on-premises customers.

The following file is available for download from the Microsoft Download Center:

CRM 2013 quick view menu

Posted on

Have you been wondering how to simplify the CRM 2013 menu. CRM quick view menu is the solution.

The Quick View Menu helps you navigate to any location in Dynamics CRM quickly and seamlessly by taking your existing Sitemap and presenting it in an easy to navigate interface

https://crm2013quickviewmenu.codeplex.com/

 

Dynamics CRM 2013 certifications

Posted on Updated on

Microsoft has confirmed that following certifications are available through Prometric from 19th January, 2014 –

  • MB2-700: Microsoft Dynamics CRM 2013 Applications
  • MB2-703: Microsoft Dynamics CRM 2013 Customization and Configuration

Link to partner source –

–          80546 Sales Management – https://mbs.microsoft.com/partnersource/northamerica/readiness-training/student-training-materials/couse80546

–          80545 Customer Service – https://mbs.microsoft.com/partnersource/northamerica/readiness-training/student-training-materials/course80545

–          80542 Customization and Configuration – https://mbs.microsoft.com/partnersource/northamerica/readiness-training/student-training-materials/course80542

–          80539 Installation – https://mbs.microsoft.com/partnersource/northamerica/readiness-training/student-training-materials/course80539

–          80587 Technical Deployment and Customization  – http://dynamics.microsoftelearning.com/eLearning/courseDetail.aspx?courseId=445874

–          80588 Functional Application – http://dynamics.microsoftelearning.com/eLearning/courseDetail.aspx?courseId=445916

On e-learning –

http://dynamics.microsoftelearning.com/catalog/default.aspx?view=catalog&filterView=basic&productFilter=Microsoft%20Dynamics%20CRM%202013&productFilterDisabledValue=&seriesFilter=def-0&seriesFilterDisabledValue=&collectionFilter=def-0&collectionFilterDisabledValue=&searchAction=filter&sortColumnId=&sortOrderAscDsc=&pageNumber=

Custom indexes in CRM Online

Posted on

A little known secret for CRM Online users and a good reminder from Daniel Cai. If you’ve added additional search fields to your Quick find or other views, the underlying entity contains a large number of records, and the response time is slow, you might need a custom SQL index added to improve the performance. While administrators of on premises deployments of Dynamics CRM can add SQL indexes as needed, there is no direct access to CRM Online database. The good news is that Microsoft Support can add required database indexes for you. Just open a support ticket and make the request (of course, you’d better do your homework and be sure that the index will solve the issue and not leave database performance unaffected or, worse, slow down your CRM)

Source – http://crmtipoftheday.com/2013/12/24/custom-indexes-in-crm-online/

Code validation before upgrading to CRM 2013

Posted on

It is important to validate your current CRM system before upgrading to CRM 2013. Be sure, to run the CRM 2013 Custom Code Validation tool (available on codeplex)

http://www.microsoft.com/en-nz/download/details.aspx?id=30151

It will detect issues in the custom web resources that will no longer work after the upgrade is completed. The most common issues that this tool targets are –

  • CRM v4 client SDK calls
  • CRM 2007 end points
  • Common DOM manipulations

Running this tool before upgrade will enable you to identify issues and fix them prior to your scheduled upgrade so that your upgrade process can run smoothly.

13 Business Benefits of Dynamics CRM 2013

Posted on

Here I have highlighted the new features on offer and what benefits they will bring to businesses.

New user interface – The new user interface in CRM is clean and minimalistic. This should help staff be more productive and effective, using the latest form enhancements such as new layouts, replacement of the Ribbon with a minimalist command bar, auto-save, quick-create records, touch-friendly navigation, mapping integration, enterprise social integration and the reduced number of pop-ups.

Process Agility –The Process Agility feature can be used to model any number of business processes so that CRM is tailored specifically for your organisation. For example, new insurance policies versus insurance policy renewals, or a technical issue versus a customer complaint issue. At each stage, you can enforce that certain mandatory fields must be completed before staff can progress to the next stage. All of this functionality is available through an easy-to-use process modelling tool, reducing the dependency on custom development work.

Mobile Apps – The new mobile app allows access to CRM from a Windows 8 tablet or iPad. No additional training for the app is required as the reimagined interface, process agility and business rules are integrated seamlessly across web and mobile devices.

Server side synchronisation of Contacts, Tasks, Phone Calls and Appointments – Staff can directly synchronise information between CRM and Exchange using mobile devices to stay up-to-date at all times without the need for a third-party product or laptop. For example, staff will now see calendar appointments in their phone if they are scheduled to work on a service activity.

Enterprise social integration – Both CRM and non-CRM users can access key CRM information through Yammer. For example, businesses can automatically post to Yammer when an opportunity is opened with an existing customer. Using the Yammer app for mobile and tablet devices, staff can keep track of CRM and other enterprise wide conversations within the context of a social news feed.

Licensing changes – New licensing models offer more granular flexibility for how organisations license the staff who use CRM. Rather than having to purchase the same license for all users, organisations can now also purchase a lower cost license with reduced functionality to suit their staffing needs.

Business Rules – The Business Rules modeller will help reduce the total cost of ownership for your CRM solution. CRM 2013 allows you to tailor the user interface to your specific requirements through the Business Rules modeller. Instead of employing technical staff to build form validation by writing JavaScript code, rules can be modelled by business users in a simple-to-use interface to achieve the same result. Any rules that are defined using the Business Rules modeller will work across desktop and mobile devices.

Real time workflow – Workflows can be run in real-time so that changes to information are displayed instantly. For example, when submitting a Quote for approval the date and time the approval was sent can be updated and shown instantly to the user to confirm the approval was sent successfully. This functionality will reduce the need to write JavaScript and/or custom .NET plug-ins, thus reducing the total cost of ownership for the solution.

Inline editing of grids – Productivity will be improved by the ability to quickly and easily edit and update product information for opportunities, quotes, orders and invoices directly into the grid layout.

Click-to-call functionality – Lync or Skype click-to-call integration means staff can call customers directly from CRM. A phone call activity will automatically pop-up so that you can record the details of the call without having to click anywhere else in CRM. This will help with staff productivity and ensuring key information is being recorded in your CRM.

Access Teams – Businesses can quickly share and collaborate on CRM information outside of the standard security model using pre-defined Access Teams. For example, you can share an Opportunity record if the required products or services span multiple business units within your organisation. This ensures your security model is robust yet flexible at the same time.

Workflow Actions – Standard workflow actions can be combined to create powerful functionality for use in different areas of the application. For example, submission of an opportunity for approval can be created as a custom action using a combination of Update and Assign workflow actions. This custom action can then be called from another workflow, from the command bar via a Web Resource or externally via a web service call. This enables CRM to be integrated with other line-of-business applications more efficiently than before.

Staged upgrade path from CRM 2011 – For organisations moving from CRM 2011 to CRM 2013, there are a number of different upgrade paths to suit different change management and training requirements. Any supported customisations in CRM 2011 will have a supported upgrade path to CRM 2013.

Cheers

JScript Reference for CRM 2011

Posted on Updated on

Often CRM developers are looking for a quick reference guide for common Javascript requirements. Below I have added a comprehensive list of all the important Javascript functions.

1.  Get the GUID value of a lookup field: Note: this example reads and pops the GUID of the primary contact on the Account form

1
2
3
4
function AlertGUID() {
    var primaryContactGUID = Xrm.Page.data.entity.attributes.get("primarycontactid").getValue()[0].id;
    alert(primaryContactGUID);
}

2.  Get the Text value of a lookup field: Note: this example reads and pops the name of the primary contact on the Account form

1
2
3
4
function AlertText() {
    var primaryContactName = Xrm.Page.data.entity.attributes.get("primarycontactid").getValue()[0].name;
    alert(primaryContactName);
}

3.  Get the value of a text field: Note: this example reads and pops the value of the Main Phone (telephone1) field on the Account form

1
2
3
4
function AlertTextField() {
    var MainPhone = Xrm.Page.data.entity.attributes.get("telephone1").getValue();
    alert(MainPhone);
}

4.  Get the database value of an Option Set field: Note: this example reads and pops the value of the Address Type (address1_addresstypecode) field on the Account form

1
2
3
4
5
6
7
function AlertOptionSetDatabaseValue() {
    var AddressType = Xrm.Page.data.entity.attributes.get("address1_addresstypecode");
    AddressTypeDisplayValue = AddressType.getValue();
    if (AddressTypeDisplayValue != null) {
        alert(AddressTypeDisplayValue);
    }
}

5.  Get the text value of an Option Set field: Note: this example reads and pops the value of the Address Type (address1_addresstypecode) field on the Account form

1
2
3
4
5
6
7
function AlertOptionSetDisplayValue() {
   var AddressType = Xrm.Page.data.entity.attributes.get("address1_addresstypecode");
    AddressTypeDisplayValue = AddressType.getSelectedOption().text;
    if (AddressTypeDisplayValue != null) {
        alert(AddressTypeDisplayValue);
    }
}

6.  Get the database value of a Bit field:

1
2
3
4
// example GetBitValue("telephone1");
function GetBitValue(fieldname) {
    return Xrm.Page.data.entity.attributes.get(fieldname).getValue();
}

7.  Get the value of a Date field: returns a value like: Wed Nov 30 17:04:06 UTC+0800 2011 and reflects the users time zone set under personal options

1
2
3
4
// example GetDate("createdon");
function GetDate(fieldname) {
    return Xrm.Page.data.entity.attributes.get(fieldname).getValue();
}

8.  Get the day, month and year parts from a Date field:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// This function takes the fieldname of a date field as input and returns a DD-MM-YYYY value
// Note: the day, month and year variables are numbers
function FormatDate(fieldname) {
    var d = Xrm.Page.data.entity.attributes.get(fieldname).getValue();
    if (d != null) {
        var curr_date = d.getDate();
        var curr_month = d.getMonth();
        curr_month++;  // getMonth() considers Jan month 0, need to add 1
        var curr_year = d.getFullYear();
        return curr_date + "-" + curr_month + "-" + curr_year;
    }
    else return null;
}
// An example where the above function is called
alert(FormatDate("new_date2"));

9.  Set the value of a string field: Note: this example sets the Account Name field on the Account Form to “ABC”

1
2
3
4
function SetStringField() {
    var Name = Xrm.Page.data.entity.attributes.get("name");
    Name.setValue("ABC");
}

10.  Set the value of an Option Set (pick list) field: Note: this example sets the Address Type field on the Account Form to “Bill To”, which corresponds to a database value of “1”

1
2
3
4
function SetOptionSetField() {
    var AddressType = Xrm.Page.data.entity.attributes.get("address1_addresstypecode");
    AddressType.setValue(1);
}

11.  Set a Date field / Default a Date field to Today:

1
2
//set date field to now (works on date and date time fields)
Xrm.Page.data.entity.attributes.get("new_date1").setValue(new Date());

12.  Set a Date field to 7 days from now:

1
2
3
4
5
6
function SetDateField() {
    var today = new Date();
    var futureDate = new Date(today.setDate(today.getDate() + 7));
    Xrm.Page.data.entity.attributes.get("new_date2").setValue(futureDate);
    Xrm.Page.data.entity.attributes.get("new_date2").setSubmitMode("always"); // Save the Disabled Field
}

13.  Set the Time portion of a Date Field:

1
2
3
4
5
6
7
8
9
10
11
// This is a function you can call to set the time portion of a date field
function SetTime(attributeName, hour, minute) {
        var attribute = Xrm.Page.getAttribute(attributeName);
        if (attribute.getValue() == null) {
            attribute.setValue(new Date());
        }
        attribute.setValue(attribute.getValue().setHours(hour, minute, 0));
}
// Here's an example where I use the function to default the time to 8:30am
SetTime('new_date2', 8, 30);

14.  Set the value of a Lookup field: Note: here I am providing a reusable function…

1
2
3
4
5
6
7
8
9
10
11
// Set the value of a lookup field
function SetLookupValue(fieldName, id, name, entityType) {
    if (fieldName != null) {
        var lookupValue = new Array();
        lookupValue[0] = new Object();
        lookupValue[0].id = id;
        lookupValue[0].name = name;
        lookupValue[0].entityType = entityType;
        Xrm.Page.getAttribute(fieldName).setValue(lookupValue);
    }
}

Here’s an example of how to call the function (I retrieve the details of one lookup field and then call the above function to populate another lookup field):

1
2
3
4
5
6
var ExistingCase = Xrm.Page.data.entity.attributes.get("new_existingcase");
if (ExistingCase.getValue() != null) {
    var ExistingCaseGUID = ExistingCase.getValue()[0].id;
    var ExistingCaseName = ExistingCase.getValue()[0].name;
    SetLookupValue("regardingobjectid", ExistingCaseGUID, ExistingCaseName, "incident");
}

15.  Split a Full Name into First Name and Last Name fields:

1
2
3
4
5
6
7
8
function PopulateNameFields() {
    var ContactName = Xrm.Page.data.entity.attributes.get("customerid").getValue()[0].name;
    var mySplitResult = ContactName.split(" ");
    var fName = mySplitResult[0];
    var lName = mySplitResult[1];
    Xrm.Page.data.entity.attributes.get("firstname").setValue(fName);
    Xrm.Page.data.entity.attributes.get("lastname").setValue(lName);
}

16.  Set the Requirement Level of a Field: Note: this example sets the requirement level of the Address Type field on the Account form to Required.  Note: setRequiredLevel(“none”) would make the field optional again.

1
2
3
4
function SetRequirementLevel() {
    var AddressType = Xrm.Page.data.entity.attributes.get("address1_addresstypecode");
    AddressType.setRequiredLevel("required");
}

17.  Disable a field:

1
2
3
4
function SetEnabledState() { 
    var AddressType = Xrm.Page.ui.controls.get("address1_addresstypecode"); 
    AddressType.setDisabled(true); 
}

18.  Force Submit the Save of a Disabled Field:

1
2
// Save the Disabled Field
Xrm.Page.data.entity.attributes.get("new_date1").setSubmitMode("always");

19.  Show/Hide a field:

1
2
3
4
function hideName() {
    var name = Xrm.Page.ui.controls.get("name");
    name.setVisible(false);
}

20.  Show/Hide a field based on a Bit field

1
2
3
4
5
6
7
8
9
function DisableExistingCustomerLookup() { 
   var ExistingCustomerBit = Xrm.Page.data.entity.attributes.get("new_existingcustomer").getValue();
    if (ExistingCustomerBit == false) {
       Xrm.Page.ui.controls.get("customerid").setVisible(false); 
    }
    else {
       Xrm.Page.ui.controls.get("customerid").setVisible(true); 
    }
}

21.  Show/Hide a nav item: Note: you need to refer to the nav id of the link, use F12 developer tools in IE to determine this

1
2
3
4
function hideContacts() {
    var objNavItem = Xrm.Page.ui.navigation.items.get("navContacts");
    objNavItem.setVisible(false);
}

22.  Show/Hide a Section: Note: Here I provide a function you can use.  Below the function is a sample.

1
2
3
4
5
6
7
8
function HideShowSection(tabName, sectionName, visible) {
    try {
        Xrm.Page.ui.tabs.get(tabName).sections.get(sectionName).setVisible(visible);
    }
    catch (err) { }
}
HideShowSection("general", "address", false);   // "false" = invisible

23.  Show/Hide a Tab: Note: Here I provide a function you can use. Below the function is a sample.

1
2
3
4
5
6
7
8
function HideShowTab(tabName, visible) {
    try {
        Xrm.Page.ui.tabs.get(tabName).setVisible(visible);
    }
    catch (err) { }
}
HideShowTab("general", false);   // "false" = invisible

24.  Save the form:

1
2
3
function SaveAndClose() {
    Xrm.Page.data.entity.save();
}

25.  Save and close the form:

1
2
3
function SaveAndClose() {
    Xrm.Page.data.entity.save("saveandclose");
}

26.  Close the form: Note: the user will be prompted for confirmation if unsaved changes exist

1
2
3
function Close() {
    Xrm.Page.ui.close();
}

27.  Determine which fields on the form are dirty:

1
2
3
4
5
6
7
8
9
var attributes = Xrm.Page.data.entity.attributes.get()
 for (var i in attributes)
 {
    var attribute = attributes[i];
    if (attribute.getIsDirty())
    {
      alert("attribute dirty: " + attribute.getName());
    }
 }

28.  Determine the Form Type: Note: Form type codes: Create (1), Update (2), Read Only (3), Disabled (4), Bulk Edit (6)

1
2
3
4
5
6
function AlertFormType() {
    var FormType = Xrm.Page.ui.getFormType();
     if (FormType != null) {
        alert(FormType);
    }
}

29.  Get the GUID of the current record:

1
2
3
4
5
6
function AlertGUID() {
    var GUIDvalue = Xrm.Page.data.entity.getId();
    if (GUIDvalue != null) {
        alert(GUIDvalue);
    }
}

30.  Get the GUID of the current user:

1
2
3
4
5
6
function AlertGUIDofCurrentUser() {
    var UserGUID = Xrm.Page.context.getUserId();
     if (UserGUID != null) {
        alert(UserGUID);
    }
}

31.  Get the Security Roles of the current user: (returns an array of GUIDs, note: my example reveals the first value in the array only)

1
2
3
function AlertRoles() {
    alert(Xrm.Page.context.getUserRoles());
}

32.  Determine the CRM server URL:

1
2
3
4
5
6
7
// Get the CRM URL
var serverUrl = Xrm.Page.context.getServerUrl();
// Cater for URL differences between on premise and online
if (serverUrl.match(/\/$/)) {
    serverUrl = serverUrl.substring(0, serverUrl.length - 1);
}

33.  Refresh a Sub-Grid:

1
2
var targetgird = Xrm.Page.ui.controls.get("target_grid");
targetgird.refresh();

34.  Change the default entity in the lookup window of a Customer or Regarding field: Note: I am setting the customerid field’s lookup window to offer Contacts (entityid 2) by default (rather than Accounts). I have also hardcoded the GUID of the default view I wish displayed in the lookup window.

1
2
3
4
5
function ChangeLookup() {
    document.getElementById("customerid").setAttribute("defaulttype", "2");
    var ViewGUID= "A2D479C5-53E3-4C69-ADDD-802327E67A0D";
    Xrm.Page.getControl("customerid").setDefaultView(ViewGUID);
}