Hosk’s Top CRM 2013 articles of the week 30th May 2014

I have been on holiday this week, so I didn’t have my usual collection of articles but I have cobbled together a few articles that I read last night and some of my previous articles of the week.  I’m in a rush today (still on holiday) so I don’t have time to summarise them

Article of the Week

An interesting look at the new case creation and routing.

CRM 2013 SP1: Case Creation and Routing – The Big Picture

 

 

The Best of the Rest

 

 Dupe Detection on Create/Update Returned to Dynamics CRM 2013…with a bug

 

Optimizing SSIS with Microsoft Dynamics CRM

 

how to install the wave updates to your CRM

 

Microsoft and salesforce.com announce global, strategic partnership

With Salesforce partnership, the Microsoft Dynamics CRM community backlash begins

Building Mobile applications in CRM

Unified Service Desk for Microsoft Dynamics CRM 2013 Released

Tool – Performance Analysis of Logs (PAL) Tool

 

CRM 2013 and the Platform Evolution: Webcast Recording and Slides

 

previous Hosk’s article of the week

his article by Gareth Tucker who has written any blogs this year (come back Gareth we love you) is an excellent run through JavaScript notification and he also has some other good blogs on the new CRM 2013 features

CRM 2013 NEW FEATURES: JAVASCRIPT NOTIFICATIONS

 

Last 4 articles of the week a great article from CRM MVP Adam Vero on why you should use Access Teams. There have been quite a few blogs and a videos on how to use access teams and a quick introduction to access teams but this deep dive from Adam explains WHY you should use access teams. http://blog.crmguru.co.uk/2014/05/16/why-use-access-teams-in-dynamics-crm-2013/

 

 

This weeks article of the week is from CRM MVP Jukka Niiranen who has written an excellent blog on one of the popular scenarios in Microsoft Dynamics CRM and something which people do seem to struggle with.

It’s a very detailed article and goes into great depth explaining the various aspects of recurring workflows.

Dynamics CRM Reminder Workflows Done Right

 

 

It’s not one article this week but four, an amazing Super hero Fiddler 2 tutorial from CRM MVP Scott Durow

 

This is a great blog post about Auto Save, it shows you how it works and ways to interact, turn it off and a few gotcha’s.  This article seems to collate many articles I have read on auto saving into one handy blog post.

All you want to know about Auto Save

Previous Week

https://crmbusiness.wordpress.com/2014/05/23/hosks-top-crm-2013-articles-of-the-week-23rd-may-2014/

If you want more great articles, why not go back and read last weeks top CRM articles again, did you read them?

Hosk’s Top CRM 2013 articles of the week 16th May 2014

if you find reading to difficult today, why not go and watch some CRM videos on my youtube channel

Hosk’s CRM Dev

Hosk’s Top CRM 2013 articles of the week 23rd May 2014

Welcome to another exciting week of Hosk’s Top CRM articles

Hosk Video roundup

 

Article of the Week

a great article from CRM MVP Adam Vero on why you should use Access Teams. There have been quite a few blogs and a videos on how to use access teams and a quick introduction to access teams but this deep dive from Adam explains WHY you should use access teams.

http://blog.crmguru.co.uk/2014/05/16/why-use-access-teams-in-dynamics-crm-2013/

 

 

The Best of the Rest

This is a great article on migration tips, focusing on the database

11 Dynamics CRM Data Migration Tips

 

How to set up soap authentication for CRM Online using JavaScript.  A good example from Jason Lattimer CRM MVP

 SOAP Authentication to CRM Online using JavaScript

 

The CRM SDK update has brought in some refresh tools.  The Plugin Registration tool gets a face lift

Dynamics CRM 2013 SP1 Plugin Registration Tool Revamped!

 

Also in the new CRM 2013 SDK update is the migration tool, this allows you to bring things like duplicate detection rules from one CRM organisation to another, which saves you have to recreate them in each instance.

Dynamics CRM 2013 SP1 SDK – New Tool: Configuration Migration

 

You can add use security roles to filter dashboards

Dynamics CRM Quick Tip – How to Secure Your Dashboards

 

Comparing filter functionality between CRM 2011 and CRM2013

Comparison of the CRM 2011 and CRM 2013 Filter Functionality

 

Nice trick to show you how to colour code tracked appointments in outlook

Color Code Your Calendar for Tracked Appointments in Microsoft Dynamics CRM

 

Hosk CRM MVP questions for Blake Scarlavai

CRM MVP Question and Answer – Blake Scarlavai

 

 

Great Ribbon Workbench tutorial to show you how to add a custom advanced find in the command bar.  Very useful if you are planning to go through

Advanced Find from Form Command Bar in Dynamics CRM 2013

 

Hosk goes through auditing in CRM 2013 and then gives some key facts for the people studying MB2-703 CRM 2013 customization and configuration exam.

CRM 2013 – MB2-703 – Quick Overview of Auditing

 

linking CRM 2013 with Google Analytics – cheeky

http://www.crmconsult.co.uk/using-google-analytics-with-microsoft-dynamics-crm-2013/

 

A new CRM 2013 book is unleashed and available to buy

new CRM 2013 book – Microsoft Dynamics CRM Unleashed 2013

 

Joel Abbot tells you why the new changes in service and case in the spring wave are good and why we should be excited

Service & Case Changes…Small But Mighty! Microsoft Dynamics CRM 2013 – Spring Wave

 

Links to CRM 2013 documentation

CRM 2013 – Information and documentation to get you started in CRM 2013 but no User Guide

 

