04.10.2011, 11:50 | #1 |
Участник
|
Определение давности заказа (CRM2011)
Коллеги, добрый день!
Подскажите, пожалуйста, по такому вопросу: мне необходимо определить давность заказа в месяцах (Текущая дата - дата создания заказа). Для этого в форму заказа добавлено поле orderAge. C определением текущего месяца вроде все ясно. Подскажите, как получить значение даты заказа и для какого события регистрировать плагин. Заранее спасибо! П.С. CRM2011, ниже приведенный код использовал для Retrieve, Pre-operation. using System; using System.Collections.Generic; using System.Linq; using System.Text; // Microsoft Dynamics CRM namespace(s) using Microsoft.Xrm.Sdk; using System.ServiceModel; using Microsoft.Xrm.Sdk.Query; namespace CRMTestPlugIn { public class TestPlugIn : IPlugin { public void Execute(IServiceProvider serviceProvider) { // Obtain the execution context from the service provider. Microsoft.Xrm.Sdk.IPluginExecutionContext context = (Microsoft.Xrm.Sdk.IPluginExecutionContext) serviceProvider.GetService(typeof(Microsoft.Xrm.Sdk.IPluginExecutionContext)); if (context.Depth == 1) { IOrganizationServiceFactory serviceFactory = (IOrganizationServiceFactory)serviceProvider.GetService(typeof(IOrganizationServiceFactory)); IOrganizationService service = serviceFactory.CreateOrganizationService(context.UserId); // Obtain the target entity from the input parmameters. EntityReference entity = (EntityReference)context.InputParameters["Target"]; //OrderAge ColumnSet cols = new ColumnSet(new String[] { "new_orderage"}); var order = service.Retrieve("salesorder", entity.Id, cols); if (order != null) { if (order.Attributes.Contains("new_orderage") == false) { var todayMonth = DateTime.Today.Month + DateTime.Today.Year * 12; order.Attributes.Add("new_orderage", todayMonth.ToString()); } else { var todayMonth = DateTime.Today.Month + DateTime.Today.Year * 12; order["new_orderage"] = todayMonth.ToString(); } service.Update(order); } } } }//end class }//end name space |
|
04.10.2011, 12:46 | #2 |
Moderator
|
Цитата:
Сообщение от andrey.
давность заказа в месяцах (Текущая дата - дата создания заказа). Подскажите, как получить значение даты заказа и для какого события регистрировать плагин.
Код: var todayMonth = DateTime.Today.Month + DateTime.Today.Year * 12; order.Attributes.Add("new_orderage", todayMonth.ToString()); } else { var todayMonth = DateTime.Today.Month + DateTime.Today.Year * 12; order["new_orderage"] = todayMonth.ToString(); } Код: DateTime today = DateTime.Today; DateTime orderDate = order["CreatedOn"]; TimeSpan age = today - orderDate; int months = age.TotalDays / 30; Что касается события на которое регистрировать плагин, то тут уж совсем не ясно что вам нужно! Вы хотите чтобы это поле отображалось в списках и на формах или хранилось в системе? Ввиду того, что оно по своей природе вычисляемое, я бы вообще написал сервис, который раз в месяц будет обновлять таблицу заказов, причем через SQL!
__________________
http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия. MS Certified Dirty Magic Professional |
|
04.10.2011, 13:32 | #3 |
Участник
|
Артем,
давность заказа я собирался вычислять как ColumnSet cols1 = new ColumnSet(new String[] { "new_orderage", "createdon"}); var order1 = service.Retrieve("salesorder", entity.Id, cols1); if (order1 != null) { if (order1.Attributes.Contains("new_orderage") == false) { var todayMonth = DateTime.Today.Month + DateTime.Today.Year * 12; var createdMonth = ((DateTime)entityObject.Attributes["createdon"]).Month+ ((DateTime)entityObject.Attributes["createdon"]).Year*12; var MonthDif = todayMonth - createdMonth ; order1.Attributes.Add("new_orderage", MonthDif.ToString()); } else { var todayMonth = DateTime.Today.Month + DateTime.Today.Year * 12; var createdMonth = ((DateTime)entityObject.Attributes["createdon"]).Month+ ((DateTime)entityObject.Attributes["createdon"]).Year*12; var MonthDif = todayMonth - createdMonth ; order1["new_orderage"] = createdMonth.ToString(); } service.Update(order1); В исходном посте приводил пример для вычисления текущего месяца. Проблема у меня была с вычислением месяца для даты заказа. Попробую последовать Вашему совету. Спасибо! |
|
04.10.2011, 13:59 | #4 |
Moderator
|
Не уверен, что я вам чем-то помог, но пожалуйста.
__________________
http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия. MS Certified Dirty Magic Professional |
|
04.10.2011, 14:12 | #5 |
Участник
|
Я думал использовать Workflow для пересчета давности заказов по расписанию, но, видимо, хранимую процедуру будет использовать проще и логичнее.
|
|
04.10.2011, 14:14 | #6 |
Чайный пьяница
|
И ансапортнее. Советовал бы написать внешний сервис для выполнения этого пересчёта через вебсервисы. Понятно, что не будет работать для закрытых ордеров, но зато всё чистенько.
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством. Подписывайтесь на мой блог, twitter и YouTube канал. Пользуйтесь моим Ultimate Workflow Toolkit |
|
04.10.2011, 14:25 | #7 |
Участник
|
Ок, попробую посмотреть оба варианта. Спасибо!
|
|