Archive

Category Archives for "Assemble useful apps"

Dynamics 365 Workflow Foundations – Implement This Podcast

 

Show Notes:

The Dynamics 365 Workflow engine, which is the behind-the-scenes part of the process engine, is massively powerful. For host Britta Rekstad, who has presented on how to use Dynamics workflow at multiple conferences, this is an absolutely critical aspect of the platform for new admins to understand.

Co-host Matthew C. Anderson shares about how some of his early experiences in configuring Dynamics 365 involved workflow. This experience also included a spoken agreement to be careful as the workflow engine (used without care) can cause some pain for other users and admins alike.

Discussed on the show

We seem to have different perspectives on using the workflow engine, however, there’s no disagreement on how important and powerful this tool is when implementing Dynamics 365. A very flexible tool, this part of the process engine sits out-of-sight to most users but serves an important role.

What’s on your mind?

Have a question you’d like answered on a future podcast? Submit one by visiting implementthis.org

CRM 2015 – Quick Public Service Announcement For Administrators

Microsoft has released CRM 2015! In related news I thought I was losing my mind while I was setting up a test organization. I couldn’t find the User administration section. It’s been under Settings->Administration for quite a few releases now, but with 2015 it’s no longer there.

CRM2015Admin

Instead, take a look at the Settings->Security section where you will find Users along with some other items that moved: Teams, Security Roles, Business Units, Field Security, and Access Team Templates. Some new features can be found here as well, including Hierarchy Security and Positions. Both of these will come in handy for better accommodating things like selective access for regional or departmental management teams.

CRM2015Security

You can use the following link to sign up for a CRM 2015 online trial today:

http://www.microsoft.com/en-us/dynamics/crm-free-trial-overview.aspx

You can download the Microsoft Dynamics CRM Server 2015 files here:

http://www.microsoft.com/en-us/download/details.aspx?id=45012

Eating our own dog food – Microsoft Cloud Services

I’ve been with Hitachi Solutions America for the last two years and we’ve been through rapid change and growth during that time.  As a professional services organization, we needed to re-situate our infrastructure to be more flexible for our remote teams and expanding global workforce.

Microsoft posted a video yesterday that highlights our success in consolidating on Microsoft Dynamics cloud solutions (Dynamics CRM Online, Office 365, SharePoint Online).  It’s been a team effort but the transition was pretty smooth (as smooth as any core IT change can be).  I tip my cap to all of the people who have helped get us where we are!

Talk with your CRM Administrator Soon: Are your CRM 2011 plug-ins ready for this year’s scheduled application updates?

The MS Modern Style Account form

The MS Modern Style Account form

2013 is a big year for CRM Online and CRM 2011 On-Premise.  Microsoft has an amped-up roadmap with a ton of great functionality on tap.  Some of this has already hit with the December Update for MS Online customers.  One of the most notable is the UI refresh, which brings the “MS Modern Style” that is hitting oh-so-many MS apps.   The visual update is fantastic as it takes great strides to free users from having so many windows open when using the application.  This is fantastic news both on the desktop as well as on mobile devices.  Business leadership (and most users) will expect to receive these benefits soon after they’re rolled out.

So, what’s the catch?

Well, I don’t really want to call it a catch, but this certainly introduces some additional considerations as you look forward with your CRM deployment.  These considerations could have an impact on the user experience and ultimately impact productivity and usability if not addressed prior to upgrading.  There are new wrinkles when it comes to form layout, in-form scripting, and plug-ins.  Today, plug-ins are in my crosshairs.

Historically in MSCRM, users would have to click a Save button when they’ve worked with a record (Save, Save and Close, etc.).  The MS Modern Style form brings the web 2.0 concept of automatically saving a record that is being edited.  From a user’s perspective, that’s mostly good (though an undo button would be nice).  The specific mechanism triggering this save is a timer, which saves saves changes to the CRM database every 30 or so seconds if there have been changes.

Right there, that’s a little interesting.  It’s time-based, not event based.  Sure there’s still a Save button you can click, but if I take 90 seconds to update a record, 2-3 saves will have taken place during that time.  So, let’s consider a plug-in that fires when a record is updated.  In the soon-to-be-old-world, it would have executed one time (when I clicked save).  In the soon-to-be-new-world, it will have executed 2-3 times (or maybe even 4 if I ended up clicking the save button manually when I was done).

This can get you thinking of a handful of questions about existing plug-in design…

  • Are your plug-ins resource intensive?  What if they’re running at 2x the frequency as today (or 3x…4x)?
  • Do any of your plug-ins trigger a chain of events?
  • Do any of your plug-ins rely on the fact that today they only execute when you’re finished working with the record?
  • Do any of your plug-ins rely on something that’s been done to the record via client-side scripting?
  • Do any of your plug-ins do a validation that requires certain groups of fields to all be updated (think address city/state/zip code validation)?

