Tip #333: Secret reporting parameters

In yesterday’s tip we mentioned the CRM_URL report parameter.

But that’s not all folks.

One of the best things the aspiring report writer can do is to download the RDL for one of the system reports, such as the Account Summary, and look at the RDL in Visual Studio (after adding to a report project). You will see a trove of additional helpful parameters that you can use to make your reports better.

Screenshot 2015-02-25 11.27.03

Parameters like CRM_UserTimeZoneName, CRM_CalendarType, and CRM_FormatDate are very useful to get user time, date, and language settings for your report. While these are not in the SDK (as far as I have been able to tell), they have been documented in sources like this blog post and since they are used in the standard CRM reports, should be considered supportable for your custom reports.

 

Tip #332: Report hyperlinks the logical way

When building hyperlinks to CRM in SSRS reports, there is a right way and a wrong way:

  • Wrong way: hard coding your CRM URL. Do not set your URL to “https://crmserver/….” If you do this use the hyperlink will only work in one environment and will have to be rewritten to work in another environment.
  • Right way: Use the CRM_URL parameter in your report. This makes the report hyperlinks environment agnostic, and your links will work in all environments, even when offline.
  • Wrong way: Using OTC in your hyperlink expression. “=Parameters!CRM_URL.Value & “?OTC=1&ID={“& Fields!accountid.Value.ToString() &”}”” will work, as it calls the Object TypeCode (OTC) of the entity. This never changes for System entities, but custom entity OTC will change when customization is imported into a new environment.
  • Right way: Use the logical entity name in your hyperlink expression instead of OTC. “=Parameters!CRM_URL.Value & “?ID=”& Fields!accountid.Value.ToString & “&LogicalName=account”

Tip #331: What kind of Bing Map license do I need?

Donna “Not Congresswoman Donna F” Edwards sent a helpful tip about how to determine what type of Bing Maps license you need for an on premises deployment of Dynamics CRM.

If you go to http://www.microsoft.com/maps/Licensing/licensing.aspx, it will ask you questions to choose which type of license you need:

binglicense

This page also discusses the scenarios for each type of key: http://www.microsoft.com/maps/create-a-bing-maps-key.aspx

Tip #330: When should you use CRM as a development platform?

Dynamics CRM TipperTime for another mini truck stop, folks. In a recent discussion, Donna “I’m on a boat” Edwards asked

When does it make sense to use Dynamics CRM as a development platform vs. building your own application from scratch?

Shan “Grillmaster” McArthur had a great response:

The best way to estimate the strategic value and/or ROI of using Dynamics CRM as a development platform for applications instead of building your own application from scratch is to assess how much of the application depends on a security model, configurable forms and schema, workflow, and mobile features, and if the data model would naturally fit into the forms/view model of CRM.

An application that has a higher percentage of these features and a close fit to the CRM UI model will have a very high productivity ratio (from building with Dynamics CRM), but if these things are not important and the application does not fit the CRM UI then the ratio would be lower.

Tip #329: Resolve Missing Record Dependencies

The other day after importing a solution into an environment, I started getting error messages when I tried to save a record. The log told me the error was because an entitlement template with ID “2b2ef0de-24b6-e411-80da-fc15b4286d18” did not exist. It seems that somehow my solution had a dependency on this record, and that record didn’t exist, so it couldn’t save the record.

I resolved this issue using the Configuration Migration utility from the CRM 2015 SDK.

  1. In my environment, I created a new entitlement template and saved it.
  2. I then connected the configuration Migration utility and created the schema and exported data for the Entitlement Templates entity.
  3. Extracting the zip file, I edited the data.xml file to modify the ID of the record I created in step 1 to the ID of the missing record.
  4. In CRM I deleted the record I created in step 1.
  5. Finally, I re-zipped the configuration migration package and imported it into my environment.

After doing this, my records could be saved successfully.

Note: This tip will get you past the missing record error, but if the process depends on the specific record having specific properties, you will have to edit the record to set the correct field values. In my case, it was a fluke and the properties of the entitlement template were irrelevant to the process. Caveat emptor, petimus credimus, Lorem ipsum dolor sit amet.

Tip #328: How rollup fileds make charts better

Ever since charts were introduced in CRM 2011, there has been a limit of 50,000 records that could be aggregated via a chart.  This limitation is there for performance reasons, and has been a reason why some users with large data sets have stayed away from using charts.

CRM 2015 introduces rollup fields, which automatically roll up child record data to a field on the parent record. This presents a solution to get around the 50,000 record limit (and make charts with fewer than 50,000 record render more quickly): Create a rollup field on a parent record, then chart the rollup field values.

Tip #327: Listen to the tipsters almost live

If you are ever bored reading and would rather listen to the soothing voices of CRM tipsters, conferences and webinars are the best places to do so. For the conferences such as CRMUG or eXtremeCRM we always put our best tip forward and come out swinging with the selection of the choicest tips. If Joel or George stepped on someone’s toe and we are not allowed to speak, we attend anyway, just in case Seth Godin (that’s right!) cancels his speech and we are invited to rescue the day.

Too busy to attend a conference or, maybe, your boss is a scrooge? Listen to alive tipsters or, if you missed our gig, recorded webinar. If you are not a member of CRMUG community, we strongly encourage you to become one. Membership in this establishment is, to paraphrase one of the credit cards, priceless.

Tip #326: Defaulting to “Existing” Opportunity Products

In Dynamics CRM 2013 and 2015, if you use the opportunity line item (opportunity products) subgrid, when you click the + sign, you get the choice to add an existing product or a write-in product.

Screenshot 2015-02-16 20.35.36

But sometimes you don’t want users to use write-in products. If the users must sell something from the price list, the option to use write-in products presents a potential issue, as it can allow users to create unauthorized opportunity products. That is why some CRM implementers decide to remove the standard opportunity product subgrid and add a custom opportunity product subgrid to the form, or display the Opportunity Products navigation bar item.

In CRM 2013, if you create an opportunity product from the navigation bar or a custom subgrid, the Opportunity Products form will open and the “Select Product” two-option field will default to “Existing.” This makes the product lookup available and the write-in product field disabled.

In CRM 2015, users have noticed that if you create an opportunity product from the Opportunity Product form, the “Select Product” field will now default to “Write-in,” which makes the Product lookup field disabled and enables the Write-in product field.

To change this behavior back to the way it used to work, you can use a business rule. Note the “set default’ business rule action will not apply here, as two option fields naturally have a default value. However, you can force the use of existing products with a business rule that changes “Select Product” to “Exisitng” if “Select Product” equals ‘Write-in.”

Screenshot 2015-02-17 07.14.05

Note that this approach effectively prevents users from ever using write-in products.

Tip #324: Open a record using just ID

Joel recently has explained how to find a record using id. Cute, very cute. Text editors. What’s next, vim?

Want to be a real developer? Repeat after me:

  1. Open CRM in IE
  2. Press F12
  3. Click Console tab
  4. Type Xrm.Utility.openEntityForm("entity name","record GUID")
  5. Press <Enter> and behold

Is this hands down the best method? Let’s see what CRM has to say:
Open CRM record using console