Saturday, March 10, 2012

Triggering a Workflow off a Field’s Initial Population

The Problem

When triggering workflows, there are seven options:

  • When the record is created
  • When the status of the record is changed
  • When the record is assigned (ownership changes)
  • When a field on the record changes
  • When the record is deleted
  • Manually (an on-demand workflow)
  • As part of another workflow (child workflow)

image

This covers a wealth of scenarios. However, there are times when we need more. Recently I worked on a project where we needed to trigger off the initial population of a field. The company was, in essence, a courier company. Customers booked international deliveries and, while the bookings were entered into the system when taken, it was only later that my client knew which plane was taking the goods.

Once the details of the plane was entered in the system, escalation checks needed to be put in place to ensure a paperwork was completed on time, deliveries reached their destination on time etc.

The obvious choice was to trigger off a field change but, if the plane details changed prior to take-off, this would trigger two escalation workflows as it is not possible in a workflow to check what the value was prior to field population. If the details changed a number of times, suddenly users are receiving multiple notifications for the same delivery. This was undesirable.

The Solution

The first option in dealing with this scenario is to use a check box on the record. When the workflow is first triggered, the tickbox is ticked and future workflows, checking for the tickbox no longer fire. Another related option is to have a field keep a copy of the previous value, managed through workflows. I outline this approach here.

This would have worked but there were a number of date fields that I needed to trigger off (about ten in total) and the overhead of adding another ten checkbox fields or adding fields and workflows was a bit high for me.

In the end I settled for a different approach; instead of using the ‘field change’ event, which can be triggered multiple times, I used the ‘record creation’ event which will only ever trigger once. The screenshot below shows the trigger on the ‘Vessel ETD’ field; the plane’s estimated time of departure (ok, so the project is on a v4 system, but the approach also works 2011).

image

Here we are saying when the delivery contract is entered into the system, fire the workflow and then wait until the ‘Vessel ETD’ field is populated. When this happens, fire a number of ‘checks and measures’ workflows.

These child workflows then kick in. Here is one of them:

image

In this case, once populated, we check the contract is a parent contract (the system allows for subcontracts on the same flight contract), double check the field contains data (not really needed) and then it sets up a reminder a couple of weeks before departure.

The advantage of this approach is that we guarantee that the workflow will only trigger once and, if we have a number of checks and measures running off of the same field, it is quite easy to manage this through the use of child workflows stemming from the one trigger workflow.

The disadvantage of this approach is, if there is significant time between the creation of the record and the population of the trigger field, we have a workflow in a waiting state gobbling up processor cycles. This is more of an issue if we have a high volume of contracts, which I did not have in this case.

Conclusions

If you are needing to trigger off the initial population of a field but do not want to fire the same workflow when the field gets updated there are a few approaches with workflows before resorting to code. Using a check box can work but can be tricky to manage and adds the overhead of a bunch of fields which are just used for workflow management. Adding a mini-audit function can also work but requires additional workflow and fields to be added to the system, again adding to workflow management.

By triggering off of the creation of the record, and waiting for the field to be filled in before acting, we create an intuitive system with minimal overhead in terms of fields or workflows which can be easily adjusted as the processes of the business evolve.

Wednesday, February 29, 2012

Salesforce’s Full Year Results

Its that time again when Marc Benioff comes out and tells us how great the revenue growth for Salesforce has been. It also means its time for me to pour over the numbers and see what else is happening.

To see how Salesforce fared last quarter, look here.

Full Year Results (2011)

Saesforce refer to this quarter as ‘Q4 2012’. The reason being that they end their financial year at the end of January. I am sure there is a good reason for this, I just do not know it.

For the details of the numbers, go here.

Unfortunately for Marc, Kris Kringle did not deliver the bumper end of year he needed to keep Salesforce out of the red and the business made a $11.6m loss on the back of $2.3b in revenue (about 0.5% loss). Here is the graph.

image

It seems the dam is still leaking but it is not getting any worse. The loss for the last three quarters has been around $4m and appears to be constant. In other words, while revenues are growing rapidly, the expenses of the business are keeping pace (but no longer overtaking). When one considers that in the two quarters prior to these profits were eroding at $10m per quarter, this is an improvement, although still no an ideal position to be in, in my opinion.

Earnings Conference Call

Listening to the conference call we heard:

  • David Hadlick, Head of Investor Relations
    • ‘Outstanding’ quarter
  • Marc Benioff
    • ‘Gorgeous finish’
    • Revenue growth
    • Cashflow increase
    • 2500 additional employees
    • Lots of large transactions this quarter
    • Raised guidance, $3b revenue this year
    • A few well known names examples of new customers
    • Second largest market share, taken from SAP, for CRM
    • 45 billion transactions in the cloud
  • Graham Smith
    • ‘Outstanding fourth quarter’
    • non-sales cloud business more than 40% of business
    • Some non-GAAP statistics
    • Cashflow up
    • ‘Great year with huge wins’
  • Questions
    • 9 figure deal with an ‘Illinois-based insurance company’
    • Benioff: ‘committed to increase our margins’ (but not right now)
    • Benioff: Wants deals of all sizes
    • Benioff: Focussed on current markets, not emerging markets

