AXForum  
Вернуться   AXForum > Microsoft Dynamics CRM > Dynamics CRM: Разработка
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 27.03.2012, 21:40   #1  
ZooY is offline
ZooY
Участник
Аватар для ZooY
 
379 / 46 (2) +++
Регистрация: 24.06.2008
Адрес: Россия, Москва
Angry Даты в CRM 2011
Коллеги, помогите разобраться, я чета просто в ступоре.
Есть CRM 2011, есть веб-приложение (запускаю его локально со своего компа).
Получаю значение даты из сущности, пробую делать это аж тремя разными способами: библиотеки microosft.xrm.sdk, SOAP-сервис, REST-сервис. Во всех случаях получаю дату в UTC... Как так? Почему UTC? Почему это не локальная дата пользователя и как таки получить локальную дату?
Старый 27.03.2012, 21:50   #2  
Konstantin Katsovich is offline
Konstantin Katsovich
Участник
Аватар для Konstantin Katsovich
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
 
243 / 57 (2) ++++
Регистрация: 22.10.2008
Адрес: Israel
код в студию
__________________
Читайте SDK!!!
Старый 27.03.2012, 21:58   #3  
ZooY is offline
ZooY
Участник
Аватар для ZooY
 
379 / 46 (2) +++
Регистрация: 24.06.2008
Адрес: Россия, Москва
X++:
protected void Page_Load(object sender, EventArgs e)
{
	const string DOMAIN = "...";
	const string USER = "...";
	const string PASS = "...";
	const string ORG_NAME = "...";
	const string CRM_SERVER_URL = "http://.../" + ORG_NAME;
	var eventId = new Guid("044220DB-1230-DE11-9DEE-00304894FA2D");
	const string EVENT_ENTITY_NAME = "new_event";
	const string ATTR_NAME = "new_startdate";
	var eventColumns = new ColumnSet(new[] { ATTR_NAME });

	var query = new QueryExpression("new_event") { ColumnSet = eventColumns, Criteria = new FilterExpression { FilterOperator = LogicalOperator.And } };
	var condition = new ConditionExpression("new_eventid", ConditionOperator.Equal, new object[] { eventId });
	query.Criteria.Conditions.Add(condition);

	var queryString = @"
<fetch mapping='logical' version='1.0'>
<entity name='new_event'>
<attribute name='new_startdate' />
<filter>
	<condition attribute='new_eventid' operator='eq' value='" + eventId + @"' />
</filter>
</entity>
</fetch>";

	DateTime date;
	using (var service = CreateDllCrmService(CRM_SERVER_URL, ORG_NAME, DOMAIN, USER, PASS))
	{
		var @event = service.Retrieve(EVENT_ENTITY_NAME, eventId, eventColumns);
		date = @event.GetAttributeValue<DateTime>(ATTR_NAME);
		
		var events = service.RetrieveMultiple(query);
		date = events.Entities[0].GetAttributeValue<DateTime>(ATTR_NAME);
		
		events = service.RetrieveMultiple(new FetchExpression(queryString));
		date = events.Entities[0].GetAttributeValue<DateTime>(ATTR_NAME);		
	}
	{
		var client = CreateOrganizationServiceClient(DOMAIN, USER, PASS);

		var @event = client.Retrieve(EVENT_ENTITY_NAME, eventId, eventColumns);
		date = @event.GetAttributeValue<DateTime>(ATTR_NAME);
		
		var events = client.RetrieveMultiple(query);
		date = events.Entities[0].GetAttributeValue<DateTime>(ATTR_NAME);

		events = client.RetrieveMultiple(new FetchExpression(queryString));
		date = events.Entities[0].GetAttributeValue<DateTime>(ATTR_NAME);

		client.Close();
	}
	{
		var context = CreateOrganizationDataServiceContext(CRM_SERVER_URL, ORG_NAME, DOMAIN, USER, PASS);

		var events = (from evt in context.New_EventSet where evt.New_EventId == eventId select evt).ToArray();
		date = events[0].New_StartDate.Value;
	}
}


