Я решил разработать кастомную активность бизнес процесса для того, чтобы можно было задавать формат выводимой даты.
В качестве параметров активности передаются дата, которую необходимо отформатировать и формат, который должен быть получен на выходе:
using System;
using System.Text;
using System.Collections.Generic;
using System.Workflow.Activities;
using Microsoft.Crm.Workflow;
using System.Workflow.ComponentModel;
using Microsoft.Crm.Sdk;
namespace DateTimeFormatting
{
[CrmWorkflowActivity("Formats date time with required format", "Formatting Routines")]
public class FormatDateTime : SequenceActivity
{
protected override System.Workflow.ComponentModel.ActivityExecutionStatus Execute(System.Workflow.ComponentModel.ActivityExecutionContext executionContext)
{
string result = string.Empty;
if (!string.IsNullOrEmpty(DateFormat) && datetime != null)
{
result = DateTime.Parse(datetime.Value).ToString(DateFormat);
}
Result = result;
return ActivityExecutionStatus.Closed;
}
public static DependencyProperty DateFormatProperty = DependencyProperty.Register("DateFormat", typeof(string), typeof(FormatDateTime));
[CrmInput("Format of DateTime")]
public string DateFormat
{
get
{
return (string)base.GetValue(DateFormatProperty);
}
set
{
base.SetValue(DateFormatProperty, value);
}
}
public static DependencyProperty datetimeProperty = DependencyProperty.Register("datetime", typeof(CrmDateTime), typeof(FormatDateTime));
[CrmInput("DateTime to format")]
public CrmDateTime datetime
{
get
{
return (CrmDateTime)base.GetValue(datetimeProperty);
}
set
{
base.SetValue(datetimeProperty, value);
}
}
public static DependencyProperty ResultProperty = DependencyProperty.Register("Result", typeof(string), typeof(FormatDateTime));
[CrmOutput("Formatted DateTime")]
public string Result
{
get
{
return (string)base.GetValue(ResultProperty);
}
set
{
base.SetValue(ResultProperty, value);
}
}
}
}
Следующие скриншоты демонстируют каким образом можно использовать данную активность в бизнес процессах:
1. Вставьте эту активность в бизнес процесс:
2. Нажмите кнопку "Set Properties" чтобы установить дату и формат:
3. Заполните поля "Format of DateTime" и "DateTime to Format":
4. Добавьте в бизнес процесс какой-нибудь шаг, в которому будет использоваться результат форматирования (например отсылка письма):
Сохраните шаг, сохраните и опубликуйте бизнес процесс. Результат работы этого бизнес процесса:
Исходники:
Дата форматируется в зависимости от региональных параметров, указанных на вкладке "Список типов" окна настроек параметров CRM ("Параметры" - "Администрирование" - "Системные параметры").
ОтветитьУдалитьПо скриншотам видно, что стоит англоязычная локаль, поэтому и дата так форматируется. Если выбрать "Текущий формат - русский (Россия)", то будет "16.06.2010 12:15".
Если же не хочется менять все региональные параметры разом, можно для регионального профиля настроить разделители для даты, времени, денежных типов и т.п.
Спасибо большое, но я это знаю.
ОтветитьУдалитьКак не играйся с региональными настройками, а формат 16-Jun-10 - не добьёшщься. При помощи моего действия - запросто. Формат dd-MMM-yy.
А если необходимо вырезать только дату - без времени. Можно это как то в системе настроить?
ОтветитьУдалить