Obviously, everyone, including the analysts love the results (despite their share transactions suggesting otherwise). Other than the report of non-GAAP EPS and the great ‘margin vs growth’ question, there was barely a mention of profit but the constant drone of revenue and non-GAAP statistics. Benioff, again, affirmed that he is laser-focussed on growth and, while making a profit is a good idea, it is not an idea to act on right now.

The idea of consolidating existing markets rather than invest in emerging ones is an interesting one so it will be interesting to see how that turns out. Given China’s growth and ever-increasing prominence on the world’s stage, the Salesforce play may win the battle but I am not sure it will win the war.

One thing that was conspicuous in its absence was the mention of Microsoft. While Marc was happy to put the knife in SAP and Oracle and the wisdom of their acquisitions. Either he no longer considers Microsoft a threat or he sees the others as the ‘low hanging fruit’ in terms of spinning a marketing pitch. Other than dismissing Microsoft’s focus on China, Dynamics CRM went unscathed.

Conclusions

I will hold off looking at the subscriptions until post-Convergence as there is the chance Microsoft will actually provide some subscription numbers. My previous prediction of a full year loss was realised.

Based on the results and Salesforce’s reaction to it, the good ship Salesforce continues on its course. The leaks have been patched and the rate of sinking has been held at a constant. The only shift seems to be the competitive focus, which are the incumbents SAP and Oracle, rather than the CRM-upstart Microsoft.

The idea of ‘Minneapolis over Mumbai’ is an interesting one but, again, like their profitability, not sustainable in the longer term. Salesforce must eventually change course or they will hit an iceberg.

Tuesday, February 14, 2012

What Are The Directors Thinking? Microsoft vs Salesforce.com

What if we knew what the directors of public companies i.e. ones on the stock exchange, really thought about the fortunes of their company? Sure they often release press statements saying how excited they are about the future and how great their company’s products are but how can we work out what is passion and what is spin?

One tool to do this is their insider trading. We often think of the term ‘insider trading’ as a bad one or something illegal. In fact all it means is that someone with better knowledge than the market is buying or selling shares. In the case of the executives and directors of companies it is inevitable that they have knowledge of their companies which would be detrimental for them to reveal publicly. Yet, it is desirable for them to engage in the buying and selling of shares in their company. After all, they are often own significant fractions of the companies they work for and it would be difficult to restrict them in buying or selling this ownership (which is what shares of a company are: packets of ownership).

To get around this problem of people with better knowledge of the market needing to be able to buy and sell shares, the rule is simply this: if they trade in share of a company where they are a director or executive, they must publicly declare the trade to the market. Unfortunately they are under no obligation to state why they engaged in that transaction.

So Why Do People Buy and Sell Shares?

My thoughts on this are strongly influenced by two writers: Warren Buffett (through his Berkshire Hathaway annual letters) and Benjamin Graham (through his book ‘The Intelligent Investor’). Given Graham was the lecturer of Buffett, the two are closely aligned on this subject. Essentially, the reasons people buy or sell shares are pretty simple.

People buy shares because:

  • They think the company is a good investment e.g. the share price will go up faster than the other companies they could buy shares in or the dividends the share pays (think of this as ‘interest’) is better than what they could get elsewhere

People sell shares because:

  • They think the company is a poor investment e.g. the share price will go down or not increase as fast as the price of other companies or the dividends the share pays are not as good as what they could get elsewhere
  • They need the money

In short, if ‘insiders’ are buying this is an indication of a good investment. If ‘insiders’ are selling it MAY indicate a bad investment.

Using this as our measuring stick, we can see if the statements made by the leaders of Microsoft and salesforce.com are in alignment with their share trades.

Round One: Microsoft Sells

For this analysis I have used the insider trades for 2011. The reason for this specific year is that it was easy to find the numbers and pump them into Excel by using Yahoo finance. Here is the link: http://finance.yahoo.com/q/it?s=MSFT+Insider+Transactions. For salesforce.com you get the same URL and replace ‘MSFT’ with ‘CRM’.

If you want more years, another great source is insidermonkey.com.

The only downside with using the Yahoo finance table is that they have put footnote references above the total dollar value where the trades were done across a number of share prices. The upshot of this is if the table shows ‘2,253,0002‘ this pastes into Excel as ‘2,253,002’. Given the large numbers at play I have not worried too much about it as this will not have a significant effect on the results.

 

GATES WILLIAM H III

SINOFSKY STEVEN J

BRUMMEL LISA E

MUNDIE CRAIG J

SMITH BRADFORD L

TURNER BRIAN KEVIN

DELBENE KURT D

NADELLA SATYA

BROD FRANK H

