If you are using
CrmService's Create or Update methods perhaps you already noticed that when you send a date in the DD-MM-
YYYY HH:MM:SS format
CrmService will read this date as MM-DD-
YYYY HH:MM:SS and that's what he'll write to your
MSCRM db.
So if you're writing a contact's
birthdate/birthday like "24-07-1980 00:00:00"
CRM will throw an exception because he's using "24" as MM and "07" as DD when he shouldn't. You need a workaround such as your own
fixDate() method. The following
fixDate() method was created by Marco Silva, member of my MS
CRM Dynamics 4.0 project team of two (me and him). This method gets something like "24-07-1980 00:00:00" and returns it in a
CRM friendly format "07-24-1980 21:00:00". If you check your MS
CRM db you will see the correct date but perhaps not the correct time "24-07-1980 20:00:00".
private static string
fixDate(String date)
{
string day = data.
Substring(0, 2);
string month = data.
Substring(3, 2);
string year = data.
Substring(6, 4);
string hour = "21";
string min = "00";
string sec = "00";
return month + "-" + day + "-" + year + " " + hour + ":" + min + ":" + sec;
}
You may notice that we're forcing the hour, minutes and seconds and there's a pretty good explanation for that. The explanation is related with Time Zone handling issues that affect MS
CRM 4 (and 3). My time zone settings (MS
CRM server,
SQL server, desktop) are all GMT (...Lisbon). Some specific
datetimes (not all) are written to MS
CRM DB with less an hour and that makes them go back one day.
If you send "24-07-1980 00:00:00" or "07-24-1980 00:00:00" to be more accurate to your
CrmService it will write "23-07-1990 23:00:00" to MS
CRM db!
Ooops! Wrong
birthdate! However if you check your contact's file you will see "24-07-1980". However the MS
CRM db
birthdate datetime is wrong ("23-07-1990 23:00:00") and you can't export it to an external db such as a
datawarehouse. The workaround for this one requires two different approaches: a
CrmService approach and an
onSave approach (to fix typed
birthdates).
Both of these workarounds require you to change
birthdate's time to something bigger than "01:00:00" because if the
CrmService "steals" you one hour it won't "steal" you a whole day! I chose to set "21:00:00" as my "fake" time. So, if I send this CrmService friendly "fake" date "07-24-1980 21:00:00" to CrmService he will write "24-07-1980 20:00:00" to MS CRM db! And that works for me as the birthdate time isn't important (or visible). So my first workaround also is solved by the fixDate() method above. The second workaround has to be properly included inside the onSave event which you have to enable.
This workaround was provided by Pedro Pereira who helped me fix this issue for MS CRM 3.0 but it works fine with MS CRM 4.0.