private OrganizationServiceProxy CreateDllCrmService(string crmServerUrl, string orgName, string domain, string user, string pass)
{
	var serverAndOrgName = crmServerUrl.EndsWith(orgName) ? crmServerUrl : crmServerUrl + "/" + orgName;
	var orgServiceUri = new Uri(serverAndOrgName + "/XRMServices/2011/Organization.svc");
	var orgConfiguration = ServiceConfigurationFactory.CreateConfiguration<IOrganizationService>(orgServiceUri);
	var credentials = new ClientCredentials();
	credentials.Windows.ClientCredential = new NetworkCredential(user, pass, domain);
	return new OrganizationServiceProxy(orgConfiguration, credentials);
}


private OrganizationServiceClient CreateOrganizationServiceClient(string domain, string user, string pass)
{
	var client = new OrganizationServiceClient();
	client.ClientCredentials.UserName.UserName = domain + @"\" + user;
	client.ClientCredentials.UserName.Password = pass;
	return client;
}


private atcContext CreateOrganizationDataServiceContext(string crmServerUrl, string orgName, string domain, string user, string pass)
{
	var serverAndOrgName = crmServerUrl.EndsWith(orgName) ? crmServerUrl : crmServerUrl + "/" + orgName;
	var context = new atcContext(new Uri(String.Format("{0}/xrmservices/2011/organizationdata.svc/",
		serverAndOrgName), UriKind.Absolute)) { Credentials = new NetworkCredential(user, pass, domain) };
	return context;
}
Собственно я испробовал все возможные варианты получения данных. Радует что результат одинаковый во всех случаях, но почему он именно такой?
Во всех случаях возвращается дата в UTC, о чем говорит свойство Kind даты, а также сверка с тем, что реально храниться в SQL.
Старый 27.03.2012, 22:04   #4  
Konstantin Katsovich is offline
Konstantin Katsovich
Участник
Аватар для Konstantin Katsovich
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
 
243 / 57 (2) ++++
Регистрация: 22.10.2008
Адрес: Israel
Попробуйте поискать в Entity.FormattedValues Property

И ещё вопрос: У вас какой Time Zone?
__________________
Читайте SDK!!!
Старый 27.03.2012, 22:06   #5  
ZooY is offline
ZooY
Участник
Аватар для ZooY
 
379 / 46 (2) +++
Регистрация: 24.06.2008
Адрес: Россия, Москва
Цитата:
Сообщение от Konstantin Katsovich Посмотреть сообщение
И ещё вопрос: У вас какой Time Zone?
+4 Москва и прочее
Старый 27.03.2012, 22:21   #6  
Konstantin Katsovich is offline
Konstantin Katsovich
Участник
Аватар для Konstantin Katsovich
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
 
243 / 57 (2) ++++
Регистрация: 22.10.2008
Адрес: Israel
Цитата:
Сообщение от ZooY Посмотреть сообщение
+4 Москва и прочее
У того юзера с полномочиями которого вы обращаетесь к серверу?
__________________
Читайте SDK!!!
Старый 27.03.2012, 22:29   #7  
ZooY is offline
ZooY
Участник
Аватар для ZooY
 
379 / 46 (2) +++
Регистрация: 24.06.2008
Адрес: Россия, Москва
Цитата:
Сообщение от Konstantin Katsovich Посмотреть сообщение
У того юзера с полномочиями которого вы обращаетесь к серверу?
Именно про него я и говорил.

Последний раз редактировалось ZooY; 27.03.2012 в 22:34.
Старый 27.03.2012, 22:45   #8  
Konstantin Katsovich is offline
Konstantin Katsovich
Участник
Аватар для Konstantin Katsovich
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
 
243 / 57 (2) ++++
Регистрация: 22.10.2008
Адрес: Israel
У меня именно FormatedValues возвращает в нужном time zone всё остальное в UTC

__________________
Читайте SDK!!!
Старый 27.03.2012, 22:48   #9  
ZooY is offline
ZooY
Участник
Аватар для ZooY
 
