Tuesday, May 22, 2012

Am I Ready for CRM? How Much Can I Afford?


In my travels and life as a CRM guy, I hear it a lot.  “We’re just not ready to invest in a CRM (software that tracks everything that’s been done with prospects, leads, customers, etc.).  We don’t have the time, the money, the staff, [fill in the blank here].”   I’m going to use this opportunity to start a series of articles where I address each of these items and others.  The bottom line here is that you’re never ready.  I equate the jump to CRM to becoming a homeowner – you’re never really going to be ready, but one day it will sneak up on you and you’ll have to find the means as you’ve outgrown the apartment (or your parents place).  As with CRM, these needs jump out at different times, some much sooner than others (was never huge on living at home personally).

This article I will touch on cost, only as I’m always sensitive to budget constraints and there’s no better comparison between homes and CRM – how much can I afford?  Good news here is that you’ll actually see the return on your investment much sooner than buying a house.  Like houses though, CRM’s come in all shapes and sizes, different prices, and needs – can you move right in or do will we need some construction?  This of course allows you to find the home/CRM that works best for you and best fulfills your needs.  There are starter CRM packages out there for the new owners as well as the expert packages that have been saving a long time (yup, I’m going to beat this house theme into the ground).  In either case, after careful analysis (and some help) you should be able to find the package that is right for you and meets your needs.  Consider the experts Realtors for your CRM.

To battle the cost idea, an example comes to mind which happened to one of my favorite clients.  He had some hesitation to the cost of implementing a CRM package, but knew he needed to do something.  The costs were daunting – new server (this happened to be an on premise package), software licensing, training time, consulting costs for configuration, import of data, etc.  However, we created workflows in his CRM to automate some of the tasks that he was really bad at.  Essentially, he was bad at following up with clients and he knew this – he needed something/someone to do it for him.  We created a simple process to automate an email for those that had an overdue balance, sending out an automatic email in the morning, nothing huge, just a friendly reminder.  He told me two weeks later that the single process of sending an email to those clients had single handedly paid for all of his CRM costs including my time with him, his server, and licensing.  People appreciated the friendly follow up, didn’t realize that they owed a balance, but more importantly, they wanted him to come back out and do some more work for him.  Why I love the follow up with any system is that you’re reminding clients that you’re still there which in further reminds them of other needs they may have.

Will this example above be what happens to everyone?  I wish, but unfortunately no.  However, the returns will come.  Better tracking of sales and what’s coming in the pipeline, never losing track of the communications between you and your customers, being able to market directly to the right clients based on interests, industry, or existing products – all these items may not have a solid dollar amount to track against your investment, but it is there.  As with your old apartment, you’re going to outgrow that yellow pad of paper with all your “to-do’s” and you’re going to simply need something more to move you to the next step.

Friday, May 11, 2012

GoldMine : Customizing Columns in the Search Center

Did you know that you can add columns to your Search Center? You have the ability to customize the columns you see in the Search Center. By default, you will see the Company, Contact, City and Phone1 fields.

To add columns to the Search Center; (this is on a per-user basis)

1.  Open your Search Center by clicking the "Search" button from the toolbar.

2. Click the "Columns" button from the upper right hand side of the Search Center.

3. Click on the "Column Selection" button.

4. To add columns, simply select them on the left hand side, then use the "forward" button ("->") to add it to the right hand side.

5. You can also control the order of these columns by using the "Up" and "Down" buttons on the right hand side.

6. Ok your way out.





GoldMine : Using User Groups

Did you know that you can create User Groups in GoldMine? This makes it easy when scheduling items for multiple people, or defining Field Security for groups of users.

To set up your Groups;

1. Log into GoldMine as MASTER or equivalent.

2. Select Tools | User Groups from the top level menu.

3. To create a new group, click the "New" button. Give the Group a short but friendly name, like "Admin" or "Sales", hit Ok.


4. To add users to the newly created Group, select the Group from the left hand side, then click "Members Setup".

5. Simply add members to your Group by double-clicking them from the left-hand side. You will see them move to the right-hand side, identifying them as part of the Group.