So what do the answers to these questions mean?  They give a picture to how much of an impact some of the 2013 updates may have on your users.  Generally speaking, these aren’t likely to stop the business in its tracks.  That said, it would be unfortunate to introduce performance and user experience issues that cloud the positive impact of the fantastic new functionality users are getting this year.

In a quiet nod to this, the CRM Team Blog recently posted a couple of items.  One detailing the specifics of the save behavior (along with a note that it can impact the items called out above), another about plug-in design.  The posts are quite technical, so if you’re not feeling geeky today you can instead read the following commentary:

The CRM SDK describes plug-ins as “custom business logic (code) that you can integrate with [Dynamics CRM] to modify or augment the standard behavior of the platform”.    This means plug-ins are beyond the platform that MS is responsible for (Read: it’s your problem if it’s not working right).  MS felt like it’s important to post information about plug-in design in parallel with the news about product updates.  Change is a-coming, and it may not play nice with your existing customizations.

Talk with your CRM Administrator about the plug-ins you’re using and assess the type of impact these updates will have.  Most of these issues can be addressed…but remember: plug-ins are written in .NET, which means you’ll need a developer, which means you’ll need regression testing, which ultimately means you’ll need cycles from multiple teams of people.

Now is the time to get the conversation going.

Scripts and the December 2011 Update

I’ve heard a few stories in the wild about some issues with custom JS in online CRM organizations that have recently received the December update.  MS has published a blog post about the same topic, which goes into details regarding script differences between browsers and how to identify potential problem areas with a validation tool they’ve published.

Dynamics CRM Blog – Script Errors After the December 2012 Service Update

Validation Tool from MS

Screenshot of the validation tool from MS

Using Excel to Easily Coalesce Data

Let’s imagine you’re working with a list of Contacts that lists the company that they work at, doing a little clean-up before it gets used.  Only some of the Contacts have an address listed, but they all have a Company address listed.  This needs to be updated so each Contact record has an address.

Raw list with scattered contact addresses

I’ve seen it a hundred times (or in some lists, a hundred thousand times)

In this case, the business requirements are:

  • We need to have one address on file for each contact
  • If we have that specific contact’s address…great, use that
  • If we don’t have a contact’s address, use their Company’s address instead

Doing a simple Copy/paste could be your friend if the list is only a handful of Contacts long…but this can be tedious if you’re looking at dozens (or more).

I was doing something very similar to this for a client recently.  My go-to tool for this is Excel…it really makes this problem simple to solve.  Come to think of it I use this same concept in a lot of different places when doing data prep–so I’ll run with this example, but recognize that the same method can be used elsewhere in Excel.

OK I’m interested, what do I do?

Fortunately, the requirements above give us exactly the direction we need.  We only need one address for each contact, and each row has as either one or two.  We know that one address wins out (the contact’s address) if it’s there.  So from a list standpoint, we need to do the following:

  • Devise a systematic way to determine the correct address
  • Choose the correct address for each contact
  • Eliminate the extraneous data

Accomplishing this isn’t too much work, but it does involve an Excel formula that’s going to look like Greek when you first see it.  We’ll get there in a second, but indulge me for a slight diversion.

When working with a list of data, my best practice in Excel is to keep the source data as pristine as possible.  This means I don’t like to add/delete columns in the original list.  This ends up being important later on…when somebody comes with an updated list, or a slight variation of what rules to use when identifying the desired data.  If you’ve made your changes directly in the original workbook it becomes much more likely that you’ll have to start from square one, whereas my method allows you to more easily sub in new data or change one of the underlying rules.

To accomplish this, I’m using two Worksheets (tabs) in one Excel Workbook (file).  “Raw List” (the raw list of data) and “Final Product” (where our modified version of the data will go).  When you see formulas such as =’Raw List’!C3 that really means this cell should equal the cell C3 in the “Raw List” worksheet.

Hopefully that little explanation will keep this next screenshot from looking like total hoodoo.

Excel Screenshot

Don’t run away yet!

We’re going to use this formula for each address field (Street 1, Street 2, City, State, Zip).  We’re also going to make the assumption that if the “Contact Street 1” field is blank, that it is not a valid address and the Company address should be used (make sure this is a valid assumption based on your situation :)).  This translates to “If the Contact’s Street value is blank, use Company Street, otherwise use Contact Street“.

Adding the visual context in Excel:

Excel Formula Diagram

Sweet, now we’re cooking.  Next, we want to use this same formula for each of the rest of the Address fields.

It looks so purrrrdy….

