Внутренние часы Microsoft Dynamics CRM (BD или IIS)?

У нас есть приложение, которое использует данные из Dynamics CRM и выполняет несколько запросов для получения данных после определенной даты и времени.

Нам важно знать, какие часы используют Dynamics CRM для установки даты для своих записей. Например, когда создается новая возможность, откуда берется дата создания?

Дата и время основаны на часах веб-сервера, на котором работает CRM, на SQL-сервере, на котором хранится база данных CRM, или на другом?


person Marcos    schedule 06.02.2017    source источник
comment
Вам нужно точно знать, как рассчитывается дата создания, например с точностью до миллисекунды? Или это вопрос больше о часовых поясах и хранении дат?   -  person James Wood    schedule 06.02.2017
comment
Мне интересно знать, как рассчитывается дата создания, с точностью до миллисекунды или секунды, как вы предложили. Даты хранятся в формате UTC в CRM, и мы всегда имеем дело с UTC в запросах, поэтому у нас нет проблем с часовыми поясами и т. Д.   -  person Marcos    schedule 06.02.2017


Ответы (4)


Я никогда не видел реальной документации по этому вопросу. Я могу сделать следующие выводы, глядя на трассировки SQL и некоторую декомпиляцию библиотек DLL сервера CRM.

Я не уверен, что существует единственный способ создания значений даты и времени в Dynamics CRM.

Например, существует хранимая процедура для создания WebResource, которая использует функцию SQL Server для получения времени utc. В этом случае время будет часовым временем сервера, на котором размещен SQL.

Это неверно для создания / обновления записей сущностей. В этом случае время передается как часть команды INSERT. Я не верю, что CRM сначала выполняет вызов, чтобы получить время SQL Server, поэтому на этот раз это время исходит от интерфейсного веб-сервера CRM (или асинхронного сервера, если операция создания / обновления выполняется асинхронно). .NET предоставляет Значение времени UTC, я не верю, что существует явное преобразование значений времени для заполнения этих значений при создании и обновлении. Есть явное действие для удаления части миллисекунд.

Если вы используете OverrideCreatedOn, тогда значение полностью зависит от вас (если оно находится в допустимом диапазоне CRM), но оно сократит миллисекунды.

person Nicknow    schedule 06.02.2017

Когда дело доходит до времени, Dynamics CRM прост: он просто использует свойство System.DateTime.Now, которое считывает встроенные часы сервера.

person Henk van Boeijen    schedule 06.02.2017
comment
Я думаю, что вы, вероятно, в основном правы, но: Какой сервер (при многоэтапном развертывании)? У вас есть ссылка? Почему не UtcNow? Как он учитывает переопределение созданного? - person James Wood; 06.02.2017

При запросе данных CRM кажется, что это только с точностью до секунды. Если вы создадите несколько записей в CRM (без переопределения createdon), а затем запросите их дату создания, вы получите значения, например (где я напечатал с помощью форматирования ToString("o") для стандарт ISO 8601):

2017-01-19T21:33:12.0000000Z
2017-01-19T21:27:02.0000000Z
2017-01-19T20:12:54.0000000Z

Также, похоже, есть открытый элемент CrmIdea для начала записи миллисекунд в этих типах временных меток .

person Matt Dearing    schedule 06.02.2017
comment
Спасибо за ответ, но мой вопрос в том, какие часы используют Dynamics CRM, IIS Server, DB Server или другой подход. - person Marcos; 06.02.2017
comment
Любопытно, почему это важно, независимо от того, какие часы он использует, он должен получать текущее время в формате UTC. Чтобы понять это, вам, вероятно, потребуется посмотреть на экземпляр CRM onprem и декомпилировать код и / или посмотреть на sprocs базы данных onprem. - person Matt Dearing; 07.02.2017

Dynamics CRM хранит дату и время на основе системных настроек. Однако, когда он хранится в базе данных CRM, сохраняет его как UTC + 0 на основе времени Windows Server для SQL Server.

person Gildon Opao    schedule 08.02.2017