How you can add bing maps to entities quickly

 Add Bing Maps to CRM 2013 Entities Quickly and Easily

 

Really useful tip form Robert Peledie I had forgotten about.  When importing data into CRM 2013/2011 you have the option to create a new entity and then create new records.

Quick Create Entity in Dynamics CRM 2013 – Custom Country List Example

 

 

Videos

 

Video to show you how to create new entities and records using just a CRM import

Quick Create Entity in Dynamics CRM 2013

 

Hosk shows you how to quickly get the record id (guid) using Chrome and IE in CRM 2013

CRM 2013 – Quick way to get a guid for a record using Chrome and IE

 

A good/long tutorial on loading JavaScript from the CRM 2013 Developer toolkit and then how to debug the files

CRM 2013 – JavaScript tutorial using CRM 2013 Developer Toolkit

 

How auditing works and a few key facts from the Hosk

CRM 2013 – How Auditing works and key facts

 

Previous Week

If you want more great articles, why not go back and read last weeks top CRM articles again, did you read them?

Hosk’s Top CRM 2013 articles of the week 16th May 2014

if you find reading to difficult today, why not go and watch some CRM videos on my youtube channel

Hosk’s CRM Dev

CRM 2013 – How to set up Field Level Security

I have covered all the other aspects of Security in CRM 2013 and now I am left with Field Level Security, which in some ways is apt because this is probably the most strict.

Field level security was a much requested feature when it was added in CRM 2011, probably up there with auditing.

Here is the video walkthrough

Field level security allows you to add extra security around individual fields.  The three security values are

Read

Create 

Update

 

 

Adding Security to a Field

The first rule is, you cannot set field level security for any of the default fields. If you try to the pesky field level security checkbox is disabled.  I’m not entirely sure the reasons for this, the most likely is if you stop people adding values to the default fields then some of the functionality might stop working or the system as whole might not work probably (that is my interpretation of it)

You can only set field level security on custom fields!

So go to record, either create or find a custom field and then enable Field Security

field level 1

If you now look at your custom field on the form then you will see there is a key on the field

field level 2

Publish the changes to the entity and before we add the field to a Field Level Security profile go and have a look at the form, which in my case is the account form.

If you go to the form with a user who has the System Administrator role then you will be able to see the value in field but if you go to that form as another user then you will see some asterisks ****** (even if the field is blank).  The reason all other users see asterisks is because the field is added to field level security profiles (all of them) with the Create, Update, Read values all set to NO.

This means when you add field level security, no users (except System Administrators) will be able to view or edit the field, so you better quickly set it to a field level security profile and add some users.

below is a screen shot for a user who isn’t a System Administrator

field level 3

 

Create Field Level Security Profile

Now we are ready to create a profile.  The order of these steps can catch people out because if you start with Field Level security you might first create your Field Level Security profile and find them blank and then you will wonder how to get fields in there.

Go to Settings –> Administration –> Field Security Profiles

field level 5

 

This will then take you to a list of all the field level security profiles.

Notice the System Administrator is a default team maintained by CRM, although it is possible to add members to the team.

Now edit or create a new field security profile

field level 6

Opening your new field security profile.

If you go to field permission you will see a list of all fields which have field security enabled.

By default the privileges are set to NO

field level 7

 

if you click on one of the fields you can then edit the security

field level 4

The other important thing you need to do is add users/teams to the field security profile (otherwise only System Administrators can view/edit the fields)

field level 9

 

Key Facts about Field Level security for MB2-703 exam

Enabling or disabling of field level security by setting the IsSecured attribute cannot be audited.

System Admin is has all privileges on all field level security fields, the user has a System Administrator field security profile where all values are set to yes and will be for any fields checked for field level security.

Every field enabled for field level security is added to all field level security profiles

when you turn on field level security for a field, it will automatically be added to all Field Level security roles with Read, Create and Update all set to No.

New field level security fields can only be seen by users with the System Administrator role, so you have to go and configure the field level security privileges.

Every field level security profile will include all fields with field level security enabled.

Fields that are ticked for field level security will be added to field security profiles but with Read, Update, Create all set to No, so you must go in to configure

users/teams can be added to more than one field level security profile.

*** asterisks show if a user does not have read access to a field

*** asterisks show even if the field is null/blank

You cannot delete the System Administrator field level security profile

You can only set field level security on custom fields!

CRM 2013 Video – How to Quickly way to get a guid for a record using Chrome and IE

I created a new video on my YouTube channel Hosk CRM Dev and as you can see from the logo I have been a busy CRM bee.

https://www.youtube.com/user/hoskcrmdev

Hosk CRM Dev Bee Trimmed

I highly recommend you visit the channel as there are lots of useful and interesting videos on CRM on things like Plugin Development, JavaScript, MB2-703 CRM 2013 Customization and Configuration study material, CRM 2013 Tool Reviews, quick tips and other stuff.

The video shows you how to get the guid from opening an account record and then getting the JavaScript debugger up and then getting the guid in both Chrome and Internet Explorer.  Below is the JavaScript I used

Chrome

Xrm.Page.data.entity.getId()

Internet Explorer

frames[0].Xrm.Page.data.entity.getId()

 

 

 

CRM MVP Question and Answer – Blake Scarlavai

This weeks MVP is Blake Scarlavai from Chicago and this is what Wikipedia tells me about Chicago (Wiki doesn’t tell us anything about Blake!)