6. When finished, Ok your way out.

Pro Tips : Some uses of Groups you may not have thought of; create a empty Group to provide another category for your Filters or Contact Groups. Be creative; don't be afraid to create the occasional User Group or User to accommodate organizational problems.  

GoldMine : Using Time Abbreviations

Did you know that when Scheduling an item in GoldMine, you can use abbreviations in the "Time" field? For instance;

1. Select Schedule | Call from the top level menu.

2. In the "Time" field, try using the following abbreviations;

  - 8a is 8:00 a.m.
  - 4p is 4:00 p.m.
  - 700 is 7:00 a.m.
  - 1700 is 5:00 p.m.

Try it! A lot of folks use this approach versus using the Time control (opened by clicking on the grey arrow within the "Time" field).

Note: Those who are using GoldMine 8.x and above no longer need to struggle with the Time Control as was provided in earlier versions. You may simply drop down the "Time" field picklist and select your favorite time of day in half hour increments.

GoldMine : Using read only fields

It is very often that we only want to allow a particular user or set of users to edit a specific field in GoldMine. On a per-field basis, we can lock down both the Read and Update rights. To do this;

1. Enter Screen Design mode by right-clicking on the Contact Record and selecting "Screen Design".

2. Single click the field in question to select it. Right-click on the field and select Properties.

3. Click on the "Security" tab.

4. Check the box next to either (or both) "Read rights" and "Update rights".

5. For each box, use the drop down list to select the User or User Group that will have either Read or Update access to the field. Ok your way out.

All users will need to restart their GoldMines to affect the change in Field Security. Each checked box (Read and Update) acts as you would expect; preventing either the Reading or Updating of the field in question.

GoldMine : Setting the default area code

Did you know that you can set the default area code to use when entering in a seven digit phone number? GoldMine comes configured with the default area code of 310. To change this;

(this is a per-user setting, and must be repeated for each user that wants to change the default area code)

1. Select Tools | Options from the top level menu.

2. Click on the Telephony tab.

3. Change the "Local Area Code" to the desired area code.

4. Restart GoldMine.

Now, when you enter in a seven digit phone number, GoldMine will automatically provide the default area code.

MSCRM 2011: Automatically filling the Name Field of a Custom Entity through Javascript.

When you create a custom entity in Microsoft Dynamics CRM, the "Name" field of the entity is a required field. If this field serves no useful purpose for your system, it could just be an extra field that needs to be populated in order to save a new record. This field can be set to be not required BUT it cannot be taken off the form therefore it would be a benefit to auto populate it through Java Script.

You could easily auto populate that field with a static value; however, since this field shows up (and is required) in many of the system views and well as the Lookup field on related forms, this is probably not the best option. A better option might be to have some javascript automatically populate it with some information from the record that is relevant. In this example we will populate the name field with the name of an Account chosen from a Lookup field and the current Date/Time that the new record was created/modified. This will make the Name field useful while satisfying CRM's requirement for wanting the field populated with some value.

Below find the instructions for populating the name field in a custom entity “Daily Bookings” with an Account chosen from a Lookup field and the current date then concatenated to that value:

* Task 1 – Create a new JavaScript Library
* Go to Settings, Customizations, Customize the System.
* Click New from the toolbar and select Web Resource from the list.
* Enter the following Information in the New Web Resource Dialog:
* Name= “SetName”
* Display Name= “Set Name”
* Type= “Script (Jscript)”
* Click the Text Editor button
* Paste the following script in to the source dialog.

function SetName(){
var lookupField = Xrm.Page.getAttribute("new_accountid");

// Retrieve the Current Date

var Now = new Date();

// Convert the Date to a String

 var StringNow = Now.toString();

// Set the Name         

Xrm.Page.getAttribute("new_name").setValue(lookupField.getValue()[0].name + "-" + StringNow);
}        

* Click OK
* Click Save and Close

