ADXStudio: Why does not edit link work?

TLDR: To generate an edit URL, the parent page field is required, even if it is only business recommended.

OK, It is not actually too long, the below screen will explain.

Scenario: I have set up everything right, still when I click on a row hyperlink on an entity list to view details, nothing happens, the link is not properly navigating to edit page configured, and the URL is actually current page URL with a ‘#’ at the end. What’s missing?

Found it! The Web page needs to have parent page specified.

manish-screen-20161116165202

Parent Page field is ‘Business recommended’ but if you want to generate URL from a list to edit with this web page, you need a value there.

 

Advertisements

How to use PowerBI in Excel to compare data in two CRM instances

Why?

To compare data between more than one instance. Simple.

Well, it’s not that simple when you have

  1. One instance in CRM 2011 and another in CRM online.
  2. All instances on CRM but the fields of interest are not exposed on form.
  3. Comparing data between non-CRM system and CRM destination or vice versa.

You can always, open records one by one in multiple tabs, have two records in two windows side by side and visually compare but what if the fields are not exposed on form? I would avoid creating custom forms just for this purpose.

You can always, create custom personal views, (ensure they have same column count, order and sorting, and yes, always save advanced find results as personal views because you don’t want to kill your time doing the same thing over and over!) and then again compare two results windows side by side.

With CRM on premise, we had the luxury of running a quick SELECT query to read data in grid and having connected to two instances, we could compare data. Same thing is available in CRMOL with fetchXML queries and XRMToolbox with FetchXML Builder is an excellent tool but still there are two windows and there is lot to be clicked and gone through.

How about opening a file, having two record-sets side by side and just having a quick glance to check everything is fine?

Yes, and here is how you can do that in Excel with PowerBI.

I am using Excel 2016 (From my MSDN downloads) and a CRM 2011 IFD instance and a CRMOL 2015 instance for comparing.

Create an excel file and go to Data > New Query > From Other Sources > From OData Feed. (Note: Data > Get External Data > From OData Data Feed did not work for my instance complaining that the data returned was not of IEnumerable type!)

There is an option specific to MSCRMOL too which essentially does the same

Enter the amazing query builder. Enter your organization OData URL (Here is how to know what it is) and credentials

Now the fun begins, next few steps will tell you how to build the SELECT query. Start with Entity.

If you have loved manipulating FetchXML queries in text editors, you’d like to click that Advanced Editor right now, otherwise please read along.

At first, it loads all columns of sample data (SELECT TOP X * FROM FilteredContact) Here is how you choose columns. I searched for EmailAddress1 and FullName. Now it tries to show all rows. (SELECT EmailAddress1, FullName FROM FilteredContact)

Here is how you filter the data. The same way you’ve been doing in Excel for years! (SELECT EmailAddress1, FullName FROM FilteredContact WHERE FullName LIKE ‘Smith%’)

Again, sorting the data Excel way (SELECT EmailAddress1, FullName FROM FilteredContact WHERE FullName LIKE ‘Smith%’ ORDER BY FullName)

You may want to limit the results to certain number of records only

Now, you can see the progressive building of Power BI query in Advanced editor.

Here is how the query looks like now. Quite progressive! Feel free to manipulate it, keep an eye on the syntax check mark at the bottom, it works!

Here is the query in screenshot for your editing pleasure!

let

Source = OData.Feed(“{REPLACEWITHYOURSERVERURL}/XRMServices/2011/OrganizationData.svc/”),

ContactSet_table = Source{[Name=”ContactSet”,Signature=”table”]}[Data],

#”Removed Other Columns” = Table.SelectColumns(ContactSet_table,{“EMailAddress1”, “FullName”}),

#”Filtered Rows” = Table.SelectRows(#”Removed Other Columns”, each Text.EndsWith([FullName], “Smith”)),

#”Reordered Columns” = Table.ReorderColumns(#”Filtered Rows”,{“FullName”, “EMailAddress1”}),

#”Sorted Rows” = Table.Sort(#”Reordered Columns”,{{“FullName”, Order.Ascending}}),

#”Kept First Rows” = Table.FirstN(#”Sorted Rows”,5)

in

#”Kept First Rows”

Now you can close and load. This essentially runs your query and fills a range in excel spreadsheet as a table. You can select ‘Close and Load in’ to specify the loading cells.


When results are loaded, it looked like this. Great summary!


If you can do it once, you can do it again! Let’ proceed towards comparison. Duplicate the query to manipulate the query.


Now as the query is ready, we need to identify, so let’s give it a meaningful name in Properties.


We just need to point it to a different instance. So, let’s jump straight to the Advanced Editor.


Close and load to a desired location e.g. below previous result set.


Two queries sitting beside.


Here is the final output. You can compare data visually. Save and Close the spreadsheet and re-open


If the queries’ pane is not visible, go to Data > Show Queries

You can add more columns or change the sample size anytime by editing the query. You can get a FetchXML from advanced find views and edit the power BI query in notepad++ with column names from FetchXML , it’s fun!


You cannot ‘Close and Load to’ when editing a query.


When you re-open such saved excel file, you will have to ‘Enable content’ because of the query


Read latest data by refreshing all tables or refreshing selective tables. Press F9 to refresh (or through context menu to selectively refresh the tables, in fact there are about a dozen different ways to refresh the data – manually and automatically – you figure out!)




Further experiments

  1. Duplicate the query with different instance URLs and create a multi-comparison spreadsheet.
  2. Create multiple worksheets (tabs) with different entities within single workbook with all comparisons for a project.
  3. Save and version the query files (I name them *.pbiq for power BI query) and share and version on TFS
  4. Analyse the data above to create pivot tables, charts and further in Excel style!
  5. Share and collaborate on workbook on OneDrive or SharePoint
  6. Explore Power BI Desktop
  7. Look at the beautiful possibilities as Microsoft have presented here.


