ssis를 사용하여 crm에서 일부 업데이트를 수행하고 있습니다. 나는 특정 조건에 따라 crm에서 몇 가지 사례를 닫으려고했다. 이것은 public override void Input0_ProcessInputRow(Input0Buffer Row)
메소드의 샘플 코드입니다. 2011 년 crm에서 사례를 프로그래밍 방식으로 닫는 방법
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);
}
}
}
는 케이스의 GUID Row.DEVCaseGUID이다. 상태 코드은 폐쇄에 대해
5
입니다.
상태 코드은 해결 된 경우
2
입니다.
나는이 example을 시도했지만 성공하지 못했습니다. 아니면 이것을 달성 할 수있는 간단한 방법이 있습니까?
을 관련 활동을 닫는 코드를 추가하면 자동으로 열려을 취소하도록 시스템을 구성 할 수 있습니다 사례를 닫을 때의 활동 2011 년에도 존재 했습니까? 나는 기억이 안 나. – Alex
감사합니다. 나중에이 작업을 수행해보십시오. 관련 사건에 대한 모든 관련 활동에 대해, 어떻게 닫을 수 있습니까? 괜찮 으면 스 니펫을 공유 할 수 있습니까? – xChaax
@xChaax 관련 답변을 닫기위한 내 답변이 업데이트되었습니다. –