Saturday, November 12, 2011

SugarCRM Tips: Wizard-Less Uploads

A few days ago an interesting topic came up on the SugarCRM Forums. 

In short, a user attempting to upgrade their SugarCRM instance ran into a problem in doing so. The problem was the result of a system limitation imposed by the hosting provider, which in turn affected the functionality of the SugarCRM Upgrade Wizard.

For those not familiar with this wizard, a step within it requires one to upload a zip file -- provided by SugarCRM -- containing the various files needed to complete the upgrade. In this particular case, the system limitation restricted the size of the file which one could upload to a size smaller than the zip file that needed to be uploaded. End result: the upgrade files could not be uploaded, and without completing this step, the upgrade cannot be completed.   

However, there is a way to get around this problem, assuming we have the ability to upload files to the server in question through other means, such as FTP or even the File Manager tool in cPanel

So how do we accomplish this in such a way that SugarCRM thinks the files were uploaded via the Upgrade Wizard? Let us take a look.

Tuesday, October 11, 2011

SugarCRM Logic Hooks: Unintended Loops

There is something intriguing about working with logic hooks. Through their use, one can accomplish quite a bit given that the only real limitation is our ability to write PHP code. 

For example, we can use a logic hook to modify a value on a record that is being saved. We can also use it to connect to a web service and process data whenever a record is retrieved in SugarCRM. In addition, we can leverage the SugarCRM framework and add records in other modules, such as automatically adding a call upon the creation of a new Lead record.

Our possibilities are virtually endless, but at the same time, this power can sometimes present some odd problems that are difficult to troubleshoot or resolve. 

One such matter relates to the duplication of data, usually the result of what appears to be an unintended loop within the code executed by the logic hook. On the surface, this sounds simple enough to troubleshoot, but looks can be deceiving.

Lets take a look a code snippet which we will assume is being executed by our logic hook:

class LogicHookTest {
        function addContact(&$bean, $event, $arguments)
             //Grab contact ID value stored in custom field on current record
             $contact_id = $bean->contact_id_c;         

             $contact = new Contact();