Chicago (Listeni/ʃɪˈkɑːɡ/ or /ʃɪˈkɔːɡ/) is the third most populous city in the United States, after New York City and Los Angeles. With 2.7 million residents,[1] it is the most populous city in both the U.S. state of Illinois and the American Midwest. Its metropolitan area, sometimes called Chicagoland, is home to 9.5 million people and is the third-largest in the United States.[2] Chicago is the seat of Cook County.[a]

The name “Chicago” is derived from a French rendering of the Native American word shikaakwa, translated as “wild onion” or “wild garlic”

 

Blake is one of the brand new shiny CRM MVP’s, he only burst out of the MVP egg on April 1st 2014.  So in MVP terms he is merely a new born baby and here he is

 

His MVP bio is rather short

About bscarlavai

CRM developer for 6 years since CRM 3.0 working at Sonoma Partners

I can’t find much on Blake  so lets just move onto the Q&A

 

Thanks for Blake for answering my questions, greatly appreciated

If you want to read previous CRM MVP Q&A by clicking the link on the header – HOSK’S CRM MVP Q&A

QUESTIONS

 

Name, current job title and social media links please

Blake Scarlavai

Senior Developer / Manager at Sonoma Partners

Blog: http://blog.sonomapartners.com

Twitter: @bscarlav

 

What does an average day at work look like

85% developing or designing for clients and 15% internal (management, meetings, blogging)

 

What different roles/Job titles have you had whilst using CRM

Started as a Developer and moved into a Senior Developer / Manager role

 

What job did you did before you starting using CRM

None.  Almost 6 and a half years ago I graduated college and came straight to Sonoma Partners to develop for CRM 3.0/4.0 at the time.

 

What was the first version of Microsoft Dynamics CRM you worked with and how long have you been using Microsoft Dynamics CRM

CRM 3.0, almost 6 and a half years

 

How do you stay up to date with the CRM

Twitter, blogs, TAP program

 

How do you find time to contribute to the CRM community whilst doing your job

Mainly after hours blogging about an interesting/unique topic I found during the day or working on a CRM tool as a side project. I will try to hop on the forums in the morning or at lunch as well to see if I can provide any help.

 

What advice would you give to someone who wants to have a successful career in Microsoft Dynamics CRM?

It is definitely helpful to take the time to learn the product first and the best way to learn is to take a certification or play around with CRM hands-on. As a developer, we typically want to solve everything with custom code but that can be very costly and inefficient.  It would be very valuable to your company or client if you know the capabilities of CRM as you should always try to go native and supported before trying to dive in with custom development.

 

What where your first impressions of CRM 2013 and what do you think now.

First impressions were that it looked great.  I love the flat UI and it is less clicky.  After using it, I think the navigation could use a bit of help but what is always nice about CRM is that it is so flexible that developers can fill the gaps with custom code.  Some MVPs have already done that by providing different solutions to help enhance the navigation.  Convergence also got me excited for the future of CRM 2013.  Functionality like Unified Service Desk and Social Listening look great!

 

What one feature would you add to CRM 2013

More flexibility for Custom Actions.  Custom Actions have a lot of potential but currently they can only be called from custom code. Allowing the ability to call them from workflows or even Portable Business Logic would greatly increase their usefulness.

 

Most annoying feature of CRM 2013

The navigation.  If you’re upgrading from 2011 and you have a lot of navigation items then you will most likely need to re-think them when upgrading to 2013 or build a web resource to help group the navigation items better.

 

You favourite 2 CRM blogs (I have filled the first one in for you)

1.  Hosks Dynamic CRM blog

2.  Besides http://blog.sonomapartners.com of course, I enjoy Jukka Niiranen’s blog .  He provides some excellent and unique content and goes into great detail.

 

Are you doing more CRM projects with CRM online?  Do you think it will all be online in the future

Yes, we have a nice varienty of both CRM online and on-premise projects.  I don’t think it can be all online in the future though, at least the near future.  We have a few clients that can’t be online due to their industry.

 

What is the best tool/solution you have used recently

Scott Durrow’s Ribbon Workbench, it is excellent!

 

What CRM certifications do you have, do you try and keep up to date with CRM certifications

Currently only CRM 3.0 but I am looking forward to completing the 2013 exams.

 

How important is it to have good business analytical skills working with Microsoft Dynamics CRM.

Very important.  Either you or someone on your team needs to be able to understand the business and know how to design CRM to fit the needs.

 

How useful is it to have programming knowledge to become a good Microsoft Dynamics CRM Professional?

I don’t think it is necessary to be a good CRM Professional but more than likely, someone on your team will need to have some development knowledge to have a successful CRM project.

 

What knowledge/experience do you have with software/systems which integrate with Microsoft Dynamics CRM e.g. (sharepoint, SQL Server, Scribe, Etc)

I’ve done many SharePoint integrations and I have colleagues with expertise in SQL Server and Scribe to help me out in those areas.

 

How often do you travel as a Microsoft Dynamics CRM Professional?

Depends but usually only 15% of the year.

 

Can you see yourself not using CRM in your career in the future

Sure, who knows what will happen in 20 or even 10 years but I do think CRM can keep me busy for a really long time.

 

What is favourite part of being a CRM MVP

I’m not sure yet, today’s my first day!  But I’m looking forward to getting to know the other MVPs better and getting closer to the product team.

 

What are your hobbies outside of CRM

Developing, video games, movies, and traveling

 

What was the last book you read and what was the last film you watched

Book – A Storm of Swords

Movie – The Grand Budapest Hotel

 

Has CRM ever got you in trouble with your partner/family.

Maybe a few times doing some late night hackathons while trying to release a CRM tool.

Have you friends ever told you to stop talking/tweeting/blogging about CRM? What does your partner/family member(s) think of CRM

