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.