             //Retrieve Contact record with matching ID value
             //Set value on Contact's custom field 
             $contact->custom_field_c = 'New Value';  

To elaborate, the code is grabbing a value from the contact_id_c field of the record currently being accessed in SugarCRM and assigning it to the $contact_id variable. For the purposes of the example we will assume the record being accessed is in a custom module.

Next, the code instantiates a Contact object and uses that same $contact_id value to retrieve the record with the matching ID value from the Contacts module. Lastly, a custom field named custom_field_c is modified on that Contact record and then saved. 

In summary, the logic hook retrieves a record from the Contacts module and modifies a field on that record, without us actually needing to be in the Contacts module.

Assuming the referenced custom fields existed, the above code would work. However, this may not always yield the desired results, which leads us into the problem at the heart of this post.

Thursday, September 29, 2011

SugarCRM Troubleshooting: Duplicate Column Error

Some months back an interesting problem was brought to my attention. The problem at hand related to an error that occurred during the Quick Rebuild & Repair process and read as follows:

Executing repair query: Query Failed:ALTER TABLE leads_cstm add column my_customField_c char(36) NULL , add column my_customField_c char(36) NULL::MySQL error 1060: Duplicate column name 'my_customField_c'

Based on the error, one could surmise that SugarCRM was attempting to modify the leads_cstm table to add the column my_customField_c, but failed in the process of doing so because the MySQL server believes the column already exists. In short, one cannot add a column to a table if the column we are attempting to add shares the name of an already existing column.

Examination of the table in question revealed that indeed the field already existed, but why did SugarCRM not recognize this fact?

Wednesday, September 21, 2011

SugarCRM Troubleshooting: Error Deploying Custom Modules

SugarCRM administrators that have utilized the Module Builder tool are likely to have run into this scenario on more than one occasion....

A custom module is created and you proceed to click the Deploy button. 

The deployment process initiates and appears to be working as expected, but suddenly, the following error message is displayed:

"An error has occured during deploy process, you package may not have installed correctly."

Does it seem familiar to you? 

It happened to me for the first time some months back, ironically, not long after attending the yearly SugarCON event where I had attended an in-depth discussion on the mechanics of the Module Builder tool. This experience became important because it helped explained the error and eventually led me to the solution, which we will now discuss.

Friday, September 9, 2011

Commentary: SugarCRM OnDemand

The idea of Software-as-a-Service (SaaS) is a rather nifty one.

As a customer, you pay a set fee on a predefined schedule and in turn, software is quickly made available for your use -- usually within minutes. It eliminates the need and hassle of installing software, maintaining servers, setting up backups, etc., plus the vendor normally provides technical support services as part of the subscription. The concept is not new, and is quite popular with a number of CRM vendors, including SugarCRM.

Sugar OnDemand is the common name associated with the SugarCRM SaaS offering. While it delivers on the idea of fast deployment, my preference is to not use it except for the most basic of deployments. It is not inherently bad, but enhancements to the platform are necessary make it a much more acceptable solution, specially considering the sales strategy that surrounds it.

As a solutions implementer, some of the shortcomings are frustrating, not only because they complicate customization of the system, but more importantly, they prolong the work involved which usually translates to additional expenditures in professional services.

What are some of the things that would make it a more palatable solution from my perspective?

Sunday, September 4, 2011

SugarCRM 101: Non-Commercial vs. Commercial Hosting

It has been a while since I have taken up a subject relating to furthering our understanding of the SugarCRM ecosystem. However, recent conversations I have had have highlighted the need to clarify an important aspect relating to the  various editions of SugarCRM that are available on the market and the ability to use the SugarCRM data center (known as Sugar On-Demand) to host them.

First, we need to understand that there are various editions of SugarCRM available, including Community, Professional and Enterprise, and others that have recently been introduced. The primary differences between them relate to the breadth of functionality each edition offers and the fact that of all the editions, the Community Edition version is the only one that is completely free. Thus, we can say that Community Edition represents the non-commercial branch of the SugarCRM product family, while all other editions represent the commercial side of it.

Now, the other important difference to note between the non-commercial and commercial flavors relates to the ability to use the On-Demand platform to host your installation of SugarCRM. 

Here is a summary of the rules:

Wednesday, August 31, 2011

CandyWrapper: Attaching Files Programmatically

A recent question on the SugarCRM Forums served as a reminder of a specific programming need whose steps are not immediately obvious. Before we go any further, let us discuss the scenario so we have a clear understanding of our intended goal.

In our example, we will assume we need to attach files to a Lead record using a custom application that we have built. We will focus on the part of the code that would be responsible for attaching the file, using C# and the CandyWrapper .NET wrapper for the SugarCRM SOAP API.

Alright, now we need to review the process involved in completing this task. Here is a step-by-step summary of what our code needs to do:

1. Create a Note
2. Associate the Note entry with the desired Lead
3. Attach the file to the Note entry

Pretty straight forward. Let us take a look at the code snippet that will take care of it for us.

Monday, August 29, 2011

Product Review: uCertify Preparation Kits

Anyone that has worked in the IT world for even a short amount of time understands that certification exams are part of the game. Not unexpectedly, I too have had the need to familiarize myself with these exams in order to obtain my various certifications. 

Recently, the folks at uCertify contacted me in relation to their test preparation kits, and I agreed to give their product a look and offer my opinion. 

My past experience with certifications has seen me use a variety of study material, including instructor led classes, books (e.g. Microsoft Press) and other printed material, as well as electronic tools similar to those offered by uCertify. 

My personal preference is for printed materials, but am also sufficiently comfortable with electronic learning tools, so I did not foresee any problems with utilizing the uCertify products. 

The uCertify catalog includes a wide variety of test preparation kits for a number of popular certifications, including: MCSE, Cisco, Zend, Linux, etc. Given I am currently in the process of studying for my Red Hat certification, I selected the Linux track, which provided me access to the Red Hat Linux Essentials (RH033) preparation kit.

Tuesday, August 16, 2011

SugarCRM 6.3 BETA Now Available

I meant to comment on this sooner, as the initial release of SugarCRM 6.3 BETA was made available late last week and whenever this happens, a large portion of the community immediately downloads it and installs it. 

It seems with every release, it is necessary to remind the community at large that BETA releases such as this one are intended for testing purposes ONLY. They should only be used for circumstances where, for example, one is curious about seeing the new functionality or perhaps contributing to testing efforts.

This should always be done using an install that is separate from your production instance. If you must test it with your data, create a copy of your production instance and upgrade the copy of your production instance. Do not upgrade your production instance to the BETA release.

You will find that BETA versions cannot be upgraded. Thus, whichever BETA version you install cannot be upgraded to BETA 2, BETA 3 or even the actual release version of the target version. As a result, if you upgrade your production system to a BETA version, such as 6.3 BETA, you will be stuck with that version and the onus will be on you to figure out how to upgrade it. 

This could put you in a difficult situation as you might encounter problems with the BETA that hamper your usage of the system and the only recourse you will have available to you is your own ability to troubleshoot and resolve the problem.

In short, use BETA versions for their intended purposes ONLY: testing.

Monday, August 8, 2011

Una Pregunta

Analizando los países fuentes de los lectores de este blog, he reconocido que dentro la lista de los 10 más populares aparecen unos de poblaciones hispanoparlantes.

Por mucho tiempo he deseado traducir el contenido de este blog al Español para facilitar el intercambio de información con uds., pero la verdad es que el tiempo no me lo permite en muchas ocasiones. 

Pero reconozco la necesidad y quisiera resolver esto, si uds. creen vale la pena. 

¿Que opininan? 

Favor dejar su comentario sobre el tema. 

SugarCRM Customization: Default Assigned User

El Bibliomata/Flickr
One of the first customizations that I recall applying to the first SugarCRM system I was in charge of was to set the default assigned user on Cases to someone other than the logged in user. This was used as a way to simplify the need for the submitting user to have to select the same assigned user every time a new case was added. That was back in 2005, and using version 3.0 of the product.

Although the process is still not a simple matter of a couple of clicks of the mouse, major advancements to the SugarCRM architecture since that time have indeed simplified it when compared to when I first had to tackle the issue, so do not be discouraged.

Let us take a look at exactly how it is done.

Tuesday, August 2, 2011

SugarCRM Customization: Employees Relate Field

The topic of Employees and Users within the scope of SugarCRM can sometimes be a bit confusing. However, there are a couple of subtle points that help distinguish the two. 

In a nutshell, Employees are a representation of the various individuals that work at your organization. In some cases (maybe all), those same individuals are also SugarCRM users, but it is not mandatory. Users, on the other hand, are a representation of all the individuals that have access to the SugarCRM system. Note that anyone defined as a User is also automatically added to the Employees list -- which is often the reason why confusion creeps in when discussing this topic.

Another important difference between the two is that of the two, data can only be assigned to a User but not to an Employee. These subtle differences are specially important on commercial deployments (Professional, Enterprise Editions) as User counts are limited by the number of licenses one has purchased. 

But what happens if one had a need to assign data to an Employee, for reference purposes?  

Wednesday, July 27, 2011

Logic Hooks: Truncating Displayed Values

Sometimes minor customizations to SugarCRM go a long way towards addressing important usability aspects. Something that has come up a couple of times in recent interactions with users is the need to truncate data displayed on a subpanel.

At first glance, the reasons why someone would want to do this are not always readily apparent. However, consider the scenario where one uses a text area field (e.g. description) on a module and one wishes to display that field on the subpanel.

The process of including the field on the subpanel is easily accomplished via Studio, but over time, an issue not initially apparent usually starts to surface.

Because a text area field can hold large amounts of text, it is possible for a user to populate the field with a number of pages worth of data. That on its own is not a problem. However, displaying that on a ListView, of which a subpanel is a good example, usually causes undesired display problems, as demonstrated by the image that follows (click to enlarge):

The issue at hand is that the Description field with the longer text value makes the subpanel appear a bit odd, to the point that the additional columns that are part of the view appear to the extreme right of the screen.

So how do we solve this? Easily, via a logic hook. Let us take a look at how we do so.

Thursday, June 9, 2011

SugarCRM Customization: Workflow Emails with Templates

Some time ago I posted an article describing the manner in which one can send custom email messages via a logic hook. Since then, several folks have asked if it is possible to leverage the email template system built into SugarCRM for generating the actual message. 

It is certainly possible and that is exactly what we will cover in this post.

To save ourselves some time, we will simply modify the script from the previous post and change the relevant portions so as to cause it to use an e-mail template instead of the file based template it previously used. But before that, we need to create the e-mail template.

Create your e-mail template as you would any other, following these steps:

1. Select Emails > Create Email Template within SugarCRM 
2. Compose your message and click Save when done 

Next, we need the ID of the email template you just created. This will allow us to leverage it within the script, giving us our desired result. 

To retrieve the ID:

1. Select Emails > View Email Templates  
2. Click on the email template you just created
3. Copy the content from the address field in your web browser to your clipboard
4. Paste the content to Notepad or other format where it can be easily inspected

Once pasted, you should find that the address field contains something similar to the following:


The portion to the right of the equal sign is what we will need. 

With the preliminary work out of the way, we can proceed to modify the script that sends the message. If you want to see the original script, take a look at the original post

Thursday, May 19, 2011

SugarCRM 101: 10 Questions for Hosting Providers

Photo by ivanpw/Flickr
Those evaluating SugarCRM for use in their business may have encountered of information regarding its use through a shared hosting provider such as GoDaddy, 1and1, Hostgator, TMDHosting or any of the various other options available.

Due to the extensive amount of hosting providers that are available today, building and maintaining a comprehensive list of all those compatible for use with SugarCRM is a daunting and difficult task for any single individual such as myself. However, it is also not necessary to do so, as the answers to a few questions should suffice in determining the suitability of any provider.

Before you sign up, ask these questions:

1. Which version of PHP is installed? 

An answer such as PHP 5 will not suffice. It needs to be exact, such as PHP 5.3.1. While there are many versions of PHP that are compatible with SugarCRM, there are also a number of them that are not. It is worth noting that many hosting providers have a tendency to use the latest versions of PHP. This is sometimes a problem for SugarCRM as said versions may not yet have thoroughly tested. One should not assume that SugarCRM will work because the server is using the latest release.

2. How often is PHP updated and can I revert to an older version if necessary?

One common problem SugarCRM users encounter on shared hosting providers is that the provider will at random update the version of PHP in use. That action unto itself is not a problem, except that sometimes the update is to a version of PHP that is not supported by SugarCRM. The ability to switch to a different version (one supported by SugarCRM) would be a helpful capability.

3. What is the memory limit for PHP?

This is one of the most important factors. Anything below 64MB is unusable for SugarCRM. If it is less than 128MB, you will only be able to run SugarCRM Community Edition. For this scenario, the higher the number, the better. 

Friday, May 13, 2011

SugarCRM Troubleshooting: Formatting Woes

Does the image below look familiar?

It is the default login screen for SugarCRM Community Edition, but as one can see, the formatting is not quite right. This, unfortunately, is a common occurrence and worse yet, it usually occurs immediately following the install process.

Fortunately, the solution is rather simple. But before we get into the solution, let us spend just a couple of minutes reviewing the source of the problem so that we have a better understanding of the SugarCRM internals, which may come in handy at a later time.

Tuesday, May 3, 2011

Commentary: The Social CRM Quandary

A few days ago, my friend Jennifer Vides wrote an excellent piece on social media; something she is quite familiar with as she consults on the matter (and other media) from a marketing perspective. Many of the points in her article mirrored my own feelings towards social media. And although it is not my area of focus, there is an ever increasing level of attention towards it from the CRM community at large that makes it a common topic of discussion.

Social media and Social CRM, as the marriage of the two is being called, is, in my opinion, a mixed bag of good and bad. The good has fueled an intense interest by CRM vendors, to a level that easily leads one to believe they are bordering on forgetting that social media is not a replacement for CRM, but instead a complement. 

Personally, I have a measured liking of social media in that I understand and accept its value and potential, but am also weary of its negatives. 

Some positives we can highlight include its propensity for facilitating networking and connecting with others that share (or perhaps not) similar interests, jobs, likes, dislikes, etc. It is also an inexpensive way of reaching a lot of people which one can generally assume have an interest in something that one has to offer, whether it be a product, comic relief or knowledge about a specific topic.

Blogs are an excellent example. They are an invaluable resource on just about any topic, specially for those us working within the world of technology. Many other positive examples can be easily referenced, such as the person who lands a job via their LinkedIn profile, reconnecting with long lost friends and family via Facebook, etc.

Now for the bad.

Monday, May 2, 2011

CandyWrapper Now On GitHub

Ever since the initial release of CandyWrapper back in March of 2009, the intention was to make its source code available to the community, to allow them to constructively criticize it, improve or expand upon the work.

Things, unfortunately, do not always go according to plan.  Although, in this case, it is probably for the best as the time elapsed has allowed for better tools to emerge to simplify this process. 

Anyway, I am happy to announce that this past weekend, I released the code to the CandyWrapper project. It is a C# class library, originally created with VisualStudio 2008. Over the next few weeks, I plan on adding other files to the project, including a small test application and the source code for the installer.

You can download the source code from GitHub, by visiting the following link:  

I ask for your patience (and any tips) with regards to my usage of GitHub, as it is a new tool to me. Likewise, given that fact, it is unlikely I will be able to assist you with any problems you might experience using it.

I hope you find this contribution of assistance to your work.

Thursday, April 14, 2011

Logic Hooks: OnDemand Installations

Source: photosteve101/Flickr
Say that you developed a cool logic hook and are ready to put it into use on your production instance of SugarCRM. However, you are faced with the challenge of the production instance being hosted on the SugarCRM OnDemand platform. 

For those of you that are new to the world of logic hooks, the OnDemand environment presents a unique challenge in that in order for one to make use of logic hooks in general, one has place the logic hook files in specific sub-folders within the folder containing your SugarCRM installation. You would not have access to said folders for OnDemand installations. Thus, our challenge.

So how do we solve this problem?

Fortunately, we can leverage one of built-in features of SugarCRM to bypass the issue. Using the Module Loader tool, we can install or uninstall the logic hook at will.

But to do this, we must first create a Module Install package. Let us take a look at how we would prepare it for the purposes of installing the proper casing logic hook described in a previous post of mine.

From this point forward, it is assumed that you have already created the files corresponding with that logic hook and we will focus exclusively on the process required to install it via the Module Loader and in turn, apply them to an OnDemand instance.

Tuesday, April 12, 2011

SugarCRM 101: Upgrade Safe? Huh?

Source: LivingOS/Flickr
Lexicons tend to develop around just about any facet of our cultures.  At the office, at the gym, at home -- pretty much anywhere.  

The software world is no different.  Users of any software will, over time, develop their own vocabulary to describe features and other aspects of the software. Conversely, software vendors develop their own vocabulary for the same and other components of their product.  Because these two lists don't always match, communication between the parties can sometimes become a bit blurred. It can be further complicated by the fact that vendors tend to use words common to the software publishing industry.  

Of course, the user base tends to represent a wide variety of industries, thus, the terms used by software vendors tend to be foreign to many users.

Under most scenarios, this gap in comprehension usually does not present problems. However, it can also cause great confusion and potential problems.  

Friday, April 8, 2011

Commentary: SugarCON 2011

I had the fortune of attending the annual SugarCRM Partner, User and Developer Conference (SugarCON) in San Francisco this week. Although I missed last year's event, it is very exciting to see how much SugarCRM (company and product) has grown and matured since my initial brush with it back in 2005, or even in comparison to the last time I attended in 2009.  I wanted to take a few moments to share some thoughts on the experience as a whole.

SugarCRM CTO and co-founder Clint Oram kicked things off on Tuesday morning by welcoming the crowd. The day prior had been spent talking about matters relating mostly to partners on which I won't comment (just for the purposes of omission -- don't read into it). Listening to Clint is always interesting. Personally, I've always enjoyed interacting with him as he is a very down-to-Earth and approachable individual.  Clint is always willing to listen and actively solicits ideas from the crowd. More importantly, he is honest. The story was the same when I saw him this year.  Talk to him if you get the opportunity.
His welcome was followed by the morning keynote, delivered by SugarCRM CEO Larry AugustinDespite having known of Larry for a number of years -- mostly due to his connection to VA Linux -- I had never had the opportunity to actually be in the same room with him or hear him speak at length about SugarCRM.  Not surprisingly, part of the keynote revolved around the themes that have served as the focal point for the development of SugarCRM 6.2, slated for later this year: Global, Mobile, Social.  There are some really cool things in the works.  Stay tuned.

