Quantcast
Channel: Hosk's Dynamic CRM Blog : crm 2011
Viewing all 469 articles
Browse latest View live

The rise of Microsoft Dynamics CRM

$
0
0

If evolution really works, how come mothers only have two hands? Milton Berle

Microsoft Dynamics CRM has evolved at a frantic pace in the last 6 years I have been working with it.

The effort and development put into the product means it’s exciting to work with because Microsoft Dynamics CRM is constantly being improved, new features added, new companies purchased and add on’s created.

For people who use Microsoft Dynamics CRM to deliver customer projects it means you need to work hard to keep up

  • Understand how new features work, where and when they should be used
  • Create code correctly, so it can be upgraded
  • Learn new products Microsoft has purchased, ADXStudio, Parature, Field Services, Microsoft Dynamics Marketing, etc, etc.
  • Take Microsoft Dynamics CRM certifications for each version
  • Learn the differences between CRM online and CRM on-premise

I have blogged why it’s important to keep up to date before and the benefits

Should you keep up with releases and how?

Rapid rise

Microsoft had arrived to the CRM game late and launched CRM 1 in 2003 and stuttered along slowly.  The Microsoft Dynamics CRM wikipedia page notes CRM 3 was the first which saw reasonable uptake by customers.

I started working with Microsoft Dynamics CRM 4 released in 2007, which was a good place to start because the previous versions have been described as difficult to work with by colleagues.

Microsoft released a version of CRM Online and CRM 4 saw Microsoft pass 1 million users.

What I have enjoyed about working with Microsoft Dynamics CRM is the speed and breath of change in the product.  During CRM 2011 onwards Microsoft have developed the front end and back end of Microsoft Dynamics CRM at a frantic pace.  It makes working as a CRM professional challenging dealing with the new versions and changes, often leading to upgrades needed all customization to be rewritten.

Looking at the releases it struck me the speed of innovation and releases of Microsoft Dynamics CRM.

In 5 years Microsoft has released 4 new versions of CRM

  • CRM 2011
  • CRM 2013
  • CRM 2015
  • CRM 2016

Screen shots

Looking at the screenshot of CRM 4, makes me feel nostalgic and glad I don’t have to use CRM 4 anymore

CRM 4

Here is the sexy CRM 2015/2016

CRM 2016

CRM 2016 form

The head start Microsoft gave it’s CRM competitors has had moved from challenger in 2007 to leader in 2015.

The post from Leon Tribe on Gartner Trajectories of CRM solutions shows the gradual move from Microsoft Dynamics CRM.  The picture is taken from Leon Tribe’s post in June 2007 was a challenger and the Microsoft Dynamics CRM Online doesn’t even get a mention!

The Gartner Magic Quadrant shows Microsoft Dynamics having both its online and on premise versions in the leader category and recognized as winner in the CRM magazines Market Leader wards.  Microsoft kindly highlight these in their Analyst coverage page, below I have shown two

Gartner Magic Quadrant for the CRM Customer Engagement Center – read report

In recent years Microsoft has focused on improving the CRM online functionality and administrator tools to where the differences in on premise and cloud are negligible.

SalesForce

Microsoft started behind Salesforce but have been catching up the functionality with every release and now the product functionality is similar, it‘s difficult to say there is one clear winner.  The advantages Salesforce has over Microsoft Dynamics CRM is its large customer base, created due to its head start.

Microsoft CRM Professionals view Salesforce as the main competitor to Microsoft Dynamics CRM, for tenders you are competing with Salesforce.  Microsoft made an unusual move in 2015 and partnered with Salesforce, causing confusion in the Microsoft Dynamics community.

I wrote a blog post – Why did Microsoft partner with Salesforce?

Therewere rumours Microsoft was trying to buy Salesforce

I can understand why Microsoft attempted to buy Salesforce

getting rid of the competition

stop wasting money competing agaisnt each other

Create shared services

Microsoft can create products/services to be used by both CRM services e.g. Azure services, Office products, PowerBI, etc.

It‘s the same tactics Resco used when buying CWR mobile CRM activities

Why Resco acquiring CWR’s mobile CRM is important

Microsoft CRM Online is growing

Microsoft is focusing on the Microsoft Dynamics CRM Online version and according this press release, Microsoft CRM is growing fast

Dynamics products and cloud services revenue grew 9% in constant currency with Dynamics CRM Online seat adds more than doubling year-over-year

Cloud solutions are growing in popularity with customers and CRM Online solutions are growing in complexity as developers understand the limitations of Microsoft Dynamics CRM Online and how do you work with them?

Solution architects are improving at designing cloud solutions and integrating with Mobile devices.

Conclusion

Microsoft Dynamics CRM has evolved as a product and the type of CRM projects are changing, there are lots more cloud solutions, mobile devices and portals.

In the future projects could involve machine learning, big data and integration with lots of devices and plugging into the Internet of things.  The social CRM functionality keeps growing in CRM.

With change comes opportunity but take advantage you must be prepared to learn new skills and approach CRM projects differently.

picture from thezoom 


Filed under: CRM 2011, CRM 2015, CRM 2016

CRM 2016 – How to rename the default business unit

$
0
0

Our greatest weakness lies in giving up. The most certain way to succeed is always to try just one more time. Thomas A. Edison

I came across an annoying bug, I couldn’t rename the Default business unit because the parent business unit is mandatory.

History of default business unit renaming

The renaming of business units is a long and extremely interesting subject…..said no one ever.

The default business unit or parent business is automatically created using the name of your organisation.  In CRM 4 I don’t think you could rename any business units.

In CRM 2011 they allow you to rename business units which were not the default

CRM 2011 – You can rename and delete business units

In CRM 2013 (according to my study notes) you couldn’t rename the default business unit in CRM 2013

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

Another interesting fact

default business unit team cannot be re-parented, deleted or renamed and it’s members cannot be modified.

In CRM 2015 you could rename the default business unit, well it’s possible but Microsoft make it difficult for you to do because the parent business is a mandatory field but if you are editing the default business unit it has no parent business unit, which means you can’t save the record.

CRM 2011 forms?

I tried using God Mode JavaScript shortcut but this didn’t work and I’m guessing this might be because this form is an old school CRM 2011 style form?  What is it doing in CRM 2016!

rename business unit 2

You can see the annoying required Parent Business unit field

Solution

There are a few ways to resolve the problem but the easiest way is to go to

  • Settings –> Customization’s
  • Entities –> Business Unit
  • Open the field – Parent Business – parentbusinessunitid

rename business unit

  • Change the Field Requirement from business required to optional

rename business unit 1

  • Save and publish customisations.
  • Change the name of the Default Business Unit – Save
  • change the Field Requirements of the Parent Business field back to required and publish

Mission accomplished

If at first you don’t succeed, try, try again. Then quit. There’s no point in being a damn fool about it. W. C. Fields

 


Filed under: CRM 2011, CRM 2013, CRM 2015, CRM 2016

Thoughts on Microsoft Dynamics CRM Strategy

$
0
0

All failure is failure to adapt, all success is successful adaptation.”
― Max McKeownAdaptability: The Art of Winning in an Age of Uncertainty

Strategy is about shaping the future.  Look at how you can win, where the opportunities are, create actions develop knowledge, skills and resources to deliver the strategy.

Strategy is important because what brought a company success in the past might not work in the future, you must keep evolving at a company.

Successful companies are those who adapt to their changing environments, those who understand the direction of an industry, create and deliver strategies suited to opportunities arising from change.

“Change is inevitable, progress is not.”
― Max McKeownThe Truth About Innovation

Do I need to knowabout strategy

Individuals need strategies to progress, the skills and knowledge you have might not be in demand in the future, you must learn new skills, technologies to adapt to new roles.

You might think I don’t need to know this, it doesn’t affect me, I go to work, do my job and go home at 5.30 but what about?

What technologies will in the next Microsoft Dynamics CRM project, itcould be CRM Online, portal, Azure services, Machine learning, gamification.  Could you deliver this project or will they need to hire someone else?

What are you going to learn next? if you pick one new technology used in Microsoft Dynamics CRM which is it? why did you choose that? is it the best choice?

You are making strategic decision’s daily but if these are not linked with your future vision, you could be investing your time and energy into areas not helping to progress your career.

Plain and Simple

I’m reading the excellent book Leadership:Plain and Simple: Plain and Simple (2nd Edition).  It discusses when John Harper become UK Managing director of Hasbro (a global toy company), when he came in things were in bad shape, losing money, morale and confidence were low.  His plan was to energise and engage the workforce.  He closed the company for a day and they discussed the ideas

  1. Whatisthe future we wantwantandhowgreatcan we be?
  2. How do we play to win and perform at our best
  3. How do we build relationships internally and with customers, so we can deliver the future together as a team.

The questions are direct and decisive, they create a vision of the future and create a strategy to make it happen.  A leader cannot do the work himself, he needs to inspire the workforce deliver the vision.

These quotes highlight the role of a leader and limitation of a leader because without an engaged workforce they have no one to implement the strategy

A leader hasthe visionand conviction thata dream canbe achieved. He inspires the power and energy to get it done.”
— Ralph Lauren

“A leader’s role is to raise people’s aspirations for what they can become and to release their energies so they will try to get there.”
— David Gergen

The book Playing to Win: How Strategy Really Works simplifies strategy to these two questions

  1. Where to play?
  2. How do you win?

Successful companies answers to these two questions seems obvious

Apple

  • High end smart phones and gadgets
  • beautifully designed, easy to use, high quality gadgets

Facebook

  • Social interaction
  • easy to use, different methods

Microsoft and Microsoft Dynamics CRM

To help me understand the questions I would answer the questions if I was head of the Microsoft Dynamics CRM division.  I wrote aboutthe evolution of Microsoft Dynamics CRM in the blog The rise of Microsoft Dynamics CRM

1 – What is the future we want want and how great can we be?

The Microsoft Dynamics CRM strategy filters down from the global strategy of Microsoft – Mobile First, Cloud First.

  • The future for Microsoft Dynamics is Microsoft Dynamics CRM Online.
  • Improve the Microsoft Dynamics service,  redesign the internal design of to incorporate azure’s scalability to improve performance.
  • Improve the mobile functionality to match Resco
  • Microsoft Dynamics CRM act as a hub, linking to many specialist services (Machine learning, Big data analysis), Microservices/app structure.
  • Portals used more, allowing CRM deployments to offer self service portals, contractor functionality and extending CRM to none CRM users.
  • Social CRM to really take off

2.  How do we play to win and perform at our best?

Ask yourself what is Microsoft good at? why do people choose Microsoft Dynamics CRM?  Office Integration, competitively priced, cloud solutions/Azure functionality is world class.  Microsoft are constantly innovating Microsoft Dynamics CRM and surrounding products.

  • Keep improving Microsoft Dynamics CRM
  • Purchase strategic Microsoft Dynamic Solutions/companies
  • Keeping prices cheaper than Salesforce.
  • Microsoft can continue to benefit from improved Azure functionality and an increase in Azure services and data centres.
  • Microsoft must improve their mobile application or buy Resco
  • Strategic purchased of related services.

3 – How do we build relationships internally and with customers, so we can deliver the future together as a team.

Microsoft work hard to embrace Microsoft Dynamics CRM partners and help enable them to sell Microsoft Dynamics CRM (although perhaps more focused on larger partners and enterprise solutions).  The training materials Microsoft offer is pretty good and the Azure training is really good.

Microsoft offer a competitive price for Microsoft Dynamics CRM Online.

Internally hiring the best peoplewhowanttomakeadifference.  Under Satya Microsoft havestarted to innovaterather than copy.   This outlook should be brought to the Microsoft Dynamics CRM division to create innovative new functionality and have a workforce engaged to deliver it.

Hosk’s Dynamic CRM Practise

How would I answer those questions with my virtual Hosk’s Dynamic CRM Practise and what strategy would I come up with.

1 – Whatisthe future we wantwantandhowgreatcan we be?

When implementing CRM solutions I find lots of cautious companies who wary about signing up for the project due to earlier bad experiences with IT projects and failed CRM projects.  There are many companies who have lost confidence in their existing Microsoft Dynamics CRM supplier.

Microsoft Dynamics CRM companies don’t sell products they sell people, processes, technical knowledge and experience (I know companies who create products).

The future  vision is to create a reputation for being an innovative company delivery quality projects, collaborating with the customer.  You want your CRM company to be the best in their sector and who put quality and customer satisfaction at the top.

It‘s difficult to differentiate through price alone, focus on being the best choice to deliver CRM projects for the customers requirements with regards to experience, vision and capability (skilled people, resources).

When a customer buys CRM from your company

  • you know the reason,
  • the staff know the reason
  • the customer knows the reason.

To win business you must have strengths which other companies cannot match.  Pick an area of expertise and become the best at it

2- How do we play to win and perform at our best

The future for Microsoft Dynamics CRM practices is to specialise in an industry or technological service.  The Microsoft Dynamics CRM industry is crowded with lots of companies offering similar services and at similar prices.  Ask yourself why would someone buy CRM from my company?

  • price?
  • experience?,
  • an existing solution?

Most successful Microsoft Dynamics CRM resellers and the ones Microsoft have purchased, they focused on a specific area and become the market leader.

FieldOne – The best Field Services company in the Microsoft Dynamics CRM space (the only one I know to be honest).  They were so good Microsoft brought them, which is an indication you are doing something right.

Parature – Fantastic self-service portal, knowledge base, which can run alone and is slowly (veryslowly) being integrated with Microsoft Dynamics CRM.

FantasySalesTeam – Microsoft Dynamics CRM and Gamefication (Hosk blog –  Is Gamification in a Microsoft Dynamics CRM a gimic?)

Resco – The leading Microsoft Dynamics mobile application/framework (Hosk blog – Why Resco acquiring CWR’s mobile CRM is important)

My strategies

  • Focus on Microsoft Dynamics Online solutions and specialise in delivering complex Microsoft Dynamics CRM projects online. Align skills with Microsoft’s vision – Mobile, Cloud (Azure)
  • Concentrate on delivering FieldOne projects. Field services is a growing marketing with Microsoft Dynamics CRM.
  • Get a head with Azure Machine learning and CRM.
  • Focus on 2 sectors, Create solutions to speed up projects.

3 – How do we build relationships internally and with customers, so we can deliver the future together as a team.

You need leaders, who can create a vision, mission and goals and explain this to the organisation.  Everyone should understand what the company strategy is and it’s goals.

Employees

You need to engage the employees so they will deliver the strategy.  Fully engaged employees not only understand the strategy but add to it with ideas, energy and hard work.  Engaged employees feel valued, listened to and believe they are making a difference, this leads to quality work.

If you think about the difference in amount and quality of work when you were engaged on a project compared to other projects, the difference is huge.

Staff must have the skills/training to deliver projects to high standards, customer satisfaction is vital.  The focus is on quality projects, quality individual performance and constant improvement.  In the Microsoft Dynamics CRM industry you are mostly selling people.  Happy, motivated and engaged in order to deliver great projects.

Team is important in Microsoft Dynamics CRM community, the number of technologies/products and services used in Microsoft Dynamics CRM projects is growing, the team must collaborate, talk, support and share knowledge to deliver quality projects to meet customer expectations and enhance the reputation of the company.

Customers

Great relationships with customers come from delivering projects which meet business requirements and delivered on time.

Conclusion

Writing this article helped me understand I haven’t thoughtdeeplyabout the subject before and my  thoughts and ideas were other people’s or snippets of articles I had read.   I could see some of original thoughts on the subject emerging but more work is needed to come up with a viable strategy for the Microsoft Dynamics CRM industry.  I’m not sure my Hosk CRM practise would have done particularly well with the strategy outlined above.

It‘s difficult to create strategies without understanding the current Dynamics CRM market, identifying where the Dynamics CRM industry is heading and what opportunities are available.

I hope you found the article interesting, please leave some comments on the subject

If you are interesting in learning more, I recommend these two books

ALL VIEWS AND OPINIONS ARE PERSONAL OPINIONS OF THE HOSK 


Filed under: CRM 2011, CRM 2013, CRM 2015, CRM 2016, Strategy

CRM 2016 – Bing maps not appearing

$
0
0

I created a new Microsoft Dynamics CRM Online trial, went to the account screen and realised Bing maps wasn’t appearing

Usually when things don’t work, the first place to look is in System settings and found the setting

no bing map.

The reason it isn’t enabled