Note that when we’re checking the subsequent fields like City, State, etc, we’re always checking the Contact Street value.  This is important because we don’t want to use parts of both addresses…we want the whole contact address or the whole company address.

At this point, we’ve done the most complicated part.  The other fields (like name, company name, etc) don’t need a funky formula, they just need to be identified and added as columns in the data set.  You can take some time to review how this is done by downloading the Excel file I worked on, which has all of the formulas preserved on each of the two worksheets.

Great, so what’s next?

From here, there are a few common things that I’ll do as next steps:

  • Save results to a separate file, then save it as a new file.  This is a great way to force only the “final” version of the data is available moving forward.  A basic copy/paste has some problems since the formulas reference the original data set (and would start showing errors).  Below are two common approaches.
  1. One option for doing this is to do a copy/paste values into a new workbook.  This is great when you want to ensure there are no references to the original set of data
  2. An alternative is to copy the entire worksheet to a new workbook (by right-clicking on the worksheet name).  This will also update the formula references to look back to the original file

Note that either of these options is acceptable if the new file will be saved as a .csv file, since Excel will remove the incompatible features (formulas) when you click Save.  A .csv file is great if you want to import the data into Dynamics CRM.

  • Clean up the original workbook, making it less potentially-confusing to the next person to touch it.  Below are a couple of clean up ideas:
  1. Hide the “Raw List” worksheet (tab) so it isn’t selected by accident
  2. Freeze the column headers in the Final Product worksheet by clicking Freeze Panes->Freeze Top Row on the View tab
  3. Protect the list from being accidentally modified by clicking Protect Sheet on the Review tab

Keep in mind, there are many other ways to accomplish this same task.  If there’s another method you’d like to share, feel free to do so in the comments.

Basic List Prep in Excel – Splitting A Full Name into components

While it’s easier to import data to Dynamics CRM using the data templates, prepping that data can take a little work.  One of the most common things to deal with is splitting a “Full Name” from a source file, which needs to be imported to CRM as “First Name”, “Middle Name”, “Last Name”.

Let’s assume the source file uses the format of “[Last Name], [First Name] [Middle Initial]”.  This makes it just a little too complex to use the Text-to-Columns feature in Excel (but note, if you’re dealing with a basic “Last, First” format, keep it simple and use Text-to Columns).

Rice, James P

Easy enough to do by hand…but what a hassle if you’re doing a thousand records or more.

Our solution?  Build 3 simple formulas to handle that manual work.

Excel Formulas

Looks like gibberish, right? Read on for an explanation

Like Billy Blaze, I find it’s easiest if we break things down.

Start with the Last Name (Column C)

We know that the last name starts at the left of the cell:

=LEFT(A2,FIND(“,”,A2)-1)

English:  Grab some characters from the left-hand side of A2.  How many?  One character behind the comma, so go find the comma in A2, then go back one character.

Pluck out the First Name (Column D)

This part is a little trickier, but not too much.  We can’t use the left() function any more since it’s in the middle.

=MID(A2,LEN(C2)+3,LEN(A2)-LEN(C2)-4)

English: Grab some characters from the middle of A2, starting 3 characters after the last name.  How many should we grab? The total length of the Full Name, minus the length of the Last Name, minus four characters (2 spaces, 1 comma, and 1 Middle Initial)

Grab the Middle Initial (Column E)

This one’s the easiest to decipher…

=RIGHT(A2,1)

English: Grab some characters from the right-hand side of A2.  Just 1 this time.

With those three formulas, here’s what we end up with:

End Result

Looks much prettier now.

The rabbit hole goes deeper

When you’re sent a file to work with, it’s pretty rare that names fall into a perfect little “Last, First MI” format.  There’s a few ways to deal with this.  I’ve put together a workbook with this and a few other examples of splitting up full name data, which you can feel free to thieve from me.

  • First MI Last
  • Last, First [optional MI]
  • First [optional MI] Last

These cover a few different methods for carving up the data, but are by no means exhaustive.

Note, it’s important to know your data that you’re starting with.  Take some time to ask some questions:  Are all of the names in the same format?  How should a record be handled if the name is missing?  Is there funky CaPITAlizAtion that needs to be dealt with?  Does anyone have two middle initials, or maybe a space in the middle of their name?  Picking through these issues is often the most time-consuming part of prepping a list of data.

I’m always tempted to try to write some “super formula” that is so smart it can handle any case you run across…but remember, if there are only twenty records where there are two middle initials or a space in their first name, it’s often quicker to do those twenty by hand and use a simpler formula to help out with the rest.  You’ve been warned 🙂

Once you’ve split the name into component parts, you can copy/paste these columns into a CRM data template and import the results!

>