Есть универсальное воркфлоу, возможно уже и обсуждалось на форуме, извиняйте, если повторюсь (решение из Working With Microsoft Dynamics CRM 4.0)
Создаем workflow activity library проект под .Net Framework 3 со следующим кодом
Код:
using System;
using System.ComponentModel;
using System.ComponentModel.Design;
using System.Collections;
using System.Drawing;
using System.Workflow.ComponentModel;
using System.Workflow.ComponentModel.Design;
using System.Workflow.ComponentModel.Compiler;
using System.Workflow.ComponentModel.Serialization;
using System.Workflow.Runtime;
using System.Workflow.Activities;
using System.Workflow.Activities.Rules;
using Microsoft.Crm.Sdk;
using Microsoft.Crm.Sdk.Query;
using Microsoft.Crm.SdkTypeProxy;
using Microsoft.Crm.Workflow;
namespace WorkingWithDynamicsCrm4.Workflow
{
[CrmWorkflowActivity("Url Builder", "Utilities")]
public partial class UrlBuilder : SequenceActivity
{
// Override this method with our custom logic
protected override ActivityExecutionStatus Execute(ActivityExecutionContext executionContext)
{
//Get context
IContextService contextService = (IContextService)executionContext.GetService(typeof(IContextService));
IWorkflowContext ctx = contextService.Context;
// Get the record id
Guid id = ctx.PrimaryEntityId;
// Configure the Url and pass back to the output parameter
string fullUrl = this.RecordUrl = this.Url + id;
this.RecordUrl = string.Format(@"<a href=""{0}"">{0}</a>", fullUrl);
return base.Execute(executionContext);
}
// Allow the user to set the Url wiht this input parameter
public static DependencyProperty UrlProperty = DependencyProperty.Register("Url", typeof(string), typeof(UrlBuilder));
[CrmInput("Url")]
public string Url
{
get
{
return (string)base.GetValue(UrlProperty);
}
set
{
base.SetValue(UrlProperty, value);
}
}
// Returns the final record Url to the workflow rule for use
public static DependencyProperty RecordUrlProperty = DependencyProperty.Register("RecordUrl", typeof(string), typeof(UrlBuilder));
[CrmOutput("RecordUrl")]
public string RecordUrl
{
get
{
return (string)base.GetValue(RecordUrlProperty);
}
set
{
base.SetValue(RecordUrlProperty, value);
}
}
}
}
При регистрации используем
Код:
<Solution SourceType="0" Assembly="\Source\WorkingWithDynamicsCrm4.Workflow.dll">
<!--
Tag: WorkflowTypes
Description: Container for one or more WorkflowType tags. -->
<WorkflowTypes>
<WorkflowType TypeName="WorkingWithDynamicsCrm4.Workflow.UrlBuilder" FriendlyName="Lead Url Builder"/>
</WorkflowTypes>
</Solution>
Затем для любой сущности в workflow добавляем шаг, где указываем часть адреса для этой сущности. Например, для заказа это будет выглядеть следующим образом:
Код:
http://crmserver:5555/demo/sfa/salesorder/edit.aspx?id=
А в workflow это будет выглядеть (см.вложение)
Чтобы узнать эту часть адреса, необходимо открыть какую-либо уже созданную такую же сущность, жмем Ctrl+N и смотрим в адресной строке нужную нам инфу.
Вроде бы все)
Для кастомных сущностей по умолчанию:
Код:
http://crmserver:5555/demo/userdefined/edit.aspx?id={A87E0C01-AB13-DE11-907F-003048749F89}&etc=10000#
Но в workflow нужно писать:
Код:
http://crmserver:5555/demo/userdefined/edit.aspx?etc=10000&id=
Теперь вроде все.