Sometimes but they are glad I am passionate about something.

 

Tell me something interesting/unusual about yourself

In this day and age, I think it is pretty unusual that I’ve been at one company for almost 6 and a half years!  That’s just how great Sonoma Partners is!

P.S. – we’re hiring!  🙂

 

Who is the first CRM MVP you remember reading/seeing

Besides my colleagues Mike Snyder and Jim Steger, I had the honor of meeting Shan McArthur at the BUILD conference in 2011.

 

Tips for someone who wants to become a CRM MVP

The nice thing is that there isn’t one defined path and it is flexible based on your expertise.  I think the easiest first step is to get on twitter and start a blog as well as join your local CRMUG and browse the forums to see if you can help.  From there you can gather speaking ideas for conference sessions or webinars or as a developer, build some free custom tools/utilities.

Quickfire questions (choose one option and no explanation)

 

Steve Jobs or Bill Gates

Bill Gates

 

Javascript or .NET

Javascript

 

Internet Explorer/Chrome/Firefox/Safari

Chrome

 

Wine/Beer/Soft Drink

Beer

 

Certifications or Use CRM

Use CRM

 

twerking or tweeting

tweeting

 

books or ebooks

books

 

save or autosave

save

 

OnLine or On Premise

on premise

 

Windows 7/Windows 8/Linux/Mac/Other

Windows 8

 

work from home or work from office

both

 

Miley Cyrus or Billy Ray Cyrus

neither

 

Vinyl/CD’s/MP3’s/Subscribe

subscribe

 

Zero Inbox/Overflowing Inbox

zero

 

Early Bird/Night Owl

early bird

 

Do Today/Do Tomorrow

do today

 

CRM Developer/CRM Consultant

crm developer

 

Hot Weather/Cold Weather

hot weather

 

Half Full/Half Empty

half full

 

CRM 2013 – MB2-703 – Quick Overview of Auditing

Auditing was added to CRM in version CRM 2011, it was a good move from Microsoft because this was a much requested feature and in CRM 4 it was mainly done using a auditing plugin.

Auditing is one of the straight forward features in Microsoft which does a good job of just working, doing what you need and rarely going wrong.

Auditing is set at various levels

Global settings – do you want to audit

Entity level – what entities do you want to audit

Field Level – what fields on the enabled entities to Audit

You can also audit users, when they log into CRM, when security roles are assigned to the user.

The auditing functionality can be found by going to

Settings – Auditing

auditing 1

Then you can click Global Audit settings

auditing 2

This allows you to start auditing, notice there is also a section for user auditing.

User auditing can be turned on or off, you can change what is audited.

Enabling auditing in the common areas is a way to turn auditing on for groups of entities and fields.

Once you have turned on auditing you can then choose to audit individual fields

auditing 3

Auditing Table

After you have enabled auditing all the auditing changes will be  held in the audit tale in CRM Database.  It will store the user who triggered the event, what type of event and the date of time.

Auditing Key Features:

Any entity can be audited

if auditing is not enabled at organisational level, it doesn’t matter if auditing is turned on at an entity level, nothing will be audited.

audit logs are partioned every 3 months.  These can be  deleted in the audit log management screen

User has to have the View Audit History privilege

when you turn on auditing for an entity, all the available fields are enabled for auditing

Some System fields are not applicable for auditing

  • CreatedOn
  • CreatedBy
  • ModifiedOn
  • ModifiedBy
  • Owning Business Unit
  • Owning User
  • Customer AddressId

To see a detailed list of is audited go the CRM SDK Auditing Overview

CRM 2013 – Information and documentation to get you started in CRM 2013 but no User Guide

A user posted on the CRM forum a question asking  if there was a CRM 2013 handbook

Now there isn’t a handbook that’s for sure but there is quite a lot of information but it’s in separate locations and a bit confusing as to what you will need.

 

So there isn’t a CRM 2013 user guide but what have got

Microsoft Dynamics CRM 2013 and Microsoft Dynamics CRM Online Implementation Guide

 

 

Microsoft has a CRM customer centre which is a great place to start and this has ebooks, videos and online articles to help get you started and I will admit it’s not a PDF you can print out but really once you have got use to CRM I don’t think you would need to print it out and think of the tree’s people

http://www.microsoft.com/en-us/dynamics/crm-customer-center/default.aspx

CRM Customer service centre

and in there they have some videos and ebooks/pdfs and top tasks

www.microsoft.com/…/get-started-best-bets.aspx

they do have a special section for ebooks, although they are more like short guides rather than a book

http://www.microsoft.com/en-us/dynamics/crm-customer-center/ebooks.aspx

CRM 2013 eBooks

 eBook: Bring in your contacts

 eBook: Start working in CRM

 eBook: Business processes

 eBook: Change a business process

 eBook: What’s changed in this version?

There is the Training and Adoption kit for CRM 2013

http://www.microsoft.com/en-us/dynamics/crm-customer-center/training-adoption-kit-for-microsoft-dynamics-crm-2013.aspx

which seems to show the same details in a slightly different way.

If you want a more detailed list of Dynamics CRM Help and Resources the this link is pretty good

http://rc.crm.dynamics.com/rc/2011/en-us/Dynamics%20CRM%20Help%20and%20Resources%20Datasheet.pdf

OR you have these links

Find everything you need to know to manage the system every day

Administration Guide

Get info about planning and deploying Microsoft Dynamics CRM

Implementation Guide

Customize Microsoft Dynamics CRM to match your business needs

Customization Guide

Get info designed for IT pros who administer Microsoft Dynamics CRM