379 / 46 (2) +++
Регистрация: 24.06.2008
Адрес: Россия, Москва
Но FormatedValues возвращает текст! Его конечно можно распарить в DateTime, но это чертовски не удобно...
И как так вообще получается? Я даю руку на отсечение, что получал даты в локальном формате (правда это было в другом проекте). Может есть какие то настройки?..
Старый 27.03.2012, 23:12   #10  
Konstantin Katsovich is offline
Konstantin Katsovich
Участник
Аватар для Konstantin Katsovich
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
 
243 / 57 (2) ++++
Регистрация: 22.10.2008
Адрес: Israel
Цитата:
Сообщение от ZooY Посмотреть сообщение
Но FormatedValues возвращает текст! Его конечно можно распарить в DateTime, но это чертовски не удобно...
Добро пожаловать в crm 2011

А почему нельзя сделать расчеты в UTC (оно ведь у всех в UTC), а отображать в тексте?
__________________
Читайте SDK!!!
За это сообщение автора поблагодарили: mistah (1).
Старый 27.03.2012, 23:30   #11  
ZooY is offline
ZooY
Участник
Аватар для ZooY
 
379 / 46 (2) +++
Регистрация: 24.06.2008
Адрес: Россия, Москва
Ну на самом деле можно довольно легко забыть что дата в UTC и от нее надо получать локальную дату или пользоваться форматированным значением. Кроме того меня гложет мысль что я таки получал даты в локальном формате и не понятно почему это работает в SL и не работает в веб-приложении.
А еще меня просто убивает ситуация. которую я наблюдал сегодня и с которой собственно у меня встал весь этот вопрос:

[13:45:20] Смотрю через SQL
Start Date: 2006-12-31 13:00:00
Start Date UTC: 2006-12-31 21:00:00...
То есть дата была добавлена с часовым поясом -8

[22:40:15] Опять смотрю через SQL
Start Date: 2007-01-01 01:00:00
Start Date UTC: 2006-12-31 21:00:00
То есть нормальный часовой пояс +4

И a CRM на форме отображались днем 31 декабря, а сейчас вечером уже 1 января, при том что дата в UTC осталась той же самой... Днем я выполнял этот запрос не один раз, я даже написал о результате коллеге скопировав данные. я не мог ошибиться... А сейчас все совсем по другому... Как жешь так?...
Старый 28.03.2012, 00:58   #12  
g.Naukovych is offline
g.Naukovych
Участник
MCBMSS
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
 
405 / 130 (5) +++++
Регистрация: 23.03.2011
Если получать данные из фильтрованных представлений, то дата будет в том поясе, от какого пользователя вы запускаетесь. Если получать из нефильтрованных представлений то будет время по грнивичу. Вы получаетее данные от имени пользователя. Какой у негочасовой пояс, то время и будет.
__________________
Мой блог https://procrm.tv
Старый 28.03.2012, 02:13   #13  
ZooY is offline
ZooY
Участник
Аватар для ZooY
 
379 / 46 (2) +++
Регистрация: 24.06.2008
Адрес: Россия, Москва
Цитата:
Сообщение от g.Naukovych Посмотреть сообщение
Если получать данные из фильтрованных представлений, то дата будет в том поясе, от какого пользователя вы запускаетесь. Если получать из нефильтрованных представлений то будет время по грнивичу. Вы получаетее данные от имени пользователя. Какой у негочасовой пояс, то время и будет.
Все это я и так знаю, но почему такая разница при том что пользователь один и тот же и представление тоже одно и тоже?..
Старый 28.03.2012, 07:39   #14  
lode is offline
lode
Участник
Аватар для lode
 
37 / 12 (1) ++
Регистрация: 23.03.2009
Адрес: Россия, Екатеринбург
Цитата:
Сообщение от ZooY Посмотреть сообщение
...
И a CRM на форме отображались днем 31 декабря, а сейчас вечером уже 1 января, при том что дата в UTC осталась той же самой...
У вас на серверах время случайно не переводилось?
Сейчас после включенного Windows Update в России оно переводиться не должно.
Старый 28.03.2012, 10:40   #15  
ZooY is offline
ZooY
Участник
Аватар для ZooY
 