* Task 2 - Attach JScript function to onLoad event handler
* Next we need to setup the event handlers on the Daily Bookings form.
* Click on the Entities.
* Select Daily Bookings in the entity list and then click OK.
* When the Daily Bookings appears in the list of available entities in your solution, expand the Daily Bookings node and then expand the Forms node.
* In the forms grid, double-click Information form type Main
* Now that you are in the form editor we need to attach the event handler to the Form onLoad event.
* Click Form Properties in the ribbon to bring up the dialog.
* Click the Form Libraries Add button.
* In the lookup dialog select the “Set Name” web resource and Click OK
* In the Event Handler section Click Add.
* In the Handler Properties dialog do the following: Function = ” SetName”, Check Enabled, Check Pass execution context as first parameter
* Click OK, to close the Handler Properties dialog
* Click OK, to close the Form Properties dialog

* Task 3 - Publish changes and see the results
* While still in the Customizations, Click Publish All Customizations in the top toolbar of the Solution Explorer.
* Close the Solutions explorer

Now when a Daily Bookings entity is created or modified, the name field will be auto-populated.

MSCRM 2011: Mapping fields from Lead to Contact and Account Entities when Lead is Qualified and Converted.


A client recently asked “How can we map additional/custom fields from a Lead to a Contact or an Account when a Lead is converted?”

Leads in Microsoft Dynamics CRM represent potential customers that can be qualified or disqualified based on criteria set by your organization. After you work with a lead record and determine whether or not the potential customer fits your lead qualification criteria, you convert the lead. When you convert the lead, you specify whether or not the lead is qualified or disqualified.

When you qualify the lead, you can create one or more of the following record types: Account, Contact, or Opportunity.
Your business process should indicate which of the records to create. For example, if your organization sells to businesses, you will probably want to create both an account and a contact. If your organization sells to individual consumers, you might not want to create an account. Likewise, you might not always want to create an opportunity when you qualify a lead. You might determine that a lead fits your qualification criteria but that an immediate sales opportunity does not exist.

When you qualify a lead, you can select a check box to open the newly created records, which will open the new account, contact, or opportunity records created during the lead conversion process so that you can work with them right away, saving yourself a few clicks.
Microsoft Dynamics CRM will populate data fields in the account, contact, and opportunity records you create from a qualified lead, based on the mapped data fields. For example, the website and phone number fields are automatically mapped. If there are custom fields that are created on the Lead and Contact/Account/Opportunity, you can map these fields when the relationship between the Lead and those entities is created when the lead is converted. For example, suppose you keep track (via a picklist) on what service a lead is interested in and you would like to also have that information on the Account record. The custom picklist field for “preferred service” would need to be created on the Lead and the Account entities. Below are the detailed instructions for mapping that custom field from a Lead to an Account when a Lead is converted:

* Go to Settings on the Sitemap

* Click Customization

* Click Customize the System

* Click on Entities.

* Double-click on Lead.

* Click 1:N Relationships in the left navigation

* Double-Click on the row – contact_originating_lead with the Primary entity value showing Lead and the related entity value showing Contact.

* Click Mappings in the left navigation pane.

* Click New.

*Select the “Preferred Service” field in the Lead Source Entity Attributes list on the left and the corresponding “Preferred Service” field in the Account Target Entity Attributes list on the right.

*Click OK.

The mapping will now automatically be complete when a Lead is converted and an Account is created. The same process can be performed to map fields from the Lead to a Contact and Opportunity.

MSCRM 2011: Copying Notes from a Lead to Account, Contact and Opportunity when a Lead is Qualified

Some fields will automatically map from a Lead to an Account/Contact/Opportunity when a Lead is qualified and converted as described in the above post. Sometimes the notes in the Lead are helpful and it would be convenient if you could view them on a converted account/contact. In order to do this, you would need to go to the Originating Lead field in the Account/Contact and then drill down to the Lead to actually view the notes. They do not automatically move over to the Account, Contact or Opportunity when converting the Lead. The following is a work around that allows for the information to be mapped to one or all of these entities.

*Create Jscript type of web resource (as described in the above post) and paste the following Script:

