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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 18.01.2016, 12:05   #1  
ajlewa is offline
ajlewa
Участник
 
11 / 10 (1) +
Регистрация: 10.08.2015
Не получается поставить даты в "0"
Добрый день,
Не совсем уверен, что выбрал правильную тему.
Скорее всего подобные вопросы поднимались ранее, но в поиске не нашел, так что прошу сильно не пинать, если что то было.

Суть Дела:
В СРМ есть дни рождения людей, записанны в беспорядочном формате, т.е. дата и время, время часто разное.
написал маленькое приложение, что бы исправить ситуацию:

Код:
using System;
using System.Collections.Generic;
using System.Globalization;
using Microsoft.Xrm.Client;
using Microsoft.Xrm.Client.Services;
using Microsoft.Xrm.Sdk;
using Microsoft.Xrm.Sdk.Query;

namespace Drop_Dates_To_Zero
{
    class Program
    {
        static void Main(string[] args)
        {
            var connection = CrmConnection.Parse("Url=http://crm/***/; Domain=***; Username=********; Password=********;");
            var service = new OrganizationService(connection);
            var context = new CrmOrganizationServiceContext(connection);
            int count = 0;

            List<Entity> AllPerson = GetAllAccount(service);

            foreach (var person in AllPerson)
            {
                if (person.Attributes.ContainsKey("birthdate"))
                {
                    var olddate = ((DateTime)person.Attributes["birthdate"]).AddHours(4).Date.ToString(CultureInfo.CurrentCulture);
                    (person.Attributes["birthdate"]) = DateTime.Parse(olddate);
                    context.Update(person);
                    context.SaveChanges();
                }
                count++;
                Console.Clear();
                Console.WriteLine("{0} out of {1} done!", count, AllPerson.Count);
            }

            Console.WriteLine("Ok!");
        }

        private static List<Entity> GetAllAccount(IOrganizationService service)
        {

            int i = 0;
            List<Entity> AllAccount = new List<Entity>();

            try
            {

                var _service = service;
                int fetchCount = 5000;
                int pageNumber = 1;
                List<Guid> dicacc = new List<Guid>();
                QueryExpression QE = new QueryExpression();
                QE.ColumnSet = new ColumnSet("contactid","fullname","birthdate");
                QE.EntityName = "contact";


                QE.PageInfo = new PagingInfo();
                QE.PageInfo.Count = fetchCount;
                QE.PageInfo.PageNumber = pageNumber;
                QE.PageInfo.PagingCookie = null;
                while (true)
                {
                    EntityCollection collections = _service.RetrieveMultiple(QE);
                    if (collections.Entities.Count > 0)
                    {

                        foreach (Entity e in collections.Entities)
                        {
                            i++;

                            AllAccount.Add(e);

                        }
                    }

                    if (collections.MoreRecords)
                    {
                        QE.PageInfo.PageNumber++;
                        QE.PageInfo.PagingCookie = collections.PagingCookie;
                    }
                    else
                    {
                        break;
                    }
                }
            }

            catch (Exception ex)
            {

            }
            return AllAccount;
        }

    }
}
приложение пробегает по всем датам, после чего делаю запрос в бд:
Код:
select top 10 birthdate
from FilteredContact
Where birthdate is not null
Вывод:

Код:
2008-06-01 00:00:00.000
2008-09-04 00:00:00.000
1971-01-18 01:00:00.000
1985-03-21 01:00:00.000
1972-07-22 00:00:00.000
1988-09-12 00:00:00.000
1988-04-01 00:00:00.000
1988-08-03 00:00:00.000
1978-02-27 01:00:00.000
1975-04-16 00:00:00.000
Подскажите в чём может быть причина, и как с этим бороться?
Старый 18.01.2016, 13:26   #2  
slivka_83 is offline
slivka_83
Консультант-джедай
Аватар для slivka_83
MCBMSS
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
1,683 / 374 (16) ++++++
Регистрация: 18.12.2008
Адрес: default city
А можно узнать чего Вы пытаетесь добиться? Что мешает скрыть элемент времени?
__________________
Крокодил, крокожу и буду крокодить.
Человек человеку - волк , а зомби зомби - зомби.
Экстремал и буду экстремать!
Блога
Старый 18.01.2016, 13:34   #3  
ajlewa is offline
ajlewa
Участник
 
11 / 10 (1) +
Регистрация: 10.08.2015
Сейчас, после нн-ого времени проведенного без результатов добился цели именно выгрузкой даты без времени, но хотелось бы какого то единообразия что-ли...
Старый 18.01.2016, 13:56   #4  
slivka_83 is offline
slivka_83
Консультант-джедай
Аватар для slivka_83
MCBMSS
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
1,683 / 374 (16) ++++++
Регистрация: 18.12.2008
Адрес: default city
Я спрашивал про бизнес цель? Если скрыть элемент времени, то пользователям будет все равно какое там значение.
__________________
Крокодил, крокожу и буду крокодить.
Человек человеку - волк , а зомби зомби - зомби.
Экстремал и буду экстремать!
Блога
Старый 19.01.2016, 12:35   #5  
ajlewa is offline
ajlewa
Участник
 
