In this article , I am going to explain how to Create , Validate and Close Incident and Appointment.
For Better Understanding I divided this article in multiple part
(i) Create an incident
(ii) Create an appointment
(iii) Validate the Appointment state transition
(iv) Close the appointment
(v) Validate the Incident state transition.
(vi) Create the incident's resolution and Close the incident with the resolution.
(i) Create an incident
(ii) Create an appointment
(iii) Validate the Appointment state transition
(iv) Close the appointment
(v) Validate the Incident state transition.
(vi) Create the incident's resolution and Close the incident with the resolution.
Namespace need to include
using Microsoft.Crm.Sdk.Messages;
using Microsoft.Xrm.Sdk;
using Microsoft.Xrm.Sdk.Client;
Code to Create an incident
var incident = new Incident
{
CustomerId = new EntityReference(Account.EntityLogicalName, _accountId),
Title = "Sample Incident"
};
Guid _incidentId = _serviceProxy.Create(incident);
Code to Create an appointment
var appointment = new Appointment
{
ScheduledStart = DateTime.Now,
ScheduledEnd = DateTime.Now.Add(new TimeSpan(0, 30, 0)),
Subject = "Sample 30-minute Appointment",
RegardingObjectId = new EntityReference(Incident.EntityLogicalName,
_incidentId)
};
Guid _appointmentId = _serviceProxy.Create(appointment);
Code to Validate the Appointment state transition
var isAppointmentValidRequest = new IsValidStateTransitionRequest
{
Entity = new EntityReference(Appointment.EntityLogicalName, _incidentId),
NewState = "1", //Completed
NewStatus = 3 //Completed
};
var isAppointmentValidResponse =
(IsValidStateTransitionResponse)_serviceProxy.Execute(isAppointmentValidRequest);
Code to Close the appointment
var setAppointmentStateReq = new SetStateRequest
{
EntityMoniker = new EntityReference(Appointment.EntityLogicalName,
_appointmentId),
State = new OptionSetValue(1), //Completed
Status = new OptionSetValue(3) //Completed
};
_serviceProxy.Execute(setAppointmentStateReq);
Code to Validate the Incident state transition.
var isIncidentValidRequest = new IsValidStateTransitionRequest
{
Entity = new EntityReference(Incident.EntityLogicalName, _incidentId),
NewState = "1", //Resolver
NewStatus =5 //ProblemSolved
};
var isIncidentValidResponse =
(IsValidStateTransitionResponse)_serviceProxy.Execute(isIncidentValidRequest);
Code to Create the incident's resolution and Close the incident with the resolution
var incidentResolution = new IncidentResolution
{
Subject = "Resolved Sample Incident",
IncidentId = new EntityReference(Incident.EntityLogicalName, _incidentId)
};
// Close the incident with the resolution.
var closeIncidentRequest = new CloseIncidentRequest
{
IncidentResolution = incidentResolution,
Status = new OptionSetValue(5) //ProblemSolved
};
_serviceProxy.Execute(closeIncidentRequest);
Complete Source Code
using (OrganizationServiceProxy _serviceProxy = new OrganizationServiceProxy(
serverConfig.OrganizationUri,
serverConfig.HomeRealmUri,
serverConfig.Credentials,
serverConfig.DeviceCredentials))
{
_serviceProxy.ServiceConfiguration.CurrentServiceEndpoint.Behaviors.Add(
new ProxyTypesBehavior());
Guid _accountId = new Guid("ffbb6e3f-ccfe-4d84-90d9-421418b03a8e");
// Create an incident.
var incident = new Incident
{
CustomerId = new EntityReference(Account.EntityLogicalName, _accountId),
Title = "Sample Incident"
};
Guid _incidentId = _serviceProxy.Create(incident);
// Create a 30-minute appointment regarding the incident.
var appointment = new Appointment
{
ScheduledStart = DateTime.Now,
ScheduledEnd = DateTime.Now.Add(new TimeSpan(0, 30, 0)),
Subject = "Sample 30-minute Appointment",
RegardingObjectId = new EntityReference(Incident.EntityLogicalName,
_incidentId)
};
Guid _appointmentId = _serviceProxy.Create(appointment);
// Validate the Appointment state transition.
var isAppointmentValidRequest = new IsValidStateTransitionRequest
{
Entity = new EntityReference(Appointment.EntityLogicalName, _incidentId),
NewState = "1", //Completed
NewStatus = 3 //Completed
};
var isAppointmentValidResponse =
(IsValidStateTransitionResponse)_serviceProxy.Execute(isAppointmentValidRequest);
if (isAppointmentValidResponse.IsValid)
{
// Close the appointment.
var setAppointmentStateReq = new SetStateRequest
{
EntityMoniker = new EntityReference(Appointment.EntityLogicalName,
_appointmentId),
State = new OptionSetValue(1), //Completed
Status = new OptionSetValue(3) //Completed
};
_serviceProxy.Execute(setAppointmentStateReq);
}
// Validate the Incident state transition.
var isIncidentValidRequest = new IsValidStateTransitionRequest
{
Entity = new EntityReference(Incident.EntityLogicalName, _incidentId),
NewState = "1", //Resolver
NewStatus =5 //ProblemSolved
};
var isIncidentValidResponse =
(IsValidStateTransitionResponse)_serviceProxy.Execute(isIncidentValidRequest);
if (isIncidentValidResponse.IsValid)
{
// Create the incident's resolution.
var incidentResolution = new IncidentResolution
{
Subject = "Resolved Sample Incident",
IncidentId = new EntityReference(Incident.EntityLogicalName, _incidentId)
};
// Close the incident with the resolution.
var closeIncidentRequest = new CloseIncidentRequest
{
IncidentResolution = incidentResolution,
Status = new OptionSetValue(5) //ProblemSolved
};
_serviceProxy.Execute(closeIncidentRequest);
}
}
thnx
Reply Delete