function CopyLeadNotes(context){

var lookupItem = new Array;

lookupItem = Xrm.Page.getAttribute('originatingleadid').getValue();

var IFRAME_LeadNotes=Xrm.Page.getControl('IFRAME_LeadNotes');

var src='';

 if (lookupItem != null)
{               
  src="/"+context.getContext().getOrgUniqueName()+"/_controls/notes/notesdata.aspx?id="+lookupItem[0].id+"&ParentEntity=3&EnableInlineEdit=false&EnableInsert=false";
}
else
{
  src="about:blank";
}

 IFRAME_LeadNotes.setSrc(src);

}

* Save this web resource and publish it.
* Create an Iframe on Account form with the name “IFRAME_LeadNotes”
* Do not select the Restrict cross frame scripting checkbox.

*After creating the IFrame, call the function created above from the script on the onLoad event of  an Account. Make sure that you have selected “Pass execution context as first parameter”.

Now when qualifying a Lead to an Account, all of the notes on the Lead will be shown on the Account.

Friday, April 27, 2012

HEAT – 9.5.3.1

9.5.3.1 Contains the following features:
  • Crystal 2008 Compatibility
  • HEAT Compatibility with Exchange/Office 2010
  • BPAM automatic reconnect to dB server upon dB connectivity failure
  • Automatic Ticket Generator (ATG) reinstate include service crashing issue, enhancement to consumption of Message text, and subject line parsing for CustID
  • Enhancement Fixes to Call Logging, HEAT Web UI, HSS, HMC Processor & Administrator issues, and LDAP.
Contact The Marks Group for assistance with Heat Upgrades

HEAT – SHORTCUT KEYS


Alarms Shift
Shift + F11
Assignment
Alt+3
Assignment, Acknowledge
Shift+F2
Assignment, New
Ctrl+A
Assignment, Resolve
Ctrl+Shift+F2
Call ID, Go to
Ctrl+G 
Call Map, Go to
Ctrl+Alt+M 
Call on Hold, Place
 Ctrl+H
Call Record Browse, Display
Ctrl+B
Clear a Date or Time Field
F2 
Customer Types, Change
Ctrl+T
Navigate to Detail Screen
Alt+2
Fill in System Date/Time
F3
 Display Calendar in Date Field
F4
Navigate to Journal
Alt+4
New Call
Ctrl+N
New Journal
Ctrl+J
Profile
F5
Quick Close
F10
Refresh Call Record
Ctrl+F5
Refresh Active Call Group
Ctrl+E
Save Ticket
Ctrl+S
Spell Check
Shift+F9
Toggle between upper and lower panes
F6
Unlock or Lock Call Record
Ctrl+L
Validation
F9

HEAT – WHAT IS QUICK CUSTOMIZE

If you need to make only minor changes to your system, you can use Quick Customize. The Quick Customize mode is a unique Edit Set feature that allows you to make simple changes without creating and committing an entire Edit Set. Minor changes include modifying forms, grids, and Views, and changing certain field attributes. Quick Customize cannot be used to create tables or fields. Because the Quick Customize mode cannot be used to change the underlying structure of your system, users do not need to be logged out in order to apply the changes. The Quick Customize dialog box uses the same basic interface as a regular Edit Set with a few exceptions: table and field creation tools are unavailable.

IMPORTANT: Committing changes using the Quick Customize mode increments the version field in the HEATDb table just as an Edit Set would do. As a result, any Edit Set created before the Quick Customize changes contains an earlier version number and is not committed.

Quick Customize provides the following advantages:

  • Speed in implementing changes. 
  • Ability of users to remain logged on.

Users do not see changes until they next log on to HEAT.


With Quick Customize you cannot:


  • Create tables (including Table Types, Table Views, and connections to External tables) 
  • Create fields  
  • Edit the name, type, or size of existing fields

With Quick Customize you can:

  • Edit Forms
  • Edit grids 
  • Change most field attributes (such as default values, Validation, and flags)

When you are satisfied with your Quick Customize changes, you can apply them with a single click. Because users do not need to be logged off of HEAT in order to apply the changes to the database, users can only view the changes once they log off and on again.