11 / 10 (1) +
Регистрация: 10.08.2015
Была необходимость импорта данных, реализовывали через SSIS, перед импортом необходимо было проверить на наличие уже существующих записей, для этого использовался лукап, и не сразу пришло в голову конвертировать дату-время в дату при выгрузке, но в итоге на этом остановились.

Но тем не менее, даже учитывая, что задача решена, по какой причине записываются даты с разным временем?
Специфика CRM или кривые руки?
Старый 19.01.2016, 12:40   #6  
slivka_83 is offline
slivka_83
Консультант-джедай
Аватар для slivka_83
MCBMSS
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
1,683 / 374 (16) ++++++
Регистрация: 18.12.2008
Адрес: default city
до 2016 версии все поля даты/время хранятся в БД в UTC формате. И абсолютно все со временем. То что время убирается из интерфейса это только визуальное отображение. В БД все равно имеется время.
Помимо этого при сохранении даты/времени в БД происходит приведение локального времени текущего пользователя к UTC формату. Т.е. из введенное даты/времени прибавляется или вычитается часовой пояс. А при запросе из БД дата/время снова приводится к локальному времени текущего пользователя.
Соответственно, в зависимости от настроек часового пояса разные пользователи могут видеть разную дату/время в одном поле.
__________________
Крокодил, крокожу и буду крокодить.
Человек человеку - волк , а зомби зомби - зомби.
Экстремал и буду экстремать!
Блога
Старый 23.01.2016, 01:40   #7  
magicandy is offline
magicandy
Участник
 
111 / 12 (1) ++
Регистрация: 15.07.2014
Цитата:
Сообщение от slivka_83 Посмотреть сообщение
до 2016 версии все поля даты/время хранятся в БД в UTC формате
А что-то изменилось в этой жизни? Я правда не знаю
Старый 23.01.2016, 14:15   #8  
a33ik is offline
a33ik
Чайный пьяница
Аватар для a33ik
MCP
MCBMSS
Злыдни
Соотечественники
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,243 / 896 (36) +++++++
Регистрация: 02.07.2008
Адрес: Greenville, SC
Цитата:
Сообщение от magicandy Посмотреть сообщение
А что-то изменилось в этой жизни? Я правда не знаю
Да. В появились TimeZone independent fields - https://technet.microsoft.com/en-us/...or=-2147217396
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством.

Подписывайтесь на мой блог, twitter и YouTube канал.
Пользуйтесь моим Ultimate Workflow Toolkit
За это сообщение автора поблагодарили: spectr (1).
Старый 28.01.2016, 12:46   #9  
Eugene.Ostroukhov is offline
Eugene.Ostroukhov
Участник
 
149 / 11 (1) +
Регистрация: 22.02.2013
Цитата:
Сообщение от ajlewa Посмотреть сообщение
Но тем не менее, даже учитывая, что задача решена, по какой причине записываются даты с разным временем?
Специфика CRM или кривые руки?
как уже писалось выше - в базе дата-время хранятся в UTC-формате
Вы в своей "консольке" безусловно прибавляете к дате 4 часа (она кстати через crm service выгружается тоже в UTC значении)

при этом: разница между вашим часовым поясом (москва?) и UTC+0 изза перевода времени на зимнее\летнее может варироваться от 3 до 4 часов

в filtered-views вызывается функция fn_UtcToLocalTime(datetime), которая приводит ко времени пользователя из-под кооторого выполняется sql script

и дотнет в UtcToLocalTime и срм-ная sql-функция умеют правильно определять автоматически разницу смещения в зависимости от перевода часов.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
crminthefield: Customers' choices... The most popular "Dynamics CRM in the Field" technical blog posts from Premier Field Engineering! Blog bot Dynamics CRM: Blogs 0 20.05.2015 01:12
jodonnell: Reps Make Better Sales Calls Decisions with Mobile App for "CRM Call Planner" Blog bot Dynamics CRM: Blogs 0 12.04.2013 00:15
Ошибка JavaScript "Ошибка произошла при получении даты", CRM 4.0 Буденый Dynamics CRM: Администрирование 0 16.10.2012 12:25
Как удалить рабочую группу или изменить у неё подразделение guenberg Dynamics CRM: Администрирование 11 06.06.2010 22:47
Microsoft Dynamics CRM Team Blog: Lost: Beware of the "Others" Blog bot Dynamics CRM: Blogs 0 01.06.2010 21:05

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

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

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