четверг, 11 февраля 2010 г.

Кастомный шаг бизнес процесса, который позволяет получить запись закрытия возможной сделки основываясь на возможной сделке.

Все данные, которые вы вводите при закрытии возможной сделки хранятся в отдельном объекте и недоступны из бизнес процесса. Я попытаюсь исправить это.



Будет создан кастомный шаг для бизнес процесса, который позволит получить доступ к этому объекту. Собственно код:

using System;
using System.Collections.Generic;
using System.Text;
using System.Workflow.Activities;
using Microsoft.Crm.Workflow;
using System.Workflow.ComponentModel;
using Microsoft.Crm.Sdk;
using Microsoft.Crm.SdkTypeProxy;
using Microsoft.Crm.Sdk.Query;

namespace OpportunityProductPlugin
{
[CrmWorkflowActivity("Get opportunity close record", "Opportunity utiles")]
public class OpportunityCloseGetter : SequenceActivity
{
protected override ActivityExecutionStatus Execute(ActivityExecutionContext executionContext)
{
if (Opportunity != null)
{
IContextService contextService = (IContextService)executionContext.GetService(typeof(IContextService));
IWorkflowContext workflowContext = contextService.Context;
ICrmService crmservice = workflowContext.CreateCrmService();

//Building the query to get opportunity close record
QueryByAttribute query = new QueryByAttribute();
query.Attributes = new string[] { "opportunityid" };
query.ColumnSet = new AllColumns();
query.EntityName = EntityName.opportunityclose.ToString();
query.Values = new object[] { Opportunity.Value };

//Retrieving the data
List<BusinessEntity> entities = crmservice.RetrieveMultiple(query).BusinessEntities;

//Check that opportunity close record exists
if (entities.Count == 1)
{
//Filling output lookup
OpportunityClose = new Lookup(EntityName.opportunityclose.ToString(),((opportunityclose)entities[0]).activityid.Value);
}
}

return ActivityExecutionStatus.Closed;
}

public static DependencyProperty OpportunityProperty = DependencyProperty.Register("Opportunity", typeof(Lookup), typeof(OpportunityCloseGetter));

[CrmInput("Opportunity")]
[CrmReferenceTarget("opportunity")]
public Lookup Opportunity
{
get
{
return (Lookup)base.GetValue(OpportunityProperty);
}
set
{
base.SetValue(OpportunityProperty, value);
}
}

public static DependencyProperty OpportunityCloseProperty = DependencyProperty.Register("OpportunityClose", typeof(Lookup), typeof(OpportunityCloseGetter));

[CrmOutput("OpportunityClose")]
[CrmReferenceTarget("opportunityclose")]
public Lookup OpportunityClose
{
get
{
return (Lookup)base.GetValue(OpportunityCloseProperty);
}
set
{
base.SetValue(OpportunityCloseProperty, value);
}
}

}
}


После компиляции проекта необходимо выполнить его регистрацию в системе при помощи PluginRegistrationTool. Для демонстрации я создан простой бизнес процесс по запросу:










Исходный код и готовую сборку Вы можете скачать тут.

Комментариев нет:

Отправить комментарий