While features are important, so is believing in one's work, as is the feeling that one is part of something one considers to be special. Some of the comments that Larry made really hit home for me and helped to cement the reasons why I proudly align myself with SugarCRM.

Wednesday, January 26, 2011

SugarCRM Troubleshooting 101: Quick and Easy Custom Logs

Here is an easy, yet rather helpful, tip.

Suppose one needs to add some log messages to SugarCRM in order to trace a problem -- not uncommon when writing custom code such as that found in logic hooks.

How do we go about adding custom log messages so we can see what is going on?

It is actually fairly easy and only requires one line of code:

$GLOBALS['log']->fatal('My custom debug message');

There are two important items to note about this bit of code.  

First, the word fatal actually refers to the logging level.  SugarCRM allows you to select from various levels, including info, fatal and debug (the most verbose).  The level can be defined by an admin level user by simply selecting Admin > System Settings and modifying the logging level at the bottom of the screen.  Your custom message will print out only if the selected level within System Settings screen matches the level you use within this line of code.

Next, in this example, the text My custom debug message is all that would be printed by the logging engine.  It is basically a string of your liking, which can include references to variables -- either your own or those created by SugarCRM (such as $bean->id).

Consequently, log messages (custom or otherwise) are written to a file named sugarcrm.log which you can find in the root install directory of your SugarCRM instance.  If you prefer a different name for your log file, change it via the earlier referenced Systems Settings screen.