KLEIN PETER S

PANKE HELMUT

2011

                     

Qtr1

557,750,000

46,523,784

1,137,288

25,666,868

6,968,648

 

3,739,580

     

11,269

Qtr2

502,449,999

 

3,261,174

         

16,822

 

11,263

Qtr3

554,500,000

1,665,847

24,675,198

1,401,692

1,479,759

5,645,006

918,734

1,602,411

1,094,876

642,329

11,249

Qtr4

537,800,000

29,770,270

     

1,082,400

 

210,966

   

11,265

Grand Total

2,152,499,999

77,959,901

29,073,660

27,068,560

8,448,407

6,727,406

4,658,314

1,813,377

1,111,698

642,329

45,046

This shows the $ value of shares sold, each quarter, of directors and executive officers.

So who are these people?:

  • William H Gates III: Otherwise known as Bill Gates, Chairman of the Board
  • Helmut Panke: member of the Board of Directors
  • Steven J Sinofsky: President, Windows and Windows Live Division
  • Lisa E Brummel: Chief People Officer
  • Craig J Mundie: Chief Research and Strategy Officer
  • Bradford L Smith: General Counsel and Executive vice President, Legal and Corporate Affairs
  • Brian Kevin Turner: COO
  • Kurt D Delbene: President, Microsoft Office Division
  • Satya Nadella: President, Server and Tools Business
  • Frank H Brod: Corporate Vice President, Finance and Administration and Chief Accounting Office
  • Peter S Klein: CFO

We have two members of the board (out of nine) and nine executives.

The top four sellers (Bill Gates, Steven Sinofsky, Lisa Brummel and Craig Mundie) sold a significant number of shares, in terms of dollar value in 2011 (accounting for 99% of the shares sold).

The reason Bill Gates sells his shares is well documented. The half a billion dollars per quarter goes to fund the Bill and Melinda Gates foundation.

Steven Sinofsky’s reasons are unknown but, given the rise of the iPad, perhaps he though it was time to cash in some of his stock and diversify into Apple.

Lisa Brummel did the majority of her selling in the third quarter of 2011 and runs Human Resources at Microsoft. It is not clear why she needed $29m in 2011 an it is unlikely it was to cover a few bills.

Craig Mundie also sold a similar amount to Lisa. His reasons are also unclear.

A special mention should also go to Steve Ballmer, who, at the end of 2010, sold about $2b in shares. While Steve insists he is fully behind Microsoft and its products, it is clear he feels his personal money (or at least $2b of it) is better invested elsewhere.

While this does not look good, there is one factor which could explain the sales and that is Bill Gates continuous sales of lots of shares. Here is the Microsoft stock price for the last ten years:

image

This is one of the least interesting share graphs I have ever seen. The Microsoft price never varies much from $28 per share (except around 2008 where there was a small blip). If you have someone in the market with a large supply compared to demand, it is going to drive the price down. The fact that Microsoft has maintained its price, despite Bill’s constant stock selling it a testament to the robust nature of the organisation. However, if I also have a large amount of stock, I can understand that I may feel that my money could be growing faster somewhere else.

Round Two: Salesforce Sells

Here it is.

 

RAMSEY CRAIG

SMITH GRAHAM

HARRIS PARKER

VAN VEENENDAAL FRANK

HU GEORGE

KOPLOW HILARIE A.

TOMLINSON LAWRENCE

CONWAY CRAIG

SCLAVOS STRATTON D

YOUNG SHIRLEY

SCHELLHASE DAVID

2011

                     

Qtr1

4,394,985

660,880

4,793,610

1,875,759

79,195

95,400

275,770

Qtr2

132,410,004

5,483,121

273,121

4,173,463

3,083,660

1,251,134

1,862,415

316,566

446,940

520,590

132,813

Qtr3

38,055,634

50,723

62,210

131,675

1,283,296

1,509,750

319,852

178,590

 

Qtr4

23,537,987

60,260,057

120,160

1,041,174

991,474

268,237

170,190

 

Grand Total

132,410,004

71,471,727

61,244,781

9,149,443

6,132,268

3,605,099

3,372,165

1,000,055

795,720

520,590

408,583

In this case we have:

  • Craig Ramsey: member of the Board of Directors
  • Lawrence Tomlinson: member of the Board of Directors
  • Craig Conway: member of the Board of Directors
  • Stratton D Sclavos: member of the Board of Directors
  • Shirley Young: member of the Board of Directors
  • Graham Smith: Executive Vice President and CFO
  • Parker Harris: Executive Vice President, Technology
  • Frank Van Veenendaal: President, Worldwide Sales and Services
  • George Hu: COO
  • Hilarie A. Koplow: Executive Vice President, Worldwide Sales
  • David Schellhase: formerly Executive Vice President, Legal (now at Groupon)

Here we have five members of the board (out of nine) and six officers. I have an issue with over half the board (i.e. those responsible for the strategic direction and financial health of an organisation) selling out of the company they are directing.