CRM IT Pro Center

Get developer resources and see sample code

CRM Developer Center

Finally, you want a book, here’s a book (sort of, a website really)

there is this a free online book from powerobjects has a good mix of basic stuff and some CRM admin

crmbook.powerobjects.com

Hosk’s Top CRM 2013 articles of the week 16th May 2014

I started last week mentioning some cheeky scamp questioning my use of the word Hosk and how ridiculously this was to say such a thing to the Hosk.

I will say 99 percent of the comments I get on my blog are very useful and constructive, usually pointing out something I have missed or mentioned incorrectly (thanks CRM Master Adam Vero) or usually offering some extra piece of information.

So this week I have received some messages of love for the blog and I thank everyone for that.

it’s always good to tell someone they are doing a good job, make that your aim today.

It’s good to know people like the Hosk’s Top CRM articles and it’s good to know I can get the benefit from lots of great articles written by other people, on the plus side I am promoting their brilliant articles here, so everyone is a winner

I also had my highest number of views in a day this week

Tuesday, May 13, 2014

Views: 1,856
Visitors: 1,068

Views per Visitor: 1.74

1112 came from Google searches.

if you want to a summary of the articles watch the video

Article of the Week

This an old article but one I bumped into this week.  I was making a JavaScript tutorial video and then I was trying to work out how to put up a form level notification and a field level notification.  Of course once you have mastered putting up the notifications you quickly realise you need to work out how to take them down again.

This article by Gareth Tucker who has written any blogs this year (come back Gareth we love you) is an excellent run through JavaScript notification and he also has some other good blogs on the new CRM 2013 features

CRM 2013 NEW FEATURES: JAVASCRIPT NOTIFICATIONS

 

 

The Best of the Rest

Good article comparing Owner Teams to Access teams, it’s a summary of the white paper written by Microsoft.
Microsoft Dynamics CRM Owner Teams vs Access Teams

 

Some tips for those people studying for the CRM 2013 customization and configuration exam – MB2-703.  A few last minute study notes

Microsoft Exam MB2-703 – CRM 2013 Customisation

 

The Hosk’s weekly integration of a CRM MVP

CRM MVP Question and Answer – Demian Adolfo Raschkovan

 

How to change color on text fields in CRM 2013, it’s unsupported but that doesn’t stop customers wanting it  Just tell them no it cannot be done.

but if you really need to do it read the article below.

Change color for text fields : Dynamics CRM 2013

 

Hosk article with some JavaScript I wrote to validate UK mobile phone numbers using the rarely remembered Regex

CRM 2013/2011 – Regex for JavaScript mobile phone validation

 

Good article for anyone who has setup and Administer CRM online, a list of tasks you are going to have to do with links to resources to help you.

Administration Guide for Microsoft Dynamics CRM 2013 and Microsoft Dynamics CRM Online

Niiranen 

CRM MVP Jukka Niiranen shows how to visualize goals on a windows phone, he even moved jobs so he could use the software for free.

Visualizing Your Progress with CRM Goals

 

if you have sitemap issues after upgrading in CRM 2013 then read this blog and it might help you find some solutions

Sitemap Issues after CRM 2011 Import into CRM 2013

 

CRM MVP Larry Lentz puts Access teams in a nutshell and shakes them all about

CRM 2013 Access Teams in a Nutshell

 

A review of a new tool for CRM 2013 which will create Early bound class for you with the excellent feature of create enums for your optionsets.

CRM 2013 Tool – CRM Early Bound Generator

 

Comparing FetchXML with SQL script in SSRS reports

Using FetchXML versus SQL script for writing Microsoft Dynamics CRM SSRS custom reports

 

how to clear a field using business rules, sometimes clearing things in CRM isn’t obvious

CRM Quick Tip – Clear A Field Using Business Rules

 

Sub grids can act weird in CRM 2013 but it’s by design, learn why

Sub-grid Add Action Behavior in Dynamics CRM

 

Things won’t be supported in the next release, check out what

Important information about supported configurations in the next release for CRM

 

things to think about when move business rules

Moving CRM 2013 Business Rules with Static Values from Development to Production

 

Some tips for those people studying for the CRM 2013 applications exam.  A few last minute study notes

Microsoft Exam MB2-700 – CRM 2013 Applications

 

Tools to help you copy data between CRM instances

Copying Data from one Dynamics CRM Instance to another

 

Some development done by the Hosk with Dialog’s and a custom workflow

CRM 2011/2013 Dialog’s and Custom Workflow example

 

video

 

A great video from CRM MVP Richard Knudson and how sub grids work in CRM 2013

Taming Dynamics CRM 2013 Sub-Grids with CRM MVP Richard Knudson

 

You have probably heard about CRM Gamified, well have a look at what it is here

Ignite Microsoft Dynamics CRM with a Game Showcase [VIDEO]

 

These are Hosk’s videos

A review of the CRM Early bound generator tool and a very quick look at using the early bound file

CRM 2013 Tool – Video Review – CRM Early Bound Generator

 

I created a dialog and custom workflow and I talk through the process

CRM 2011/2013 Dialog’s and Custom Workflow example

 

A video going through the process of creating Access team and access team template and bit of information about access teams

CRM 2013 – MB2-703 – Access Teams and Access Team Templates 

 

 

If you want more great articles, why not go back and read last weeks top CRM articles again, did you read them?

https://crmbusiness.wordpress.com/2014/05/09/hosks-top-crm-2013-articles-of-the-week-9th-may-2014/

