Ich mache ein Update in crm mit ssis. Ich habe versucht, einige Fälle in crm basierend auf bestimmten Bedingungen zu schließen. Dies ist mein Beispielcode in public override void Input0_ProcessInputRow(Input0Buffer Row)
Methode.Wie Sie Fälle in crm 2011 programmgesteuert schließen
public override void Input0_ProcessInputRow(Input0Buffer Row)
{
// Create a Entity object of type 'case'
Entity caseEnt = new Entity("incident");
Entity incidentResolution= new Entity("incidentresolution");
incidentResolution.Attributes.Add("incidentid", new
EntityReference("incident", Row.DEVCaseGUID));
caseEnt["incidentid"] = Row.DEVCaseGUID;
//organizationservice.Update(caseEnt);
//Changes added here by //
EntityCollection collection= GetAssociatedActivities(new EntityReference("incident", Row.DEVCaseGUID))
foreach (Entity activity in collection.Entities)
{
CancelActivity(activity, organizationservice);
}
// Changes added here //
// Close the incident with the resolution.
var closeIncidentRequest = new CloseIncidentRequest
{
IncidentResolution = incidentResolution,
Status = new OptionSetValue(5)
};
organizationservice.Execute(closeIncidentRequest);
}
private EntityCollection GetAssociatedActivities(EntityReference regarding)
{
QueryExpression query = new QueryExpression { EntityName = "activitypointer", ColumnSet = new ColumnSet(new string[] { "activitytypecode" }) };
query.Criteria.AddCondition("regardingobjectid", ConditionOperator.Equal, regarding.Id);
query.Criteria.AddCondition("statecode", ConditionOperator.NotEqual, 1); //ignore completed
EntityCollection collection = organizationservice.RetrieveMultiple(query);
return collection
}
// Cancel an Activity
private static void CancelActivity(Entity entity, IOrganizationService service)
{
EntityReference moniker = new EntityReference();
if (entity.LogicalName == "activitypointer")
{
if (entity.Attributes.Contains("activityid") & entity.Attributes.Contains("activitytypecode"))
{
moniker.LogicalName = entity.Attributes["activitytypecode"].ToString();
moniker.Id = (Guid)entity.Attributes["activityid"];
SetStateRequest request = new SetStateRequest();
request.EntityMoniker = moniker;
request.State = new OptionSetValue(2);
request.Status = new OptionSetValue(-1);
SetStateResponse response = (SetStateResponse)service.Execute(request);
}
}
}
Row.DEVCaseGUID die GUID der Fall ist. Statuscode ist 5
für geschlossen. statecode ist 2
für gelöst.
Ich versuchte, diese example zu folgen, aber kein Erfolg. Oder gibt es einen einfachen Weg, dies zu erreichen?
In neueren CRMs können Sie das System konfigurieren, um automatisch alle geöffneten abbrechen Aktivität, wenn Sie einen Fall schließen. Gab es das 2011? Ich kann mich nicht erinnern. – Alex
Danke, werde das später versuchen, für alle damit verbundenen Aktivitäten zu diesem Fall, dann wie kann ich es schließen, wenn es nichts ausmacht, können Sie das Snippet teilen. – xChaax
@xChaax Meine Antwort aktualisiert, Code zum Schließen verwandter Aktivitäten hinzugefügt. –