In the Contact entity, I have the following attributes
Preferred email - A read only field of type Email
Personal email 1 - An email field
Personal email 2 - An email field
Work email 1 - An email field
Work email 2 - An email field
School email - An email field
Other email - An email field
Preferred email option - An option set with the following values
{Personal email 1, Personal email 2, Work email 1, Work email 2,
School email and Other email).
None of the above mentioned fields are required.
Requirement
When user picks a value from Preferred email option, we copy the email address available in that field and apply the same in the Preferred email field.
Implementation
The Solution Architect suggested that we implement the above requirement as a Workflow. The reason he provided was - most of the times, these values are to be populated by an external website and the data is then fed into CRM 2011 system. So, when they update Preferred email option via a Web Service call to CRM, the WF will run and updated the Preferred email field.
My argument / solution
What will happen if I do not pick a value from the Preferred email Option Set? Do I set it to any of the email addresses that has a value in it? If so, what if there is more than one of the email address fields are populated, i.e., what if Personal email 1 and Work email 1 is populated but no value is picked in the Option Set?
What if a value existed in the Preferred email Option Set and I then change it to NULL?
Should the field Preferred email (where the text value of email address is stored) be set to Read Only?
If not, what if I have picked Personal email 1 in the Option Set and then edit the Preferred email address text field with a completely new email address
If yes, then we are enforcing that the preferred email should be one among Personal email 1, Personal email 2, Work email 1, Work email 2, School email or Other email [My
preference would be this]
What if I had a value of
[email protected] in the personal email 1 field and personal email 2 is empty and choose value of Personal email 1 in the drop down for Preferred email (this will set the Preferred email field to
[email protected]) and later, I change the value to Personal email 2 in the Preferred email. It overwrites a valid email address with nothing. I agree that it would be highly unlikely that a user will pick Preferred email as Personal email 2 and not have a value in it but nevertheless it is a possible scenario, isn’t it?
What if users typed in a value in Personal email 1 but by mistake picked Personal email 2 in the option set and Personal email 2 field had no value in it.
Solution
The field Preferred email option should be a required field
A JS should run whenever Preferred email option is changed. That JS function should set the relevant email field as required (based on the option chosen) and another JS function should be called (see step 3).
A JS function should update the value of Preferred email with the value in the email field (as picked in the option set).
The JS function should also be run every time someone updates the actual email field which is chosen in the option set.
The guys who are managing the external website should update the Preferred email field - surely, if they can update Preferred email option via a Web Service call, it is easy enough to update the Preferred email right?
Question
Which is a better method? Should it be written as a JS or a WorkFlow?
Also, whose responsibility is it to update the Preferred email field when the data flows from an external website?
I am new to CRM 2011 but have around 6 years of experience as a CRM consultant (with other products). I do not come from a development background as I started off as a Application Support Engineer but have picked up development in the last couple of years.