AXForum  
Go Back   AXForum > Microsoft Dynamics CRM > Dynamics CRM: Разработка
All
Forgotten Your Password?
Register Forum Rules FAQ Members List Today's Posts Search

 
 
Thread Tools Search this Thread Display Modes
Old 04.10.2011, 11:50   #1  
andrey. is offline
andrey.
Участник
 
7 / 10 (1) +
Join Date: 04.10.2011
Определение давности заказа (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
Old 04.10.2011, 12:46   #2  
Артем Enot Грунин is offline
Артем Enot Грунин
Moderator
Артем Enot Грунин's Avatar
MCBMSS
Злыдни
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,912 / 623 (28) +++++++
Join Date: 16.08.2007
Location: Пермь!
Blog Entries: 151
Quote:
Originally Posted by andrey. View Post
давность заказа в месяцах (Текущая дата - дата создания заказа). Подскажите, как получить значение даты заказа и для какого события регистрировать плагин.

Code:
                    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();
                    }
Если не вдаваться в вопрос "зачем вам это?" то возраст заказа явно должен вычисляться по иной формуле. Что-то вроде

Code:
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
Old 04.10.2011, 13:32   #3  
andrey. is offline
andrey.
Участник
 
7 / 10 (1) +
Join Date: 04.10.2011
Артем,
давность заказа я собирался вычислять как

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);

В исходном посте приводил пример для вычисления текущего месяца. Проблема у меня была с вычислением месяца для даты заказа.

Попробую последовать Вашему совету. Спасибо!
Old 04.10.2011, 13:59   #4  
Артем Enot Грунин is offline
Артем Enot Грунин
Moderator
Артем Enot Грунин's Avatar
MCBMSS
Злыдни
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,912 / 623 (28) +++++++
Join Date: 16.08.2007
Location: Пермь!
Blog Entries: 151
Не уверен, что я вам чем-то помог, но пожалуйста.
__________________
http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия.

MS Certified Dirty Magic Professional
Old 04.10.2011, 14:12   #5  
andrey. is offline
andrey.
Участник
 
7 / 10 (1) +
Join Date: 04.10.2011
Я думал использовать Workflow для пересчета давности заказов по расписанию, но, видимо, хранимую процедуру будет использовать проще и логичнее.
Old 04.10.2011, 14:14   #6  
a33ik is offline
a33ik
Чайный пьяница
a33ik's Avatar
MCP
MCBMSS
Злыдни
Соотечественники
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,243 / 896 (36) +++++++
Join Date: 02.07.2008
Location: Greenville, SC
Quote:
Originally Posted by andrey. View Post
Я думал использовать Workflow для пересчета давности заказов по расписанию, но, видимо, хранимую процедуру будет использовать проще и логичнее.
И ансапортнее. Советовал бы написать внешний сервис для выполнения этого пересчёта через вебсервисы. Понятно, что не будет работать для закрытых ордеров, но зато всё чистенько.
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством.

Подписывайтесь на мой блог, twitter и YouTube канал.
Пользуйтесь моим Ultimate Workflow Toolkit
Old 04.10.2011, 14:25   #7  
andrey. is offline
andrey.
Участник
 
7 / 10 (1) +
Join Date: 04.10.2011
Ок, попробую посмотреть оба варианта. Спасибо!
 

Similar Threads
Thread Thread Starter Forum Replies Last Post
Microsoft CRM: Dynamics CRM2011 outlook client features Blog bot Dynamics CRM: Blogs 0 04.12.2010 14:11
Microsoft CRM: CRM2011 new Features Blog bot Dynamics CRM: Blogs 0 22.11.2010 14:11
Плагин на создании Заказа Krom Dynamics CRM: Разработка 4 04.08.2010 14:48
Отправка e-mail из сохраненного заказа с данными об организации и продуктами из заказа datfi Dynamics CRM: Разработка 27 14.09.2009 10:56
Отлавливание смены цены заказа в salesorderdetail ZooY Dynamics CRM: Разработка 6 10.09.2009 15:05

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Forum Jump

Рейтинг@Mail.ru
All times are GMT +3. The time now is 04:35.
Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Contacts E-mail, Advertising.