https://crmbusiness.wordpress.com/2014/05/02/hosks-top-crm-2013-articles-of-the-week-2nd-may-2014/

if you find reading to difficult today, why not go and watch some CRM videos on my youtube channel

Hosk’s CRM Dev

CRM 2013 – MB2-703 – Access Teams and Access Team Templates how to use them and key facts

A new feature in CRM 2013 is Access Teams.  For those people studying for the MB2-703 – CRM 2013 customization and configuration exam, you will need to know the difference between access teams and Owner teams.

I personally have not understood the real benefit of Access teams and access team templates, I understood it was an quick way to share individual records but I wasn’t sure how this was different to the current sharing functionality.

First I will go through the Access Teams functionality and then we will focus on the differences

I will also mention Microsoft have a very good white paper on Access Teams which you can download by going to the link below

http://www.microsoft.com/en-gb/download/details.aspx?id=41190

Before I went through sharing and teams in the previous blog\video which you can see using the links below go through more tradition teams and sharing

Blog – CRM 2013 – MB2 703 – Manage user access, Teams and sharing

video – CRM 2013 – MB2 703 – Manage user access, Teams and sharing 

 

Access Teams And Access Team Template Demo can be seen in the video below

The standard owner team/user functionality allows you to share records and components (views, dashboards) to users or owner teams.

This functionality is very useful but the sharing process is not very visible and can be difficult to manage.  Sharing records is done by an individual user and the only way to see what records are shared and to whom is by going to the record/component and clicking the sharing button

access team1

 

Access Teams and Access team templates are a method to share permissions and records, which is easier to manage, quicker to add/remove users/teams because Access team templates will applying a standard set of privileges (read, write, delete, append, append to) rather than having to set this up for each individual user/team.

An overhead  of Owner Teams and sharing is they write records to the POA (Principal Object Access)  table and this may eventually can result in performance overhead.  It should be noted that sharing records with teams is a lot more efficient than sharing records with individual users because it only writes less records to the POA table (for the team) rather than each individual user.

 

 Enable the entity

Access Team templates are enabled on an entity basis and you have to enable Access Teams on the entity in the communications and collaboration as you can see below on the screen shot.

access team2

Once you have ticked the access teams check box, save and publish (I don’t think you have to publish but just to make sure).

 

Create your Access Team

Go to SETTINGS –> Administration –> Access Team Templates

Click the New button

You now have to create you team name, specify the entity the Access Team will work on and the access rights

access team3

 

Now the next step is not straight forward, when I say that I don’t mean it’s difficult but I do mean most people would never guess what to do next.

Add the Access Team sub grid to the form

You need to customize the form of the entity you want to add the Access Team Template to and in my case it’s the account form

You need to add a sub grid to the form

Records – All Types

Entity – Users

Default View – Associated Record Team Members

Team Template – Hosk Account Access Team – this is the team template I created in the step before, yours is probably called something different.

access team4

save and publish the changes

 

now you can go to account records and there will be a sub grid which will allow you to add users to it. These users

access team5

Odd things happen when you add a user to the user grid it will automatically create an Access Team but the odd things is you can’t view this team in the Teams section in Administration even if you select All Teams or Access Teams.

The only way to view the teams is to create an advanced find, search for Teams and choose of type Access.

You will then see some odd teams with Guid names

access team6

if  you click on one you can then view the details.  So you will get a new team for each entity and access template type.

To help identify the different teams you can put something in the description

access team7

You can also add and remove members in this screen.  If you remove all members the team will disappear until you add another user to it.

 

Facts and stats about Access Teams, the bits below are useful for those study MB2-703

  • You can more than one Access Team template for each entity
  • The default number of access teams templates for each entity is two
  • The number of access team templates you can have for each entity is controlled by the MaxAutoCreatedAccessTeamsPerEntity deployment setting.
  • MaxEntitiesEnabledForAutoCreatedAccessTeams deployment setting has a default value of 5.  This controls the number of entities it’s possible to enable for auto-created access teams.
  • You can change the MaxEntitiesEnabledForAutoCreatedAccessTeams , MaxAutoCreatedAccessTeamsPerEntity  only on Premise installations and you cannot edit them for Online.
  • A system generated Access Team isn’t created for each record until you add a user to the sub grid on the entity.
  • if you delete the team, this is the same removing all the members in the sub grid on the record.
  • if you change the access rights on Team Template this will only change the access right to new entity records/access teams.  Any records already created will use the previous set of privileges.
  • Access teams with Share access right ticked will mean any user who is in access team will be able to add (share) others to the access team for that record.
  • Users cannot grant privileges they do not have.  So a user can only add new members to an access team where the access team template has create privilege only if that user has the create privilege for the entity.
  • Access Teams created automatically by adding users to them are not shown in the system team views
  • Access Teams created automatically can be seen by doing an advanced find and select Team Type = access
  • Access Team created automatically have the is system managed field set to true
  • Access Teams can be un ticked on an entity (unlike Queues)
  • If you want to delete a Access Team Template you will need to remove all the sub grids using that specific Access Team Template before you can delete it.

Access teams don’t user the POA table

The final import thing about access team is they do not write to the POA (Principal Object Access table).  This table holds all the rules about sharing for users/teams for each entity.  The POV table holds information about sharing and security/access and is read every time a user accesses a record to make sure they have privileges to view and then update/delete it.   A big POA table with lots of sharing of records can in some cases slow down the system.

After reading CRM MVP Adam Vero’s comments it seems access teams do write to the POA table so this isn’t where the advantage of Access teams comes from.  On the efficiency side Teams do write fewer records to the POA table than sharing to individual users.