Lastly, if you are using a hosted instance, you may not have access to the root directory corresponding to your install.  To circumvent that and access your log file, select Admin > Diagnostics.

Thursday, January 6, 2011

January is Logic Hooks Month

According to the stats for this blog, logic hooks are a popular subject amongst visitors.  As such, I figure the topic would be a great way to kick off an idea of mine that I have been tossing around for a bit.

Going forward, I will select a topic of interest, or theme, on a monthly basis.  The objective: to discuss the topic at hand in further depth throughout the month, with other posts sprinkled in between for variety.

However, this idea can only work with your assistance.  

To help, simply reply to the post announcing the month's topic (e.g. this post) and suggest a facet of said topic for discussion.  For example, perhaps you have been wanting to build a logic hook to execute an SQL query, but are unsure about how to get started.  Simply share your scenario within the comments area.  

In turn, I will select one of the suggestions on a weekly basis and provide a detailed post discussing the process involved in addressing the issue.

Now, while all suggestions are welcome, there are some rules to consider:

1. For obvious reasons, I cannot create a detailed post for every suggestion, but if time permits, I will tackle more than 1 per week.  

2. Please be as clear as possible in your description of your scenario.  If the description is not clear, I will not consider it.

3. Do not post sample code or the like.  A clear description of the goal will suffice.  