Note: Like an Edit Set, HEAT allows you to test the integrity of your Quick Customize changes before you apply them to your live system. This process is called Verify Quick Changes.

HEAT – LOCK AND UNLOCK CALL TICKETS

When someone is working in a Call Record, it is automatically locked. It remains locked until the record is saved, closed, or changes are abandoned. You cannot unlock a call that is locked by another user. If you attempt to modify a call locked by another user a warning dialog box opens.

During a typical workday, the Call Logging process may see a heavy volume of activity, and calls lock and unlock continuously. Click the Refresh Group button to ensure the most recent information is displayed.

To Lock or Unlock a Call Record:

  • Click the Lock button located on the main toolbar. The button turns from an unlocked to a locked padlock.  
  • Click again to revert back to the unlocked status or select File > Unlock Call Record or File > Unlock All My Calls.

View Locked Call Records
You must be granted the appropriate security rights by your HEAT administrator in order to view this list.
To View Locked Calls:
  • Select Accessory > Locked Calls. The Locked Calls dialog box opens.
  • You can choose to view calls locked by all users or by individual trackers; select the desired option from the Tracker drop-down list.

Wednesday, April 25, 2012

Crystal Reports : Using Drill Down

Did you know what Drill Down actually does? You see this term all over the place in Crystal; field properties, Group Name, etc. What it allows you to do is this:

When you have at least one Group defined (which gives you your Group Tree alongside the left of the Preview), you can right-click on any one of the Groups (from the Tree) and select "Drill Down".

You'll notice that this separates the Group you clicked on into it's own tab in the Preview window. This can make it easy to only review Groups you're having an issue with. The other neat thing is that when you are on a Drill Down Tab, using File | Print | All will only print the Group, and not the entire report.

It is mostly for this reason that I encourage end-users to whenever possible, use the Report directly from the Viewer (or Preview pane). It allows for interaction with the printed report; especially if you are using Hyperlinks to web pages or to files on your intranet.

Try it!

Crystal Reports : Conditional Running Totals

So, being Crystal Reporters, we are used to exceptions, right? For instance, management wants a Count of records on a report, but ONLY IF certain criteria is met. They want a totaling of Sales dollars, but ONLY THE ONES that happened between a specific date range. Now, the most usual way to deal with this is to simply modify your Selection Criteria. Unless of course they want to see "all the rows", but only get the special totals as described. In this case, we cannot constrain our Selection Criteria any further.

This is very typical, and can be handled in a variety of different ways. Many folks will use the Running Total object, which is a good way. I, however, prefer to use a combination of formulas to make this happen. It allows more flexibility down the road when more changes are required.

So, let us assume we need to count records only where the CONTACT1.CREATEON falls within a certain date (i.e. 1/1/2012 to 1/17/2012). Because of this, we cannot insert a simple Summary, which will of course count all the records.

The first thing I do is create a "testing" formula, which returns a 1 or 0, depending on a condition like this;

Formula @ShouldRecordCount:
IF {CONTACT1.CREATEON} >= "01/01/2012" AND {CONTACT1.CREATEON} <= "01/17/2012"
THEN 1 ELSE 0

So, now if we drag this new formula onto the report we can see it returning a 1 or 0, depending on our CREATEON value. Now it's an easy procedure to create a simple Summary (Insert | Summary) on {@ShouldRecordCount}, which will of course total all those 1's and 0's.

To make it nicer, you need NOT have the @ShouldRecordCount formula on the report itself. All formulas are evaluated, regardless of whether or not they appear on the report. It's very common to see several of these "testing formulas" on a single report, each returning 1's or 0's to be subtotaled by simply summaries. Give it a try!

ProTip: Experienced Crystal Reporters will undoubtedly realize that the same functionality is achieved though using a Running Total object. The reason I prefer this method is that it allows (in my opinion) easier editing of the Conditional code and the ability to re-use @ShouldRecordCount in other areas of the report.

Crystal Reports : Deriving "Last Week" at Run Time