// // System Settings// /_common/ScriptResx.ashx?lcid=1033&ver=1261818932/_common/global.ashx?ver=1261818932/_static/_common/scripts/CrmInternalUtility.js?ver=1261818932/_static/_common/scripts/PageLoader.js?ver=1261818932/_common/entityproperties/entitypropertiesutil.js.aspx?tstamp=637898&ver=1261818932/_common/EntitiesCustomizedHelp/EntitiesCustomizedHelp.js.aspx?tstamp=637898&ver=1261818932/_static/_forms/form.js?ver=1261818932/_static/_forms/select.js?ver=1261818932/_static/_controls/datetime/date.js?ver=1261818932/_static/tools/systemcustomization/scripts/syscustvalidation.js?ver=1261818932/_static/tools/formeditor/scripts/objects.js?ver=1261818932/_static/tools/formeditor/scripts/fielddialogs.js?ver=1261818932/_static/_tools/fieldselect/fieldselect.js?ver=1261818932/_static/tools/vieweditor/scripts/selectvalues.js?ver=1261818932/_static/tools/solution/scripts/statusreasontransition.js?ver=1261818932/_static/tools/systemcustomization/scripts/syscustutil.js?ver=1261818932/_static/_nav/tabbarcontrol.js?ver=1261818932/_static/_forms/radiogroup.js?ver=1261818932/_static/_controls/notificationlist/notificationlist.js?ver=1261818932/_static/_forms/textinputbehavior.js?ver=1261818932/_static/_forms/checkbox.js?ver=1261818932/_static/_common/scripts/crminternalutility.js?ver=1261818932/_static/_common/scripts/mscrm.caching.js?ver=1261818932/_static/_controls/lookup/lookup.js?ver=1261818932/_static/_forms/lookupbehavior.js?ver=1261818932/_static/_forms/numberinputbehavior.js?ver=1261818932/_static/tools/_common/scripts/regionaloptions.js?ver=1261818932/_static/_common/styles/autotooltip.js?ver=1261818932/_static/_controls/listedit/listedit.js?ver=1261818932/_static/_common/scripts/presence.js?ver=1261818932/_static/_forms/addrelated.js?ver=1261818932/_static/_common/scripts/details.js?ver=1261818932/_static/_controls/popupmenu/popupmenu.js?ver=1261818932// <![CDATA[
Sys.Application.add_init(function crmApplicationInitHandler() {if (!document.body || document.body.children.length === 0) return;crmCreate(Mscrm.FormInputControl.SelectInputBehavior,{},null,{},$get(‘selectRegionalFormatCode’));crmCreate(Mscrm.TabBarControl,{},null,{},$get(‘crmTabBar’));crmCreate(Mscrm.FormInputControl.RadioGroupBehavior,{},null,{},$get(‘rdIsAutoSaveEnabled’));crmCreate(Mscrm.FormInputControl.RadioGroupBehavior,{},null,{},$get(‘rdIsPresenceEnabled’));crmCreate(Mscrm.FormInputControl.SelectInputBehavior,{},null,{},$get(‘selectFullNameConventionCode’));crmCreate(Mscrm.FormInputControl.SelectInputBehavior,{},null,{},$get(‘selectPricingDecimalPrecision’));crmCreate(Mscrm.FormInputControl.RadioGroupBehavior,{},null,{},$get(‘rdShareOnAssign’));crmCreate(Mscrm.NotificationList,{},null,{},$get(‘notifications’));crmCreate(Mscrm.FormInputControl.TextAreaInputBehavior,{},null,{},$get(‘txtBlockedAttachment’));crmCreate(Mscrm.FormInputControl.SelectInputBehavior,{},null,{},$get(‘picklistCurrencyDisplayOption’));crmCreate(Mscrm.FormInputControl.CheckBoxInputBehavior,{},null,{},$get(‘ckEnableExternalSearch’));crmCreate(Mscrm.FormInputControl.RadioGroupBehavior,{},null,{},$get(‘rdQuickFindRecordLimitEnabled’));crmCreate(Mscrm.FormInputControl.RadioGroupBehavior,{},null,{},$get(‘rdIsFullTextSearchEnabled’));crmCreate(Mscrm.FormInputControl.RadioGroupBehavior,{},null,{},$get(‘rdEnableBingIntegration’));crmCreate(Mscrm.FormInputControl.TextBoxInputBehavior,{},null,{},$get(‘txtBingMapsApiKey’));crmCreate(Mscrm.FormInputControl.CheckBoxInputBehavior,{},null,{},$get(‘ckEnableDefaultCountryCode’));crmCreate(Mscrm.FormInputControl.TextBoxInputBehavior,{},null,{},$get(‘txtDefaultCountryCode’));crmCreate(Mscrm.FormInputControl.RadioGroupBehavior,{},null,{},$get(‘rdUseSkypeProtocol’));crmCreate(Mscrm.FormInputControl.RadioGroupBehavior,{},null,{},$get(‘rdAllowUsersSeeAppDownloadMessage’));crmCreate(Mscrm.FormInputControl.RadioGroupBehavior,{},null,{},$get(‘rdCustomizedHelpEnabled’));crmCreate(Mscrm.FormInputControl.TextBoxInputBehavior,{},null,{},$get(‘txtURLHelp’));crmCreate(Mscrm.FormInputControl.RadioGroupBehavior,{},null,{},$get(‘rdAppendURLParametersEnabled’));crmCreate(Mscrm.FormInputControl.RadioGroupBehavior,{},null,{},$get(‘rdGuidedHelpEnabled’));crmCreate(Mscrm.FormInputControl.RadioGroupBehavior,{},null,{},$get(‘rdIsSocialCareDisabled’));crmCreate(Mscrm.FormInputControl.RadioGroupBehavior,{},null,{},$get(‘rdDisplayNavigationTour’));crmCreate(Mscrm.FormInputControl.RadioGroupBehavior,{},null,{},$get(‘rdUseLegacyFormRendering’));crmCreate(Mscrm.FormInputControl.PresenceLookupUIBehavior,{},null,{},$get(‘defaultMobileOfflineProfile’));crmCreate(Mscrm.FormInputControl.RadioGroupBehavior,{},null,{},$get(‘rdIsConflictDetectionEnabledForMobileClient’));crmCreate(Mscrm.FormInputControl.NumberInputBehavior,{},null,{},$get(‘numberMaximumAppointmentDuration’));crmCreate(Mscrm.FormInputControl.CheckBoxInputBehavior,{},null,{},$get(‘ckEnableAudit’));crmCreate(Mscrm.FormInputControl.CheckBoxInputBehavior,{},null,{},$get(‘ckEnableUserAccessAudit’));crmCreate(Mscrm.FormInputControl.CheckBoxInputBehavior,{},null,{},$get(‘ckCommonAudit’));crmCreate(Mscrm.FormInputControl.CheckBoxInputBehavior,{},null,{},$get(‘ckSFAAudit’));crmCreate(Mscrm.FormInputControl.CheckBoxInputBehavior,{},null,{},$get(‘ckMAAudit’));crmCreate(Mscrm.FormInputControl.CheckBoxInputBehavior,{},null,{},$get(‘ckCSAudit’));crmCreate(Mscrm.FormInputControl.SelectInputBehavior,{},null,{},$get(‘picklistEmailConnectionChannel’));crmCreate(Mscrm.FormInputControl.PresenceLookupUIBehavior,{},null,{},$get(’emailServerProfile’));crmCreate(Mscrm.FormInputControl.SelectInputBehavior,{},null,{},$get(‘incomingEmailDeliveryMethod’));crmCreate(Mscrm.FormInputControl.SelectInputBehavior,{},null,{},$get(‘outgoingEmailDeliveryMethod’));crmCreate(Mscrm.FormInputControl.SelectInputBehavior,{},null,{},$get(‘actDeliveryMethod’));crmCreate(Mscrm.FormInputControl.CheckBoxInputBehavior,{},null,{},$get(‘ckUserApproval’));crmCreate(Mscrm.FormInputControl.CheckBoxInputBehavior,{},null,{},$get(‘ckQueueApproval’));crmCreate(Mscrm.FormInputControl.CheckBoxInputBehavior,{},null,{},$get(‘ckEnableFolderBasedTracking’));crmCreate(Mscrm.FormInputControl.CheckBoxInputBehavior,{},null,{},$get(‘ckEnableEmailCorrelation’));crmCreate(Mscrm.FormInputControl.CheckBoxInputBehavior,{},null,{},$get(‘ckEnableTracking’));crmCreate(Mscrm.FormInputControl.TextBoxInputBehavior,{},null,{},$get(‘txtTrackingPrefix’));crmCreate(Mscrm.FormInputControl.NumberInputBehavior,{},null,{},$get(‘numTrackingIdBase’));crmCreate(Mscrm.FormInputControl.SelectInputBehavior,{},null,{},$get(‘selTrackingIdLength’));crmCreate(Mscrm.FormInputControl.SelectInputBehavior,{},null,{},$get(‘selTrackingNumberLength’));crmCreate(Mscrm.FormInputControl.CheckBoxInputBehavior,{},null,{},$get(‘ckEnableSmartMatching’));crmCreate(Mscrm.FormInputControl.TextBoxInputBehavior,{},null,{},$get(‘txtSMFilter’));crmCreate(Mscrm.FormInputControl.NumberInputBehavior,{},null,{},$get(‘numSMKeywordLimit’));crmCreate(Mscrm.FormInputControl.NumberInputBehavior,{},null,{},$get(‘numSMMaxDifference’));crmCreate(Mscrm.FormInputControl.NumberInputBehavior,{},null,{},$get(‘numSMMinRecipients’));crmCreate(Mscrm.FormInputControl.CheckBoxInputBehavior,{},null,{},$get(‘ckEnableExclude’));crmCreate(Mscrm.FormInputControl.RadioGroupBehavior,{},null,{},$get(‘rdUseSecureFrame’));crmCreate(Mscrm.FormInputControl.RadioGroupBehavior,{},null,{},$get(‘rdAllowUnresolvedParty’));crmCreate(Mscrm.FormInputControl.NumberInputBehavior,{},null,{},$get(‘numberMaxUploadFileSize’));crmCreate(Mscrm.FormInputControl.CheckBoxInputBehavior,{},null,{},$get(‘ckGenerateAlertsForErrors’));crmCreate(Mscrm.FormInputControl.CheckBoxInputBehavior,{},null,{},$get(‘ckGenerateAlertsForWarnings’));crmCreate(Mscrm.FormInputControl.CheckBoxInputBehavior,{},null,{},$get(‘ckGenerateAlertsForInformation’));crmCreate(Mscrm.FormInputControl.CheckBoxInputBehavior,{},null,{},$get(‘ckNotifyMailboxOwnerOfEmailServerLevelAlerts’));crmCreate(Mscrm.FormInputControl.RadioGroupBehavior,{},null,{},$get(‘rdEnableExecution’));crmCreate(Mscrm.FormInputControl.RadioGroupBehavior,{},null,{},$get(‘rdEnableResponseCreation’));crmCreate(Mscrm.FormInputControl.RadioGroupBehavior,{},null,{},$get(‘rdEnableUnsubscription’));crmCreate(Mscrm.FormInputControl.RadioGroupBehavior,{},null,{},$get(‘rdEnableUnsubscriptionAcknowledgement’));crmCreate(Mscrm.FormInputControl.PresenceLookupUIBehavior,{},null,{},$get(‘luTemplateLookup’));crmCreate(Mscrm.FormInputControl.CheckBoxInputBehavior,{},null,{},$get(‘ckEnableAppMode’));crmCreate(Mscrm.FormInputControl.SelectInputBehavior,{},null,{},$get(‘selectPluginTracingLevels’));crmCreate(Mscrm.FormInputControl.RadioGroupBehavior,{},null,{},$get(‘rdTagMaxAggressiveCycles’));crmCreate(Mscrm.FormInputControl.NumberInputBehavior,{},null,{},$get(‘numTagPollingPeriod’));crmCreate(Mscrm.FormInputControl.NumberInputBehavior,{},null,{},$get(‘numSendPollingPeriod’));crmCreate(Mscrm.FormInputControl.RadioGroupBehavior,{},null,{},$get(‘rdAllowScheduledSyncs’));crmCreate(Mscrm.FormInputControl.NumberInputBehavior,{},null,{},$get(‘numMinOutlookSyncInterval’));crmCreate(Mscrm.FormInputControl.RadioGroupBehavior,{},null,{},$get(‘rdAllowOfflineScheduledSyncs’));crmCreate(Mscrm.FormInputControl.NumberInputBehavior,{},null,{},$get(‘numMinOfflineSyncInterval’));crmCreate(Mscrm.FormInputControl.RadioGroupBehavior,{},null,{},$get(‘rdAllowAddressBookSyncs’));crmCreate(Mscrm.FormInputControl.NumberInputBehavior,{},null,{},$get(‘numMinAddressBookSyncInterval’));crmCreate(Mscrm.FormInputControl.RadioGroupBehavior,{},null,{},$get(‘rdAllowClientMessageBarAd’));crmCreate(Mscrm.ListEdit,{“messageXml”:”Are you sure you want to delete this category? If a report is associated only with this category, it will still be available by selecting All Reports in the Category list.”,”initialXml”:””},null,{},$get(‘edtCategory’));crmCreate(Mscrm.FormInputControl.RadioGroupBehavior,{},null,{},$get(‘rdPowerBiFeatureEnabled’));crmCreate(Mscrm.FormInputControl.NumberInputBehavior,{},null,{},$get(‘rollupExpiryTime’));crmCreate(Mscrm.FormInputControl.NumberInputBehavior,{},null,{},$get(‘rollupFrequency’));crmCreate(Mscrm.FormInputControl.RadioGroupBehavior,{},null,{},$get(‘rdCreateProductsWithoutParentInActiveState’));crmCreate(Mscrm.FormInputControl.RadioGroupBehavior,{},null,{},$get(‘rdDefaultPricelistRuleEnabled’));crmCreate(Mscrm.FormInputControl.NumberInputBehavior,{},null,{},$get(‘numberMaximumBundleItems’));crmCreate(Mscrm.FormInputControl.RadioGroupBehavior,{},null,{},$get(‘rdOOBPriceCalculationEnabled’));crmCreate(Mscrm.FormInputControl.SelectInputBehavior,{},null,{},$get(‘picklistDiscountTypeOptionMethod’));crmCreate(Mscrm.FormInputControl.NumberInputBehavior,{},null,{},$get(‘numberMaximumDynamicPropertiesAllowed’));crmCreate(Mscrm.FormInputControl.RadioGroupBehavior,{},null,{},$get(‘rdIsSLASuppressed’));crmCreate(Mscrm.FormInputControl.RadioGroupBehavior,{},null,{},$get(‘rdAutoApplySLA’));crmCreate(Mscrm.FormInputControl.SelectInputBehavior,{},null,{},$get(‘PrimaryEntity’));crmCreate(Mscrm.FormInputControl.RadioGroupBehavior,{},null,{},$get(‘rdAutoApplyDefaultOnCaseCreate’));crmCreate(Mscrm.FormInputControl.RadioGroupBehavior,{},null,{},$get(‘rdAutoApplyDefaultOnCaseUpdate’));crmCreate(Mscrm.FormInputControl.CheckBoxInputBehavior,{},null,{},$get(‘ckIsAppointmentAttachmentSyncEnabled’));crmCreate(Mscrm.FormInputControl.RadioGroupBehavior,{},null,{},$get(‘rdIsContactMailingAddressSyncEnabled’));crmCreate(Mscrm.FormInputControl.CheckBoxInputBehavior,{},null,{},$get(‘ckIsAssignedTasksSyncEnabled’));crmCreate(Mscrm.FormInputControl.CheckBoxInputBehavior,{},null,{},$get(‘cbPreviewEULA’));crmCreate(Mscrm.FormInputControl.RadioGroupBehavior,{},null,{},$get(‘rdTaskBasedFlowPreview’));crmCreate(Mscrm.FormInputControl.RadioGroupBehavior,{},null,{},$get(‘rdorgInsightsPreview’));crmCreate(Mscrm.FormInputControl.RadioGroupBehavior,{},null,{},$get(‘rdCortanaProactiveExperiencePreview’));crmCreate(Mscrm.FormInputControl.RadioGroupBehavior,{},null,{},$get(‘rdDelveActionHubPreview’));crmCreate(Mscrm.FormInputControl.RadioGroupBehavior,{},null,{},$get(‘rdEnableRelevanceSearchForPreview’));crmCreate(Mscrm.FormInputControl.RadioGroupBehavior,{},null,{},$get(‘rdProductRecommendationsPreview’));crmCreate(Mscrm.FormInputControl.RadioGroupBehavior,{},null,{},$get(‘rdTextAnalyticsPreview’));crmCreate(Mscrm.DialogsControl,null,null,null,null);});
// ]]>// // System Settings

// <![CDATA[
var _lastDateSeparator = “”;
var _languageCode = 0;
var _originalReportCategoryXml = “”;
var _boAnySettingChanged = false;

var selTrackingNumberLengthCtrl = null;
var selTrackingIdLengthCtrl = null;

var selTrackingNumberLengthElement = null;
var selTrackingIdLengthElement = null;

var edtCategory_listEditComponent;
var txtTrackingPrefixCtrl = null;
var txtSMFilterCtrl = null;
Sys.Application.add_load(SettingsOnLoad);
function SettingsOnLoad()
{

$get(“tab0”).style.display = “inline”;

selTrackingNumberLengthElement = $get(‘selTrackingNumberLength’);
selTrackingIdLengthElement = $get(‘selTrackingIdLength’);

selTrackingNumberLengthCtrl = Mscrm.FormControlInputBehavior.GetBehavior(‘selTrackingNumberLength’);
selTrackingIdLengthCtrl = Mscrm.FormControlInputBehavior.GetBehavior(‘selTrackingIdLength’);
txtTrackingPrefixCtrl = Mscrm.FormControlInputBehavior.GetBehavior(‘txtTrackingPrefix’);
txtSMFilterCtrl = Mscrm.FormControlInputBehavior.GetBehavior(‘txtSMFilter’);

edtCategory_listEditComponent = $find(‘edtCategory’);

setTrackingPrefix(“CRM\x3a\x3b”);
onEnableEmailCorrelationChange();
onEnableTrackingChange();
updateTrackingTokenExample();
onEnableSmartMatchingChange();
setSMFilter(“\x5e\x5b\x5cs\x5d\x2a\x28\x5b\x5cw\x5d\x2b\x5cs\x3f\x3a\x5b\x5cs\x5d\x2a\x29\x2b”);
onloadUpdateMarketingControlsUI();

onEnableCustomizableHelpChange();

onEnableBingMapsChange();
onDefaultCountryCodeChange();

updateReadingOrder();
_originalReportCategoryXml = getReportCategoryUpdate();

Mscrm.FormControlInputBehavior.GetBehavior(“rdUseSecureFrame”).set_disabled(true);

var defaultEmailServerProfileBehavior = Mscrm.FormControlInputBehavior.GetBehavior(“emailServerProfile”);
defaultEmailServerProfileBehavior.AddParam(“ShowNewButton”, 0);

AdjustTabAndContentWidth();
$addHandler(window, ‘resize’, AdjustTabAndContentWidth);

var oldPrimaryEntity;
ConfigServiceTab();

if(!isOutlookHostedWindow())
{

populateWindowArgumentsForDialog();
}
}

function getHelpContext()
{
return $find(‘crmTabBar’).get_currentTab().getAttribute(“tabID”);
}

function cancel()
{
RemoveHandlersOnClose();
closeWindow();
}

function ConfirmIsFullTextSearchEnabled(returnValue, isFullTextSearchEnabled)
{
if (returnValue != null && returnValue == false) {
Mscrm.FormControlInputBehavior.GetBehavior(“rdIsFullTextSearchEnabled”).set_dataValue(isFullTextSearchEnabled);
}
}

function ConfirmIsExternalSearchEnabled(returnValue, isExternalSearchEnabled)
{
var externalSearchCheckBox = $get(“ckEnableExternalSearch”);
if (returnValue != null && returnValue == false && externalSearchCheckBox) {
$get(“ckEnableExternalSearch”).checked = isExternalSearchEnabled;
}
}

function ConfirmIsExternalSearchPreviewEnabled(returnValue, isExternalSearchEnabled)
{

if (returnValue != null && returnValue == false) {
Mscrm.FormControlInputBehavior.GetBehavior(“rdEnableRelevanceSearchForPreview”).set_dataValue(isExternalSearchEnabled);
}

ConfirmIsExternalSearchEnabled(returnValue, isExternalSearchEnabled);
}

function ConfirmIsAzureMLFeaturePreviewEnabled(returnValue, radioId, disablePreviewRadioValue)
{

if (!(returnValue != null && returnValue == true))
{
Mscrm.FormControlInputBehavior.GetBehavior(radioId).set_dataValue(disablePreviewRadioValue);
}
}

