Recently I got requirement to fill-in field on a web resource with current user time (CRM settings should be took into account).
I use following code to implement requirement:
1. Retrieve user settings 2. Ask server to execute UtcTimeToLocalTime request with user time zone provided
This is code:
I use following code to implement requirement:
1. Retrieve user settings 2. Ask server to execute UtcTimeToLocalTime request with user time zone provided
This is code:
DateTimeHelper = {};
(function (DateTimeHelper, jQuery, $) {
DateTimeHelper.GetUserLocalTime = function (date) {
var userId = context().getUserId();
var settings = getCurrentUserSettings(userId);
var timeZoneCode = settings.TimeZoneCode;
var dateTime = Teoco.DateTimeHelper.UtcTimeToLocalTime(timeZoneCode, date);
return dateTime;
};
DateTimeHelper.UtcTimeToLocalTime = function (timeZoneCode, dateTime) {
var req = getXhr();
req.open("POST", getServicePath(), false);
req.setRequestHeader("SOAPAction", "http://schemas.microsoft.com/xrm/2011/Contracts/Services/IOrganizationService/Execute");
req.setRequestHeader("Content-Type", "text/xml; charset=utf-8");
var xml =
"<s:Envelope xmlns:s='http://schemas.xmlsoap.org/soap/envelope/'>" +
" <s:Body>" +
" <Execute xmlns='http://schemas.microsoft.com/xrm/2011/Contracts/Services' xmlns:i='http://www.w3.org/2001/XMLSchema-instance'>" +
" <request i:type='b:LocalTimeFromUtcTimeRequest' xmlns:a='http://schemas.microsoft.com/xrm/2011/Contracts' xmlns:b='http://schemas.microsoft.com/crm/2011/Contracts'>" +
" <a:Parameters xmlns:c='http://schemas.datacontract.org/2004/07/System.Collections.Generic'>" +
" <a:KeyValuePairOfstringanyType>" +
" <c:key>TimeZoneCode</c:key>" +
" <c:value i:type='d:int' xmlns:d='http://www.w3.org/2001/XMLSchema'>" + timeZoneCode + "</c:value>" +
" </a:KeyValuePairOfstringanyType>" +
" <a:KeyValuePairOfstringanyType>" +
" <c:key>UtcTime</c:key>" +
" <c:value i:type='d:dateTime' xmlns:d='http://www.w3.org/2001/XMLSchema'>" + dateTime.toISOString() + "</c:value>" +
" </a:KeyValuePairOfstringanyType>" +
" </a:Parameters>" +
" <a:RequestId i:nil='true' />" +
" <a:RequestName>LocalTimeFromUtcTime</a:RequestName>" +
" </request>" +
" </Execute>" +
" </s:Body>" +
"</s:Envelope>";
req.send(xml);
var date = null;
if (req.status === 200) {
var resultXml = req.responseXML;
var dateString = $(resultXml).find("value").text()
date = new Date(dateString);
}
else {
alert("Failed to retrieve current user local time");
throw "Failed to retrieve current user local time";
}
return date;
};
function getCurrentUserSettings(userId) {
var request = "/UserSettingsSet?$filter=SystemUserId eq guid'" + userId + "'";
var settings = null;
callOData(request,
function (data) {
if(data != null && data.results != null && data.results.length != 0)
{
settings = data.results[0];
}
},
function (xhr) {
});
if (settings == null) {
alert("Failed to load current user settings");
throw "Failed to load current user settings";
}
return settings;
}
function callOData(request, onSuccess, onError) {
var req = getXhr();
req.open("GET", getODataPath() + request, false);
req.setRequestHeader("Accept", "application/json");
req.setRequestHeader("Content-Type", "application/json; charset=utf-8");
req.send();
if (req.status === 200) {
onSuccess(JSON.parse(req.responseText).d);
}
else {
onError(req);
}
}
function getServicePath() {
return getClientUrl() + "/XRMServices/2011/Organization.svc/web";
}
function getODataPath() {
return getClientUrl() + "/XRMServices/2011/OrganizationData.svc/";
}
function getClientUrl() {
var serverUrl = typeof context().getClientUrl !== "undefined" ? context().getClientUrl() : context().getServerUrl();
if (serverUrl.match(/\/$/)) {
serverUrl = serverUrl.substring(0, serverUrl.length - 1);
}
return serverUrl;
}
function context() {
var oContext;
if (typeof window.GetGlobalContext != "undefined") {
oContext = window.GetGlobalContext();
}
else {
if (typeof Xrm != "undefined") {
oContext = Xrm.Page.context;
}
else if (typeof window.parent.Xrm != "undefined") {
oContext = window.parent.Xrm.Page.context;
}
else {
throw new Error("Context is not available.");
}
}
return oContext;
}
function getXhr() {
if (XMLHttpRequest) {
return new XMLHttpRequest();
}
try {
return new ActiveXObject('MSXML2.XMLHTTP.6.0');
} catch (e) {
try {
return new ActiveXObject('MSXML2.XMLHTTP.3.0');
} catch (e) {
alert('This browser is not AJAX enabled.');
return null;
}
}
}
})(DateTimeHelper, jQuery, jQuery);
And this is usage example:
var today = Teoco.DateTimeHelper.GetUserLocalTime(new Date());