An oldy but a goody; I used this just the other day as a client was printing the same report for "last week" and was getting tired of explicitly entering the Begin and End Date parameters.

Suppose a report needs to only print records with dates from last Monday through Friday. You could of course provide a date range parameter and let the user choose for each printing of the report.

You could however, use the nifty LastFullWeek function in crystal to return these values automatically.

The first thing to keep in mind here is that LastFullWeek will actually return a Date Range, NOT a Date Value. In order to see what dates LastFullWeek is actually returning, we will need to create two formula fields. {@DateStart} and {@DateEnd}.

The code for {@DateStart} : MINIMUM(LastFullWeek)
The code for {@DateEnd} : MAXIUMUM(LastFullWeek)

Drag those two fields onto your report. You'll see that in the Crystal Universe, the LastFullWeek starts on a SUNDAY and ends on a SATURDAY. So if we just want Monday through Friday, we need to do some tweaking.

The code for {@DateStart} : MINIMUM(LastFullWeek) + 1
The code for {@DateEnd} : MAXIUMUM(LastFullWeek) - 1

Now the formulas are returning Monday to Friday and we can use them in our Selection Criteria thusly (assuming we are looking at a field called {HISTORY.ONDATE})

{HISTORY.ONDATE} IN {@DateStart} TO {@DateEnd}.

Try it!

Crystal Reports : Commenting Code in Formulas

Did you know that you can save programming Comments within your Formula Code? You simply prefix each commented line with "//", like this;

//Formula to choose correct descriptions - 04/23/2012 Justin Hill
IF {CONTACT1.KEY3} = "WID" THEN "WIDGET" ELSE
IF {CONTACT1.KEY3} = "SPR" THEN "SPROCKET" ELSE
//If we can't find the code, simply return UNKNOWN
ELSE "UKNOWN"

This is a great way to comment very complex formulas, and really shines when you need to come back to them after time has passed and you might have forgotten what you did!

Crystal Reports : Dealing with Dates as Plaintext

It is often that you might see date values being stored in plaintext. That is, in a String data type (opposed to Date or DateTime). Now, let's imagine we are trying to perform some date math on a field. Something simple, like calculating the number of days that have passed.

Let us assume our data field {CONTACT1.KEY4} is actually a String field, and we see a mix and match of formats, like so;

01/01/2012

January 1st, 12

Jan 1 12

Jan 1st 2012

...so on and so forth. Our first task is to convert the actual incoming field data into a Date Type so we can easily perform our math. Because all we really want to do is create a formula where we can use the following expression; CURRENTDATE - {CONTACT1.KEY4}.

To convert our {CONTACT1.KEY4} to a Date Type, create a new formula and use the following code:

DATE({CONTACT1.KEY4})

..which just tried to convert our plaintext date to an actual Date value. But if you're working with a mix and match of date formats, you may get the following error:

Bad Date Format String

...and this will prevent the report from running at all. What is actually happening is that values like '01/01/2012' and 'Jan 1 2012' are "valid", while values like 'Jan 1 12' are not. So, we now need to do some testing within our formula, like so;

IF ISDATE({CONTACT1.KEY4}) = TRUE THEN DATE({CONTACT1.KEY4})

When we use the ISDATE() function, we are testing to see if Crystal thinks the input is a "valid date". And only if this is TRUE do we continue on and actually convert our date value. So now we should be able to run our report without interruption. For the "bad" date values, our formula will return blanks.

ProTip: If you need to clean up the underlying database before your report can be useful, you could always add ISDATE({CONTACT1.KEY4}) = FALSE to your Select Expert to run a list of all "bad" date values.

QuickBooks: Exporting Chart of Accounts


“Can you help me?  I need to send the chart of accounts from my QuickBooks file to someone for review.  I can’t figure out how to do that.  Thanks.”

It is very easy to send your chart of accounts as a report or Excel document per the following instructions:

Report Menu -> List -> Account Listing

When you get into the report screen you will find all the choices available to you.  You can export to Excel, save as a PDF or even email it to someone directly from this screen.