Owner teams are good when you want to share records to teams and those teams should have their privileges set by security roles.

access teams are good for quick ad hoc sharing of records where the users who will need to use a record may change often.  Access teams allow you to quickly add and remove users.

 

Reading the White paper it has a good summary of the key features

 

Owner Team

  • As teams in Microsoft Dynamics CRM with security roles
  • Can own records
  • Privileges are granted by security roles and change dynamically as the role definition changes
  • Needs to be manually or programmatically created and managed
  • Will be cached in CRM Server when a user accesses the application
  • Can act as resource in service scheduling

Access Team

  • Can’t be granted security roles
  • Can’t own records
  • Accesses records through sharing
  • Sharing privileges are defined by an access team template but don’t change dynamically for existing records if the template changes
  • Won’t be displayed in most team views
  • Can be system managed, directly from the form of the record that it relates to
  • Won’t be cached because it doesn’t derive privilege or ownership checks
  • Can’t be scheduled as a resource in Service Scheduling
  • Not shown in team views as typically used at high volumes

 

CRM 2011/2013 Dialog’s and Custom Workflow example

I had piece of functionality I did at work recently and it had a few interesting parts, so I thought I would blog it down.  You can read the blog or watch the video

The required functionality required the ability to update multiple appointments, in this deployment we have created a new appointment entity called Client appointment but basically I needed to update multiple appointments.

The user wanted to specify a cancellation reason.

I was initial thinking of using a workflow and selecting lots of appointments but because they needed to specify a cancellation reason then this wasn’t an option

With input required a dialog seemed like a good option.

The problem I quickly found was Dialog’s can only be triggered on one record at a time and not multiple records like workflows.

Contact Dialog

So the plan was changed to be run on the contact.  I would have a dialog which ran on the contact entity the user would be prompted for a start date, end date and a cancellation reason.

I would call a Custom Workflow from with the dialog and pass selected values to it and then the custom workflow would do a query, select all the appointments, cancel them and then create a reschedule task and assign it to a reschedule queue.

I usually trigger code changes from plugins and wondered what circumstances would I move that code to be triggered into a Custom Workflow but this a good example.

This code isn’t really suitable to be triggered from a plugin because there isn’t anything being changed/updated or created so there is no natural plugin trigger point.

Thinking about this I can see that within certain workflows and dialog’s is the perfect place to call a custom workflow, particularly when nothing has been updated or modified and you want to trigger those changes and the changes are going to be complex which needs a code to do.  This is a good example because the code needs to retrieve a lot of appointments linked to a contact, this functionality couldn’t be achieved in workflow or definitely not easily.

After re-reading the requirements I noticed we needed to specify a start time and end time and this would also work in a slightly unusual manner.  If the user specified 08:00 to 12:00 with a start date and end date which went over more than one day.  The user wanted the morning appointments to be cancelled for each day specified but the afternoon appointments to be left alone.  This would provide a tricky piece of querying which I will go into later.

In theory this seemed like it would work, so I initially created a skeleton Dialog and a Custom workflow which logged the fields.

 

The first little problem I had was, how to show the time.  The choices I had were text single response, this would involve the user typing in the time, I didn’t like this option because it wasn’t easy for the user and had the potential for them to mistype.

The other option was to create an optionset with an hour value for each hour.  e.g. 01:00, 02:00 etc.  In then end I chose this option.

The user also wanted the ability to not select a time and this would mean they wanted to cancel the whole days appointments.

So I created the the optionSet with a default value of – Full Day and then 01:00 label would have the value of 1, 23:00 would have the value of 23.

 

dialog example

SET THE CORRECT DATA TYPE

One mistake I made at this point was to incorrectly set the Data type to text.  This is a real schoolboy error because once you set this you can’t change it.  So I had set it to text gone through adding all 24 hours and then realizing and had to do it all again, very frustrating.

What is also very frustrating is the fact you can use an optionSet created in CRM, you have to copy the values again.  This means there isn’t any schronisation between the OptionSet in your dialog and entity.  It also means you may have to create the values numerous times in a dialog because you can’t reuse it in a dialog.

In this example I had to create the same OptionSet for start date and end date.  Tedious indeed.

dialog example 1

 

The cancellation reason was the same kind of thing, I had to copy an OptionSet inside CRM and recreate it and give the OptionSet values the same as the values in the CRM OptionSet field, this way I could pass the value into the Custom Workflow and then it could use the value to set the OptionSet.

 

Warning Popup Message

When I did a demo of the functionality to the client, they said they would like a warning to pop up, if the dates specified were within 3 days.  The reason for this is if you cancel appointments with 3 days of today, it’s difficult to reorganize these so users should be certain they want to cancel these appointments.

Sometimes when someone asks you about how to achieve some functionality in CRM, you can be momentary stumped and can’t see how to do it and this was one of those moments.

I couldn’t see anyway to pop up a warning message.

It was only later that I was talking through the problem with the team that the obvious answer came to light.

Dialog’s are made up of pages and on each page you have a one or more prompt and responses.

So if I wanted a warning message all I needed to do was to create a new page, show the information the user had entered earlier in the dialog and ask them to confirm if they wanted to proceed with the changes using an OptionSet with Yes/No.

 

What I did was to check if the start date was greater than three days, if so put a confirmation page but if the start date was less than three days I would add the words warning.

dialog example 2

 

Sensible variable names

This is the same for workflows but when you are adding conditions or adding steps/prompt and responses make sure you use easily understood variable names because later you will need to use these fields to update an entity/pass to a custom workflow so you need to be able to easily understand what each field is.