4. Some scenarios may require very specific configurations, such as custom modules, etc.  I will not be able to create mirror environments for all cases, but my response will include sufficient guidance to fulfill the vast majority (if not all) of your goal.

5. Suggestions on themes for upcoming months are welcome and highly encouraged.

Thanks and now lets have the suggestions relating to logic hooks (in the comments section)!  

Wednesday, January 5, 2011

SugarCRM Customization: Case Numbers

One of the great things about helping newer members of the SugarCRM community is that they often help me remember some customization needs that are not frequently asked by others. 

A good example of this came up just a few days ago on the SugarCRM Forums when a user asked if it was possible to change the starting point for the numbering sequence on Cases.  By default, SugarCRM begins at the number 1 and automatically increments it by 1 whenever a new Case is added.  However, many users would prefer it to start at a different number.  

So, how does one change the start point?  

It is actually rather simple and requires two things: access to a MySQL administrative tool such as SQLyog, phpMyAdmin, etc. and a single SQL command.

Assuming you already have access to the administrative tool, executing the following command would do the trick for you:


Where nnn represents the starting number you wish to apply.  For example, to set the starting point to 1000, use the following command:


That is it!  Quick and easy!

Monday, January 3, 2011

SugarCRM Customization: Drop Down Fields

Looking to create a drop down field in SugarCRM?  

No problem.  Simply go to the customization Studio and add a new field of type "Drop Down," making sure to assign or create the appropriate drop down list at field creation time.

Simple enough, but that only works for custom fields.  What about changing an existing, default field so as to make it behave like a drop down.  For example, we might want to change the Subject field for Cases or the Name field for Opportunities into drop downs. 

Doing so would help us ensure uniformity in the classification of support inquiries or revenue opportunities, which in turn improves data quality and simplifies the measurement of effectiveness.  Ultimately, one of the goals of CRM technologies is to simplify the process of measuring how well your business is doing and the quality of the data in the system has a significant impact on that function.

So, how do we convert these default text fields to drop down fields?  Lets take a look.