379 / 46 (2) +++
Регистрация: 24.06.2008
Адрес: Россия, Москва
результат, выдаваемый FilteredView не зависит от времени на сервере. В частности сейчас на сервере часовой пояс +3, у пользователя +4 и данные выводятся именно с учетом этого. пользовательского пояса.
Старый 28.03.2012, 11:29   #16  
g.Naukovych is offline
g.Naukovych
Участник
MCBMSS
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
 
405 / 130 (5) +++++
Регистрация: 23.03.2011
Может кто-то перевел время для этого пользователя. У вас должно быть +4, а было -8 разница в 12 часов. Может ошибся кто-нибудь из настроки?
__________________
Мой блог https://procrm.tv
Старый 28.03.2012, 12:59   #17  
ZooY is offline
ZooY
Участник
Аватар для ZooY
 
379 / 46 (2) +++
Регистрация: 24.06.2008
Адрес: Россия, Москва
Цитата:
Сообщение от g.Naukovych Посмотреть сообщение
Может кто-то перевел время для этого пользователя. У вас должно быть +4, а было -8 разница в 12 часов. Может ошибся кто-нибудь из настроки?
Посмотрел на ModifiedOn пользователя (сущность SystemUser)... Его обновляли очень давно.
Старый 28.03.2012, 13:01   #18  
lode is offline
lode
Участник
Аватар для lode
 
37 / 12 (1) ++
Регистрация: 23.03.2009
Адрес: Россия, Екатеринбург
Цитата:
Сообщение от ZooY Посмотреть сообщение
...
[13:45:20] Смотрю через SQL
Start Date: 2006-12-31 13:00:00
Start Date UTC: 2006-12-31 21:00:00...
То есть дата была добавлена с часовым поясом -8
...
Не "была добавлена", а на момент выполнения Вами запроса было такое значение TimeZoneBias в UserSettings.
Посмотрите modifiedby, modifiedon в этой вьюшке, может правда кто-то поменял, или с бекапом сравните..
Старый 28.03.2012, 13:05   #19  
lode is offline
lode
Участник
Аватар для lode
 
37 / 12 (1) ++
Регистрация: 23.03.2009
Адрес: Россия, Екатеринбург
Цитата:
Сообщение от ZooY Посмотреть сообщение
результат, выдаваемый FilteredView не зависит от времени на сервере. В частности сейчас на сервере часовой пояс +3, у пользователя +4 и данные выводятся именно с учетом этого. пользовательского пояса.
Согласен, а вот для клиенской машины того же сказать нельзя. Можно же заполнить дату на форме например, вызвав new Date() в JS. Не знаю как у вас там все выглядит.

Последний раз редактировалось lode; 28.03.2012 в 13:08.
Старый 28.03.2012, 13:29   #20  
ZooY is offline
ZooY
Участник
Аватар для ZooY
 
379 / 46 (2) +++
Регистрация: 24.06.2008
Адрес: Россия, Москва
Цитата:
Сообщение от lode Посмотреть сообщение
Не "была добавлена", а на момент выполнения Вами запроса было такое значение TimeZoneBias в UserSettings.
Посмотрите modifiedby, modifiedon в этой вьюшке, может правда кто-то поменял, или с бекапом сравните..
Посмотрел, запись менялась черте когда давно...
Блин, можно конечно все списать на какой то глюк, но на его "решение" потрачено полдня... обидно...
Теги
crm2011

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
crminthefield: Podcast and Overview: Microsoft Dynamics CRM 2011 Update Rollup 7 Blog bot Dynamics CRM: Blogs 0 27.03.2012 02:11
crminthefield: Podcast and Overview: Microsoft Dynamics CRM 2011 Update Rollup 4 Blog bot Dynamics CRM: Blogs 0 24.09.2011 01:16
Microsoft Dynamics CRM Team Blog: Microsoft Dynamics CRM 2011 ~ Online Test Drive Guide Blog bot Dynamics CRM: Blogs 0 05.08.2011 20:13
Все о Microsoft Dynamics CRM: Как установить Microsoft Dynamics CRM 2011 Beta Blog bot Dynamics CRM: Blogs 0 31.10.2010 15:08
CRM DE LA CREME! Configuring Microsoft Dynamics CRM 4.0 for Internet-facing deployment Blog bot Dynamics CRM: Blogs 0 18.08.2009 11:05

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 07:11.