Create Timer for Interactive PowerPoint Prezos

There are times when you are doing an interactive presentation, you ask a question and you dont know when the answering will finish from your audience, you have a time limit in mind but you don’t want to reveal next slide by PowerPoint automatically change slide after that time.

So, I came up with a quick fix.

  1. Add a circle
  2. Add Entrance > Wheel animation for duration required
  3. Add Emphasis > Fill Color animation for same duration starting with previous

Looks like a loading screen.

Download the below presentation, (because PowerPoint Online Viewer does not render it exactly as the Windows App will do) to see it yourself.

Happy Presenting!

Saving time in Dynamics CRM Navigation

People say time is money and I disagree, because …. you can know exactly how much money you have got and you can recover money once lost! J So, time saved is time made.

So here are my top 10 navigation-time saving techniques. I have been learning, cultivating, using extensively (feel homely with these!) for efficiency with quality, and sharing them at every chance. Of course the whole focus is on CRM Web hence some of these tips are practically applicable in regular web browsing scenarios. I will give examples too.

  1. Saved Password: I love finger print scanners, but saved passwords, sessions, form-autofills, form field suggestions (I often double click on empty textboxes to see if the browser has something to suggest!) help a lot, just move on.
  2. Bowser history: just type few keywords in the address bar and you can get it. You can pick a word from the title as well. Keep your eye on address bar suggestions.
  3. Browser Bookmarks: If you can come to that page three times in a week. Bookmark. I like he smart browser address bars but bookmarks train them for people who like to spend more time on mouse than on keyboard. You may also give an IE bookmark a keyboard shortcut!
  4. URL tweaking for quicker navigation:
    1. I am a big fan of Open forms, views, dialogs, and reports with a URL. Are you?
    2. Well, did you know whe you accidently search on BingIsNotGoogle search engine on a cliet’s default browser with default search engine and you want to switch to Google, all you have to do is to change the word bing to google in url, because com/search?q=manishmistry and google.com/search?q=manishmistry are just one word different!
    3. If you use multiple accounts in gmail, you can just change the number to switch e.g. https://mail.google.com/mail/u/0/#inbox is first user but https://mail.google.com/mail/u/1/#inbox is second.
    4. Gmail conversations have permalinks so if you share an email account with your spouse, you can share these a permalink with him/her
  5. Saved User Views:
    1. ChangeLog views, pick any entity’s public active records view in advanced find window, modify it to remove status filter, add modified on as first column and status as second, add some custom fields to the view, sort by modifiedon descending and status ascending, and name it ‘ChangeLog ~ Active ####s’ Love them! love them so much, I believe, Dynamics CRM should ship them OOB!
    2. Pin your ChangeLog views! Even faster!
    3. Create these change log views as default public views, if client permits!
    4. I also create heaps of custom views for use during product verification tests etc. Always sort these reverse by modified on so what you recently worked on, surfaces up itself!
    5. Save filters as new view! You may not need even to go to advanced find screen.
  6. Special bookmarklets that help me switch environments. Recent examples are take me home and instance-switch. I have a collection of them, that deserve a separate post, and many of the readers already know them, I USE them!
  7. Setting the browser to open new pop ups in tabs instead of windows. Popup windows still annoy me, so I teach my browser not to do it. Also, when in a tab, I get access to URL to use tip#4 above!
  8. Leaving multiple tabs open instead of using same tab for all operations (I usually have a dozen tabs open when doing configuration) : as a side effect of the tip# 7 above, I can come back to the form or screen more quickly than having to navigate to the page.
  9. Purpose based use of multiple browsers and tabs: Login to Admin user in Edge, As Manager into IE, as Agent in firefox, as customer in Opera….CRM supports multiple browsers, why limit yourselves to one, this way, you have plethora of tabs/windows to work with. Initially it is overwhelming (thing juggling :P), but once you get a habit, you will have half a dozen broswers and tens of tabs to work with (think cruise control!). Make sure one of the thing you consider is to kill all browsers/tabs and start over when troubleshooting issues. Browser Caching may hit you like a kangaroo in headlight!
  10. Use of browser (read Google Chrome) profiles to do auto-login: this is another great advantage where you don’t have to remember or login often with test accounts. Everyone deserves a favourite (read ‘pet’) browser, so you choose yours!

 

That’s all for now! Happy CRMing!

Switch CRM instances in instant!

Another post related to bookmarket!

If the crm DEV/UAT/TEST/PRODUCION instances are similarly named, which in most cases are, and all you have to do is replace a few letters to switch to another environment, here is a ‘highly’ customizable bookmarklet that will help you do exactly that.

One smart tip: open a record (think reference data) and switch environment (e.g. DEV to UAT) with this tip, if you can see the same record, that means GUIDs are same and if you use that record in a lookup in a workflow, the workflow will not need a fix for broken reference, when you deploy it to another CRM instance (e.g. DEV to UAT).

Code please:

javascript:window.open(window.location.href.replace("-dev","-uat"));

Happy CRMing!

Take me home! – CRM online bookmarklet

When you are on a Dynamics CRM Online Web page and there is no quick way to go to the homepage, use this bookmarklet in certain scenarios – saving clicks means saving time! You can always create a bookmark to specific instance, but this one is instance independent.

Use below link to create a bookmarklet with drag and drop

⌂ Home ⌂

Code:

javascript:(function(){window.location = this.substring(0,this.indexOf("dynamics.com")+12)}).call(window.location.href)

Popup Code:

javascript:(function(){window.open(this.substring(0,this.indexOf("dynamics.com")+12))}).call(window.location.href)
Any suggestions?