Here is the Custom Workflow being called from within the dialog

dialog example 3

 

Below you can see the main code for the Custom Workflow, you can match it up with the screen shot above.  The actual code is in this class commonClientAppointment class

 


public sealed class CwaBulkAppointmentStatusChange : CodeActivity
{

/// <summary>
/// Gets or sets Min Wait Time
/// </summary>
[Input("Start Date")]
[RequiredArgument]
public InArgument<DateTime> StartDate { get; set; }

/// <summary>
/// Gets or sets Max Wait Time
/// </summary>
[Input("End Date")]
[RequiredArgument]
public InArgument<DateTime> EndDate { get; set; }

/// <summary>
/// Gets or sets Max Wait Time
/// </summary>
[Input("Start Time")]
[RequiredArgument]
public InArgument<int> StartTime { get; set; }

/// <summary>
/// Gets or sets Max Wait Time
/// </summary>
[Input("EndTime")]
[RequiredArgument]
public InArgument<int> EndTime { get; set; }

/// <summary>
/// Gets or sets Max Wait Time
/// </summary>
[Input("Cancellation Reason")]
[RequiredArgument]
public InArgument<int> CancellationReason { get; set; }

/// <summary>
/// Gets or sets Task Reference
/// </summary>
[Input("Contact")]
[ReferenceTarget("contact")]
public InArgument<EntityReference> Contact { get; set; }

/// <summary>
/// Executes the workflow activity.
/// </summary>
/// <param name="executionContext">The execution context.</param>
protected override void Execute(CodeActivityContext executionContext)
{
// Create the tracing service
ITracingService tracingService = executionContext.GetExtension<ITracingService>();

if (tracingService == null)
{
throw new InvalidPluginExecutionException("Failed to retrieve tracing service.");
}

tracingService.Trace("Entered CwaBulkAppointmentStatusChange.Execute(), Activity Instance Id: {0}, Workflow Instance Id: {1}",
executionContext.ActivityInstanceId,
executionContext.WorkflowInstanceId);

// Create the context
IWorkflowContext context = executionContext.GetExtension<IWorkflowContext>();

if (context == null)
{
throw new InvalidPluginExecutionException("Failed to retrieve workflow context.");
}

tracingService.Trace("CwaBulkAppointmentStatusChange.Execute(), Correlation Id: {0}, Initiating User: {1}",
context.CorrelationId,
context.InitiatingUserId);

IOrganizationServiceFactory serviceFactory = executionContext.GetExtension<IOrganizationServiceFactory>();
IOrganizationService service = serviceFactory.CreateOrganizationService(context.UserId);

try
{

DateTime startDate = this.StartDate.Get(executionContext).ToLocalTime();
DateTime endDate = this.EndDate.Get(executionContext).ToLocalTime();
int startTime = this.StartTime.Get(executionContext);
int endTime = this.EndTime.Get(executionContext);
int cancellationReason = this.CancellationReason.Get(executionContext);
EntityReference contactRef = this.Contact.Get(executionContext);

CommonClientAppointment commonClientAppointment = new CommonClientAppointment();
commonClientAppointment.CancelHPAppointments(service, contactRef, startDate, endDate, startTime, endTime, cancellationReason);

}
catch (FaultException<OrganizationServiceFault> e)
{
tracingService.Trace("Exception: {0}", e.ToString());
}

tracingService.Trace("Exiting CwaBulkAppointmentStatusChange.Execute(), Correlation Id: {0}", context.CorrelationId);
}
}

 

Other interesting bits of code, below I set the start date to add the hours selected in the start time, unless it’s value is zero (which means whole day), which I then use the default time 00:00 and for enddate I give the value of 23:59 (e.g. the whole day)


if (startTime > 0)
{
startDate = startDate.Date;
startDate = startDate.AddHours(startTime);
}
else
{
startDate = startDate.Date;
}

if (endTime > 0)
{
endDate = endDate.Date;
endDate = endDate.AddHours(endTime);
}
else
{
endDate = endDate.Date;
endDate = endDate.AddHours(23).AddMinutes(59);
}

 

The other tricky bit of code was time specified code.  To recap if a time was specified then the appointments between the time should be cancelled on every day specified in the date criteria.  To do this I calculated the difference in days and then looped around that many times and added a day each time I went round  the loop.

e.g.

start date 01/01/2014

end date 07/01/2014

start time 07:00

end time 12:00

 

This would cancel all morning appointments for all the days (01, 02, 03, 04, 05 , 06, 07)

I had two options, I could either create one query with multiple date conditions or I could create one query and then repeatedly call this with the start and end date changed.

I couldn’t quite invisage doing one query so I called the query once for each day in the date range.

List<Entity> bookedAppointments = new List<Entity>();
if (startTime == 0 || endTime == 0)
{
//full days
bookedAppointments = CancelAppointmentsRetrieve(service, hpEntityRef, startDate, endDate, statusCode);
}
else
{
//time specified
int days = calculateDays(startDate, endDate);
int counter = 0;
DateTime loopEndDate = startDate.Date.AddHours(endDate.Hour);
while (counter <= days)
{
bookedAppointments.AddRange(CancelAppointmentsRetrieve(service, hpEntityRef, startDate, loopEndDate, statusCode));
startDate = startDate.AddDays(1);
loopEndDate = loopEndDate.AddDays(1);
counter++;
}
}

if (bookedAppointments != null && bookedAppointments.Count > 0)
{
this.UpdateBookedAppointments(service, bookedAppointments, cancelReasonInt);
}

&nbsp;
<pre>