function applychanges()
{

if (!validateMarketingControlsStatus())
{
return false;
}

if ($get(“selectRegionalFormatCode”).value == “”)
{
alert(LOCID_REGIONCODE_REQUIRED);
return false ;
}

if ($get(‘numTrackingIdBase’).value == “”)
{
alert(LOCID_TRACKINGID_REQUIRED);
return false;
}

if ($get(“ckEnableTracking”).checked)
{
var sIdBase = Mscrm.FormControlInputBehavior.GetBehavior(‘numTrackingIdBase’).get_dataValue().toString();
if (selTrackingIdLengthCtrl.get_dataValue() numberMaxUploadFileSizeControl.get_max())
{
crmTabBar.down(tab2Tab, true);
numberMaxUploadFileSizeControl.IsValid();
return false;
}

_boAnySettingChanged = false;

var retval = new StringBuilder();
retval.Append( “” );

retval.Append(GetFullNameConventionCode());
retval.Append(GetPricingDecimalPrecision());
retval.Append(GetShareOnAssign());
retval.Append(GetBlockedAttachment());

retval.Append(GetHelpURL());

retval.Append(GetCurrencyDisplayOption());

retval.Append(GetRegionalFormatCode());

var regionalOptionsDataXml = GetRegionalOptionsDataXml();
if (regionalOptionsDataXml != “”)
{
_boAnySettingChanged = true;
retval.Append(regionalOptionsDataXml);
}

retval.Append(GetEnableAudit());
retval.Append(GetEnableUserAccessAudit());

retval.Append(GetAreaAuditXml());
retval.Append(GetEnableDefaultCountryCodeFlag());
retval.Append(GetEnableDefaultCountryCodeValue());
retval.Append(GetDefaultProtocolInformation());

retval.Append(GetEmailApprovalValue());
retval.Append(GetTrackingPrefix());
retval.Append(GetTrackingIdBase());
retval.Append(GetTrackingIdLength());
retval.Append(GetTrackingNumberLength());
retval.Append(GetEnableEmailCorrelation());
retval.Append(GetEnableFolderBasedTracking());
retval.Append(GetEnableSmartMatching());
retval.Append(GetSMFilter());
retval.Append(GetSMKeywordLimit());
retval.Append(GetSMMaxDifference());
retval.Append(GetSMMinRecipients());
retval.Append(GetIgnoreInternalEmail());
retval.Append(GetEnableBingMapsIntegration());
retval.Append(GetBingMapsApiKey());
retval.Append(GetUseSecureFrame());
retval.Append(GetAllowUnresolvedParty());
retval.Append(GetMaxUploadFileSize());
retval.Append(GetEmailServerProfileOption());
retval.Append(GetEmailConnectionChannel());
retval.Append(GetDefaultEmailSettings());

retval.Append(GetAlertSettings());

retval.Append(GetEnableResponseCreation());
retval.Append(GetEnableExecution());
retval.Append(GetEnableUnsubscription());
retval.Append(GetEnableUnsubscriptionAcknowledgement());
retval.Append(GetTemplateLookup());

retval.Append(GetEnableAppMode());

retval.Append(GetPluginTracing());

retval.Append(GetDisableIECompatibilityMode());

retval.Append(GetTagMaxAggressiveCycles());
retval.Append(GetTagPollingPeriod());
retval.Append(GetSendPollingPeriod());

retval.Append(GetAllowScheduledSyncs());
retval.Append(GetOutlookSyncInterval());

retval.Append(GetAllowOfflineScheduledSyncs());
retval.Append(GetOfflinePollingPeriod());

retval.Append(GetAllowAddressBookSyncs());
retval.Append(GetAddressBookPollingPeriod());
retval.Append(GetAllowClientMessageBarAd());

var reportCategoryXml = getReportCategoryUpdate();
if (_originalReportCategoryXml != reportCategoryXml)
{
_boAnySettingChanged = true;
retval.Append(reportCategoryXml);
}

retval.Append(GetMaximumAppointmentDuration());

retval.Append(GetQuickFindRecordLimitEnabled());
retval.Append(GetIsFullTextSearchEnabled());
retval.Append(GetIsExternalSearchEnabled());

retval.Append(GetCustomizedHelpEnabled());
retval.Append(GetAppendURLParametersEnabled());

retval.Append(GetTaskBasedFlowEnabled());

retval.Append(GetOrgInsightsEnabled());

retval.Append(GetCortanaProactiveExperienceEnabled());

retval.Append(GetProductRecommendationsPreviewEnabled());

retval.Append(GetTextAnalyticsPreviewEnabled());

retval.Append(GetPowerBIFeatureEnabled());

retval.Append(GetIsPresencedEnabled());
retval.Append(GetIsAutoSaveEnabled());

retval.Append(GetRollupConfiguration());

retval.Append(GetAllowUsersSeeAppDownloadMessage());

retval.Append(GetIsSLASuppressed());
retval.Append(GetAutoApplySLA());
retval.Append(GetAutoApplyDefaultOnCaseCreate());
retval.Append(GetAutoApplyDefaultOnCaseUpdate());
retval.Append(GetSLAPauseStates());
retval.Append(GetMaximumBundleItems());
retval.Append(GetDefaultPriceListRuleEnabled());
retval.Append(GetDefaultDiscountSetting());
retval.Append(GetOOBPriceCalculationEnabled());
retval.Append(GetCreateProductsWithoutParentInActiveStateEnabled());
retval.Append(GetFeatureSetSettings());
retval.Append(GetIsSocialCareDisabled());
retval.Append(GetDisplayNavigationTour());
retval.Append(GetUseLegacyRendering());

retval.Append(GetMaximumDynamicPropertiesAllowed());

retval.Append(GetOtherSyncSettings());

retval.Append(GetDefaultMobileOfflineProfileOption());

retval.Append(GetConflictDetectionSettings());

retval.Append( “”);

var boSuccess = true;
if (_boAnySettingChanged)
{
var xml= XUI.Xml.LoadXml(retval.ToString());

var xmlhttp = new XMLHttpRequest();
var oUrl = Mscrm.CrmUri.create(“/Tools/SystemSettings/cmds/cmd_update.aspx”);
xmlhttp.open(“POST”, oUrl.toString(), false);
Mscrm.Utilities.setResponseTypeToMSXml(xmlhttp);
SetTokenInHeader(xmlhttp, oUrl);

boSuccess=Mscrm.Utilities.safeHttpSend(xmlhttp,xml);
if(boSuccess)
{
boSuccess = handleXMLErr(xmlhttp.responseXML);
}

}

if (boSuccess)
{
RemoveHandlersOnClose();
closeWindow();
}
}

function GetOtherSyncSettings()
{
var returnValue = “”;

var ckIsAppointmentAttachmentSyncEnabled = $get(“ckIsAppointmentAttachmentSyncEnabled”);
if (ckIsAppointmentAttachmentSyncEnabled != null && Mscrm.FormUtility.isControlDirty(ckIsAppointmentAttachmentSyncEnabled))
{
_boAnySettingChanged = true;
returnValue = “” + (ckIsAppointmentAttachmentSyncEnabled.checked ? “1” : “0”) + “”;
}

var ckIsAssignedTasksSyncEnabled = $get(“ckIsAssignedTasksSyncEnabled”);
if (ckIsAssignedTasksSyncEnabled != null && Mscrm.FormUtility.isControlDirty(ckIsAssignedTasksSyncEnabled))
{
_boAnySettingChanged = true;
returnValue = returnValue + “” + (ckIsAssignedTasksSyncEnabled.checked ? “1” : “0”) + “”;
}

var rdIsContactMailingAddressSyncEnabled = $get(“rdIsContactMailingAddressSyncEnabled”);
if (rdIsContactMailingAddressSyncEnabled != null && Mscrm.FormUtility.isControlDirty(rdIsContactMailingAddressSyncEnabled))
{
var ctrl = Mscrm.FormControlInputBehavior.GetBehavior(“rdIsContactMailingAddressSyncEnabled”);
_boAnySettingChanged = true;
returnValue = returnValue + “” + (ctrl.get_dataValue() ? “1” : “0”) + “”;
}

return returnValue;
}

function onCurrencySymbolChange()
{
var sCurrencySymbol = $get(“CurrencySymbol”).value;
if (sCurrencySymbol == “”)
{
sCurrencySymbol = “$”;
}
updateCurrencyFormatCodeBox(sCurrencySymbol);
}

function onTrackingPrefixChange()
{
var value = “”;
if (txtTrackingPrefixCtrl.get_dataValue() != null)
{
value = txtTrackingPrefixCtrl.get_dataValue();

value = value.replace(new RegExp(_sTrackingPrefixSeparator, “g”), “”);
}

txtTrackingPrefixCtrl.set_dataValue(value);

updateTrackingTokenExample();
}

function onEnableTrackingChange()
{
enableEmailTracking($get(“ckEnableTracking”).checked);
}

function onPreviewEULAChange()
{
var shouldEnableRadioButton = $get(“cbPreviewEULA”).checked;
SetEnabledStateForRadio(“rdTaskBasedFlowPreview”, shouldEnableRadioButton);
SetEnabledStateForRadio(“rdEnableRelevanceSearchForPreview”, shouldEnableRadioButton);
SetEnabledStateForRadio(“rdCortanaProactiveExperiencePreview”, shouldEnableRadioButton);
SetEnabledStateForRadio(“rdDelveActionHubPreview”, shouldEnableRadioButton);
SetEnabledStateForRadio(“rdorgInsightsPreview”, shouldEnableRadioButton);
SetEnabledStateForRadio(“rdProductRecommendationsPreview”, shouldEnableRadioButton);
SetEnabledStateForRadio(“rdTextAnalyticsPreview”, shouldEnableRadioButton);
}

function SetEnabledStateForRadio(radioId, isEnabled)
{
var radio = $get(radioId);

if (radio != null)
{
var control = Mscrm.FormControlInputBehavior.GetBehavior(radioId);

if(control != null)
{
if (!isEnabled)
{
control.set_dataValue(false);
control.set_disabled(true);
}
else
{
control.set_dataValue(false);
control.set_disabled(false);
}
}
}
}

function GetFeatureSetSettings() {
var result = new StringBuilder();
result.Append(“”);
result.Append(CrmEncodeDecode.CrmXmlEncode(“”));
AppendFeatureSetXml(result, “rdGuidedHelpEnabled”, CrmEncodeDecode.CrmXmlEncode(‘FCB.GUIDEDHELPtrueOrganization2016-05-06T21:06:53.5275669Z’), CrmEncodeDecode.CrmXmlEncode(‘FCB.GUIDEDHELPfalseOrganization2016-05-06T21:06:53.5275669Z’));

result.Append(CrmEncodeDecode.CrmXmlEncode(”));
result.Append(CrmEncodeDecode.CrmXmlEncode(“”));
result.Append(“”);
return result.ToString();
}

function AppendFeatureSetXml(resultBuilder, radioId, featureEnabledValue, featureDisabledValue)
{
var radio = $get(radioId);
if(radio != null){
var ctrl = Mscrm.FormControlInputBehavior.GetBehavior(radioId);
_boAnySettingChanged = true;

if(ctrl.get_dataValue())
{
resultBuilder.Append(featureEnabledValue);
}
else
{
resultBuilder.Append(featureDisabledValue);
}
}
}

function onEmailConnectionChannelChange()
{
var emailChannelEnum = {HostedEmailConnector:”0″, EmailRouter:”1″};
var currentSelection = CrmEncodeDecode.CrmXmlEncode(Mscrm.FormControlInputBehavior.GetBehavior(‘picklistEmailConnectionChannel’).get_dataValue());

if(HAS_PASSWORD_FOR_A_MAILBOX == ‘1’ && EMAIL_CONNECTION_CHANNEL == emailChannelEnum.HostedEmailConnector && currentSelection == emailChannelEnum.EmailRouter)
{
if (!confirm(EMAIL_ROUTER_WARNING_MESSAGE, EMAIL_ROUTER_WARNING_TITLE)) {
Mscrm.FormControlInputBehavior.GetBehavior(‘picklistEmailConnectionChannel’).set_dataValue(‘0’);
}
}
}

function onEnableEmailCorrelationChange()
{
var enableCorrelation = $get(“ckEnableEmailCorrelation”).checked;

document.getElementById(“ckEnableTracking”).disabled = !enableCorrelation;
document.getElementById(“ckEnableSmartMatching”).disabled = !enableCorrelation;
document.getElementById(“ckEnableTracking”).disabled = !enableCorrelation;
document.getElementById(“txtTrackingPrefix”).disabled = !enableCorrelation;
document.getElementById(“numTrackingIdBase”).disabled = !enableCorrelation;
document.getElementById(“selTrackingIdLength”).disabled = !enableCorrelation;
document.getElementById(“selTrackingNumberLength”).disabled = !enableCorrelation;
document.getElementById(“txtSMFilter”).disabled = !enableCorrelation;
document.getElementById(“numSMKeywordLimit”).disabled = !enableCorrelation;
document.getElementById(“numSMMaxDifference”).disabled = !enableCorrelation;
document.getElementById(“numSMMinRecipients”).disabled = !enableCorrelation;
}

function onEnableAuditChange()
{
if (Mscrm.FormUtility.isControlDirty($get(“ckEnableAudit”)))
{
if ($get(“ckEnableAudit”).checked == false)
{
bConfirm = confirm(LOCID_CONFIRM_AUDIT_DISABLE);

if (bConfirm == false)
{
$get(“ckEnableAudit”).checked = true;
return;
}
}
}
$get(“ckEnableUserAccessAudit”).disabled = !$get(“ckEnableAudit”).checked;
toggleAuditAreaStates($get(“ckEnableAudit”).checked);
}

function onDefaultCountryCodeChange()
{
var value = “”;
var txtDefaultCountryCodeControl = Mscrm.FormControlInputBehavior.GetBehavior(“txtDefaultCountryCode”);
if (!IsNull(document.getElementById(“ckEnableDefaultCountryCode”)) && $get(“ckEnableDefaultCountryCode”).checked == true && !IsNull(document.getElementById(“txtDefaultCountryCode”)))
{
txtDefaultCountryCodeControl.set_disabled(false);
}
else if(!IsNull(document.getElementById(“ckEnableDefaultCountryCode”)) && $get(“ckEnableDefaultCountryCode”).checked == false && !IsNull(document.getElementById(“txtDefaultCountryCode”)))
{
value = txtDefaultCountryCodeControl.get_dataValue();
txtDefaultCountryCodeControl.set_disabled(true);
txtDefaultCountryCodeControl.set_dataValue(value);
}
}

function toggleAuditAreaStates(auditEnabled)
{
if (document.getElementById(“ckCommonAudit”) != null)
{
$get(“ckCommonAudit”).disabled = !auditEnabled || commonAuditDisabled;
$get(“ckSFAAudit”).disabled = !auditEnabled || sfaAuditDisabled;
$get(“ckMAAudit”).disabled = !auditEnabled || maAuditDisabled;
$get(“ckCSAudit”).disabled = !auditEnabled || csAuditDisabled;
}
}

function onEnableBingMapsChange()
{
var txtBingMapsApiKeyControl = Mscrm.FormControlInputBehavior.GetBehavior(“txtBingMapsApiKey”);
if (IsNull(txtBingMapsApiKeyControl))
{
return;
}
var enableBingMapsRadioControl = Mscrm.FormControlInputBehavior.GetBehavior(“rdEnableBingIntegration”);
if(IsNull(enableBingMapsRadioControl) || IsNull(enableBingMapsRadioControl.get_dataValue()) || !enableBingMapsRadioControl.get_dataValue())
{
txtBingMapsApiKeyControl.set_disabled(true);
}
else
{
txtBingMapsApiKeyControl.set_disabled(false);
}
}

function onIsFullTextSearchEnabledChange()
{
var isFullTextEnabled = Mscrm.FormControlInputBehavior.GetBehavior(“rdIsFullTextSearchEnabled”).get_dataValue() ? true : false;

var oUrl = Mscrm.CrmUri.create(“/Tools/SystemSettings/Dialogs/dlg_confirm_enablefulltextsearch.aspx”);
oUrl.get_query()[“resource_description”] = isFullTextEnabled ? String.format(LOCID_FULLTEXTSEARCHENABLEDDESC):
String.format(LOCID_FULLTEXTSEARCHDISABLEDDESC);
var crmDialog = new Mscrm.CrmDialog(oUrl, null, 600, 200, null);
var oldSelection = isFullTextEnabled ? [false] : [true];
crmDialog.setCallbackInfo(“ConfirmIsFullTextSearchEnabled”, this,oldSelection);
crmDialog.show();
}

function onEnableExternalSearchChange()
{
var isEnableExternalSearch = $get(“ckEnableExternalSearch”).checked;
showExternalSearchConfirmationDialog(isEnableExternalSearch, “ConfirmIsExternalSearchEnabled”);
}

function onRelevanceSearchPreviewSelectionChanged()
{
var isEnableExternalSearch = Mscrm.FormControlInputBehavior.GetBehavior(“rdEnableRelevanceSearchForPreview”).get_dataValue();
showExternalSearchConfirmationDialog(isEnableExternalSearch, “ConfirmIsExternalSearchPreviewEnabled”);
}

function showExternalSearchConfirmationDialog(isEnableExternalSearch, callbackMethod)
{
var oUrl = Mscrm.CrmUri.create(“/Tools/SystemSettings/Dialogs/dlg_confirm_enableexternalsearch.aspx”);
oUrl.get_query()[“isEnabling”] = isEnableExternalSearch;
var crmDialog = new Mscrm.CrmDialog(oUrl, null, 600, 200, null);
var oldSelection = isEnableExternalSearch ? [false] : [true];
crmDialog.setCallbackInfo(callbackMethod, this,oldSelection);
crmDialog.show();
}

function onAzureMLPreviewFeatureSelectionChanged(radioId)
{

if ( Mscrm.FormControlInputBehavior.GetBehavior(radioId).get_dataValue())
{
var oUrl = Mscrm.CrmUri.create(“/Tools/SystemSettings/Dialogs/dlg_confirm_enableazuremlfeature.aspx”);
oUrl.get_query()[“radioId”] = radioId;
var crmDialog = new Mscrm.CrmDialog(oUrl, null, 800, 200, null);
var parameters = new Array(radioId, false);
crmDialog.setCallbackInfo(“ConfirmIsAzureMLFeaturePreviewEnabled”, this, parameters);
crmDialog.show();
}
}

function onEnableSmartMatchingChange()
{
enableSmartMatching($get(“ckEnableSmartMatching”).checked);
}

function onEnableUnsubscriptionChange()
{

var ctrl = Mscrm.FormControlInputBehavior.GetBehavior(“rdEnableUnsubscription”);
var ackCtrl = Mscrm.FormControlInputBehavior.GetBehavior(“rdEnableUnsubscriptionAcknowledgement”);
var lookup = Mscrm.FormControlInputBehavior.GetBehavior(“luTemplateLookup”);

if (ctrl.get_dataValue())
{
ackCtrl.set_disabled(false);
if (ackCtrl.get_dataValue())
{
lookup.set_disabled(false);
}
}
else
{
ackCtrl.set_disabled(true);
lookup.set_disabled(true);
}
}

function onEnableUnsubscriptionAcknowledgementChange()
{
var lookup = Mscrm.FormControlInputBehavior.GetBehavior(“luTemplateLookup”);

if (Mscrm.FormControlInputBehavior.GetBehavior(“rdEnableUnsubscriptionAcknowledgement”).get_dataValue())
{
lookup.set_disabled(false);
}
else
{
lookup.set_disabled(true);
}
}

function onEnableCustomizableHelpChange()
{
var txtURLHelp = Mscrm.FormControlInputBehavior.GetBehavior(“txtURLHelp”);
var rdAppendURLParametersEnabled = Mscrm.FormControlInputBehavior.GetBehavior(“rdAppendURLParametersEnabled”);
if (Mscrm.FormControlInputBehavior.GetBehavior(“rdCustomizedHelpEnabled”).get_dataValue())
{
txtURLHelp.set_disabled(false);
rdAppendURLParametersEnabled.set_disabled(false);
}
else
{
txtURLHelp.set_disabled(true);
rdAppendURLParametersEnabled.set_disabled(true);
}
}

function onloadUpdateMarketingControlsUI()
{

var ctrl = Mscrm.FormControlInputBehavior.GetBehavior(“rdEnableUnsubscription”);
var ackCtrl = Mscrm.FormControlInputBehavior.GetBehavior(“rdEnableUnsubscriptionAcknowledgement”);
var lookup = Mscrm.FormControlInputBehavior.GetBehavior(“luTemplateLookup”);
if (!IsNull(ctrl) && !IsNull(ctrl.get_dataValue()) && !ctrl.get_dataValue())
{
ackCtrl.set_disabled(true);
lookup.set_disabled(true);
}
if (IsNull(ackCtrl.get_dataValue()))
{
lookup.set_disabled(true);
}
else if (!ackCtrl.get_dataValue())
{
lookup.set_disabled(true);
}
}

function onScheduledSyncToggled()
{
if (Mscrm.FormControlInputBehavior.GetBehavior(“rdAllowScheduledSyncs”).get_dataValue())
{
Mscrm.FormControlInputBehavior.GetBehavior(‘numMinOutlookSyncInterval’).set_disabled(false);
}
else
{
Mscrm.FormControlInputBehavior.GetBehavior(‘numMinOutlookSyncInterval’).set_disabled(true);
}

}

function onAddressBookSyncToggled()
{

Mscrm.FormControlInputBehavior.GetBehavior(‘numMinAddressBookSyncInterval’).set_disabled(!Mscrm.FormControlInputBehavior.GetBehavior(“rdAllowAddressBookSyncs”).get_dataValue());

}

function onOfflineSyncToggled()
{
if (Mscrm.FormControlInputBehavior.GetBehavior(“rdAllowOfflineScheduledSyncs”).get_dataValue())
{
Mscrm.FormControlInputBehavior.GetBehavior(‘numMinOfflineSyncInterval’).set_disabled(false);
}
else
{
Mscrm.FormControlInputBehavior.GetBehavior(‘numMinOfflineSyncInterval’).set_disabled(true);
}
}

function validateMarketingControlsStatus()
{
var luTemplateLookupCtrl = Mscrm.FormControlInputBehavior.GetBehavior(“luTemplateLookup”);

var ctrl = Mscrm.FormControlInputBehavior.GetBehavior(“rdEnableUnsubscription”);
var ackCtrl = Mscrm.FormControlInputBehavior.GetBehavior(“rdEnableUnsubscriptionAcknowledgement”);
if (!IsNull(ctrl) && !IsNull(ctrl.get_dataValue()) && !IsNull(ackCtrl.get_dataValue()))
{
if (ctrl.get_dataValue() && ackCtrl.get_dataValue())
{
if (IsNull(luTemplateLookupCtrl.get_dataValue()) || IsNull(luTemplateLookupCtrl.get_dataValue()[0].id))
{
alert(LOCID_INVALID_EMAIL_TEMPLATE);
return false;
}
}
}

return true;
}

function GetTagPollingPeriod()
{
if (Mscrm.FormUtility.isControlDirty($get(‘numTagPollingPeriod’)))
{
_boAnySettingChanged = true;
return “” + Mscrm.FormControlInputBehavior.GetBehavior(‘numTagPollingPeriod’).get_dataValue() * 60 * 1000 + “”;
}

return “”;
}

function GetSendPollingPeriod()
{
if (Mscrm.FormUtility.isControlDirty($get(‘numSendPollingPeriod’)))
{
_boAnySettingChanged = true;
return “” + Mscrm.FormControlInputBehavior.GetBehavior(‘numSendPollingPeriod’).get_dataValue() * 60 * 1000 + “”;
}

return “”;
}

function GetTagMaxAggressiveCycles()
{
var ctrl = Mscrm.FormControlInputBehavior.GetBehavior(“rdTagMaxAggressiveCycles”);
if (Mscrm.FormUtility.isControlDirty($get(“rdTagMaxAggressiveCycles”)))
{
_boAnySettingChanged = true;

return “” + (ctrl.get_dataValue() ? “2” : “0”) + “”;
}

return “”;
}

function GetAllowScheduledSyncs()
{
var ctrl = Mscrm.FormControlInputBehavior.GetBehavior(“rdAllowScheduledSyncs”);
if (Mscrm.FormUtility.isControlDirty($get(“rdAllowScheduledSyncs”)))
{
_boAnySettingChanged = true;
return “” + (ctrl.get_dataValue() ? “true” : “false”) + “”;
}

return “”;
}

function GetOfflinePollingPeriod()
{
if (Mscrm.FormUtility.isControlDirty($get(‘numMinOfflineSyncInterval’)))
{
_boAnySettingChanged = true;

return “” + Mscrm.FormControlInputBehavior.GetBehavior(‘numMinOfflineSyncInterval’).get_dataValue() * 60 * 1000 + “”;
}

return “”;
}

function GetAllowOfflineScheduledSyncs()
{
var ctrl = Mscrm.FormControlInputBehavior.GetBehavior(“rdAllowOfflineScheduledSyncs”);
if (Mscrm.FormUtility.isControlDirty($get(“rdAllowOfflineScheduledSyncs”)))
{
_boAnySettingChanged = true;
return “” + (ctrl.get_dataValue() ? “true” : “false”) + “”;
}

return “”;
}

function GetAllowAddressBookSyncs()
{
var ctrl = Mscrm.FormControlInputBehavior.GetBehavior(“rdAllowAddressBookSyncs”);
if (Mscrm.FormUtility.isControlDirty($get(“rdAllowAddressBookSyncs”)))
{
_boAnySettingChanged = true;
return “” + (ctrl.get_dataValue() ? “true” : “false”) + “”;
}

return “”;
}

function GetAddressBookPollingPeriod()
{
if (Mscrm.FormUtility.isControlDirty($get(‘numMinAddressBookSyncInterval’)))
{
_boAnySettingChanged = true;

return “” + Mscrm.FormControlInputBehavior.GetBehavior(‘numMinAddressBookSyncInterval’).get_dataValue() * 60 * 60 * 1000 + “”;
}

return “”;
}

function GetEmailConnectionChannel()
{
if (Mscrm.FormUtility.isControlDirty($get(“picklistEmailConnectionChannel”)))
{
_boAnySettingChanged = true;
return “” + CrmEncodeDecode.CrmXmlEncode(Mscrm.FormControlInputBehavior.GetBehavior(‘picklistEmailConnectionChannel’).get_dataValue()) + “”;
}
return “”;
}

function GetOutlookSyncInterval()
{
if (Mscrm.FormUtility.isControlDirty($get(‘numMinOutlookSyncInterval’)))
{
_boAnySettingChanged = true;

return “” + Mscrm.FormControlInputBehavior.GetBehavior(‘numMinOutlookSyncInterval’).get_dataValue() * 60 * 1000 + “”;
}

return “”;
}

function GetAllowClientMessageBarAd()
{
var ctrl = Mscrm.FormControlInputBehavior.GetBehavior(“rdAllowClientMessageBarAd”);
if (Mscrm.FormUtility.isControlDirty($get(“rdAllowClientMessageBarAd”)))
{
_boAnySettingChanged = true;
return “” + (ctrl.get_dataValue() ? “true” : “false”) + “”;
}

return “”;
}

function GetCustomizedHelpEnabled()
{
var ctrl = Mscrm.FormControlInputBehavior.GetBehavior(“rdCustomizedHelpEnabled”);
if (Mscrm.FormUtility.isControlDirty($get(“rdCustomizedHelpEnabled”)))
{
_boAnySettingChanged = true;
return “” + (ctrl.get_dataValue() ? “true” : “false”) + “”;
}

return “”;
}

function GetTaskBasedFlowEnabled()
{
var rdTaskBasedFlowEnabled = $get(“rdTaskBasedFlowPreview”);
if (rdTaskBasedFlowEnabled != null && Mscrm.FormUtility.isControlDirty(rdTaskBasedFlowEnabled))
{
var ctrl = Mscrm.FormControlInputBehavior.GetBehavior(“rdTaskBasedFlowPreview”);
_boAnySettingChanged = true;
return “” + (ctrl.get_dataValue() ? “true” : “false”) + “”;
}

return “”;
}

function GetOrgInsightsEnabled()
{
var rdorgInsightsEnabled = $get(“rdorgInsightsPreview”);
if (rdorgInsightsEnabled != null && Mscrm.FormUtility.isControlDirty(rdorgInsightsEnabled))
{
var ctrl = Mscrm.FormControlInputBehavior.GetBehavior(“rdorgInsightsPreview”);
_boAnySettingChanged = true;
return “” + (ctrl.get_dataValue() ? “true” : “false”) + “”;
}

return “”;
}

function GetCortanaProactiveExperienceEnabled()
{
var rdCortanaProactiveExperienceEnabled = $get(“rdCortanaProactiveExperiencePreview”);
if (rdCortanaProactiveExperienceEnabled != null)
{
var ctrl = Mscrm.FormControlInputBehavior.GetBehavior(“rdCortanaProactiveExperiencePreview”);
_boAnySettingChanged = true;
return “” + (ctrl.get_dataValue() ? “true” : “false”) + “”;
}

return “”;
}

function GetDelveActionHubIntegrationEnabled()
{
var rdDelveActionHubIntegrationEnabled = $get(“rdDelveActionHubPreview”);
if (rdDelveActionHubIntegrationEnabled != null)
{
var ctrl = Mscrm.FormControlInputBehavior.GetBehavior(“rdDelveActionHubPreview”);
_boAnySettingChanged = true;
return “” + (ctrl.get_dataValue() ? “true” : “false”) + “”;
}

return “”;
}

function GetAppendURLParametersEnabled()
{
var ctrl = Mscrm.FormControlInputBehavior.GetBehavior(“rdAppendURLParametersEnabled”);
if (Mscrm.FormUtility.isControlDirty($get(“rdAppendURLParametersEnabled”)))
{
_boAnySettingChanged = true;
return “” + (ctrl.get_dataValue() ? “true” : “false”) + “”;
}

return “”;
}

function GetQuickFindRecordLimitEnabled()
{
if (!IsNull(rdQuickFindRecordLimitEnabled) && Mscrm.FormUtility.isControlDirty($get(“rdQuickFindRecordLimitEnabled”)))
{
_boAnySettingChanged = true;
return “” + (Mscrm.FormControlInputBehavior.GetBehavior(“rdQuickFindRecordLimitEnabled”).get_dataValue() ? “true” : “false”) + “”;
}

return “”;
}

function GetIsFullTextSearchEnabled()
{
if (typeof(rdIsFullTextSearchEnabled) != “undefined” && !IsNull(rdIsFullTextSearchEnabled) && Mscrm.FormUtility.isControlDirty($get(“rdIsFullTextSearchEnabled”)))
{
_boAnySettingChanged = true;
return “” + (Mscrm.FormControlInputBehavior.GetBehavior(“rdIsFullTextSearchEnabled”).get_dataValue() ? “true” : “false”) + “”;
}

return “”;
}

function GetIsExternalSearchEnabled()
{
var ckEnableExternalSearchValue = $get(“ckEnableExternalSearch”);

if ((!IsNull(ckEnableExternalSearchValue) && Mscrm.FormUtility.isControlDirty(ckEnableExternalSearchValue)))
{
_boAnySettingChanged = true;

window.top.IsRelevanceSearchEnabledInOrgSettings = ckEnableExternalSearchValue.checked;

return “” + (ckEnableExternalSearchValue.checked ? “true” : “false”) + “”;
}

return “”;
}

function GetProductRecommendationsPreviewEnabled()
{
var rdProductRecommendationsPreview = $get(“rdProductRecommendationsPreview”);
if (!IsNull(rdProductRecommendationsPreview) && Mscrm.FormUtility.isControlDirty(rdProductRecommendationsPreview))
{
_boAnySettingChanged = true;
var ctrl = Mscrm.FormControlInputBehavior.GetBehavior(“rdProductRecommendationsPreview”);
return “” + (ctrl.get_dataValue() ? “true” : “false”) + “”;
}

return “”;
}

function GetTextAnalyticsPreviewEnabled()
{
var rdTextAnalyticsPreview = $get(“rdTextAnalyticsPreview”);
if (!IsNull(rdTextAnalyticsPreview) && Mscrm.FormUtility.isControlDirty(rdTextAnalyticsPreview))
{
rdTextAnalyticsPreview
var ctrl = Mscrm.FormControlInputBehavior.GetBehavior(“rdTextAnalyticsPreview”);
return “” + (ctrl.get_dataValue() ? “true” : “false”) + “”;
}

return “”;
}

function OpenQuickFindConfigDialog()
{
var oUrl = Mscrm.CrmUri.create(“/Tools/SystemSettings/Dialogs/QuickFindConfiguration.aspx”);
var dialogOptions = new Xrm.DialogOptions();
dialogOptions.height = 600;
dialogOptions.width = 800;
Xrm.Internal.openDialog(oUrl.toString(), dialogOptions, null, null, null);

}

function GetIsPresencedEnabled()
{
var ctrl = Mscrm.FormControlInputBehavior.GetBehavior(“rdIsPresenceEnabled”);
if (Mscrm.FormUtility.isControlDirty($get(“rdIsPresenceEnabled”)))
{
_boAnySettingChanged = true;
return “” + (ctrl.get_dataValue() ? “true” : “false”) + “”;
}

return “”;
}

function GetIsAutoSaveEnabled()
{
var ctrl = Mscrm.FormControlInputBehavior.GetBehavior(“rdIsAutoSaveEnabled”);
if (Mscrm.FormUtility.isControlDirty($get(“rdIsAutoSaveEnabled”)))
{
_boAnySettingChanged = true;
return “” + (ctrl.get_dataValue() ? “true” : “false”) + “”;
}

return “”;
}

function GetAllowUsersSeeAppDownloadMessage()
{
var ctrl = Mscrm.FormControlInputBehavior.GetBehavior(“rdAllowUsersSeeAppDownloadMessage”);
if (Mscrm.FormUtility.isControlDirty($get(“rdAllowUsersSeeAppDownloadMessage”)))
{
_boAnySettingChanged = true;
return “” + (ctrl.get_dataValue() ? “true” : “false”) + “”;
}

return “”;
}

function getReportCategoryUpdate()
{
var reportCategoryData = “”;
if(!IsNull(edtCategory_listEditComponent))
{
reportCategoryData += “” + edtCategory_listEditComponent.get_xmlData() + “”;
}
return reportCategoryData;
}

function GetRollupConfiguration()
{
var rollupConfigurationData = “”;
if (Mscrm.FormUtility.isControlDirty($get(‘rollupExpiryTime’)))
{
_boAnySettingChanged = true;
rollupConfigurationData += “” + Mscrm.FormControlInputBehavior.GetBehavior(‘rollupExpiryTime’).get_dataValue() + “”;
}

if (Mscrm.FormUtility.isControlDirty($get(‘rollupFrequency’)))
{
_boAnySettingChanged = true;
rollupConfigurationData += “” + Mscrm.FormControlInputBehavior.GetBehavior(‘rollupFrequency’).get_dataValue() + “”;
}

return rollupConfigurationData;
}

function GetIsSLASuppressed()
{
if (typeof(rdIsSLASuppressed) != “undefined” && !IsNull(rdIsSLASuppressed) && Mscrm.FormUtility.isControlDirty($get(“rdIsSLASuppressed”)))
{
_boAnySettingChanged = true;
return “” + (Mscrm.FormControlInputBehavior.GetBehavior(“rdIsSLASuppressed”).get_dataValue() ? “true” : “false”) + “”;
}

return “”;
}

function GetAutoApplySLA()
{
if (typeof(rdAutoApplySLA) != “undefined” && !IsNull(rdAutoApplySLA) && Mscrm.FormUtility.isControlDirty($get(“rdAutoApplySLA”)))
{
_boAnySettingChanged = true;
return “” + (Mscrm.FormControlInputBehavior.GetBehavior(“rdAutoApplySLA”).get_dataValue() ? “true” : “false”) + “”;
}

return “”;
}

function GetAutoApplyDefaultOnCaseCreate()
{
if (typeof(rdAutoApplyDefaultOnCaseCreate) != “undefined” && !IsNull(rdAutoApplyDefaultOnCaseCreate) && Mscrm.FormUtility.isControlDirty($get(“rdAutoApplyDefaultOnCaseCreate”)))
{
_boAnySettingChanged = true;
return “” + (Mscrm.FormControlInputBehavior.GetBehavior(“rdAutoApplyDefaultOnCaseCreate”).get_dataValue() ? “true” : “false”) + “”;
}

return “”;
}

function GetAutoApplyDefaultOnCaseUpdate()
{
if (typeof(rdAutoApplyDefaultOnCaseUpdate) != “undefined” && !IsNull(rdAutoApplyDefaultOnCaseUpdate) && Mscrm.FormUtility.isControlDirty($get(“rdAutoApplyDefaultOnCaseUpdate”)))
{
_boAnySettingChanged = true;
return “” + (Mscrm.FormControlInputBehavior.GetBehavior(“rdAutoApplyDefaultOnCaseUpdate”).get_dataValue() ? “true” : “false”) + “”;
}

return “”;
}

function GetIsSocialCareDisabled()
{
if (typeof(rdIsSocialCareDisabled) != “undefined” && !IsNull(rdIsSocialCareDisabled) && Mscrm.FormUtility.isControlDirty($get(“rdIsSocialCareDisabled”)))
{
_boAnySettingChanged = true;
return “” + (Mscrm.FormControlInputBehavior.GetBehavior(“rdIsSocialCareDisabled”).get_dataValue() ? “true” : “false”) + “”;
}

return “”;
}

function GetDisplayNavigationTour()
{
if (typeof(rdDisplayNavigationTour) != “undefined” && !IsNull(rdDisplayNavigationTour) && Mscrm.FormUtility.isControlDirty($get(“rdDisplayNavigationTour”)))
{
_boAnySettingChanged = true;
return “” + (Mscrm.FormControlInputBehavior.GetBehavior(“rdDisplayNavigationTour”).get_dataValue() ? “true” : “false”) + “”;
}

return “”;
}

function GetUseLegacyRendering()
{
if (typeof(rdUseLegacyFormRendering) != “undefined” && !IsNull(rdUseLegacyFormRendering) && Mscrm.FormUtility.isControlDirty($get(“rdUseLegacyFormRendering”)))
{
_boAnySettingChanged = true;
return “” + (Mscrm.FormControlInputBehavior.GetBehavior(“rdUseLegacyFormRendering”).get_dataValue() ? “true” : “false”) + “”;
}

return “”;
}

function GetPowerBIFeatureEnabled()
{
if (!IsNull(rdPowerBiFeatureEnabled) && Mscrm.FormUtility.isControlDirty($get(“rdPowerBiFeatureEnabled”)))
{
_boAnySettingChanged = true;
return “” + (Mscrm.FormControlInputBehavior.GetBehavior(“rdPowerBiFeatureEnabled”).get_dataValue() ? “true” : “false”) + “”;
}

return “”;
}
function GetDefaultMobileOfflineProfileOption()
{
if (Mscrm.FormUtility.isControlDirty($get(“defaultMobileOfflineProfile”)))
{
_boAnySettingChanged = true;
var oDefaultMobileOfflineProfile = Mscrm.FormControlInputBehavior.GetBehavior(‘defaultMobileOfflineProfile’);
return “” + ((IsNull(oDefaultMobileOfflineProfile.get_dataValue()) || IsNull(oDefaultMobileOfflineProfile.get_dataValue()[0].id)) ? “” : CrmEncodeDecode.CrmXmlEncode(oDefaultMobileOfflineProfile.get_dataValue()[0].id)) + “”;
}

return “”;
}

function GetConflictDetectionSettings()
{
if (typeof(rdIsConflictDetectionEnabledForMobileClient) != “undefined” && !IsNull(rdIsConflictDetectionEnabledForMobileClient) && Mscrm.FormUtility.isControlDirty($get(“rdIsConflictDetectionEnabledForMobileClient”)))
{
_boAnySettingChanged = true;
return “” + (Mscrm.FormControlInputBehavior.GetBehavior(“rdIsConflictDetectionEnabledForMobileClient”).get_dataValue() ? “true” : “false”) + “”;
}

return “”;
}

function updateUI(bDropName)
{
var bConfirm = true;

if (bDropName)
{
bConfirm = confirm(LOCID_NAME_ORDER_CONFIRM);

if (bConfirm)
{
$get(“FullName”).value = $get(“selectFullNameConventionCode”).value;
}
else
{
$get(“selectFullNameConventionCode”).value = $get(“FullName”).value;
}
}
}

var _iTrackingPrefixMaxLength = 256;
var _sTrackingPrefixSeparator = ‘\x3b’;
var _sOriginalTrackingPrefix;

function GetTrackingPrefix()
{
var sTrackingPrefix = “”;
var sOldTrackingPrefix = “”;
var aTrackingPrefixes = _sOriginalTrackingPrefix.split(_sTrackingPrefixSeparator);

for (var i = 0; i < aTrackingPrefixes.length; i++)
{
var sSubTrackingPrefix = aTrackingPrefixes[i].replace(/^\s*|\s*$/g,””);
if (sSubTrackingPrefix != “”)
{
sOldTrackingPrefix = sSubTrackingPrefix;
break;
}
}

if (txtTrackingPrefixCtrl.get_dataValue() != null)
{
sTrackingPrefix = txtTrackingPrefixCtrl.get_dataValue();
}

if (sTrackingPrefix == sOldTrackingPrefix)
{

return “”;
}
else
{

sTrackingPrefix += _sTrackingPrefixSeparator + _sOriginalTrackingPrefix;

sTrackingPrefix = trimTrackingPrefix(sTrackingPrefix);

_boAnySettingChanged = true;
return “” + CrmEncodeDecode.CrmXmlEncode(sTrackingPrefix) + “”;
}
}

function setTrackingPrefix(sOriginalTrackingPrefix)
{
var sTrackingPrefix;

var aTrackingPrefixes = sOriginalTrackingPrefix.split(_sTrackingPrefixSeparator);

for (var i = 0; i _iTrackingPrefixMaxLength)
{

var aTrackingPrefixes = sTrackingPrefix.split(_sTrackingPrefixSeparator);

sTrackingPrefix = “”;
for (var i = 0; i < aTrackingPrefixes.length; i++)
{
var sSubTrackingPrefix = aTrackingPrefixes[i].replace(/^\s*|\s*$/g,””);
if (sSubTrackingPrefix == “”)
{
continue;
}
else if ((sTrackingPrefix.length + sSubTrackingPrefix.length) <= _iTrackingPrefixMaxLength)
{
sTrackingPrefix += sSubTrackingPrefix + _sTrackingPrefixSeparator;
}
else
{
break;
}
}
}

return sTrackingPrefix;
}

function setSMFilter(sOrignalSMFilter)
{
txtSMFilterCtrl.set_dataValue(sOrignalSMFilter);
}

function GetRegionalFormatCode()
{
if (Mscrm.FormUtility.isControlDirty($get(“selectRegionalFormatCode”)))
{
_boAnySettingChanged = true;
return “” + CrmEncodeDecode.CrmXmlEncode($get(“selectRegionalFormatCode”).value) + “”;
}

return “”;
}

function GetFullNameConventionCode()
{
if (Mscrm.FormUtility.isControlDirty($get(“selectFullNameConventionCode”)))
{
_boAnySettingChanged = true;
return “” + CrmEncodeDecode.CrmXmlEncode($get(“selectFullNameConventionCode”).value) + “”;
}

return “”;
}

function GetTrackingIdBase()
{
if (Mscrm.FormUtility.isControlDirty($get(‘numTrackingIdBase’)))
{
_boAnySettingChanged = true;
return “” + CrmEncodeDecode.CrmXmlEncode(Mscrm.FormControlInputBehavior.GetBehavior(‘numTrackingIdBase’).get_dataValue()) + “”;
}

return “”;
}

function GetTrackingIdLength()
{
if (Mscrm.FormUtility.isControlDirty($get(“selTrackingIdLength”)))
{
_boAnySettingChanged = true;
return “” + CrmEncodeDecode.CrmXmlEncode(selTrackingIdLengthCtrl.get_dataValue()) + “”;
}

return “”;
}

function GetEnableEmailCorrelation()
{
if (Mscrm.FormUtility.isControlDirty($get(“ckEnableEmailCorrelation”)))
{
_boAnySettingChanged = true;
return “” + CrmEncodeDecode.CrmXmlEncode(Mscrm.FormControlInputBehavior.GetBehavior(‘ckEnableEmailCorrelation’).get_dataValue()) + “”;
}
}

function GetEnableFolderBasedTracking()
{
if (Mscrm.FormUtility.isControlDirty($get(“ckEnableFolderBasedTracking”)))
{
_boAnySettingChanged = true;
return “” + CrmEncodeDecode.CrmXmlEncode(Mscrm.FormControlInputBehavior.GetBehavior(‘ckEnableFolderBasedTracking’).get_dataValue()) + “”;
}
}

function GetEnableSmartMatching()
{
if (Mscrm.FormUtility.isControlDirty($get(“ckEnableSmartMatching”)))
{
_boAnySettingChanged = true;

return “” + CrmEncodeDecode.CrmXmlEncode(Mscrm.FormControlInputBehavior.GetBehavior(“ckEnableSmartMatching”).get_dataValue()) + “”;
}
}
function GetEnableConversationTracking()
{
if (Mscrm.FormUtility.isControlDirty($get(“ckEnableConversationTracking”)))
{
_boAnySettingChanged = true;
return “” + CrmEncodeDecode.CrmXmlEncode(Mscrm.FormControlInputBehavior.GetBehavior(‘ckEnableConversationTracking’).get_dataValue()) + “”;
}
}

function GetSMFilter()
{
if (Mscrm.FormUtility.isControlDirty($get(“txtSMFilter”)))
{
_boAnySettingChanged = true;
return “” + CrmEncodeDecode.CrmXmlEncode(txtSMFilterCtrl.get_dataValue()) + “”;
}
}

function GetSMKeywordLimit()
{
if (Mscrm.FormUtility.isControlDirty($get(‘numSMKeywordLimit’)))
{
_boAnySettingChanged = true;
return “” + CrmEncodeDecode.CrmXmlEncode(Mscrm.FormControlInputBehavior.GetBehavior(‘numSMKeywordLimit’).get_dataValue()) + “”;
}
}

function GetSMMaxDifference()
{
if (Mscrm.FormUtility.isControlDirty($get(‘numSMMaxDifference’)))
{
_boAnySettingChanged = true;
return “” + CrmEncodeDecode.CrmXmlEncode(Mscrm.FormControlInputBehavior.GetBehavior(‘numSMMaxDifference’).get_dataValue()) + “”;
}
}

function GetSMMinRecipients()
{
if (Mscrm.FormUtility.isControlDirty($get(‘numSMMinRecipients’)))
{
_boAnySettingChanged = true;
return “” + CrmEncodeDecode.CrmXmlEncode(Mscrm.FormControlInputBehavior.GetBehavior(‘numSMMinRecipients’).get_dataValue()) + “”;
}
}

function GetShareOnAssign()
{
var ctrl = Mscrm.FormControlInputBehavior.GetBehavior(“rdShareOnAssign”);
if (Mscrm.FormUtility.isControlDirty($get(“rdShareOnAssign”)))
{
_boAnySettingChanged = true;
return “” + (ctrl.get_dataValue() ? “true” : “false”) + “”;
}

return “”;
}

function GetCurrencyDisplayOption()
{
if (Mscrm.FormUtility.isControlDirty($get(“picklistCurrencyDisplayOption”)))
{
_boAnySettingChanged = true;
return “” + CrmEncodeDecode.CrmXmlEncode(Mscrm.FormControlInputBehavior.GetBehavior(“picklistCurrencyDisplayOption”).get_dataValue()) + “”;
}

return “”;
}

function GetHelpURL()
{
if (Mscrm.FormUtility.isControlDirty($get(“txtURLHelp”)))
{
_boAnySettingChanged = true;
var txtURLHelpControl = Mscrm.FormControlInputBehavior.GetBehavior(“txtURLHelp”);
var dataValue = txtURLHelpControl.get_dataValue() ? txtURLHelpControl.get_dataValue() : “”;
txtURLHelpControl.set_dataValue(dataValue.replace(/[\n\r]+/g, “”));
return “” + CrmEncodeDecode.CrmXmlEncode(txtURLHelpControl.get_dataValue() ? txtURLHelpControl.get_dataValue() : “”) + “”;
}

return “”;
}

function GetBlockedAttachment()
{
if (Mscrm.FormUtility.isControlDirty($get(“txtBlockedAttachment”)))
{
_boAnySettingChanged = true;

var txtBlockedAttachmentControl = Mscrm.FormControlInputBehavior.GetBehavior(“txtBlockedAttachment”);
var dataValue = txtBlockedAttachmentControl.get_dataValue() ? txtBlockedAttachmentControl.get_dataValue() : “”;
txtBlockedAttachmentControl.set_dataValue(dataValue.replace(/[\n\r]+/g, “”));
return “” + CrmEncodeDecode.CrmXmlEncode(txtBlockedAttachmentControl.get_dataValue() ? txtBlockedAttachmentControl.get_dataValue() : “”) + “”;
}

return “”;
}

function GetUseSecureFrame()
{
var ctrl = Mscrm.FormControlInputBehavior.GetBehavior(“rdUseSecureFrame”);
if (Mscrm.FormUtility.isControlDirty($get(“rdUseSecureFrame”)))
{
_boAnySettingChanged = true;
return “” + (ctrl.get_dataValue() ? “true” : “false”) + “”;
}

return “”;
}

function GetMaximumAppointmentDuration()
{
if (Mscrm.FormUtility.isControlDirty($get(‘numberMaximumAppointmentDuration’)))
{
_boAnySettingChanged = true;
var value = Mscrm.FormControlInputBehavior.GetBehavior(‘numberMaximumAppointmentDuration’).get_dataValue();
return “” + value + “”;
}

return “”;
}

function GetAllowUnresolvedParty()
{
var ctrl = Mscrm.FormControlInputBehavior.GetBehavior(“rdAllowUnresolvedParty”);
if (Mscrm.FormUtility.isControlDirty($get(“rdAllowUnresolvedParty”)))
{
_boAnySettingChanged = true;
return “” + (ctrl.get_dataValue() ? “true” : “false”) + “”;
}

return “”;
}

function GetEnableResponseCreation()
{
var ctrl = Mscrm.FormControlInputBehavior.GetBehavior(“rdEnableResponseCreation”);
if (Mscrm.FormUtility.isControlDirty($get(“rdEnableResponseCreation”)))
{
_boAnySettingChanged = true;
return “” + (ctrl.get_dataValue() ? “1” : “0”) + “”;
}

return “”;
}

function GetEnableExecution()
{
var ctrl = Mscrm.FormControlInputBehavior.GetBehavior(“rdEnableExecution”);
if (Mscrm.FormUtility.isControlDirty($get(“rdEnableExecution”)))
{
_boAnySettingChanged = true;
return “” + (ctrl.get_dataValue() ? “1” : “0”) + “”;
}

return “”;
}

function GetEnableDefaultCountryCodeFlag()
{
_boAnySettingChanged = true;
if (!IsNull(document.getElementById(“ckEnableDefaultCountryCode”)))
{
if (Mscrm.FormUtility.isControlDirty($get(“ckEnableDefaultCountryCode”)))
{
return “” + ($get(“ckEnableDefaultCountryCode”).checked ? “true” : “false”) + “”;

}
}
return “”;
}

function GetEnableDefaultCountryCodeValue()
{
_boAnySettingChanged = true;
if (!IsNull(document.getElementById(“txtDefaultCountryCode”)))
{
if (Mscrm.FormUtility.isControlDirty($get(“txtDefaultCountryCode”)))
{
var txtDefaultCountryCodeControl = Mscrm.FormControlInputBehavior.GetBehavior(“txtDefaultCountryCode”);
var dataValue = txtDefaultCountryCodeControl.get_dataValue() ? txtDefaultCountryCodeControl.get_dataValue() : “”;
return “” + CrmEncodeDecode.CrmXmlEncode(dataValue) + “”;
}
}
return “”;
}

function GetEnableUnsubscription()
{
var ctrl = Mscrm.FormControlInputBehavior.GetBehavior(“rdEnableUnsubscription”);
if (Mscrm.FormUtility.isControlDirty($get(“rdEnableUnsubscription”)))
{
_boAnySettingChanged = true;
return “” + (ctrl.get_dataValue() ? “1” : “0”) + “”;
}

return “”;
}

function GetEnableUnsubscriptionAcknowledgement()
{
var ctrl = Mscrm.FormControlInputBehavior.GetBehavior(“rdEnableUnsubscriptionAcknowledgement”);
if (Mscrm.FormUtility.isControlDirty($get(“rdEnableUnsubscriptionAcknowledgement”)))
{
_boAnySettingChanged = true;
return “” + (ctrl.get_dataValue() ? “1” : “0”) + “”;
}

return “”;
}

function GetDefaultProtocolInformation()
{
var useSkypeProtocol = Mscrm.FormControlInputBehavior.GetBehavior(“rdUseSkypeProtocol”);
if (!IsNull(useSkypeProtocol) && Mscrm.FormUtility.isControlDirty($get(“rdUseSkypeProtocol”)))
{
_boAnySettingChanged = true;
return “” + (useSkypeProtocol.get_dataValue() ? “1” : “0”) + “”;
}
return “”;
}

function GetTemplateLookup()
{
if (Mscrm.FormUtility.isControlDirty($get(“luTemplateLookup”)))
{
_boAnySettingChanged = true;
var lookupValue = Mscrm.FormControlInputBehavior.GetBehavior(“luTemplateLookup”).get_dataValue();
return “” + ((IsNull(lookupValue) || IsNull(lookupValue[0].id)) ? “” : CrmEncodeDecode.CrmXmlEncode(lookupValue[0].id)) + “”;
}

return “”;
}

function openEntityCustomization()
{
openObj(7100, ‘{fd140aaf-4df4-11dd-bd17-0019b9312238}’, ‘def_category=9801’, null, true, null);
}

function GetEnableAudit()
{
if (Mscrm.FormUtility.isControlDirty($get(“ckEnableAudit”)))
{
_boAnySettingChanged = true;
return “” + ($get(“ckEnableAudit”).checked ? “true” : “false”) + “”;
}

return “”;
}
function GetEnableUserAccessAudit()
{
if (Mscrm.FormUtility.isControlDirty($get(“ckEnableUserAccessAudit”)))
{
_boAnySettingChanged = true;
return “” + ($get(“ckEnableUserAccessAudit”).checked ? “true” : “false”) + “”;
}

return “”;
}
function GetAreaAuditXml()
{
var auditAreaXml = “”;

if (document.getElementById(“ckCommonAudit”) != null)
{
if (Mscrm.FormUtility.isControlDirty($get(“ckCommonAudit”)))
{
_boAnySettingChanged = true;
auditAreaXml = auditAreaXml + “”;
auditAreaXml = auditAreaXml + “accountcontactleadproductsalesliteraturelistbulkoperationreportgoalmetricgoalrollupqueryrolesystemuser” + “”
}

if (Mscrm.FormUtility.isControlDirty($get(“ckSFAAudit”)))
{
_boAnySettingChanged = true;
auditAreaXml = auditAreaXml + “”;
auditAreaXml = auditAreaXml + “opportunitycompetitorquotesalesorderinvoice” + “”
}

if (Mscrm.FormUtility.isControlDirty($get(“ckMAAudit”)))
{
_boAnySettingChanged = true;
auditAreaXml = auditAreaXml + “”;
auditAreaXml = auditAreaXml + “campaigncdi_iporganizationcdi_anonymousvisitorcdi_visitcdi_pageviewcdi_postedformcdi_postedfieldcdi_postedsurveycdi_surveyanswercdi_automationcdi_emailsendcdi_emailtemplatecdi_sentemailcdi_emaileventcdi_unsubscribecdi_postedsubscriptioncdi_subscriptionpreferencecdi_bulktxtmessagecdi_eventcdi_eventparticipation” + “”
}

if (Mscrm.FormUtility.isControlDirty($get(“ckCSAudit”)))
{
_boAnySettingChanged = true;
auditAreaXml = auditAreaXml + “”;
auditAreaXml = auditAreaXml + “socialprofileincidentqueueitemkbarticlecontractservice” + “”
}
}
auditAreaXml = auditAreaXml + “”;
return auditAreaXml;
}

function GetPricingDecimalPrecision()
{
if (Mscrm.FormUtility.isControlDirty($get(“selectPricingDecimalPrecision”)))
{
_boAnySettingChanged = true;
return “” + CrmEncodeDecode.CrmXmlEncode($get(“selectPricingDecimalPrecision”).value) + “”;
}

return “”;
}

function GetMaxUploadFileSize()
{
if (Mscrm.FormUtility.isControlDirty($get(‘numberMaxUploadFileSize’)))
{
_boAnySettingChanged = true;

return “” + Mscrm.FormControlInputBehavior.GetBehavior(‘numberMaxUploadFileSize’).get_dataValue() * 1024 + “”;
}

return “”;
}

function GetEmailServerProfileOption()
{
if (Mscrm.FormUtility.isControlDirty($get(“emailServerProfile”)))
{
_boAnySettingChanged = true;
var oEmailServerProfile = Mscrm.FormControlInputBehavior.GetBehavior(’emailServerProfile’);
return “” + ((IsNull(oEmailServerProfile.get_dataValue()) || IsNull(oEmailServerProfile.get_dataValue()[0].id)) ? “” : CrmEncodeDecode.CrmXmlEncode(oEmailServerProfile.get_dataValue()[0].id)) + “”;
}

return “”;
}

function GetDefaultEmailSettings()
{
if (Mscrm.FormUtility.isControlDirty($get(“incomingEmailDeliveryMethod”)) ||
Mscrm.FormUtility.isControlDirty($get(“outgoingEmailDeliveryMethod”)) ||
Mscrm.FormUtility.isControlDirty($get(“actDeliveryMethod”)))
{
_boAnySettingChanged = true;
return “” +
CrmEncodeDecode.CrmXmlEncode(“” +
“” + CrmEncodeDecode.CrmXmlEncode(Mscrm.FormControlInputBehavior.GetBehavior(‘incomingEmailDeliveryMethod’).get_dataValue()) + “” +
“” + CrmEncodeDecode.CrmXmlEncode(Mscrm.FormControlInputBehavior.GetBehavior(‘outgoingEmailDeliveryMethod’).get_dataValue()) + “” +
“” + CrmEncodeDecode.CrmXmlEncode(Mscrm.FormControlInputBehavior.GetBehavior(‘actDeliveryMethod’).get_dataValue()) + “” +
“”) +
“”;
}

return “”;
}

function GetIgnoreInternalEmail()
{
if (Mscrm.FormUtility.isControlDirty($get(“ckEnableExclude”)))
{
_boAnySettingChanged = true;
return “” + ($get(“ckEnableExclude”).checked ? “false” : “true”) + “”;
}

return “”;
}

function GetEnableBingMapsIntegration()
{
if (Mscrm.FeatureControl.get_Current().isFeatureEnabled(Mscrm.FeatureNames.RefreshSales))
{
if (Mscrm.FormUtility.isControlDirty($get(“rdEnableBingIntegration”)))
{
_boAnySettingChanged = true;
return “” + (Mscrm.FormControlInputBehavior.GetBehavior(“rdEnableBingIntegration”).get_dataValue() ? “true” : “false”) + “”;
}
}
return “”;
}

function GetBingMapsApiKey()
{
if (!IsNull(document.getElementById(“txtBingMapsApiKey”)))
{
if(Mscrm.FormUtility.isControlDirty($get(“txtBingMapsApiKey”)))
{
_boAnySettingChanged = true;
var txtBingMapsApiKeyControl= Mscrm.FormControlInputBehavior.GetBehavior(“txtBingMapsApiKey”);
var dataValue = txtBingMapsApiKeyControl.get_dataValue() ? txtBingMapsApiKeyControl.get_dataValue() : “”;
return “” + CrmEncodeDecode.CrmXmlEncode(dataValue) + “”;
}
}
return “”;
}

function GetEnableAppMode()
{
if (Mscrm.FormUtility.isControlDirty($get(“ckEnableAppMode”)))
{
_boAnySettingChanged = true;
return “” + ($get(“ckEnableAppMode”).checked ? “true” : “false”) + “”;
}

return “”;
}

function GetPluginTracing()
{
if (Mscrm.FormUtility.isControlDirty($get(“selectPluginTracingLevels”)))
{
_boAnySettingChanged = true;
return “” + CrmEncodeDecode.CrmXmlEncode($get(“selectPluginTracingLevels”).value) + “”;
}

return “”;
}

function GetEnableBusinessNetwork()
{
if (Mscrm.FormUtility.isControlDirty($get(‘rdIsBusinessNetworkEnabled’)))
{
_boAnySettingChanged = true;
return “” + ($get(‘rdIsBusinessNetworkEnabled’).checked ? “true” : “false”) + “”;
}
return “”;
}

function GetDisableIECompatibilityMode()
{
var chkIECompatMode = $get(“ckDisableIECompatibilityMode”);
if(!IsNull(chkIECompatMode)){
if (Mscrm.FormUtility.isControlDirty(chkIECompatMode))
{
_boAnySettingChanged = true;
return “” + (chkIECompatMode.checked ? “true” : “false”) + “”;
}
}

return “”;
}

function GetMaximumBundleItems()
{
if (Mscrm.FormUtility.isControlDirty($get(‘numberMaximumBundleItems’)))
{
_boAnySettingChanged = true;
var value = Mscrm.FormControlInputBehavior.GetBehavior(‘numberMaximumBundleItems’).get_dataValue();
return “” + value + “”;
}

return “”;
}

function GetDefaultDiscountSetting()
{
if (Mscrm.FormUtility.isControlDirty($get(“picklistDiscountTypeOptionMethod”)))
{
_boAnySettingChanged = true;
return “”+ CrmEncodeDecode.CrmXmlEncode(Mscrm.FormControlInputBehavior.GetBehavior(“picklistDiscountTypeOptionMethod”).get_dataValue()) +””;
}
return “”;

}

function GetDefaultPriceListRuleEnabled()
{
if (Mscrm.FormUtility.isControlDirty($get(‘rdDefaultPricelistRuleEnabled’)))
{

_boAnySettingChanged = true;
return “” + (Mscrm.FormControlInputBehavior.GetBehavior(“rdDefaultPricelistRuleEnabled”).get_dataValue() ? “true” : “false”) + “”;

}

return “”;
}
function GetOOBPriceCalculationEnabled()
{
if (Mscrm.FormUtility.isControlDirty($get(“rdOOBPriceCalculationEnabled”)))
{
_boAnySettingChanged = true;
return “” + (Mscrm.FormControlInputBehavior.GetBehavior(“rdOOBPriceCalculationEnabled”).get_dataValue() ? “false” : “true”) + “”;
}

return “”;
}

function GetCreateProductsWithoutParentInActiveStateEnabled()
{
if (Mscrm.FormUtility.isControlDirty($get(‘rdCreateProductsWithoutParentInActiveState’)))
{

_boAnySettingChanged = true;
return “” + (Mscrm.FormControlInputBehavior.GetBehavior(“rdCreateProductsWithoutParentInActiveState”).get_dataValue() ? “true” : “false”) + “”;
}

return “”;
}

function handleEntityTypeChange()
{
var independentMapping = document.getElementsByName(“independentMapping”);
for (var i = 0; i < independentMapping.length; i++)
{

independentMapping[i].style.display = “none”;
}

var computedMapping = document.getElementsByName(“computedMapping”);
for (var i = 0; i < computedMapping.length; i++)
{

computedMapping[i].style.display = “none”;
}

var selectedValue = Mscrm.FormControlInputBehavior.GetBehavior(“EntityTypeSelector”).get_dataValue();
var visibleAttributeRows = document.getElementsByClassName(selectedValue.toLowerCase());

for (var i = 0; i < visibleAttributeRows.length; i++)
{

if ((visibleAttributeRows[i].getAttribute(“name”) == “independentMapping”)||(visibleAttributeRows[i].getAttribute(“name”) == “computedMapping”))
{
visibleAttributeRows[i].style.display = “”;
}
}
}

function GetMaximumDynamicPropertiesAllowed()
{
if (Mscrm.FormUtility.isControlDirty($get(‘numberMaximumDynamicPropertiesAllowed’)))
{
_boAnySettingChanged = true;
var value = Mscrm.FormControlInputBehavior.GetBehavior(‘numberMaximumDynamicPropertiesAllowed’).get_dataValue();
return “” + value + “”;
}
return “”;
}

function GetEmailApprovalValue()
{
var returnValue = “”;
if (Mscrm.FormUtility.isControlDirty($get(“ckUserApproval”)))
{
_boAnySettingChanged = true;
returnValue = “” + ($get(“ckUserApproval”).checked ? “1” : “0”) + “”;
}

if (Mscrm.FormUtility.isControlDirty($get(“ckQueueApproval”)))
{
_boAnySettingChanged = true;
returnValue = returnValue + “” + ($get(“ckQueueApproval”).checked ? “1” : “0”) + “”;
}

return returnValue;
}

function GetTrackingNumberLength()
{
var ckEnableTracking = $get(“ckEnableTracking”);
if (Mscrm.FormUtility.isControlDirty(ckEnableTracking) || Mscrm.FormUtility.isControlDirty(selTrackingNumberLengthElement))
{
_boAnySettingChanged = true;
return “” + (ckEnableTracking.checked ? CrmEncodeDecode.CrmXmlEncode(selTrackingNumberLengthCtrl.get_dataValue()) : “0”) + “”;
}

return “”;
}

function GetAlertSettings()
{
var ckGenerateAlertsForErrors = $get(“ckGenerateAlertsForErrors”);
var ckGenerateAlertsForWarnings = $get(“ckGenerateAlertsForWarnings”);
var ckGenerateAlertsForInformation = $get(“ckGenerateAlertsForInformation”);
var ckNotifyMailboxOwnerOfEmailServerLevelAlerts = $get(“ckNotifyMailboxOwnerOfEmailServerLevelAlerts”);

var returnValue = “”;
if (Mscrm.FormUtility.isControlDirty(ckGenerateAlertsForErrors))
{
_boAnySettingChanged = true;
returnValue = “” + (ckGenerateAlertsForErrors.checked ? “1” : “0”) + “”;
}
if (Mscrm.FormUtility.isControlDirty(ckGenerateAlertsForWarnings))
{
_boAnySettingChanged = true;
returnValue = returnValue + “” + (ckGenerateAlertsForWarnings.checked ? “1” : “0”) + “”;
}
if (Mscrm.FormUtility.isControlDirty(ckGenerateAlertsForInformation))
{
_boAnySettingChanged = true;
returnValue = returnValue + “” + (ckGenerateAlertsForInformation.checked ? “1” : “0”) + “”;
}
if (Mscrm.FormUtility.isControlDirty(ckNotifyMailboxOwnerOfEmailServerLevelAlerts))
{
_boAnySettingChanged = true;
returnValue = returnValue + “” + (ckNotifyMailboxOwnerOfEmailServerLevelAlerts.checked ? “1” : “0”) + “”;
}
return returnValue;
}

function enableEmailTracking(bEnable)
{
var bDisabled = !bEnable;
document.getElementById(“tokenConfig”).style.display = bDisabled ? “none” : “”;
}

function updateTrackingTokenExample()
{
var sTrackingPrefix = txtTrackingPrefixCtrl.get_dataValue();
sTrackingPrefix = IsNull(sTrackingPrefix) ? “” : sTrackingPrefix;
var sOnlineFlag = “0”;
var sTrackingId = “000000000” + (Mscrm.FormControlInputBehavior.GetBehavior(‘numTrackingIdBase’).get_dataValue() + 1).toString();
var sTrackingNumber = “000000001”;
var iTrackingIdLength = Number(selTrackingIdLengthCtrl.get_dataValue());
var iTrackingNumberLength = selTrackingNumberLengthCtrl.get_dataValue().length;

sTrackingId = sTrackingId.substring(sTrackingId.length – iTrackingIdLength, sTrackingId.length);
sTrackingNumber = sTrackingNumber.substring(sTrackingNumber.length – iTrackingNumberLength, sTrackingNumber.length);

XUI.Html.SetText($get(‘tdTrakingTokenExample’), sTrackingPrefix + sOnlineFlag + sTrackingId + sTrackingNumber);
}

function enableSmartMatching(bEnable)
{
var bDisabled = !bEnable;
document.getElementById(“smartmatching”).style.display = bDisabled ? “none” : “”;
}

function updateReadingOrder()
{
if ( LOCID_UI_DIR == “RTL” )
{
document.getElementById(‘sample_number_d’).style.direction = “ltr”;
document.getElementById(‘sample_currency_d’).style.direction = “ltr”;
document.getElementById(‘sample_number_d’).style.textAlign = “right”;
document.getElementById(‘sample_currency_d’).style.textAlign = “right”;
}
}

function setOptionText(selBox, sValue, sText)
{

var index = selBox.indexOf(sValue);

if (index != -1)
{
XUI.Html.SetText(selBox.options[index], sText);
}
}
function AdjustTabAndContentWidth() {
var tabWidth = $get(“crmTabBar”).offsetWidth;
var tabBlockWidth = document.getElementById(“divTabBlock”).offsetWidth;
var curWidth = (((tabWidth > tabBlockWidth) ? tabWidth : tabBlockWidth) – 3);
document.getElementById(“divContentArea”).style.width = curWidth + “px”
document.getElementById(“divTab”).style.width = curWidth + “px”
}

function RemoveHandlersOnClose() {
$removeHandler(window, ‘resize’, AdjustTabAndContentWidth);
}

function GetSLAPauseStates(){

var primaryEntity=$get(“PrimaryEntity”).value;
HandleEntityPauseStates(primaryEntity);
return “” + CrmEncodeDecode.CrmXmlEncode(PAUSE_STATES) + “”;

}

function HandleEntityPauseStates(selectedEntity){
var _oResult = {};
var oRows = XUI.Html.DomUtils.GetFirstChild($get(“rtnObjList”)).rows;
var xmlDoc= XUI.Xml.LoadXml(PAUSE_STATES);
var xmlRootNode = xmlDoc.documentElement;
var entityNodes = xmlDoc.getElementsByTagName(“entity”);
var slaPauseStates=”” ;
for (var rowId = 0; rowId < oRows.length; rowId++)
{
slaPauseStates = slaPauseStates+ (rowId==0 ?””: “;”) + XUI.Html.DomUtils.GetFirstChild(oRows[rowId]).id;
}
var nodepresent=false;
for(var nodeId = 0; nodeId < entityNodes.length; nodeId++)
{
if(entityNodes[nodeId].getAttribute(“value”) == selectedEntity)
{
nodepresent=true;
if(entityNodes[nodeId].firstChild)
{
(entityNodes[nodeId].firstChild).data = slaPauseStates;
}
else if(slaPauseStates != “”)
{
var newTextNode = xmlDoc.createTextNode(slaPauseStates);
entityNodes[nodeId].appendChild(newTextNode);
}
break;
}
}

if(nodepresent == false)
{
newEntityNode = xmlDoc.createElement(“entity”);
newEntityNode.setAttribute(“value”,selectedEntity);
var newTextNode = xmlDoc.createTextNode(slaPauseStates);
newEntityNode.appendChild(newTextNode);
xmlRootNode.appendChild(newEntityNode);
}
try
{
PAUSE_STATES = (new XMLSerializer()).serializeToString(xmlDoc.documentElement);
}
catch(e)
{
PAUSE_STATES = (xmlDoc.documentElement).xml;
}
}

function ConfigServiceTab(){
Mscrm.SetStatusTransition.entityTypeCode = Mscrm.EntityTypeCode.Incident;

oldPrimaryEntity = Mscrm.InternalUtilities.EntityNames.Incident;

var statusXmlDoc = XUI.Xml.LoadXml( STATUS_XML);
var statusEntityNodeList = statusXmlDoc.getElementsByTagName(“entity”);
var incidentStatusXml;
for(var nodeId = 0; nodeId < statusEntityNodeList.length; nodeId++)
{
if(statusEntityNodeList[nodeId].getAttribute(“value”) == Mscrm.InternalUtilities.EntityNames.Incident)
{
incidentStatusXml = statusEntityNodeList[nodeId].firstChild;
break;
}
}
var incidentStatusXmlString = XUI.Xml.XMLSerializer.serializeToString(incidentStatusXml);
var incidentPauseStates = “”;

var pauseStatesXmlDoc = XUI.Xml.LoadXml(PAUSE_STATES);

if(pauseStatesXmlDoc.documentElement == null || pauseStatesXmlDoc.documentElement.nodeName != “entitiesstates”)
{
var pausevalues = PAUSE_STATES;
PAUSE_STATES = “”+CrmEncodeDecode.CrmXmlEncode(pausevalues)+””;
pauseStatesXmlDoc = XUI.Xml.LoadXml(PAUSE_STATES);
}

var entityNodeList = pauseStatesXmlDoc.getElementsByTagName(“entity”);
for(var nodeId = 0; nodeId < entityNodeList.length; nodeId++)
{
if(entityNodeList[nodeId].getAttribute(“value”) == Mscrm.InternalUtilities.EntityNames.Incident)
{
incidentPauseStates = (entityNodeList[nodeId].firstChild) ? ((entityNodeList[nodeId].firstChild).data) : “”;
break;
}
}

var statusXML;
var PauseStates;

statusXML = incidentStatusXmlString;
PauseStates = incidentPauseStates;

if(isOutlookHostedWindow())
{

if (Mscrm.InternalUtilities.JSTypes.isNull(window.dialogArguments))
{
window.dialogArguments={};
}
window.dialogArguments[“valuesXml”] = Mscrm.SelectStatusTransition.createAvailableFieldsXml( XUI.Xml.LoadXml(statusXML), 1);
window.dialogArguments[“sSelectedValues”] = PauseStates;
}
else
{

if (Mscrm.InternalUtilities.JSTypes.isNull(window.inlineDialogArguments))
{
window.inlineDialogArguments={};
}
window.inlineDialogArguments[“valuesXml”] = Mscrm.SelectStatusTransition.createAvailableFieldsXml( XUI.Xml.LoadXml(statusXML), 1);
window.inlineDialogArguments[“sSelectedValues”] = PauseStates;
}
}

function OnChangePrimaryEntity(){
HandleEntityPauseStates(oldPrimaryEntity);
var primaryEntity = $get(“PrimaryEntity”).value;
oldPrimaryEntity = primaryEntity;

var statusXmlDoc = XUI.Xml.LoadXml( STATUS_XML);
var statusEntityNodeList = statusXmlDoc.getElementsByTagName(“entity”);
var primaryEntityStatusXml;
var primaryEntityStatusXmlString;
for(var nodeId = 0; nodeId 0)
{
primaryEntityStatusXmlString = primaryEntityStatusXml.xml;
}
}

var pauseStatesXmlDoc = XUI.Xml.LoadXml(PAUSE_STATES);
var entityNodeList = pauseStatesXmlDoc.getElementsByTagName(“entity”);
var primaryEntityPauseStates = “”;
for(var nodeId = 0; nodeId

 By enabling this command, you consent to share your data with an external system. Data imported from external systems into Microsoft Dynamics CRM Online are subject to our privacy statement that can be accessed here. Please consult the feature technical documentation for more information.

It links to two articles

Microsoft Online Services Privacy Statement

Manage Bing Maps for your organization

I assume Bing maps is disabled because Microsoft must use the data and so must need users to consent to the data being used.

Stop sending error reports

A developer asked me how he could stop the annoying error report messages.  My answer to most questions about CRM is, I think I have written a blog about that.  I remembered it

CRM 2013 – How to stop these annoying things in Microsoft Dynamics CRM

Here is the answer

Disable Send Report to Microsoft pop up

I personally have always wondered what Microsoft does with all those error reports it asks people to send!

You might be tired of clicking on these message and you probably don’t want your end users to see this popup.

Good news – Luckily Microsoft have added a setting we can turn off

Bad news – it’s hidden in a place where no one would dream of looking

If you want to stop this message, you need to go to

Settings –> Administration –> Privacy Preferences –> tick box and select Never send

privacy settings


Filed under: CRM 2016

CRM 2016 – Default CRM mobile app works fully offline and the limitations of previous offline versions

$
0
0

You can only make sense of the online world by going offline and by getting the wisdom and emotional clarity to know how to make the best use of the Internet. Pico Iyer

I was investigating accessing CRM functionaity offline, once you have requirements for CRM data and functionality to work offline, it narrows down your options.  Microsoft Dynamics CRM has some good mobile solutions with offline capabilities, I chose to look at
  • CRM for phones and tablets (awful name Microsoft)
  • Resco

The default CRM 2016 mobile app (called CRM for phone and tablets) has draft functionality, I wasn’t sure how useful it was, Resco on the other hand has full offline capabilities. Would the draft functionality be enough but during my internet search investigation and trying it out,  I came across two articles which said CRM 2016 fall release has full offline capabilities, I get to that at the end.  First let me tell you a story….

Hosk Dev Story

I wanted to learn about the functionality in Microsoft Dynamics CRM mobile app – MACA.  You can read about it’s limitations and functionality but I find it’s hard to understand how the important of limitations until you are trying to do something.

It’s often here you find Deadends, which I have written about before

CRM 2013 – Why wasn’t an updated Custom workflow used by CRM?

Deadends

Learning how the CRM works, helps diagnose future problems and avoid making similar mistakes.  The CRM developer centre is a great resource to help navigate the CRM SDK.

CRM developers benefit from learning the CRM SDK and CRM Developers should always start with the CRM SDK, understanding how it works and its quirks.

The better you understand how CRM works the fewer error/mistakes and dead ends you will make.  Dead ends can waste time because

  • Create a customization
  • find it doesn’t work
  • Remove customization
  • Have to create another customization

CRM is the framework sitting on top of languages JavaScript and .NET,  you need to learn CRM as well the programming languages.  This explains why .NET developers struggle with CRM development

I hadn’t really used CRM mobile app much, I had quickly assessed and compared it to Resco and found Resco has tons of functionality and the Microsoft Mobile app has a long way to catch up but Resco costs money and Microsoft give the mobile app for free.  You can find the pricing for Resco here

Resco pricing

Could I use a form to collect data on a mobile device and based on certain answers show/hide fields.  I remembered back to my CRM 2015 customization and configuration exam (Hosk Tips on passing) learning about business rules and this was exactly what they were made for, to work on the mobile application.

I started a CRM 2016 trial,  created a new custom entity, added some fields.

Created the field as two options – have you used Dynamics CRM

Created 5 two options for the version

If you clicked no – it hid 5 fields with the versions

If you clicked Yes 0 it showed the version fields

  • CRM 4
  • CRM 2011
  • CRM 2013
  • CRM 2015
  • CRM 2016

I don’t count before CRM 4, as you can tell from Rise of Microsoft Dynamics CRM.

I was using Windows 8, so I downloaded the app and was testing it on my laptop (yes trying to be clever and avoid having to download it on my Iphone)

I found they weren’t working in my windows 8 version but do work on iPhone.  morale of the story, don’t use windows 8

Business rules aren’t the only option, I think Javascript works in a limitated way, check out the page Customize CRM for phones and tablets for your customisation options

if you haven’t used CRM for phones and tablets then it’s best to start here

I managed to blunder my way through it but setting up the Mobile (note A CRM Administrator has to enable Mobile offline),  this page walks you through it, if you are using a CRM trial ignore the bit about mobile offline configuration, it won’t work or do anything because the new CRM 2016 full offline capabilities only work with an production or sandbox instances not trails

CRM Offline – Draft mode

when you go offline, most things stop working and it comes to an odd halt and the message pops up on the side saying Offline.

You can create some new entities but no lookups work, I suddenly realized most records have lookups this makes the whole draft functionality not nearly as useful as I imagined.  If you were creating an opportunity, you could fill in opportunity fields not link it to any contacts or accounts, products, even if they already existed.

No one is going to like draft functionality, it’s not really a feature, more of a fudge around.

The good news was business rules worked perfectly in offline mode.  I haven’t used business rules for a while and creating business rules is really easy (in comparison to workflows) and the If and else functionality makes it easy to create rules to show and hide fields.  I remember when you had to create two separate business rules CRM 2013 – Business Rules work in pairs because the condition is AND and not IF.

These are the actions business rules provide

business rule actions

I wanted to compare the draft functionality in the CRM for phones and tablets to Resco’s offline mode.  I created the same functionality using Resco and it worked perfectly and offline.  Every time I use Resco I find the Woodford framework intuitive and easy to use.

I was able to create a form and add business rule type things on there without looking up how to do it.  As a mobile development platform Resco is excellent and Microsoft have quite a way to go to catch them up.

Current Limitations for CRM 2015 and CRM 2016 initial release

  • You cannot set lookup fields.  All lookup fields are disabled in offline mode.  This sounds like a minor problem but it’s a massive headache and something Microsoft need to resolve quickly
  • In offline mode you can only create new records.
  • You cannot edit existing records.  This is extremely annoying.

This page has some limitations

While disconnected, you can only create standalone records or associate records to those that are available for offline access on your device. For example, you can create an opportunity for an account only if that account was created before you went offline, and if it’s available for offline access. You can’t create an opportunity for an account while offline if you also created the account while offline.

Not all entities are available in the mobile client, you can look here to see the list but you will notice

Quotes, invoice, resource and lots of others cannot be enabled.  Custom entities can be enabled.  I assume it’s because some of the forms have been modified by Microsoft so the default behavior isn’t the same or maybe they are not in the new form types.

There is also a list of entities which are not modifiable which you can find here.

The non entities can be a show stopper because if you want quotes or another default entity then you cannot use the Default CRM mobile application.

New CRM for phones and tablets has full offline capabilities

An interesting thing happened whilst searching for information about the draft mode, I found in CRM 2016 full offline capability should be available.  You can’t access it through a trial instance, this is always a bad sign when you are trying to assess how it works, it’s limitations and how you can use it.

It makes it really difficult to demo it because you have to go through your Microsoft contact to get a trial environment.

I read this article saying full offline sync is available for CRM 2016 in the fall release

New Offline experience with Mobile Dynamics CRM App

but it wasn’t working in my trial, I then found this article – Configure mobile offline synchronisation for CRM for phones and tablets

  • At least 5 Professional CRM Online licenses OR
  • At least 1 Enterprise CRM Online license
Note

Keep the following in mind when enabling mobile offline synchronization:

  • You need to make sure the licenses are assigned to a user before you can enable mobile offline synchronization. CRM won’t recognize the licenses if they’re not in use.
  • Mobile offline synchronization isn’t available for Trial, Preview or sandbox CRM organizations.
  • Offline drafts mode (the existing offline experience) will continue to be available for all users if they aren’t using the new offline capabilities.

How does the new CRM 2016 offline capability work

The article Configure mobile offline synchronisation for CRM for phones and tablets mentions Azure and it got me wondering

How did offline capability work with Azure (a cloud based solution).

This article explains it in details – configure Mobile offline synchronisation for CRM for phones and tablets

When you sign up to use Mobile Offline capability it downloads a local database to your phone.  The CRM mobile app will sync the data periodically to an SQL Azure database using Azure cloud services.

I believe the reason you have to enable this functionality is some people might not need it but also there is a privacy notice because Microsoft will store a copy of your data in their SQL Azure database and you need to give permission for that (e.g. enabling).  This sounds like Bing maps which are turned off by default – CRM 2016 – Bing maps not appearing

This is a great improve for the default CRM mobile app, particularly when you think Microsoft give the CRM mobile app for free and now it works offline.

A good run through of the new functionality with pictures here

Useful links for CRM mobile


Filed under: CRM 2016, Mobile

If Bob Paisley managed a CRM team

$
0
0

“The greatest leader is not necessarily the one who does the greatest things. He is the one that gets the people to do the greatest things.”

Ronald Reagan

People are the most expensive and valuable asset of Microsoft Dynamics CRM re-sellers, a great leader can make the difference between a successful company and an average company.  Great leadership creates a vision of the future and engage and inspire individuals to achieve the vision.

People are to Microsoft Dynamics CRM re-sellers because most sell people not products.  Its the CRM professionals who deliver projects, capture requirements, design solutions, document, interact with user.

People are an important resource for Microsoft Dynamics CRM reseller,  a leader is needed to direct them, motivate them and manage them.

I read a great article on Bob Paisley and like most things it brings my thoughts back to how the lessons and insights show to Microsoft Dynamics CRM and working in IT.

Bob Paisley was one of the most successful managers ever in England, he was assistant manager at Liverpool between 1959-1974 and manager from 1974-1983.  Whilst managing Liverpool winning on average on 2.1 trophies per season, winning 19 major trophies in 9 years.

The article raises many great points about leadership and like most things I read, I apply the information to the Microsoft Dynamics CRM industry.

Leadership

The article discusses leadership.

Good football teams require direction and leadership. The captain functions as the on-field general, rallying the troops in the heat of competition. The manager is really the captain steering the ship, navigating the crew through football’s tempests save for 90 minute bouts where he must lead from the other side of the chalked white lines.

Every team/organisation needs a leader to create a future, outline the direction of the company.  Leaders create and develop other great leaders in an organisation, these are the captains.  Management set the culture of the company and the values its employees should show.

The skill of simplifying a companies strategy can motivate a team to deliver the strategy, a fuzzy strategy or direction reduces commitment and effort of a team.

A CEO/Head of CRM practice and upper management who steer the ship, below them you are the captains and leaders, such as solution architects, senior consultants.  To deliver multiple projects you need a strong team,  the senior members offer guidance and direction to the junior members, setting standards, avoiding problems, helping them grow and improve and deliver projects on time.

Being listened to not just being heard

“The man exuded class and calm and once spoke of the importance of speaking softly so people actuallymake the effort to listen. Paisley knewman-management wasaboutbeing listened tooverbeingheard.”

 

Listening is a key skill needed by CRM professionals.  A boss once said CRM developers must keep listening until the users stop talking, CRM developers should listen more than they talk. When a CRM developer hears requirements they formulate a solution.  Creating the solution too early means they switch off listening to the rest of the requirements.

The boot room

Liverpool in the time of Paisley used the clubs boot room as a place to discuss strategy, the game, players, everything and anything.

On Sunday mornings we’d go in and talk about the Saturday game. Therewere differing opinions and disagreements and everyone put their oar in. Butitwasall doneintheright manner. We liked everyone to air their views and you probably got a more wide-ranging discussion in the Boot room than you would in the boardroom. But nothing spilled out of there. Whatwentonwas within these four walls. Therewasacertain mystique abouttheplace,which I alsobelievethereshouldbeaboutthe dressing room. What’s saidinthereshould, byand large,be private too.

 

Liverpool had the boot room but for many CRM professionals going to work, having a coffee, lunchtime is their virtual boot room.  Talking and sharing ideas on CRM with your colleagues is a great way to learn about CRM and it’s practical implementation.

Experience is valuable with Microsoft Dynamics CRM, many key lessons are learnt from trying, failing and find problems with solutions.  The limitations of functionality is fundamental in the choice of customization, experienced CRM developers/architects choose the right customization for a requirement.

The ideas, thoughts and experiences of your work colleagues is one of the most potent sources of learning available to many CRM professionals, be sure to use it.

Team game

Bob Paisley wasn’t kidding when he said, “It’s not about the long ball or the short ball, its about the right ball.” In football, there’s a phrase good coaches use with young players: ‘make it easy for the other man to play the game’. Liverpool players played for one another through selfless, supporting and fluid football.

When working in any team you need to view your actions in the long term
  • gains for individuals and the team
  • documenting procedures
  • creating best practices
  • sharing information/code/documents.
  • Creating and maintaining relationships with other team members
  • maintaining development environments

Some tasks need to be done

  • Production deployments (often out of hours)
  • help desk duties
  • Time sheets

Supporting each other and the team is required to work, these two articles focus on working as a team.

The articles focus on keeping quality and standards high as individuals and as a team. The actions of individuals effect the team physically and mentally, individuals working hard and to high standards will influence their peers into doing the same, individuals can inspire their team mates.

 Alan Hansen surmised Paisley insatiable appetite for success by saying: “If therewas one word that Paisley hated, itwas the ‘C’ word: Complacency’.”

We must improve, look for opportunities, keep learning.  Microsoft Dynamics CRM industry is evolving, adding new version, new related services, the speed of change is highlighted in this article – The rise of Microsoft Dynamics CRM 

continuous improvement is key to a successful career Why CRM Developers should always start with the CRM SDK, I have this quote

My aim each day is to know more about CRM development when I leave work than when I started it.

If you want to learn more about Bob read this book Paisley: Smile On Me And Guide My Hand

I will leave you with some quotes from the great man

 

I can let the team do the talking for me. Bob Paisley

 I love the city and the people here. I’ve been with them for many years and I fought alongside them. Bob Paisley

“If you’re in the penalty area and don’t know what to do with the ball, put it in the net and we’ll discuss the options later.”

“Mind you, I’ve been here during the bad times too – one year we came second.”


Filed under: CRM

Dynamics Connector is being discontinued, What does it mean?

$
0
0

It does not matter how slowly you go as long as you do not stop.

Confucius

I read this article Connector for Microsoft Dynamics support for Microsoft Dynamics CRM beyond Dynamics CRM version 2016,it has this quote

Dynamics CRM version 2016 will be the last major version of Dynamics CRM to be supported by Connector.

The latest version can be found here

http://blogs.msdn.com/b/dynamicsconnector/archive/2014/12/04/connector-for-microsoft-dynamics-v3-cu-4-released.aspx

What does the Dynamics connector do?

The Dynamics connector connects Microsoft Dynamics CRM and other Microsoft Dynamics products (NAV, AX, GP).  It‘s a product created by Microsoft and given away free to Microsoft partners.

The Dynamics Connector is like a free version of Scribe but harder to use and with less functionality (but its free).

I used the Dynamics connector for a while, the biggest obstacle was the lack of information and blog posts written about the connector.  As soon as anything went wrong itwasalmost impossible to get help to resolve the problem.

You can my blog posts on the Dynamics Connector, they are primarily focused on fixing problems

https://crmbusiness.wordpress.com/category/dynamic-connector/

Who uses it

Many Microsoft Dynamics partners use the Dynamics connector, it‘s useful tool to synchronise data between CRM and other dynamics products.

The biggest advantageit has is it‘s free, so can reduce the cost of the project, which is useful for small projects where money is tight.  When using the connector you often end up spending pltenty of time getting the connector to work, any money you save on not buying Scribe licences will is used development and setting up the Dynamics connector, particularly if you need to synchronize custom entities.

What does discontinuing mean

It‘s seems a strange decision to drop support because you wouldthink Microsoft would want to integrate Microsoft Dynamics CRM with other Dynamics products.

The question I’m asking is – why wouldn’t they continue to support it? because to synchronise you need licences to two seperate Microsoft Dynamics products, surely something Microsoft would encourage.

In Dynamics AX they are bringing in functionality to Synchronize AX with Dynamics CRM.  The functionality is not ready yet but as always it’s imminent.  The discontation of the Dynamics Connector and new functionality inside Dynamics products is perhaps the model Microsoft are moving towards..

The communication between Microsoft and the Dynamics community is not open, so we are left guessing for the time being.


Filed under: CRM

Dynamic CRM Salary survey 2016

$
0
0

 

Only in our dreams are we free. The rest of the time we need wages.

Terry Pratchett

 

Dynamics recruiter Nigel Frank International annual Microsoft Dynamics salary survey is available and is an interesting read, you can Download Salary Survey Report

The Dynamics survey is made from 18704 professionals in 131 countries and doesn’t just focus on salary but other areas

  • geography
  • wages
  • working hours
  • gender
  • certifications
  • bench time
  • reason for changing jobs
  • bonuses and benefits
Nigel Frank suggest you find out:
  • How much you should be earning
  • How your salary compares to others in similar roles
  • Insights into global bonuses and benefits
  • Movement between End User and Partner
  • Insights into the motivations for changing jobs and employers
  • Key aspects of job satisfaction

Why you should care about average wages?

Average salary surveys are a broad guide,roles and responsibilities can’t always be grouped.  The regions in salary surveys can be vast, in the UK it groups the Midlands and East Anglia when these areas are over 100 miles apart (it’s big in the UK overseas readers).  Salary surveys have peoplewhohavejust started ina role and someone whohasbeeninthat role formanyyears.

Working isn’t allabout money, well until you find someone else in the company is getting paid more for doing the same job!

There is value to salary surveys, it gives you an opportunity to compare your current wage with the average, it gives you an estimate of what you couldearn for your current role or a different role.

Its perceived wisdom you will get bigger pay rise if you move companies because companies give you a percentage pay rise of around 3 to 5 percent.  When you move companies you might get a double-digit pay rise when the company pays you for the experience.

With the increased effectiveness of recruitment consultants thanks to LinkedIn, perhaps Microsoft Dynamic partners should pay more attention to the average wages because its likely Microsoft Dynamics professionals will receive job offers via LinkedIn.  If companies aren’t paying the average wage then these employees could be tempted away.

I’m often curious of the cost of replacing an employee, do companies take into account

  • business knowledge
  • project knowledge
  • relationships
  • internal process and procedure knowledge

hiring a new person brings

  • Recruitment costs (time)
  • Recruitment agencies (if you can’t use your network)
  • risk of hiring unsuitable person (skills, personality/culture clash)

There are lots of potential pluses if you hire the right person, they bring in fresh ideas, different perspectives, energy and enthusiasm.

It’s easy for Dynamics professionals to leave, this highlights how important managing your Dynamics professionals is and ensuring they are content.  Dynamics CRM is a people business, in most instances the company is selling the skills, knowledge and experience of their CRM professional rather than a product.

Average Salary is a tool

Knowing the average wage is a useful bargaining tool to take into your review (as long as its more than your current wage).  It gives an anchor to the discussion and offers an impartial view of an average wage in the industry

if you arethinking moving jobs, it be used toseeifthe role is paying thegoing rate andnotjustmorethan your current wage.

Interesting facts in the survey

The survey was probably limited by the need for English speakers but 27.6% of the responders were from United States with 10 percent from England.
  Salary survey 1

 

42% are certified

35.7% experience a pay rise post certification

It shows the benefit of passing Dynamics certifications with a 3rd receiving a pay rise, surely it’s worth a couple of months revising for a certification to get a pay rise and increase you knowledge of Dynamics CRM.

34% plan to leave their current job within 12 months (if you listen carefully you can hear the recruitment consultants cheering)

28% sat on the bench for more than 1.5 days a week in 2015.

34.3% said the reason to move job was lack of Leadership & vision

Sales Salary Figures UK

Salary survey 2
Salary survey 3

Who do you work for?

It is not the employer who pays the wages. Employers only handle the money. It is the customer who pays the wages.

 

The question of who you work for? is different to who pays your wages.  People stopped working for one company for their entire career.  Microsoft Dynamics CRM professionals are likely to move many times in their career, so the person you work for is yourself.

You should make sure you are managing your own career

  • Getting useful/desirable experience
  • learning new skills
  • Getting certified
  • Making sure your career is progressing

If you haven’t set yourself a career goal or next step in your career, its unlikely you are working towards it efficiently.  When you know your dream job/role, you can work backwards from it, calculating what the skills, experience, network and knowledge you need for the job.

If You Don’t Design Your Career, Someone Else Will

Purpose

“No one is really going to help you or give you direction. In fact, the odds are against you.”
― Robert GreeneMastery 

Everyone wants to get paid and lots of money is great but it won’t help you enjoy your work.  People spend at least 7.5 hours a day at work,  its important you enjoy work and feel you are contributing.

Many articles I have written on CRM development – Hosk‘s CRM Developer articles involve people having high standards and passion for the role as CRM Developer (CRM Developers need Passion), if you don’t enjoy something you won’t push yourself to learn and improve, holding back your career development.

I have asked myself the question – Why do people stay in boring jobs.  Sometimes the answer is money because they can’t earn as much money doing something else, this leads to long work days and people counting down the days to retirement.

 The purpose of life is not to be happy. It is to be useful, to be honorable, to be compassionate, to have it make some difference that you have lived and lived well.” ― Ralph Waldo Emerson

Filed under: CRM, CRM 2016

CRM 2016 – What you need to know about Themes

$
0
0

The introduction of Themes in Microsoft Dynamics CRM 2015 added much called for functionality to allow customers to change the branding of their Microsoft Dynamics CRM instance.  With this one feature Microsoft removed one a major driver for unsupported customizations in Microsoft Dynamics CRM (Why you shouldn’t put unsupported customizations in Microsoft Dynamics CRM)

I’m studying for the MB2-712 – CRM 2016 customization and configuration exam and one of the new topics is Themes, in this post I will show what Themes do and some of the limitations of themes.

Themes are awesome

Themes added much demanded branding functionality, it allows you to change colour scheme of your instance of Microsoft Dynamics CRM and add your company logo to replace the words Dynamics CRM.

Lots of customers asked to change the colour scheme but these changes could only be done using unsupported customizations.

The main functionality of themes is

  • Add a logo to CRM
  • create entity specific colouring
  • Change navigation colours

Where do I find themes

One of the trickiest aspects to themes is finding out where they have the functionality, it’s hidden away in
Settings –> Customization –> Themes
Themes 1
  Themes 2

Add a logo

The most common task you will need to do is add a logo.

You need to create a new theme first, the easiest way to do this is to clone the default solution

Open your new theme

theme 4

Select the Logo lookup.  You will need to create a new web resource

theme 3

Select logo and publish the theme.  Just because Microsoft allows you to select themes, it won’t stop you creating ugly colour schemes

theme 5

Quick start

Quick 2 minute video introducing you to themes

CRM 2015 – Theme’s youtube video

This technet article explains in detail what you can do and the limitations of themes

These two blog posts go into themes in details, showing you what each change does and where it’s used.

One  criticism I have with themes is choosing the colours is difficult because you have to type in the correct color code and who knows that.  Luckily CRM MVP Guido Preite has made a fantastic Dynamics CRM theme generator

Dynamics CRM Theme Generator

It allows you to easily pick colour and preview your choices, awesome work Guido

Interesting use for Theme’s

Themes can enable people to easily identify what environment they are on.  When you have lots of environments

  • Production
  • Pre-Production
  • Q&A
  • Test
  • Dev

It can be difficult to know which environment you are on, particularly if you have numerous Microsoft Dynamic CRM’s open at the same time, which is something developers often do because they are comparing values between environments.

In the CRM 2011 days we use to put an unsupported change which changed the a label on the CRM, sorry I mean other CRM developers did this sort of thing, I would never put an unsupported change into CRM:-)

Themes allows you to set different CRM environments as different colours, increasing the chance of someone not accidentally updating production.

Limitations

The default theme is called CRM Default Theme
The default theme is type System and Default Theme = Yes

This technet page has some good limitations

What can you change or adjust?

  • Logo
  • Logo tooltip
  • Navigation bar color
  • Navigation bar shelf color
  • Header color
  • Global link color
  • Selected link effect
  • Hover link effect
  • Process control color
  • Default entity color
  • Default custom entity color
  • Control shade
  • Control border
Themes cannot be included in Solutions.  This means you need to export and import them between organisation.  After importing a theme you must import it.
The limitations below are from the technet article
  • Even though the theme colors are applied globally throughout the application, some legacy UI areas, such as gradient buttons, will retain the default colors.
  • Certain areas must use dark or light colors to contrast with the default icon colors. The icon color isn’t customizable.
  • An entity can’t be displayed in different colors under different Sitemap nodes.
  • The Sitemap nodes colors aren’t customizable.

Filed under: CRM 2015, CRM 2016, MB2-712

Hosk’s Top CRM Articles of the week – 27th May

$
0
0

Quotes

if you had more time you could do all the things you wanted. You only have time to focus on one thing you really want to do

#HoskWisdom

Great minds discuss ideas; average minds discuss events; small minds discuss people.

Eleanor Roosevelt

 

Article of the week

Jukka Niiranen has been busted some moves with Sway recently, almost enough to make me want to use it.

Sway is like a cool Powerpoint, I learnt Salesforce has 5 times the market share of CRM (19.7% Salesforce, 4.3% Microsoft).  It’s a great Sway presentation and the information makes you think where the CRM industry is heading in the future

Best of the Rest

Dynamic CRM Salary survey 2016

Thoughts on Microsoft Dynamics CRM Strategy

Three new features of Microsoft social engagement 

Leon Tribe on ADX Portal

Use Machine Learning to Predict Customers You Might Lose (Part 1)

Managing Microsoft Dynamics CRM 2016 online service updates

Data Loader

Dynamics Connector is being discontinued, What does it mean?

Article from technology professional Mitch Milam- summarizing the new features

CRM 2015 – What developers need to know about the activity entity

Project Service and Field Service trials now available as solutions for CRM2016 Update 1 orgs

If Bob Paisley managed a CRM team

Here’s your guide on how to enable and create your first survey with Dynamics CRM 2016 VOC.

How to free storage space in CRM2016 

What’s new with Dynamics CRM 2016 and CRM online.

Field Data Auto-complete  

Create Custom Page Template in Adxstudio

Why Microsoft Dynamics CRM presentation

CRM 2016 – Default CRM mobile app works fully offline and the limitations of previous offline versions

Microsoft Sets the Stage for IoT-Enabled CRM 

The rise of Microsoft Dynamics CRM

{Dynamics CRM 2016 Update 1} Organisation Insights Dashboard in Dynamics CRM

Questions on Microsoft Dynamics CRM solutions and environments

Are you aware about this? Dynamics CRM New Feature – Templates for Email Signatures

Struggling with the implementation phase? Here’s How to implement CRM through Phased Approach

CRM developers tools of the trade – ReSharper

Blog Post: salesforce – Hell Freezes Over

other

Ted Talk – Why some of us don’t have one true calling

US government is spending billions on old tech that barely works, says watchdog

“We no longer talk about the lagging indicators of success, right, which is revenue, profit. What are the leading indicators of success? Customer love,” Nadella says.
Whilst on the train I was reading Microsofts Earnings Release FY16 Q3
There were a few interesting things to note
REDMOND, Wash. — April 21, 2016 — Microsoft Corp. today announced the following results for the quarter ended March 31, 2016:
· Office commercial products and cloud services revenue grew 7% in constant currency driven by Office 365 revenue growth of 63% in constant currency
· Office consumer products and cloud services revenue grew 6% in constant currency with Office 365 consumer subscribers increasing to 22.2 million
· Dynamics products and cloud services revenue grew 9% in constant currency with Dynamics CRM Online seat adds more than doubling year-over-year
 Dynamics CRM Online seat adds more than doubling year-over-year

Salesforce (CRM) Chooses Amazon (AMZN) For Cloud Services In $400 Million Deal

Useful Hosk Links

Hosk list Of CRM 2013 Tools

A list and review of CRM 2013 tools, this will probably work in CRM 2015 as well

Hosk’s CRM Developer Articles

A collection of my favourite CRM Developer articles I have written

MB2-703 – CRM 2013 Customization and Configuration Certification Information

All the CRM 2013 content to help you pass the exam

HoskWisdom – Hosk Developer Quotes

 Words of Wisdom from the Hosk.  I have written over 900 articles, surely I should have said a few memorable things


Filed under: CRM 2011

CRM 2016 – Why can’t I add a business rule to the Article entity

$
0
0

I never learn anything talking. I only learn things when I ask questions.

Lou Holtz

 

Welcome to a new episode of Ask Hosk, where I answer a Hosk CRM readers question.

Ask the Hosk questions

If you are going to ask me a question please be polite, it will increase your chances of me answering your question, don’t forget to say how much you like my blog (that really increases your chances of getting an answer).

Take into account I’m a busy Hosk, I work, I have 2 young children, a wife and sometimes even get to chill out or play football.  Sometimes I could be too busy to answer your question quickly.

I won’t always know the answer to your question, if I haven’t read about a topic or got any experience in the topic I can’t give a good answer.

The CRM Forum

Instead of asking individuals a question I would recommend raising a question in the CRM Forum, for these reasons.

  • It’s free
  • CRM MVP’s answer many questions
  • CRM experts who have experience will answer the question
  • Microsoft CRM support answer questions
  • You might get a number of answers and opinions

A bonus reason to raise the question on the forum is after you have raised the question on the CRM forum, you can email me and ask me to look at the question.

CRM forum

When you raise a question, try to give as much information as possible, this will help anyone who answers your question.

The CRM forums are a great way to learn CRM, you can see common questions raised by CRM users and the answers from CRM experts.  I answered over 400 forums questions and learnt a lot and helped users in the CRM community.

Previous Ask Hosk Questions

Question

Good day to you. I have been reading your post at

CRM 2013 – Businses rule workings, limitations and exam notes

I am quite new to Dynamics CRM so please excuse me, but i am trying to do some business rules for the Articles entity but the option is grayed out. Furthermore when i go to “Customize Entity”, under the Articles entity there is no Business rule option. What am i missing here because according to your post it seems that business rules are available for all entities whether default or custom.

Hosk Answer

This was an interesting question and I’m not sure of the answer but I can put my best guess.  I had seen something system entities before either in a blog post or study for the customisation and config exam, when I mention system entities I am referring to entities which you cannot edit like SystemJob

The first task is to make sure I couldn’t add a business rule, make sure the user was looking in the right place and it wasn’t a permissions issue. NEVER ASSUME THE USER IS NOT DOING SOMETHING SILLY, check the silly things and cross them off.

The article entity is not your standard entity because there are lots of things greyed out

Article Entity question

Notice there is no option for business rules, it seems the Hosk CRM blog reader was right

Article Entity question 1

I was searching through my entity related posts to see if I had the answer

Then I found some answers in my CRM 2013 – entities and fields revision page (highlighting why doing the customization and configuration certification has value)

This gave me some interesting limitations/facts about entities

  • Microsoft Dynamics CRM default instance starts with more than 260 systems entities but which many are hidden from the UI
  • There are two types of entities – Custom entities and system entities
  • More than 90 system entities can be customized
  • Some system entities cannot be customized e.g. system job
  • Entities which can be customized (system and custom) are known as customizable entities
  • Not all components of a customizable entity can be customized e.g. system fields like created on cannot be deleted
  • IF an entity is selected as an activity this cannot be undone
  • System entities cannot be deleted

Interesting things to consider but they weren’t helping solve this problem, I remember one of my CRM developer maxims, always start with the CRM SDK and there is a good page on entities

Introduction to entities in Microsoft Dynamics CRM

I’m guessing not people have read this page because entities are easy to understand but this is a great example why you should read the CRM SDK, there are lots of useful information on this page, I recall coming to this page a few times whilst writing these blogs

It’s here where it gives us an idea of how Entities are structure

Creating an entity record (or, simply a record) in Microsoft Dynamics CRM is like adding a row in a database table. The entities are divided into three categories: system, business, and custom. As a developer working with business data, you will use business and custom entities. System entities are used by Microsoft Dynamics CRM to handle all internal processes, such as workflows and asynchronous jobs. You cannot delete or customize system entities.

 

A bit further down the page it explains business Entities are account, contact etc

you can set business and custom entities and attributes to be either customizable or non-customizable

You cannot modify a non-customizable entity

 

There is a msdn page called Which entities are customizable?

In CRM 2016 there are 271 entities, 98 are customizable!  You should note the Article Entity has the schema name of kbarticle and this isn’t included on the fully customizable entity list, instead it’s on the list of customizable entity properties.

The information about entities and what you can do is all held in the Metadata but how do you view that.  Luckily for the Microsoft Dynamics CRM community we have a Tanguy and he has created the awesome XRMToolbox and there is a Metadata browser, here it is.

Article Entity question 2

Business rules thing

lets recap where we are

  • kbarticle does not have Business rules showing on the entity
  • it’s not on the fully customizable entities like account, contact etc
  • The CanCreateForms = False
  • IsVisibleInMobile = False
  • IsCustomizable = True

I felt the answer perhaps was something to do with Business rules.

I go to the Create and edit business rules page looking for clues and under the section How do I configure business rules there is a note

Business rules will only work for Updated entities or custom entities.

 

I remember a colleague complaining how some of the forms in CRM 2016 are still CRM 2011 style and how the end users complained.  I wrote about it in the blog CRM 2016 – How to rename the default business unit, saying it was weird the Business Unit form was old style.

The technet page describes what has happened

Microsoft Dynamics CRM provides many options for designing forms. The forms for the Updated entities and custom entities provide the most options. We selected a group of entities that are used by most people and gave them a new user experience that includes many new capabilities including support for the Microsoft Dynamics CRM for tablets client, business process flows, and business rules. One of the key requirements in providing these new experiences includes the goal that a form customizer can design once and deploy to all clients.

 

So here is the explanation, Microsoft have updated the forms of the popular entities, to enable them to use business rules, work on mobile etc.  it goes on to explain

Yet there are still a number of entities that retain the appearance and capabilities carried over from the previous version. Entities using classic forms weren’t updated because they are not used frequently by most people and updating them wouldn’t have a significant impact on the experience of most people using the application. This allowed us to focus our attention on the updated entities.

 

You can view the Updated Entities by clicking here and then there is a list of 28 entities which are still using the classic form and article/kbarticle appears on the Entities using classic forms , which explains why Business rules are not enabled.  Oddly business unit doesn’t appear on either list.

Conclusion

I have read a bunch of technet/msdn articles and got a better understanding of how Microsoft Dynamics CRM works and why Business rules are not enabled for all entities.

The question I can’t answer is if these entities will ever be able to run Business rules or if their forms will be updated.  Microsoft likes to keep information like this secret, this is frustrating to developers and baffling to customers.

It seems Microsoft have upgraded forms to work with the new functionality such as Mobile, Business Process, Business rules and because there are 271 entities it will take time to upgrade all the entities and some of them it isn’t worth the effort.  The problem is there is no way to request a form to be upgraded.

You need to take into account the effort to upgrade some of the forms, in many of the system entities Microsoft has tweaked things under the hood to offer extended functionality (a form of unsupported customization) which means is difficult to upgrade the entity.

 


Filed under: Ask Hosk, CRM 2016, Hosk Stuff

What is the purpose of a CRM Practice

$
0
0

Leadership is the capacity to translate vision into reality.

Warren Bennis

Whatisthe purpose ofa CRM practice?  

What is the purpose of CRM practices you have worked for?

Its an obvious question you are wondering why I am asking it? The answer influences the actions of the employees in a CRM practice.  The answer gives individuals purpose and is the reason they are employed.

Two of the core ingredients to a successful CRM practice are people and purpose.  For CRM professionals to be motivated and engaged they need to feel their actions make a difference, they are contributing to something bigger.  It‘s the role of the leader to create the vision of the future and enabling the team to deliver.

What is purpose?

Google describes purpose

  1.  The reason forwhichsomethingis done or created orforwhichsomething exists.
  2.  A person’s sense of resolve or determination.
  3.  Have as one’s intention or objective

A purpose is what a CRM practice stands for, what’s its vision is, what everyone involved is working to archive.

Here are mission statements for big companies

Disney

To make people happy

IKEA

At IKEA our vision isto create abetter everyday lifeforthemanypeople. Our business idea supports this vision by offering a wide range of well-designed, functional home furnishing products at prices so low that as many people as possible will be able to afford them.

Starbucks

To inspire and nurture the human spirit – one person, one cup and one neighborhood at a time

Google

Google’s mission is to organize the world’s information and make ituniversally accessible and useful.

Virgin Atlantic Airways

to embrace the human spirit and let it fly

Lack of purpose

Many CRM practices have managers not leaders.  What is the difference?

Managers have people who work for them, Leaders inspire people to follow them.  Leaders create a vision of the future and engage people to deliver it.  Managers focus onthe present, the tasks whichneedtobe done today withoutthinkingaboutthe tasks whichwillneedtobe doneinthe future.

The purpose of a CRM practice should come from leader of the CRM practice, reminding everyone why they are coming to work and what they are helping the CRM practice archive.

Not anticipating the future, leads to not being ready for the future. Managers allow the future to sneak up on them, the danger is what brought you success today might not work tomorrow.

If you are not looking to the future, you cannot capitalise on opportunities arising from changing technologies and customer requirements.  Adapting to a changing CRM landscape leaves you scrabbling to catch up, anticipating allows you to profit.

The CRM Practice might win a project but not have CRM professionals skilled in those areas, leading to learning on the job, making mistakes on a live project, not delivering quality projects.

Without a clear purpose you get embroiled in the day-to-day running of a project, the project gets split up into small tasks and everyone focuses on completing their tasks.  This is how projects get created which don’t satisfy the business requirements.  It‘s easy to get engrossed on the technical aspects of a project, focus on delivering various parts of the project but you should understand what business aims you are delivering.

Technical solutions which don’t deliver business requirements won’t give a positive impact to the business.  The purpose of a CRM project is to deliver business requirements, the purpose of the people working on a CRM project is to make sure this happens.

Purpose of a CRM practice

Successful organisations, CRM practices and teams are led by great leaders.  Success follows great leadership.
To motivate people you need a vision to give them purpose

A CRM practice’s goal is to deliver projects to help satisfy customer business requirements, solve their business problems, to do this you need

  • The right people
  • With the right skills/knowledge
  • The necessary management systems
  • Technical environments
  • Project methodology
  • templates
  • best practices
The CRM practice might have everything in place to deliver projects now but can it deliver projects in 5 years time? whatwillprojectslooklikein 5 yearstime they could include
  • Azure machine learning
  • Cloud only solutions
  • Azure services
  • Social CRM
  • Mobile solution
  • Field Services

Hosk CRM

I talked  about my fictional CRM practice – Hosk CRM in the article Thoughts on Microsoft Dynamics CRM Strategy, so I will continue to expand the Hosk CRM practice with a purpose.  Ideally you want your purpose linked to your CRM strategy (or vice versa)

To deliver quality CRM solutions aligned to the customers business objectives

The important points are quality and business objectives.  CRM projects must be built around business objectives, this can get lost during projects and when delivering the CRM solution.  The team ensures the project aligns to the business objectives of the company.

Focus on business objectives reduces projects getting engrossed on the technical side of the solutions.  Customers and developers can drawn into the technical aspects of solutions, which causes the project to drift away from delivering the business objectives and reduces the effectiveness of the CRM project.

Quality

Be a yardstick of quality. Some people aren’t used to an environment where excellence is expected. Steve Jobs

To deliver a quality or excellent CRM solutions you need a team of passionate and engaged CRM professionals, everyone is involved and contributing.  Quality is a moving target, it changes between projects depending on the solution and technical.

What you can say about quality CRM projects, is they are hard to define but everyone knows one when they see one.  Quality isn’t something you can archive, it‘s a mindset where everyone works in an environment where excellence is expected.  Highlighted in these posts

Purpose gives clarity

Successful companies find their purpose.  Purpose gives clarity, bonds people as a team and guides their actions.  When a CRM practice has an idea of its purpose, the next step is to organise strategies, tasks and people to deliver.

Filed under: Leadership, Strategy

Hosk’s Top CRM Articles of the week – 6th June

$
0
0

Quotes

A small bug can bring down a great Microsoft Dynamics CRM project

#HoskWisdom

The question isn’t who is going to let me; it’s who is going to stop me

Ayn Rand

 

Article of the week

Introduction to Project Service in CRM 2016 Update 1

Great article on Project services

Best of the Rest

What is the purpose of a CRM Practice

What’s New in Microsoft Social Engagement (Update 1.4)

Workflows in Dynamics CRM

CRM and Microsoft Flow

CRM and Machine learning

CRM 2016 – Why can’t I add a business rule to the Article entity

Use GetValueOrDefault in early bound plugins and say goodbye to catching nulls

Why developers need to be organised and stop wasting time

You can now create Customer field type with CRM 2016 Update 1

Have you wondered why the address fields do not appear on CRM import templates? Here’s the answer.

Enable custom entity for Interactive Service hub in CRM 2016 update 1

Microsoft Sets the Stage for IoT-Enabled CRM 

Organisation Insights Dashboard in Dynamics CRM

other

Emirates steals the show with the Los Angeles Dodgers | Baseball | Emirates

bikeshedding!

Successful teams have these four things in common. 

4 Ways to Be More Effective at Execution

The Wisdom of Crowds and The Expert Squeeze

How Disney reinvented itself 

How to Work Alone

Useful Hosk Links

Hosk list Of CRM 2013 Tools

A list and review of CRM 2013 tools, this will probably work in CRM 2015 as well

Hosk’s CRM Developer Articles

A collection of my favourite CRM Developer articles I have written

MB2-703 – CRM 2013 Customization and Configuration Certification Information

All the CRM 2013 content to help you pass the exam

HoskWisdom – Hosk Developer Quotes

 Words of Wisdom from the Hosk.  I have written over 1000 articles, surely I should have said a few memorable things


Filed under: Hosk Stuff, Hosk’s Top CRM articles of the week

Thoughts on the MB2-712 – Microsoft Dynamics CRM 2016 Customization and Configuration certification

$
0
0

In school, you’re taught a lesson and then given a test. In life, you’re given a test that teaches you a lesson.

Tom Bodett

I  took the MB2-712 – Microsoft Dynamics CRM 2016 Customization and Configuration certification last week and will share my thoughts on certification

The CRM version is back

Microsoft removed the Microsoft Dynamics CRM version for the CRM 2015 Dynamics CRM certifications but have added it back.  It‘s good because you can tell what certification CRM professionals has, giving you an idea if they studied new functionality in the latest version of CRM.

Certifications are a great motivator to learn the new features in Microsoft Dynamics CRM, using new features on projects is delayed by a half a year to a year because solution architects don’t match requirements with the functionality which is still in development or not released when the solution was designed.

Reasons you don’t get to use new functionality

It’s great to learn and use new Microsoft Dynamics CRM functionality in a project but often CRM professionals don’t get to use the latest Microsoft Dynamics CRM version because

  • Working support on older CRM versions
  • Large projects can take a year or more and solutions designed on older CRM versions
  • New functionality isn’t needed for project
  • It’s a risk using new functionality, with version 1 often containing limitations or not working properly (Business rules, CRM Mobile, etc)

CRM professionals need to keep up to date with new CRM versions and related products in addition to working on projects because the next project you work might use the new functionality.  The best way to stay up to date with new features and products is reading articles on twitter or blogs.

Reading about new functionality is useful but a passive way of learning which leads to a high level understanding.  CRM Professionals need to understand

  • What new functionality/product is?
  • What does it do?
  • What scenario’s should it be used in?
  • What are the limitations?

CRM professionals need theoretical and practical knowledge of CRM features.  I recommend CRM developers start with the CRM SDK before opening CRM and using the new features.

Experience with new features is important for CRM professionals because you have to understand the limitations of Microsoft Dynamics CRM to make sure you pick the right customisation for the right job.  This is why .NET developers struggle with CRM development, a lack of experience.

Studying for Microsoft Dynamics CRM certifications combines learning about new functionality and trying it out because the best way to studying for a CRM certification is by looking at new features and

  • Try it
  • Learn it
  • Study it
  • get certified in it

If you are not convinced by the value of Microsoft Dynamics certifications, check out the benefits of CRM certifications

It‘s big

The MB2-712 certification is big, covering a lot of functionality in Microsoft Dynamics CRM, look at the certification criteria here

  • Configure settings
  • Security – Business units, teams, access teams, security roles
  • Solutions
  • Entities
  • fields, views, forms
  • Business rules
  • Business process flows

Some of areas are massive, security and solutions are complex areas of Microsoft Dynamics CRM, it’s vital a CRM professional understands those areas in depth.

The E-Learning training course is over 12 hours long, you must be logged into partner source to use the training

80729: Customization and Configuration in Microsoft Dynamics CRM 2016

I’m not a fan of video learning because you can’t skip the parts you know and I find it difficult to sit and focus on long videos.  Microsoft do a good job of overcoming these problems by splitting up the videos into small sections.

One improvement would be to make the test questions similar to the questions exam questions, giving people an idea of the standard they needed to pass the certification.

The criteria is big, covering commonly used functionality, such as fields, forms, views, security and solutions.  Many CRM professionals will know these areas because they use them regularly.

The exam is the same but different

I’ve taken the customisation and configuration certification from CRM 4 onward, this is my 5th customisation and configuration certification.

In the past the certifications focused on the new features, this made sense because it differentiated the certification from earlier CRM certifications, concentrating on learning the new features.

This exam was different, I’m not sure if it‘s because therewasn’t lots of new features but the exams tone  was different than earlier certifications.

The questions were more realistic in testing skills CRM professionals use in regularly.  A few questions were like requests I received from end users.   This differs from earlier exams where the questions focused on testing the user’s knowledge of CRM.

There are still some ridiculously odd/badly worded questions, I needed to read some questions 5 times to get close to understanding the question was asking.  It puzzling Microsoft can let such poor questions to make it into the final exam.

The tone ofthe questions wasa lotbetter, sowell done tothe Microsoft.

After finishing the exam, I felt much of my studying wasn’t needed and many areas I focused on didn’t come up in the exam.  I’m not sure if my notes were too detailed or it was the change in type of questions.  In earlier exams you needed to understand the limitations of functionality in detail.

Proctored Exam

Taking a certification is a big hassle, the test centres are often small buildings in odd locations with habit of closing downregularly.  It can easily take half a day taking a CRM certification with the drive to and from the test centre, the need to get to the test centre early.

Pearson VUE and Microsoft allow you to do proctored exams, which means you can do an exam using a computer which has a webcam and microphone, awesome.

I booked the exam in the morning to do in the afternoon (booking test centre exams often done weeks in advance to get a decent time slot).  As long as you have a laptop with Windows 7, 8 or 10, a webcam and Microphone you are probably OK to do the test from home or the office.

You will need to jump through a few hoops, clean your desk, covering pictures and bookshelves, emptying pockets, no interruptions, closing all applications on your computer.   Thisisgood policy because you don’t wantpeople cheating butitcantake 15-20 minutes togothrough your roomwiththe“greeter”.

The exam time has dropped, you now get 1 hour 30 minutes for 48 questions.  I’m sure it was 2 hours, giving you time to go through the questions twice and have 20 minutes left.

A couple ofthingsto note aboutthe proctored exam, finding the url is a bit tricky, itwasn’t obvious andthe link tothe exam wassmallbutthis tells you whattodo

  • To begin your testing session and connect to a Greeter: sign-in to www.microsoft.com/learning, click “Your benefits & exams” to view your appointments, and then choose “Start a previously scheduled online proctored exam.”

If you aregoingtotakethe proctored exammakesure you run throughthe test exam, tomakesurethe software willworkon your machine without problems.

The exam ends suddenly ends, it tells you if you have passed or failed and then exits, it left me wondering if I needed to do anything else.

Proctored exams are great, well done Microsoft.

Conclusion

I passed the exam with a score of 800, the bbenefit of the certification  is learning new features and functionality which I hadn’t before but only read about

The training videos are great and credit to the trainer and the slides are a great resources for revising.  It was enjoyable but I’m glad its done.


Filed under: Certifications, CRM 2016

Microsoft buys LinkedIn – What you need to know

$
0
0

Price is what you pay. Value is what you get.

Warren Buffett

In recent years Microsoft has acquired many which have been a mixture of success and failure (Nokia).  When a company creates billions in profits, you need to invest the money to generate more money and fit in with your strategy.   This article will highlight key points in the acquisition and how it fits in with the current Microsoft Dynamics strategy.

What do we know

I have taken interesting facts and snippets from various and ever expanding list of articles on the subject.

Microsoft has brought LinkedIn for $26.2 billion and $196 per share in an all-cash transaction

facts from bloomberg article – Microsoft to buy LinkedIn in deal value at 26.2 billion

  • LinkedIn will retain its brand, culture and independence and Jeff Weiner will remain chief executive officer of the company, Microsoft said in a statement Monday.
  • The offer values LinkedIn about 91 times earnings before interest, taxes, depreciation and amortization, according to data compiled by Bloomberg.
  • The deal is the largest under the tenure of Microsoft CEO Satya Nadella
  • LNKD up ~47% to right near the takeover value.
  • Shares of MSFT, though, are down almost 3%.
  • LinkedIn’s book value is just $4.6 billion (so they have paid 6 times their book value)

  • LinkedIn didn’t make money last year, posting a loss of $166 million in 2015. The loss accelerated in Q1 to $45.8 million/quarter.

one of the largest tech acquisitions since the the peak of the dot-com era, when AOL spent $162 billion to buy Time Warner. (The only larger one has been Dell’s $67 billion purchase of EMC, announced last year.)
This presentation has some good figures –  public presentation.
LinkedIn1
LinkedIn2
  • 19 percent growth year over year (YOY) to more than 433 million members worldwide
  • 9 percent growth YOY to more than 105 million unique visiting members per month
  • 49 percent growth YOY to 60 percent mobile usage
  • 34 percent growth YOY to more than 45 billion quarterly member page views
  • 101 percent growth YOY to more than 7 million active job listings
Microsoft and LinkedIn will host a joint conference call with investors on June 13, 2016, at 8:45 a.m. Pacific Time/11:45 a.m. Eastern Time to discuss this transaction.
The call will be available via webcast athttps://www.microsoft.com/en-us/Investor and will be hosted by Nadella and Weiner,
Never in my wildest dreams, could I have imagined what would happen in the next 7½ years. Our team has grown from 338 people to over 10,000, our membership from 32M to over 433M and our revenue from $78M to over $3 billion.

 

Microsoft-LinkedIn deal to benefit Office 365, Dynamics CRM

The Microsoft-LinkedIn deal, which is expected to close by the end of the calendar year

Microsoft Dynamics CRM and LinkedIn current integration

Sales navigator is an existing integration between Microsoft Dynamics CRM and LinkedIn created sometime around June 2015.  I will admit to not knowing this and never seen it.
I’m not sure the quality of the product but itwas an important step in creating a good relationship between the two companies.  Learn more in the articles below

Microsoft previous acquistions

This article has a good overview of Microsoft acquisitions: Its biggest hits and misses, it has some interesting facts

  • Nokia – $7.2 Billion – 2014
  • Minecraft – $2.4 billion – 2014
  • Yammer – $1.2 billion – 2012
  • Skype for $8.5 Billion, 2011
  • Visio – $1.375 billion – 2000
  • Navision –  $1.45 billion – 2002
  • aQuantive –  $6.3 billion – 2007
  • Rare – $375 million – 2002
  • Tellme Networks – $800 million – 2007

Big acquisitions are fraught with danger and depending what made up figures you read but many articles suggest mergers fail 70 to 90 percent of the time.  When Microsoft previously made big purchases, they have not always gone well, Nokia being the standout failure (I loved my first Nokia mobile).

Microsoft and LinkedIn will need to work hard to make this a success.

What does it mean for Salesforce

With Microsoft buying LinkedIn, I questioned LinkedIn’s current integration with other applications, how many are there and what will happen to them.  LinkedIn is not integrated with many other applications.

The sales connector mentioned above integrates with Microsoft and Salesforce, I was expecting lots of applications to integrate with LinkedIn.  The article below explains the small number of integrations

LinkedOut: CRM companies squawk over LinkedIn’s API policies

Itseems LinkedIn is selective about what companies can integrate with LinkedIn, the value of LinkedIn is the people it has in it’s database who are using it’s website.

The lack of companies which integrate with LinkedIn shows a sense of direction and a clear strategy.   Satya has played nicely with Salesforce last year creating a partnership, which is discussed below

Will Satya share LinkedIn with Salesforce or will he turn the screw and allow Microsoft Dynamics to create a competitive advantage by only integrating with Microsoft.

Why did Microsoft buy LinkedIn

In the public presentation it has the slide below showing both company mission statements

Microsoft

Empower every person and every organization on the planet to achieve more

LinkedIn

Connect the world’s professionals to make them more productive and successful

They share elements of a common goal of helping people and organisation work productively by working together, Microsoft uses technology to help connect people, LinkedIn uses it’s website.  The key element is people and LinkedIn have 433 million people who Microsoft can try and tap into.

Microsoft strategy is Cloud first, mobile first and

In this article We just talked to Satya Nadella and Jeff Weiner about why Microsoft decided to buy LinkedIn Satya mentions the points he considered

  1. Does it help Microsoft expand the addressable market?
  2. Does it help “ride some new technology waves that are secular that are increasing engagement with users?”
  3. Is it core to Microsoft – “is it something where Microsoft can uniquely differentiate?”

Buying LinkedIn fits into Microsoft’s cloud strategy which is an area Microsoft needs to keep pushing into if it’s going to convert itself to a cloud solution company from a desktop solution company.

These quotes from here highlight the potential of the deal

It helps us differentiate ourCRM product with social selling. It helps us take Dynamics [Microsoft’s suite of business management software] into new spaces like human capital management with recruiting, and learning, and talent management.

He also said that the deal would help Microsoft target “sales professionals, talent people, and recruiting folks, as well as marketeers who are looking for B2B marketing targeting.”

 

This quote gives a strong indication where the future lies for the LinkedIn/Microsoft, it’s taken from Satya’s LinkedIn Memo

It requires a vibrant network that brings together a professional’s information in LinkedIn’s public network with the information in Office 365 and Dynamics. This combination will make it possible for new experiences such as a LinkedIn newsfeed that serves up articles based on the project you are working on and Office suggesting an expert to connect with via LinkedIn to help with a task you’re trying to complete. As these experiences get more intelligent and delightful, the LinkedIn and Office 365 engagement will grow. And in turn, new opportunities will be created for monetization through individual and organization subscriptions and targeted advertising.

 

It sounds good in theory, we need to see how it will work in practice, we wouldn’t want a LinkedIn version of the paperclip!

Will it be successful?

Most acquisitions fail because the company buying is focused on what benefits the company being brought can bring, successful acquisitions focus on the benefits they can bring to the company they are purchasing.

Now LinkedIn is owned by Microsoft, it can pursue a long-term strategy, focusing on integrating with Microsoft and not waste time, effort and money on short term strategies.  Microsoft can if they choose speed up LinkedIn’s development and growth

Integrating LinkedIn with Microsoft office products/Office 365 and Microsoft Dynamics products can add value to the LinkedIn and give Microsoft a unique differentiator..

One area LinkedIn is lacking is the integration of it’s data with companies, this could happen with integration with Office 365 and Microsoft Office products.

The value of LinkedIn isn’t the technology but the people registered on LinkedIn, these are of great value to Microsoft.  Microsoft has overpaid in today‘s market butthismightturn outtobeagreat investment in 5 to 10 yearstime.

Without Microsoft LinkedIn has a great business model, LinkedIn haven’t monitized their platform much, improvements in this area will bring larger profits.  Being owned by Microsoft should help and could prove profitable for both Microsoft and LinkedIn.

Letting LinkedIn be its own company is a great move because itwas doing a good job in a different way to Microsoft, so instead of disrupting it, let it continue.

Whats the buzz in the CRM community

There will be more news and articles in the days to come but yesterday I saw these

Microsoft + LinkedIn == True

Hosk’s thoughts

Microsoft have overpaid but when there is cash in the bank and slowing growth you feel you should act.  The 433 million users will be a massive benefit to Microsoft and buying LinkedIn they purchased the leading working network site.

Most professionals use LinkedIn and Microsoft Office products, integrating them will save time and add value to those people who use them.

inkedIn integration to the Microsoft Dynamics products will give Microsoft a competitive advantageSalesforce and other CRM products won’t be able to match.

The price Microsoft has paid is a testament to the progress LinkedIn has made because of LinkedIn size, itwould be difficult for Microsoft to compete by creating it’s own platform, Microsoft needed LinkedIn more than LinkedIn needed Microsoft.

Buying LinkedIn fits in with Microsoft’s cloud strategy and helps them to continue to grow in this market.  LinkedIn will become a profitable company on its own but working with Microsoft both companies can benefit.

The main criticism with the acquisition is the price, Microsoft have overpaid big time butthis is only a consideration in the short term and itwas money Microsoft had in cash!  I will end with the same Warren Buffet quote

Price is what you pay. Value is what you get.

Warren Buffett

Good Articles


Filed under: Microsoft

CRM 2016 – XRMToolBox – loadFromRemoteSources error

$
0
0

Do not wait; the time will never be ‘just right.’ Start where you stand, and work with whatever tools you may have at your command, and better tools will be found as you go along.

George Herbert

 

The latest XRMToolBox  is fantastic, its awesome  you can download the external plugins from the plugin store by clicking on the plugin store button.

XRMToolkit plugin store

If you are not using the XRMToolbox then download it here and go to the plugin store and you will find something useful which will save you hours of manual work.

loadFromRemoteSources error

I opened up the XRMToolbox and got the error below when I tried to use the plugin store

XRMToolbox

This error is caused by an assembly (dll) being loaded from a remote source and be granted full trust

You can find information about the error on the page below

https://msdn.microsoft.com/en-us/library/dd409252(v=vs.110).aspx

This stackoverflow page helped me understand the issue

In the xrmtoolbox config file you can have the element – loadFromRemoteSources and this can have a true or false value.  To make the PluginStore work we need to set the trust to true.

In the folder you should find a file called

XrmToolBox.exe.config

Below is the code I put at the bottom above the configuration

<runtime>
<loadFromRemoteSources enabled = “true” />
</runtime>

Here is a picture, to show you where I put the lines

XRMToolkit plugin store 1

Save the XrmToolBox.exe.config and open the XRMToolbox again and now the plugin store should work.

 

 


Filed under: CRM 2016, tools

CRM 2016 – How to find the default currency without going into Office 365

$
0
0

Before you do anything, always stop to think #HoskWisdom

I was tasked with moving a customisations, data and config from one CRM Online instance to another.

I was only a CRM System Administrator and didn’t have access to Office 365.  I was checking some of the settings and wanted to know the default currency.

The default or base currency is set when you create your Microsoft Dynamics CRM instance, it’s usually set to the country where the organisation is based.

If you add more currencies you have to keep the exchange rate up to date but CRM calculates all values in the base currency and converts them using the exchange rate on the screen.

If you want to learn more about currencies in CRM this blog is excellent

Investigation

I headed over to check the currency section of Microsoft Dynamics CRM

Settings –> Business Management –> Currencies

Currencies

Having two currency fields meant I didn’t know which one was the base currency field

I tried to use the FetchXML builder to see if there was a field which specified which currency was the default currency but there isn’t.  I never realised the Currency entity has the schema name of transactioncurrency.

Using my Sherlock detective skills the currency with the earliest CreatedOn date would be the first currency record and likely to be base currency.  I’m guessing the base currency would be the one with 1 exchange rate.

Currencies 1

I didn’t want to guess because assumptions can cause problems and bugs in Microsoft Dynamics CRM.

I decided to open the currency records and when I opened GBP and it told me it was the base currency.  The exchange rate is read only

Currencies 3

The EUR exchange rate was editable and it didn’t tell me it was the base currency.

Currencies 2


Filed under: CRM 2011, CRM 2016

Hosk’s Top CRM Articles of the week – 20th June

$
0
0

Quotes

“Remember to always be yourself. Unless you suck.”
Joss Whedon

If a product isn’t easy to use then people won’t use it #HoskWisdom

What I love about the Microsoft Dynamics CRM community is there is always someone willing to help you #HoskWisdom

 

Someone asked me this week if they thought at some point I might run out of #HoskWisdom and I said don’t worry, I’m full of it:-) (drum beat followed by symbol clash)

If you can meet writing coding and boring non code tasks
And treat those two impostors just the same;
ours is the Earth and everything that’s in it,
And – which is more – you’ll be a Man, my so

Article of the week

CRM Article of the week

Hands on application integration dynamics CRM using azure service bus

Great article on using Microsoft Dynamics CRM Online with the Azure service bus, it’s a step by step guide

Best of the Rest

Software boundaries and limits for Dynamics CRM 2015/2016/Online Part 1

Microsoft buys LinkedIn – What you need to know

Deprecation announcements with Dynamics CRM Online 2016 Update 1 and 2016 Service Pack 1 

CRM 2016 – How to find the default currency without going into Office 365

An Introduction to Office 365 Groups for Dynamics CRM

salesforce license pricing is more than 2.5 times the price of comparable Microsoft licenses before sandboxes etc

Find out more about the new courses and exams

35 Best Dynamics CRM Blogs of 2016 

CRM 2016 – XRMToolBox – loadFromRemoteSources error

Gotcha Working with Dynamics CRM Web API: Grammar

Getting Started with Fiddler and CRM

Improved Iconator for XrmToolBox

Create an SLA to contact Leads

Thoughts on the MB2-712 – Microsoft Dynamics CRM 2016 Customization and Configuration certification

Programming

write less code

7 deadly career mistakes developer make

other

WHAT! – Germany have a 100% record in World Cup shoot-outs, winning all four and missing only one of 18 penalties.  Now they have an app to help them, read more here

Microsoft once had to rebuild a critical product because even its own managers couldn’t figure out how to use it

AN OLD IDEA, REVIVED: STARVE CANCER TO DEATH

A Leadership Lesson From Eisenhower’s Stoic Reversal at D-Day

Useful Hosk Links

Hosk list Of CRM 2013 Tools

A list and review of CRM 2013 tools, this will probably work in CRM 2015 as well

Hosk’s CRM Developer Articles

A collection of my favourite CRM Developer articles I have written

MB2-703 – CRM 2013 Customization and Configuration Certification Information

All the CRM 2013 content to help you pass the exam

HoskWisdom – Hosk Developer Quotes

 Words of Wisdom from the Hosk.  I have written over 1000 articles, surely I should have said a few memorable things


Filed under: CRM 2011

MB2-712 – CRM 2016 customisation and configuration Hosk study notes

$
0
0

There is no end to education. It is not that you read a book, pass an examination, and finish with education. The whole of life, from the moment you are born to the moment you die, is a process of learning.

Jiddu Krishnamurti

 

I recently passed the MB2-712 – CRM 2016 customisation and configuration certification, you can read my thoughts on the MB2-712 – Microsoft Dynamics CRM 2016 Customization and Configuration certification

The certification covers a lot of big areas in Microsoft Dynamics CRM and you will need to make a lot of notes.  If you have taken earlier custom and config certifications a lot of this information can be found on my

I have some previous study notes for the CRM 2013 custom and config certification, much of which is still relevant (security, solutions, Business Rules, etc).  You can find those study notes on the link below

MB2-703 – CRM 2013 Customization and Configuration Certification Information

CRM 2016 Hosk study notes

The notes focus on CRM 2016 functionality which I hadn’t used, has been updated or I didn’t cover in my previous study notes.

These are just study notes, you will need to understand the functionality and use it before you take the certification.

If you are studying for the certification and you work for a Microsoft Dynamics partner make sure you check out the E-Learning online course – Microsoft Dynamics CRM Team – CRM 2016 Customization and Configuration 80729: Customization and Configuration in Microsoft Dynamics CRM 2016

A lot of the notes  from many excellent technet articles created by Microsoft, which shows they do a great job with their documentation.  Below is just parts I use to study but you should read the article to understand how the functionality works

Business rules

  • Condition is criteria/if statement
  • Action changes values/updates
  • You cannot set to business recommended – must use JavaScript
  • Actions occur when conditions evaluate to true, the AND/OR must be true
  • You can’t mix multiple conditions they are either AND or OR
  • Set scope to Entity if you want a business rule to run on the server, not just on the client side
  • Business rules are not triggered when you save a record
  • Business rules are triggered when a record is opened or when a field is changed which the rule conditions are set to check e.g Form OnLoad and Field OnChange
  • Business rules action will run only if condition is true
  • Business rules work at a field level – not triggered by tabs or sections
  • Scope – All forms is all forms including Quick Create
  • Scope – Entity runs on the server and client
  • Scope – single form – business rules only run for this form
  • If/Else is needed to show and hide fields
  • Nested IF/ELSE not available

Business rules actions can

  • Set field Value
    • Field
    • Value
    • Formula
    • Clear
  • Show error message
  • Set Visibility
  • Set default value

Business Process Flows

  • Enabled from the entity definition screen
  • Once Business process flow is enabled you cannot disable
  • A business flow has a primary entity but can span multiple
  • 3 out of box Business process flows enabled by default
  • 12 additional BPF’s which can be enabled via Settings à data management
  • Once enabled you have to disable each individually
  • One entity per stage
  • Stage category is just for reporting – it’s linked to a global option set (which you can change)
  • Step name = fields shown on the business process flow
  • Branches can be only 5 levels deep
  • Maximum 30 stages
  • Maximum 30 steps per stage
  • Relationships doesn’t need to exist between entities
  • Other entities must have Business process flow enabled
  • Relationships are 1:N
  • Security roles can be assigned, options will be disabled
  • Each entity can have no more than 10 activated business process flows
  • Each process flow has a maximum of 30 stages
  • Multi-entity process can use no more than five entities.
  • You can only run one business flow for each record
  • Current process and stage is a unique identifier. This allows the user to return to the process at a later time.
  • Business process flows can be associated with security roles, so only users with specific security roles will see the business rules.

Yammer

  • Yammer is subscription based and requires an enterprise account
  • Once Yammer is enabled there is not an option to go back to activity feeds

Charts

  • Personal charts can be shared with users or team
  • Charts can be exported as a Chart XML file and imported (use XRMToolbox in real life)
  • With a Chart you can
    • Select the entity
    • Select fields you want to aggregate (sum, count)
    • Select chart type
  • Aggregate options
    • Count: All
    • Count: Non empty
    • Avg
    • Max
    • Min
    • Sum

Dashboard

  • You can display
    • Charts
    • Lists
    • Iframe
    • Web resources
    • Social insights (if you have Microsoft Social Engagement)
  • Dashboards can be made available for tablets
  • System Dashboards can specify security roles which can view each dashboard
  • In properties you can enable dashboard for tablets and individual sections for mobile

Rollup fields

  • Rollup fields recalculate once an hour
  • Rollup fields supported – Whole Number, Date and Time
  • Rollup fields not supported – Option set and Lookup
  • Aggregate value of records related to a specific record
  • Rollups fields are asynchronous, they don’t run in real time
  • Rollup fields can be run by workflows or business rules
  • Read Microsoft Dynamcis CRM 2015 Rollup Fields: The Gotchas
  • Rollup fields can be refreshed manually or triggered by a workflow CalculateRollupField message
  • Changes to rollup fields DO NOT trigger a workflow processes

Available Functions

  • Sum
  • Count
  • Min
  • Max
  • Avg
  • Rollup Fields are automatically rolled up 12 hours after they are created.
  • You can manually Rollup a field at any time by clicking the Refresh button on the rollup field.
  • You can only have a maximum of 10 rollups per entity, and 100 per organization.
    • This is configurable for on premise deployments, but be aware of potential performance implications
  • A rollup field can’t be included in other rollup fields
  • Data from Rollup field are not stored by CRM auditing, so there is no real way to store historical values of a rollup field.

http://www.preact.co.uk/blog/using-rollup-fields-in-microsoft-dynamics-crm-2015

  • Access to rollup data can be secured using regular field security permission to ensure that it is only available to authorized users if needed.
  • When a rollup field is created on any entity, the platform automatically creates two other fields to store metadata for the field calculation timestamp and status of last operation. These are suffixed with “_date” and “_status” accordingly.
  • “_date” stores a timestamp when the rollup field was last recalculated and “_status” shows result of operation in numeric value, these statuses reflect:
    • Not Calculated
    • Calculated
    • Overflow Error
    • Other Error
    • Retry Limit Exceeded
    • Hierarchical Recursion Limit Reached
    • Loop Detected

https://technet.microsoft.com/en-us/library/dn832162.aspx

  • Seamless integration with the user interface. You can include the rollup fields in forms, views, charts and reports.
  • Rollup fields are solution components. You can easily transport the rollup fields as components between organizations and distribute them in solutions.
  • Rollup fields and the calculated fields are complementary to each other. You can use a rollup field as a part of the calculated field, and vice versa.

The text below comes from this technet article

Rollup calculations

  • Mass Calculate Rollup Field is a recurring job, created per a rollup field. It runs once, after you created or updated a rollup field. The job recalculates the specified rollup field value in all existing records that contain this field. By default, the job will run 12 hours after you created or updated a field. After the job completes, it is automatically scheduled to run in the distant future, approximately, in 10 years. If the field is modified, the job resets to run again in 12 hours after the the update. The 12 hour delay is needed to assure that the Mass Calculate Rollup Field runs during the non-operational hours of the organization. It is recommended that an administrator adjusts the start time of a Mass Calculate Rollup Field job after the rollup field is created or modified, in such a way that it runs during non-operational hours. For example, midnight would be a good time to run the job to assure efficient processing of the rollup fields.
  • Calculate Rollup Field is a recurring job that does incremental calculations of all rollup fields in the existing records for a specified entity. There is only one Calculate Rollup Field job per entity. The incremental calculations mean that the Calculate Rollup Field job processes the records that were created, updated or deleted after the last Mass Calculate Rollup Field job finished execution. The default maximum recurrence setting is one hour. The job is automatically created when the first rollup field on an entity is created and deleted when the last rollup field is deleted.
  • Online recalculation option. If you hover over the rollup field on the form, you can see the time of the last rollup and you can refresh the rollup value by choosing the Refresh icon next to the field, as shown below:

Rollup field considerations

  • A workflow can’t be triggered by the rollup field updates.
  • A workflow wait condition cannot use a rollup field.
  • A rollup can’t reference a calculated field that uses another calculated field, even if all the fields of the other calculated field are on the current entity.

Calculated Field

  • Calculated fields are not simple fields – they are Field Type – Calculated
  • You can’t convert a simple field into a complex field
  • You can calculate value on the entity and related parent entity
  • You cannot calculate related records
  • You cannot change the field type after initial save
  • You can always change the calculated expression/formula

Hierarchy security

It’s in addition to your current security.  It extends the current security model.  This works on top of your existing security levels

  • You can choose managerial or position but not both.
  • It works at a position level or managerial level

Managerial

  • A manager must reside in the same business unit or the parent business unit of the person they manage
  • Manager is defined on the user record
  • The manager must have read access enabled on entities

Managers

  • You must set the managers
  • Managers have read, write, update, append and append-to for direct reports. NOT DELETE
  • Non – Direct reports – have only read only access data. (you can only see it)
  • It works within the business unit structure

Position

  • Does not use the direct report model
  • It works beyond business units, e.g. it position spans business units
  • Spans business units
  • The more levels can effect performance for the higher
  • Optimal performance is around 4 levels, maybe 5
  • You can set individual entities to be used in the hierarchy management
  • Position hierarchy can span business units.

Videos on Hierarchy security

 

Technet/msdn articles on hierarchy security

App for Outlook

Works in a server level – works with outlook or OWA (exchange service)

Mobile

  • Tablet
    • Dashboards
    • Offline Drafts – create new records
    • Open in a default browser
    • Offline search
  • Phone
    • Hide from phone (similar)
    • Fields, sections, tabs and lists

Dynamics CRM license options

  • Essential – no access to sales or marketing functionality
  • Basic – access base CRM functionality – Account, contract, lead, cases
  • Professional – access sales, services, marketing
  • Enterprise – Everything + MDM, Parature etc

These notes are from the Slides

Email – Mailboxes

  • Each user/queue enabled for email has a mailbox record
  • Mailbox record defines email synchronisation for the user
  • Incoming, outgoing, and appointments. Contacts & tasks
  • Each mailbox must be approved and enabled before emails can be sent
  • You can check the status of mailboxes in the Server-Side Synchronisation monitoring
  • System Settings – Email sets the default synchronization and emails settings

Dynamics CRM 2016 supports a few different methods for processing email:

  • CRM for Outlook
  • The Dynamics CRM Email Router
  • Server Side Syncing

Multi-Entity Quick Search

  • Out the box, this new search feature will search across the following entities:
  • You can select up to 10 entities for a quick search
  • You can choose any of the 90 visible entities
  • Any custom entities
  • It uses the Quick Find Search settings for each entity
  • Default entities – Account, Contact, Lead, Opportunity, User, Competitor, Activity, Case
  • Out of box, the multi-entity quick find is defaulted to search seven entities in Dynamics CRM:
    • Accounts
    • Contacts
    • Leads
    • Opportunities
    • Users
    • Competitors
    • Activities

It’s hidden in Settings à Administration à System Settings à General tab and there is a button Quick find

Themes

  • The default theme is called CRM Default Theme
  • The default theme is type System and Default Theme = Yes
  • Themes cannot be included in Solutions.  This means you need to export and import them between organisation.
  • After importing a theme you must publish it.
  • When you publish a theme, previously published theme will become unpublished

This technet page has some good limitations

What can you change or adjust with themes?

  • Logo
  • Logo tooltip
  • Navigation bar color
  • Navigation bar shelf color
  • Header color
  • Global link color
  • Selected link effect
  • Hover link effect
  • Process control color
  • Default entity color
  • Default custom entity color
  • Control shade
  • Control border

Theme limitations below are from the technet article

  • Even though the theme colors are applied globally throughout the application, some legacy UI areas, such as gradient buttons, will retain the default colors.
  • Certain areas must use dark or light colors to contrast with the default icon colors. The icon color isn’t customizable.
  • An entity can’t be displayed in different colors under different Sitemap nodes.
  • The Sitemap nodes colors aren’t customizable.

Solutions Patches

Technet – Use segmented solutions and patches to simplify solution updates

  • A patch represents an incremental minor update to the parent solution. A patch can add or update components and assets in the parent solution when installed on the target system, but it can’t delete any components or assets from the parent solution.
  • A patch can have only one parent solution, but a parent solution can have one or more patches.
  • A patch is created for unmanaged solution. You can’t create a patch for a managed solution.
  • When you export a patch to a target system, you should export it as a managed patch. Don’t use unmanaged patches in production environments.
  • The parent solution must be present in the target system to install a patch.
  • You can delete or update a patch.
  • If you delete a parent solution, all child patches are also deleted. The system gives you a warning message that you can’t undo the delete operation. The deletion is performed in a single transaction. If one of the patches or the parent solution fails to delete, the entire transaction is rolled back.
  • After you have created the first patch for a parent solution, the solution becomes locked, and you can’t make any changes in this solution or export it. However, if you delete all of its child patches, the parent solution becomes unlocked.
  • When you clone a base solution, all child patches are rolled up into the base solution and it becomes a new version. You can add, edit, or delete components and assets in the cloned solution.
  • A cloned solution represents a replacement of the base solution when it’s installed on the target system as a managed solution. Typically, you use a cloned solution to ship a major update to the preceding solution.
  • Version numbers are compared when solutions are imported.
    • Newer versions will replace existing versions of the solution.
  • Version Number
    • Up to four numbers separated by decimals
    • Appended to solution name to create exported filename

Entity Assets

  • Specify exactly what should be included in the solution
  • Includes tabs to select specific,
    forms, views, charts, fields,
    relationships, messages,
    Business rules and Hierarchy
    Settings
  • Assets can be can be added later
  • Must be defined for every
    entity added to the solution

Technet – Create patches to simplify solution updates

Read this on solutions segmentation

Types of Solutions

  • System solution: – The default solution, when you go to customization.
  • Unmanaged solutions: Editable solutions which act as a contrainer for customizations Container for unmanaged customizations. Deleting an unmanaged solution doesn’t delete customisations or data.  You can export an unmanaged solution.  When you import an unmanaged solution you must publish it.
  • Managed solutions: non editable.  Deleting a managed solution delete customisations and data.
    • Created by exporting an unmanaged solution (you cannot export a managed solution).
    • Can’t change the customisations inside a managed solution
  • Managed Patches: Updates and fixes that can be pushed out to Managed solutions that allow updated specific components and not having to overwrite the entire contents of an existing solution.

Quick Create forms

  • you can define multiple quick create forms, only one quick create form can be used by everyone
  • The form everyone will use is set using the form order.
  • Quick create forms cannot be assigned to security roles
  • You cannot switch quick create forms
  • You can disable quick create forms by unticking the Allow Quick Create option on entity settings

The following controls cannot be added to quick create forms:

  • Sub-grids
  • Quick View Forms
  • Web resources
  • IFRAMEs
  • Notes
  • Bing Maps

Quick View Form

Technet info – https://technet.microsoft.com/en-us/library/dn531145.aspx

  • Allows you to view information about a related entity from within a form of another record. E.g. see a contact details on an account.
  • You add a quick view control to an entity
  • It can be for lookup fields which exist on the entity
  • You must save and publish the main form before the quick view control changes will be visible
  • You can only view the information not edit with a quick view control
  • Multiple sections are allowed
  • Only one tab

Status Reason Transitions

if you add Status reason transitions, you must include one inactive status for each status.

Relationships

Actions that Trigger Cascading Behaviour for 1 to many relationships

  • Assign
  • Share
  • Unshare
  • Re-parent
  • Merge
  • Delete

 

  • 1 to Many relationship creates a native hidden intersect entity
  • Intersect entity is managed by CRM, cannot view or customize.
  • If you want to record information in the many to many relationship entity then you need to create a new entity, which you can edit/add fields/report on.
  • Native = CRM creating intersect entity
  • Manual = creating a new entity

Connections

  • Ad Hoc relationships – do not need relationships to be created
  • Allows you to connect records
  • Connections can be used in queries and reports
  • Connection role provides a description

Forms

  • Tabs
    • Can have one to three columns
    • Must contain at least one section
  • Section
    • Contains one to four columns
    • Can show
      • Fields
      • Sub Grids (lists or charts)
      • Notes
      • Iframes
      • Web resources
      • Bing maps
      • Spacers (blank space)

Additional components

  • Spacers
  • Timer
  • Knowledge base search
  • Social insights

Sub-grid for Access Teams (must enable entity for access teams)

Multiple forms

  • Enable specific security roles to access forms
  • Can remove security roles from forms
  • Form order determines which form a user sees
  • Enable for fallback is the form for users who security role is not assigned to any form.

CRM Mobile

  • Only first 5 tabs or 75 fields/10 lists appear on mobile client
  • Set available on Phone checkbox to show/hide tabs in mobile
  • Collapsed tabs still count
  • Only 5 tabs will show even if it’s less than 75 fields
  • You have to put fields in the first five tabs for them to appear in a mobile client
  • Mobile can have specific mobile only controls (sliders)

Filed under: Certifications, CRM 2016, MB2-712

CRM 2016 – The importance of keeping the same guids between CRM instances

$
0
0

Everyone wants to learn the same thing from painful situations: how to avoid repeating them.

Gary Zukav

 

I worked on a CRM project where the configuration data had different guids between CRM environments.   The project contained 10 complex workflows which referenced these records in CRM, when deploying, the workflows were manually repointed to select the records in each CRM environment, this manual step could take between 30 to 60 minutes.

In this post I discuss the role of guids, how to avoid workflow problems using the CRM configuration data mover tool which creates data in a different CRM instance with the same guid.

The task

Importing 300 opportunities from a CRM 2015 Online instance to a CRM 2016 online instance.  Therewasn’t much data, the customer didn’t want to pay so I used free solutions and not Kingsway SSIS or Scribe

Instead I am using the excellent Lucas Alexander’s Dynamics CRM Configuration Data Mover v1.10.

If you have never used the Dynamics CRM Configuration Data Mover read the introduction blog page below

Introducing the Alexander Development Dynamics CRM Configuration Data Mover

The purpose of the data mover is to move data between CRM instances and the records keep the same guids.

Why is it important to keep the same guids?

Guids are unique identifiers (guid stands for Global unique identifer) and when you create a new record, CRM automatically creates them for you.  Every record in CRM has a guid, these are used in lookups when selecting records.

A lookup record is an EntityReference, which has the entity type and guid.  In my Hosk Dev tip I recommend you always add an ID suffix to lookup fields so they are easy to spot

Hosk CRM Dev Tip – add ID suffix to lookup fields

Once you get the guid of a record you can use this in code to retrieve details on the record and use it whilst debugging  your code. One reason why CRM developers want to retrieve the guid of a record – Quick way to get the guid on a form, my current favourite way is using bookmarklets

When you import data into a new CRM instanceit creates the records and assign those records new guids.

Records with the same name but different guids cause problems in workflows which use lookup fields.  Inside those lookup it has a guid which doesn’t exist in different instances of CRM and the workflows won’t work.  The workflows show you this by unpublishing themselves when deployed in a solution to a new CRM environment.

If you use the CRM configuration data moverit copies the records across and the data has the same guids..

CRM configuration data mover highlights

I will cover the CRM configuration data mover in more detail in a future blog post but here are a few highlights

  • You use FetchXML to retrieve records, this allows you to filter record you want to copy
  • It has an update and create checkbox for each step
  • Iteasily syncs data between CRM instances with a push of one button
  • You can move Access teams (currently no way to export/import access team templates between CRM instances – Why are access teams marooned?, also read The benefits of Access Teams)
  • It can be run from command line to make it part of your build
  • It makes the build process easy
  • It keeps the same guids
  • It can map guids of records used e.g. user records

I wouldn’t recommend this tool to copy lots of data across, it not designed for bulk copying and might result in a situation where half the data has copied across.

Configuration record

A different way to avoid the guid problem is to create a configuration/System Settings entity which you can use to hold global settings used in your customisations.

Having a configuration entity encourages developers to put global configurations in the entity rather than inside the code or on each entity.  Standard approaches to development make it easier for teams to create one solution and easier to debug.

A configuration entity is easier for the team to the global configuration settings which when changed and can cause CRM to act in an unexpected way.

I have seen CRM teams create one entity and add fields as needed but I prefer to create a simple entity with a name and value field.  This way you can add more configuration settings by creating recordrather than having to update an entity and add fields.  What ever system you use this code should be standard code used in different projects, this allows you to create reusable code and customisations.  Why isn’t code reused in Microsoft Dynamic CRM projects?

The reason this stops the workflow guid problem is workflows reference a field on the configuration entity which you can set at runtime and configure once on each environment.  When you change a workflowit will point to the configuration entity which is the same in each environment.

This method encapsulates what changes and separating it from the rest of CRM.

Manual method

It‘s possible to export records from Microsoft Dynamics CRM, tick the import button, save the record as a CSV.  This will give you the guid for each record in the export (explaining how the enrich/import data works, it uses the good to reimport the data to the correct record).

The records are imported, setting the guid for each record, keeping the same guid between CRM instances.  This method works but involves manual manipulation of excel records and CRM developers have better, more interesting things to do.

I have worked on projects in the past which created its own import/export console app, this worked but many hours were spent maintaining and debugging the tool.  It’s better to use the Dynamics CRM Configuration Data Mover.

Get a deployment process

Data copying and keeping CRM instances in sync is important butits one of many parts of a deployment process.

You need a standard deployment process.  Deployment process and checklists are great with repeatable static lists of tasks where you need to do multiple steps in a set order.  Read the blog post below for ideas

CRM 2015 – Best practices for CRM Deployments

You should automate asmuchofthe deployment processas possible, this

  • Reduce errors
  • Stop wasting developers time
  • Quicker
  • Allows people to deploy without knowledge part of the deployment process

A few other thoughts

I few of blog posts on keeping your Dev environment in good order and best practices


Filed under: CRM 2016
Viewing all 469 articles
Browse latest View live