私はssisを使用してcrmでいくつかの更新を行っています。私は、特定の条件に基づいてcrmのいくつかのケースを閉じようとしました。これはpublic override void Input0_ProcessInputRow(Input0Buffer Row)
メソッドのサンプルコードです。プログラムでcrm 2011のケースを閉じるには
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関連する活動を終了するためのコードを追加しました。 –