Показать сообщение отдельно
Старый 18.03.2009, 14:04   #4  
maxim_ufa is offline
maxim_ufa
Участник
 
27 / 16 (1) ++
Регистрация: 03.07.2008
Есть универсальное воркфлоу, возможно уже и обсуждалось на форуме, извиняйте, если повторюсь (решение из 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=
Теперь вроде все.
Миниатюры
Нажмите на изображение для увеличения
Название: DemoURL.GIF
Просмотров: 612
Размер:	18.8 Кб
ID:	4410  
За это сообщение автора поблагодарили: mistah (1).