|
|
#1 |
|
Участник
|
Incident Resolution In CRM Online 2013
Коллеги, добрый вечер!
Давно не писал под СРМ, хотелось бы узнать какое решение выбрать. Пытаемся внедрить ITIL, используем базовую сущность - Обращение (Incident). Добавил три кастомных поля: Факт. реакция, Дата Завершения и Затраченное время. Так вот, js заполняю поле Факт. реакция, а дату Завершения и Затраченное время устанавливаю в процессе закрытия обращения плагином
X++: using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Xrm.Sdk;
using Microsoft.Crm.Sdk.Messages;
using Microsoft.Xrm.Sdk.Query;
using System.ServiceModel.Description;
using System.ServiceModel;
using System.Globalization;
namespace AmicaPackage.SetCaseDurationPlugin
{
public class SetFactDuration : IPlugin
{
//Resolved
public readonly int problemResolved = 5;
public readonly int infoGranted = 1000;
public void Execute(IServiceProvider ServiceProvider)
{
IPluginExecutionContext Context = (IPluginExecutionContext)ServiceProvider.GetService(typeof(IPluginExecutionContext));
IOrganizationServiceFactory ServiceFactory = (IOrganizationServiceFactory)ServiceProvider.GetService(typeof(IOrganizationServiceFactory));
IOrganizationService Service = ServiceFactory.CreateOrganizationService(Context.UserId);
ITracingService tracingService = (ITracingService)ServiceProvider.GetService(typeof(ITracingService));
if (Context.PostEntityImages.Contains("PostImage") && Context.PostEntityImages["PostImage"] is Entity)
{
if (Context.Depth > 1) return;
Entity incident = (Entity)Context.PostEntityImages["PostImage"];
var startDate = incident.GetAttributeValue<DateTime>("new_factreaction");
var dueDate = DateTime.Now;
var statusCode = ((OptionSetValue)incident["statuscode"]).Value;
if (statusCode == problemResolved || statusCode == infoGranted)
{
if (startDate != null)
{
var minutes = Math.Abs(Math.Round(((startDate - dueDate).TotalMinutes), 2));
incident.Attributes.Add("new_facttime", dueDate);
incident.Attributes.Add("new_duedate", dueDate);
incident.Attributes.Add("new_timediff", minutes);
}
}
Service.Update(incident);
}
}
}
}Как правильно апдейтить поля после завершения кейса? Последний раз редактировалось GetLucky; 22.05.2015 в 00:42. |
|
|
|
|
|