In the case of salesforce we need to go to the top seven (Craig Ramsey, Graham Smith, Parker Harris, Frank Van Veenendaal, George Hu, Hilarie A. Koplow, Lawrence Tomlinson) to cover 99% of sales.

Here is the much more interesting ten year graph for salesforce.

image

A few things to note. Firstly, we do not have the full ten years because salesforce.com has not been publicly traded for the ten years. Also, other than the same blip that temporarily sank Microsoft’s price near the end of 2008, the salesforce share price continued to rise until 2011 when it has flattened off a little.

I can find no public comments by the insiders as to why they sold their shares in 2011.

As to the behaviour exhibited by both sets of insiders, one thing you can see is that while Microsoft insiders sold sporadically (only four out of the eleven selling in three or more quarters), the salesforce insiders were more frequent in their selling (seven out of eleven sold in three or more quarters).

Graham Smith, the CFO of salesforce I find the most interesting.

You might remember back in September 2011 I summarised the transcript of the Q2 results for salesforce(http://leontribe.blogspot.com.au/2011/09/does-salesforce-have-their-head-in.html). The transcript was from August 18, 2011.

Graham Smith featured prominently in that call describing the salesforce results as an ‘exceptionally strong quarter’.

So, if the results of salesforce were so strong, why was Graham selling close to $10m in stock prior to the results (or thereabouts) and a little over $60m in shares afterwards? I do not know the answers and, maybe, Graham does need the pocket change but the timing is dreadful in terms of the mixed message it sends.

The name that is missing from this is our good friend Marc Benioff who is both a director, being the chairman of the board and an officer, being the CEO. In Australia, this situation of being a director and officer does occur but it is not as common as the USA. The reason being it is seen as a potential conflict of interest. A simple example is that of compensation. The board generally sets the compensation levels for executive officers. If the people deciding the compensation are the ones receiving it, there are clear terms of reference issues. I have no idea whether this specific example is an issue at salesforce, I simply cite it as an example.

So did Marc sell shares in 2011? No he did not. However, he had been busy selling shares up to the start of 2011, despite the stellar performance of the stock over the years. Back in 2006, Marc held 22.8 million shares (http://accounting.smartpros.com/x53957.xml). By the end of 2010 he had sold down to the last ten million and then stopped. Here is the video where he is asked why he sells so much stock and he deftly avoids answering the question completely (around the eight minute mark http://allthingsd.com/20110304/video-marc-benioff-answers-his-critics-with-a-little-help-from-jim-cramer/)

The fact is despite his exuberance for the salesforce model and despite the stellar performance of the stock, Marc was, until 2011, regularly selling his ownership of the company. Either he had doubts about his own hype, he had big debts or he knew of a better investment than one which had increased its share price five-fold in five years (around a 38% annual return).

Microsoft and Salesforce Buys

Not one officer or director at either Microsoft or salesforce bought their own stock in 2011. With the steady price of Microsoft and the flattened performance of salesforce it is understandable but still a little surprising.

Conclusions

Perhaps my biases are shining through loud and clear but I understand why Microsoft insiders would not be overly impressed with their Microsoft stock. The price does not move and, with Bill generating a couple of billion a year through the divestment of Microsoft ownership, the hill the stock has to climb is just a little bit steeper.

As for salesforce, I am stumped. Taking the CFO and Marc as the champions of the company, both consider salesforce to be strategically and financially sound. The stock market agrees and yet they, and many of the board, are offloading ownership on a regular basis.

Perhaps, like me, the salesforce insiders feel the stock price is overvalued. Therefore, while they are confident of the future, they are not confident in the share price. If so, they would do well to communicate this to the market rather than let others hold on to their dreams while the insiders know a nightmare is coming, but get rich before it arrives.

Perhaps I ask too much of company executives in asking they reveal their motives as well as their actions.

Monday, February 6, 2012

Book Review: Packt Microsoft Dynamics CRM 2011 New Features

Introduction and Disclaimer

The folks at Packt asked me to review one of their online books in exchange for a free download of it. Seemed like a fair exchange to me so here it is. If you are interested in buying it (a judgment you may reserve until after you have read the review), here is the link.

image

Jim Wang and Darren Liu are both Dynamics CRM MVPs so they know their stuff. As far as I can recall, I have never met them but I possibly will at summit in a couple of week’s time (If I have met either of you, my apologies for a lousy memory). As with Matt Wittemann’s book, there may be an Alaskan Ale in it for a complimentary review.

The Packt model is an interesting one. They are an online publishing house who approach subject matter experts and offer them an advance and a good commission for writing a book for them. They have approached me a couple of times but I have turned them down on both occasions simply due to a lack of time. Given the movement towards e-readers and related devices I believe it is a  business model most publishers will eventually adopt.

Overview and Structure of the Book

The first thing you will probably notice is the size of the document. This is no brief summary of the new features. This is over 250 pages covering what has changed since Dynamics CRM 4 with a full index in the back. The structure of the book is:

  • The usual preliminary bits (About the Authors, Acknowledgement, Table of Contents etc.)
  • Chapter 1: Setting Up The Development Workspace
  • Chapter 2: System Design and Configuration
  • Chapter 3: Data Import
  • Chapter 4: Client-Side Programming
  • Chapter 5: Server-Side Programming
  • Chapter 6: SharePoint Integration
  • Chapter 7: Charts and Dashboards
  • Chapter 8: Extending Microsoft Dynamics CRM 2011 in the Cloud
  • Chapter 9: Sitemap and Ribbon Customization
  • Chapter 10: Packaging It Up
  • Index

I like this structure as it parallels the steps one would take in setting up a CRM system. The titles are also plain English e.g. ‘Client-Side Programming’ making it easier to know where to go. To add a bit of a flow to the book, they also put it in the context of a HR system designed to manage compensation for an airline company’s flights.

What is missing are the changes from the major update in November. You will not see, for example, mention of the Activity Feed. That being said, the release of CRM 2011 was the last ‘old school’ release for Dynamics CRM. What I mean by this is Microsoft went from a multi-year cycle for version releases of the product to a twice-yearly release cycle in line with cloud software makers such as Salesforce. The upshot of this is, while there were massive changes between CRM 4 and CRM 2011 (worthy of a 250+ page book), future changes are likely to be more incremental, in line with the release cycle and therefore the book will stay reasonably relevant, despite the new ‘cadence’ and occasional major feature release.

It should also be noted that the authors, as they acknowledge at the start of the book, assume the audience is familiar with Dynamics CRM 4 and are seeking to understand what has changed in 2011. There is no walkthrough of what is the difference between an account, contact lead and opportunity, for example.

Finally, I will tip my hat off to Jim Wang for mentioning Jim Glass in his acknowledgements. Jim Glass was, until recently, the Dynamics CRM Community Leader at Microsoft (he is now at Amazon). To translate his title, Jim Glass was the strongest advocate within Microsoft for the CRM MVPs and their importance. It was JaAG (as Jim is known) who would rally up the speakers when the MVP Summit was in town and would fight for us to get included on feature decisions when they were still in the planning stages. In other words, Jim Glass was the CRM MVP’s MVP within Microsoft and, without exception, he is held in the highest possible regard for his dedication to that role. The shoes he has left to fill have their own building number designation on the Microsoft campus.

Chapter 1: Setting Up The Development Workspace

This chapter goes through setting up a virtual machine running Dynamics CRM 2011 and SharePoint 2010. They even talk about virtualization options beyond Hyper-V, mentioning my good friend VirtualBox.

They also mention setting up Visual Studio for the coding to come in later chapters.

The delivery is pretty much a screen walkthrough for setting up CRM so nothing much to report here.

Chapter 2: System Design and Configuration

Here the compensation system gets introduced and explained. The chapter then goes on to explain how Dynamics CRM can be configured to meet this requirement.

The chapter gives an outline for a basic functional and technical specification, highlighting the specific areas of the product which can be used to meet the functional needs of the business.

The chapter talks very much in the context of the system design rather than giving a laundry list of new features. For example, the ability to assign ownership to teams is mentioned for the design but not called out as a major new feature. It is up to the reader to review the proposed design, reflect on how it could be handled in CRM 4 and then appreciate what has changed. While this makes for an interesting read, it does sacrifice the ability to look up specific topics. Using team ownership as an example again, there is no clear reference in the index on where one would find information on this.

What this means is the book lends itself to system architects with a good understanding of the configuration options of the system but not so much to people who are new to either system.

Chapter 3: Data Import

This is a great chapter on the awesome work Microsoft has done on improving the Import Wizard. It covers all the practical features of the new tool e.g. ability to import attachments, import multiple entity records at once, update data etc.

If you have the need to import records into Dynamics CRM 2011 and not sure where to start, this chapter alone is worth the ticket price.

Chapter 4: Client-Side Programming

It is a tall order to try and squeeze everything to do with client-side programming into one chapter. We have the new object model, the web resource container, Silverlight, REST and SOAP etc. Entire books have been written on the development side of Dynamics CRM alone so it is no surprise this chapter offers a high level summary. There are a few code examples for REST endpoints but, otherwise, this is a high level review for those already familiar with the CRM 4 terrain.

Chapter 5: Server-Side Programming

Again, this is a big topic for one chapter. To raise the bar, this chapter also includes workflows and dialogs. If you are not a developer, apart from the information on what Dynamics CRM 2011 call ‘processes’ i.e. workflows and dialogs, the chapter will have limited value. For the developers, the chapter describe the landscape for server-side coding with CRM 2011 and gives an example of plugin code. As the chapter correctly states, for the full details of how to program with Dynamics CRM 2011, the best resource is the SDK.

Chapter 6: SharePoint Integration

This is probably one of the best summaries I have seen of the integration between SharePoint and Dynamics CRM 2011 that is available out of the box. For example, it talks about the differences between what can be done with SharePoint 2007, compared to SharePoint 2010. As with the data import chapter, if you have a need to understand the out-of-the-box integration between CRM 2011 and SharePoint this chapter alone is good value.

Chapter 7: Charts and Dashboards

Another good high-level review to introduce the reader to these completely new features. One nice touch is the small section mentioning how you can extend the charting through xml editing. This chapter as with others, is designed to give the reader a feel for the feature but is not designed to be a complete walkthrough. Rather, it is expected the reader, now familiar with the high-level ideas, will explore CRM 2011 in their own time to understand the more intimate details.

Chapter 8: Extending Microsoft Dynamics CRM 2011 in the Cloud

A great introduction to how Dynamics CRM 2011 plays nicely with Azure (using the free customer portal add-on to create a cloud web site for CRM) and Office 365 (to provide an Exchange server for the email router to connect to). In this case the ‘case study’ approach works well as many readers are unfamiliar with Azure and Office 365 and this format gives a solid, practical example of how they can be used.

Chapter 9: Sitemap and Ribbon Customization

The way someone edits the sitemap and ribbon has completely changed in Dynamics CRM 2011 and it is now, arguably, more complex than it was previously. To cater for this, the chapter moves gently through the process and provides a lot of code examples, especially for the ribbon. For someone who needs their hand holding through the process of adding a button to the ribbon, this is a great chapter.

Chapter 10: Packaging It Up

This chapter is dedicated to the new feature called solutions: the ability to ‘package’ customisations for transfer into other systems. It covers the important aspects of this new feature and gives a great summary of ‘managed’ and ‘unmanaged’ solutions and their use. If you are looking for best practice with solutions (as many of us are) there is not a lot of detail but it is a good introduction to their function in developing CRM modules.

Conclusions

This book is not a comprehensive guide to the features of Dynamics CRM 2011. Rather, it is an introduction to some of the new features of the product, compared to CRM 4. I say some of the new features because, by virtue of the authors writing in the style of a pseudo case study, some features have fallen through the cracks e.g. goals. While this is the case, the aspects of the product they do cover are covered very well. What I mean by this is their high-level summaries of large topics, such as customization, cover the essential elements and their treatment of smaller topics, such as data import and SharePoint integration are some of the best I have seen.

While there is not as much bang for buck as, say, Matt Wittemann’s book, the CRM 4 developer or administrator will not have to filter out a rehash of the version 4 features as this book assumes that knowledge. Where I see this book working is as a companion to one of those larger 2011 administrator guides. While those volumes allow the reader to drill down into a specific topic, this book, uniquely, gives a much greater context to the features in question, providing a practical example as an integral part of the narrative.

Packt do provide chapter one as a sample chapter, so feel free to review it and see if it is for you.

Friday, January 27, 2012

Setting Multi-Level Categories Against a Record Codelessly

This is a bit of a variation on a theme I did a while ago when I talked about using filtered views for address population. In this case I wanted to explore if we could set up a subject-like hierarchy and then use filtered lookups to enter category levels easily against an account. It turns out it works quite nicely.

image

Essentially, you set the first category from you list of top level categories. Then, you set level 2 which will automatically adjust to only the valid values, based on the category 1 value. Finally, you set the category 3 value, based on the value in category 2.

So How Do I Set This Up?

First of all, we create a new Category entity.

image

In this case I have stripped everything out; there are no notes, activities etc. and the record is organization owned.

Next I set up a recursive 1:N relationship so that for a given category I can set an infinite number of category levels, each with an infinite number of categories.

image

The main points of interest here are the changing of the display name to ‘Parent Category’ and the changing of the display option to ‘Use Custom Label’ so I can refer to the next level down as ‘Sub Categories’.

On the category form I also add the parent category lookup, created as a result of this relationship.

image

Finally, I add three lookups to the account form so I can add three levels of category to my account record.

image

Finally, I populate my category hierarchy. Unfortunately, there is no nice tree view to employ so I fill it up in pretty much the same way I would if I was populating, for example, an account hierarchy. My advice would be to do it via a data import.

Where’s The Magic?

So far this will just let us pick three category values from all category values and add them to an account; not exactly exciting.

The trick comes in adjusting the filters on the lookups.

For category 1, we set up a new system view called Level 1 Categories. This just shows those categories with no parent category i.e. they are at the top of the tree.

image

We then go to our first lookup and force it to only use this view for its values.

image

The result is when we click the lookup only the values in the top level appear.

image

For the other two lookups, we use the Related Records Filtering properties of the lookup. For the category 2 lookup, we set it as follows:

image

The setup for the category 3 lookup is identical, except we replace ‘Category 1 (Accounts)’ with ‘Category 2 (Accounts)’.

This means, clicking on, say, the category 2 lookup shows only the valid values, based on the selection for category 1.

image

And that is it. With all that set up, all the user has to do is pick the category 1 value and the category 2 values will be auto-filtered. Once the category 2 value is selected, the category 3 values will filter.

Why Not Use Subjects?

Subjects are nice in that they can be linked to an account with a 1:N relationship and they have a tree view lookup. However, they do not, at this time, play nicely with lookup filters. If you add a subject lookup to an account form and try to filter its values, based on the selection in another subject lookup, CRM throws an error. This has been reported and, I am sure, will be addressed in a future roll-up.

Conclusions

If you have a multi-level hierarchy you wish to apply to a record, such as an account, and you are looking for a reasonably user-friendly way to capture the information this is not such a bad solution and does not require code or Silverlight web resources. While my first choice would be the subject entity, because of its friendly tree view, if this is not practical, this solution provides an alternative approach which supports any number of category levels.

Saturday, January 21, 2012

Trying a Different Language By Ticking The Box

Dynamics CRM supports 41 languages. Here they are:

  • Arabic
  • Basque
  • Bulgarian
  • Catalan
  • Chinese (Hong Kong SAR)
  • Chinese (Simplified)
  • Chinese (Traditional)
  • Croatian
  • Czech
  • Danish
  • Dutch
  • English
  • Estonian
  • Finnish
  • French
  • Galician
  • German
  • Greek
  • Hebrew
  • Hindi
  • Hungarian
  • Italian
  • Japanese
  • Kazakh
  • Korean
  • Latvian
  • Lithuanian
  • Norwegian (BokmÃ¥l)
  • Polish
  • Portuguese (Brazil)
  • Portuguese (Portugal)
  • Romanian
  • Russian
  • Serbian (Latin)
  • Slovak
  • Slovenian
  • Spanish
  • Swedish
  • Thai
  • Turkish
  • Ukrainian

So how do we turn on different languages? Well, if we are using Dynamics CRM Online with the web client, we literally just tick a box. Go to Settings – Administration – Languages and tick the box for the language we want.

image

Curious to see how Spanish looks? Tick the box. After a little whirring, you have your second language installed.

As a user, you then go to File – Options – Languages and pick the language you want.

image

That’s it! You are now working with Cuentas y Contactos rather than Accounts and Contacts.

image

What if you are using the Outlook client or an on-premise deployment?

In the case of the Outlook client, you need to install a language pack on the client machine. Similarly, with an on-premise deployment, you need to install a language pack on the server.

However, for online, having CRM configured so that you can be working in one language and the person next to you is working in a completely different language is literally a tickbox away.

Sunday, January 8, 2012

Moving To The Cloud Part Two: Migrating Email To Office 365

For part one, where I talk about my reasons for jumping on board with Office 365 and how I got a 25% discount on the cost, go here.

In summary, I had a 12G PST accumulated over about 12 years of emailing with Outlook. The regular backing up and periodic maintenance of the PST file (running the Inbox repair tool once a month, compacting etc.) simply never got done due to a lack of time/inclination. I needed a better solution and I was willing to pay for the privilege.

Office 365 was a good fit. I get 25G of storage in Exchange and, the hope was, it would be a relatively simple procedure to move from a PST file to an online version of Exchange with a local OST file for offline access (OST is a local cache of your Exchange content which automatically syncs with Exchange when online). I also had two gmail accounts and one hotmail account to repoint to the Exchange server as the PST file would be decommissioned completely. In other words, other than the OST file, which could be rebuilt automatically from the Exchange server, all my e-mail was in the cloud.

Connecting to the Cloud Exchange

I run Office 2010 at home so connecting to the Cloud Exchange was very simple. Go to File-Account Settings-New and you then type in your name, e-mail address and password.

image

Outlook does the rest. Outlook will give you a new folder with the usual sub-folders (Inbox, Tasks, etc.)

Moving Stuff Across

First of all, backup/copy your PST file. If everything goes badly, you still have that to fall back on. It is then a case of populating the new Exchange folders with the stuff from your current PST folder structure. For e-mail, I either dragged e-mails across or used the move/copy folder function of Outlook.

What then happens is the folders/emails are moved across to the local OST file associated to the cloud Exchange server. These e-mails and folders are then, in the background, synched up to the cloud Exchange server. I loaded my sync up pretty heavily and it seemed to survive fine. Even if I shut down and restarted later, all was good.

For things like calendar/contact entries, I usually switch views to a list view which lets me easily highlight all records at once. I had some trouble with calendar entries as it would not let me select all calendar entries at once, only those of the same recurrence, but this was sufficient to get all entries across in a timely fashion. The only ones which would not come across were 2003 appointments which it claimed had ‘invalid parameters’. Given I only had a handful of these, it did not concern me. The other thing to note is it will warn you that appointment updates will not affect the appointments you move across; the link is effectively broken if the meeting organiser sends through an update. For me, this happens very rarely so it did not concern me.

Also, I am told there is every possibility that CRM tracking will also break when you move things across to the OST so this is something to be careful of.

One really nice feature was, when I moved my RSS folders across to the OST, the settings (which are held in Outlook and cannot be transferred to Office 365) automatically redirected to the folders on the Exchange server. The upshot is, while RSS feeds will only update when I open Outlook, they will populate directly onto the cloud Exchange server via the local OST file.

This was not the case for TwInbox, which I use to bring my tweet feed into Outlook. In this case I had to create new folders on the Exchange server, redirect the TwInbox settings to the new folders and move across the existing tweets. Like the RSS feeds, as TwInbox resides within Outlook, my tweets will only update when Outlook is open.

My search folders also had to be recreated on the Exchange server.

One word of warning, I had some weird archive behaviour (settings adjusting themselves during the transfer) so make sure these settings are as they should be one you have set everything up.

Initially I thought I had lost my Outlook rules but this was only because, if you change the default location for e-mail, they disappear from the list. If you reinstate the old location, they re-appear. You can then copy them to the new account. If you remove the PST file from Outlook though, the rules are lost forever, so copy them before this happens. While I remembered this for my gmail accounts, I was not as careful with my hotmail account and had to reconstruct those rules from scratch.

I also lost my quick steps, which I use heavily, by switching default folders, and did not work out how to retrieve them, so be careful to note them down before switching across.

Once the rules and quick steps have come across you can repoint the default location to the Exchange inbox and remove the email addresses from the local Outlook and add them to the Office 365 server.

Adding The E-mail Accounts To Cloud Exchange

This was also really simple. You log into Office 365 and go to Outlook-Options

image

From here, click on ‘Connected Accounts’ and click the ‘New…’ button.

image

It is then a case of typing in the e-mail address and password and Office 365 does the rest (or at least it does for gmail and hotmail).

Assuming the accounts are no longer in the local Outlook, what then happens is when an email hits your, say, hotmail inbox. It then gets sent over to the Office 365 Exchange server inbox and syncs down to the local OST file on your laptop/PC/windows slate device. This works very smoothly for gmail but, unfortunately, the hotmail inbox e-mails do not get marked as read, even after moving across so every time I log into Instant Messenger it looks like I have a bunch of unread e-mail even though I do not.

The Problems

First of all, the process can take a long time. It is not quick to pump up 12G of data up to the cloud. It literally took me days. although the time it takes is not always obvious (given the local OST is populated straight away). Do not worry about waiting for the e-mails to sync up before switching the e-mail accounts across though as it all seems to work itself out. Outlook/Exchange sync was very impressive in this regard.

Also, while you can send from any of the accounts you link to the Exchange server and replies are smart enough to use the account which the original e-mail was sent to, the default e-mail address for new e-mail cannot be changed and will be the onmicrosoft address that comes with the Office 365 account. Therefore, it is important, for new e-mails, to ensure it is coming from the address you want it to.

One big niggle is gmail addresses are not properly spoofed. What I mean by this is when you send an e-mail, via Office 365, from a gmail address, the recipient will read that it has come from office365account@office365account.onmicrosoft.com on behalf of username@gmail.com, rather than simply username@gmail.com. This is a big problem for exclusive newslists where you are subscribed under your gmail address as any e-mails you try to send to such a list will bounce unless you also subscribe with your onmicrosoft e-mail.

While not a problem as such, note that this setup is not a space saver for the laptop. While we are getting rid of a PST file, it is being replaced by the offline store for the cloud Exchange server, the OST file. What is strange though is that while the new OST is about the same size as the old PST, the space that Office 365 thinks I am taking up is about half.

Here is the OST file:

image

Here is the quota, according to Office 365.

image

Go figure.

The Benefits

Obviously I no longer need to back up my PST file because it is now empty and disconnected from Outlook (hooray!)

Also, the trouble I had trying to keep both my personal and work calendars synced with my phone was a nightmare. This problem has gone away. With my workphone, I can link it to my Office 365 Exchange server (I could not link it to my PST file on my home laptop obviously) and to the work Exchange server and it works out the rest. No regular manual synching, no appointment double-ups or conflicts. It just works.

Similarly, it is easy for me to add my cloud Exchange server to my work Outlook and get access to both work and personal e-mails from the office. In this case cloud Exchange will create a local OST on my work computer and I have work and personal within the same program. What is more, if I go offline I still have access to my personal e-mail and all changes will sync when back online; great for plane flights (and no more carrying two laptops!).

I can now check my personal mail via my phone, via my work laptop, my personal laptop or via the web, great stuff.

Conclusions

While there are some niggles (the ‘on behalf of’ thing being the biggest for me) the process of moving everything to the cloud was simple and the benefits of anywhere access without the hassles of backups and maintenance outweigh the issues I have encountered. If you have a big PST file which has you worried about size/corruption issues, this is a great solution for a few bucks per month.

In the next part I will talk about moving my 35G of data to the cloud.