Будет создан кастомный шаг для бизнес процесса, который позволит получить доступ к этому объекту. Собственно код:
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. Для демонстрации я создан простой бизнес процесс по запросу:
Исходный код и готовую сборку Вы можете скачать тут.
Комментариев нет:
Отправить комментарий