AXForum  
Вернуться   AXForum > Microsoft Dynamics CRM > Dynamics CRM: Разработка
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 31.03.2008, 13:14   #1  
zhenek is offline
zhenek
Участник
 
133 / 10 (1) +
Регистрация: 01.02.2007
? Создание пользовательской конструкции бизнес-процесса...
Подскажите, что не так, почему Workflow Manager ругается когда я пытаюсь прикрутить свой dll, пишет файл конфигурации неправильный, либо к нему нет доступа.
Делаю всё как в книжке написано:
1. Создал класс с кодом:
Код:
using System;
using System.Collections.Generic;
using System.Text;
using System.Web.Services;
using WorkingWithCrm.Workflow.CrmSdk;
using System.Net;

namespace WorkingWithCrm.Workflow
{
    public class Incident
    {
        public Incident() {}

        public void CreateCaseFromEmail(Guid ActivityId, string Subject, string EmailAddress, string Description)
        {
            Guid defaultContactId = new Guid("97C0AE0F-DD6C-DC11-88DB-001109412F09");
            Guid defaultOwnerId = new Guid("1DDB171D-19B1-DB11-989B-001109412F09");
            Guid serviceUserId = new Guid("1DDB171D-19B1-DB11-989B-001109412F09");

            CrmService service = new CrmService();
            service.Credentials = new NetworkCredential("CRMUSER", "***", "ROGAIKOPITA");

            service.CallerIdValue = new CallerId();
            service.CallerIdValue.CallerGuid = serviceUserId;

            //Attempt to retrieve a contact record from the e-mail, usibg QueryByAttribute class
            ColumnSet cols = new ColumnSet();
            cols.Attributes = new string[] { "contactid" };

            QueryByAttribute query = new QueryByAttribute();
            query.ColumnSet = cols;
            query.EntityName = EntityName.contact.ToString();
            //The query will retrieve all contacts who match this e-mail address
            query.Attributes = new string[] { "emailaddress1" };
            query.Values = new string[] { EmailAddress };
            //Execute the retrieval
            BusinessEntityCollection retrieved = service.RetrieveMultiple(query);

            //if we find a match, use the first one we find. Otherwise, leave the default
            Guid contactId = defaultContactId;
            if (retrieved.BusinessEntities.Length > 0)
            {
                contact oContact = new contact();
                oContact = (contact)retrieved.BusinessEntities[0];
                contactId = oContact.contactid.Value;
            }

            incident oIncident = new incident();
            oIncident.title = Subject;
            oIncident.description = Description;
            Customer customerId = new Customer();
            customerId.Value = contactId;
            customerId.type = EntityName.contact.ToString();
            oIncident.customerid = customerId;

            //set the owner to be passed in queue
            oIncident.ownerid = new Owner();
            oIncident.ownerid.Value = defaultOwnerId;
            oIncident.ownerid.type = EntityName.systemuser.ToString();

            try
            {
                //create the case
                Guid incidentId = service.Create(oIncident);

                //set the regarding value of the E-mail activity to our new incident ID
                email oEmail = new email();

                Lookup regarding = new Lookup();
                regarding.Value = incidentId;
                regarding.type = EntityName.incident.ToString();
                oEmail.regardingobjectid = regarding;

                oEmail.activityid = new Key();
                oEmail.activityid.Value = ActivityId;

                service.Update(oEmail);
            }
            catch (System.Web.Services.Protocols.SoapException ex)
            {
                //handle error
            }
        }
    }
}
сгенерировал dll
2. выполнил команды на сервере net stop mscrmworkflowservice и iisreset
3. изменил файл конфигурации workflow.config
Код:
<workflow.config xmlns="http://microsoft.com/mscrm/workflow/" allowusingnedassemblies="true">
    <methods>
        <method name="Add date and time"
            assembly="Microsoft.Crm.Platform.WorkflowAssembly.dll" 
            typename="Microsoft.Crm.Platform.Workflow.BuildIn" 
            methodname="AddDateTime"
            group="Date and time functions">
            <parameter name="Date and Time" datatype="datetime"/>
            <parameter name="Years" datatype="integer" default="0"/>
            <parameter name="Months" datatype="integer" default="0"/>
            <parameter name="Days" datatype="integer" default="0"/>
            <parameter name="Hours" datatype="integer" default="0"/>
            <parameter name="Minutes" datatype="integer" default="0"/>
            <result datatype="datetime"/>
        </method>
        <method name="Subtract date and time"
            assembly="Microsoft.Crm.Platform.WorkflowAssembly.dll" 
            typename="Microsoft.Crm.Platform.Workflow.BuildIn" 
            methodname="SubtractDateTime"
            group="Date and time functions">
            <parameter name="Date and Time" datatype="datetime"/>
            <parameter name="Years" datatype="integer" default="0"/>
            <parameter name="Months" datatype="integer" default="0"/>
            <parameter name="Days" datatype="integer" default="0"/>
            <parameter name="Hours" datatype="integer" default="0"/>
            <parameter name="Minutes" datatype="integer" default="0"/>
            <result datatype="datetime"/>
        </method>
        <method name="Execute" 
            assembly="Microsoft.Crm.Platform.BulkOperationControlAssembly.dll" 
            typename="BulkOperationControlService" 
            methodname="Execute" 
            group="BulkOperationControl" 
            isvisible="0"
            timeout="7200">
            <parameter name="Caller" datatype="caller"/>
            <parameter name="BulkOperationId" datatype="lookup" entityname="bulkoperation"/>
            <result datatype="string"/>
        </method>
    <method name="Create Case From Email" 
            assebly="WorkingWithCrm.Workflow.dll"
            typename="WorkingWithCrm.Workflow.Incident"
            methodname="CreateCaseFromEmail"
            group="Custom Assemblies">
      <parameter name="ActivityId" datatype="lookup" entityname="email" />
      <parameter name="Subject" datatype="string" />
      <parameter name="EmailAddress" datatype="string" />
      <parameter name="Description" datatype="string" />
    </method>

  </methods>
</workflow.config>
4. запустил службу net start mscrmworkflowservice
и когда запускаю workflow manager выскакивает вышеуказанная ошибка :-(
если вернуть на место старый файл workflow.config то workflow manager вновь нормально запускается

стоит CRM 3.0
создаю dll в VS2005 framework 2.0 (может надо 1.1?)
не явялюсь администратором сервера, но есть права на чтение/запись в нужную папку и на запуск команд (может надо чтобы workflow.config редактировал админ?)
помогите пожалуйста разобраться, что я делаю неправильно

Последний раз редактировалось zhenek; 31.03.2008 в 13:45.
Старый 31.03.2008, 16:40   #2  
tatra is offline
tatra
Участник
 
229 / 11 (1) +
Регистрация: 21.09.2007
Адрес: Самара
Да, во первых, для работы с CRM 3.0 нужно использовать VS2003 (Framework 1.1)
И еще - возможно Dll-кам нужно будет дать права для NETWORK SERVICE
Старый 31.03.2008, 21:35   #3  
Артем Enot Грунин is offline
Артем Enot Грунин
Moderator
Аватар для Артем Enot Грунин
MCBMSS
Злыдни
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,912 / 623 (28) +++++++
Регистрация: 16.08.2007
Адрес: Пермь!
Записей в блоге: 151
Полностью согласен с предыдущим оратором! А еще рекомендую конфиги писать в той же студии и в соответствии со схемой - меньше вероятность накосячить.
__________________
http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия.

MS Certified Dirty Magic Professional
Старый 01.04.2008, 14:36   #4  
zhenek is offline
zhenek
Участник
 
133 / 10 (1) +
Регистрация: 01.02.2007
ну со вторым пунктом разобраться можно, а вот первый - это просто задница какая-то. Неужели microsoft выпустив VS 2005 и Framework 2 не подумал о том как писать для его же детища пользовательские конструкции.
У меня такой вопрос, получиться ли делать конструкции в VS 2005 но со framework 1.1? Потому что я понятия не имею где мне щас добыть VS 2003
Старый 01.04.2008, 15:14   #5  
tatra is offline
tatra
Участник
 
229 / 11 (1) +
Регистрация: 21.09.2007
Адрес: Самара
Увы....
Старый 01.04.2008, 15:16   #6  
tatra is offline
tatra
Участник
 
229 / 11 (1) +
Регистрация: 21.09.2007
Адрес: Самара
К сожалению Framework 1.1 можно сделать только до VS2003
Старый 01.04.2008, 15:43   #7  
zhenek is offline
zhenek
Участник
 
133 / 10 (1) +
Регистрация: 01.02.2007
мм-да, приплыли ...
что ж буду искать эту самую 2003 студию

А с 4-ым CRM такая же беда? или в нем уже можно писать из VS2005 + Framework 2?
Старый 01.04.2008, 15:52   #8  
ShurikEv is offline
ShurikEv
CRM
 
213 / 28 (1) +++
Регистрация: 25.04.2006
Адрес: г. Новосибирск
В ней уже можно 2005 студию использовать. Или даже 2008
__________________
MS CRM 3.0/4.0
Sharepoint 2003, MOSS 2007/2010
Старый 02.04.2008, 08:35   #9  
Артем Enot Грунин is offline
Артем Enot Грунин
Moderator
Аватар для Артем Enot Грунин
MCBMSS
Злыдни
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,912 / 623 (28) +++++++
Регистрация: 16.08.2007
Адрес: Пермь!
Записей в блоге: 151
А вот фреймворк лучше 3й использовать.
__________________
http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия.

MS Certified Dirty Magic Professional
Старый 23.05.2008, 14:14   #10  
zhenek is offline
zhenek
Участник
 
133 / 10 (1) +
Регистрация: 01.02.2007
Сделал все как советовали, наконец-то достал MS VS 2003, снес с компа 2-ой фрейворк, поставил 2003 студию, набросал ещё более простой пример пользовательской конструкции, только чтобы провести эксперимент развертывания:
Код:
using System;
using System.Web.Services;
using WorkingWithCrm.CrmSdk;
using System.Net;

namespace WorkingWithCrm
{
    public class TestExpl
    {
        public TestExpl()
        {
        }

        public void TestMethod(Guid ContactId)
        {
            CrmService service = new CrmService();
            service.Credentials = new NetworkCredential("user", "password", "DOMAIN");

            service.CallerIdValue = new CallerId();
            service.CallerIdValue.CallerGuid = new Guid("1DDB171D-19B1-DB11-989B-001109412F09");

            contact oContact = new contact();
            ColumnSet csCols = new ColumnSet();
            csCols.Attributes = new string[] {"contactid", "pager"};
            oContact = (contact)service.Retrieve("contact", ContactId, csCols);

            oContact.pager = "unknown";
            service.Update(oContact);
        }
    }
}
обновил файл workflow.config
Код:
<workflow.config xmlns="http://microsoft.com/mscrm/workflow/" allowusingnedassemblies="true">
    <methods>
        <method name="Add date and time"
            assembly="Microsoft.Crm.Platform.WorkflowAssembly.dll" 
            typename="Microsoft.Crm.Platform.Workflow.BuildIn" 
            methodname="AddDateTime"
            group="Date and time functions">
            <parameter name="Date and Time" datatype="datetime"/>
            <parameter name="Years" datatype="integer" default="0"/>
            <parameter name="Months" datatype="integer" default="0"/>
            <parameter name="Days" datatype="integer" default="0"/>
            <parameter name="Hours" datatype="integer" default="0"/>
            <parameter name="Minutes" datatype="integer" default="0"/>
            <result datatype="datetime"/>
        </method>
        <method name="Subtract date and time"
            assembly="Microsoft.Crm.Platform.WorkflowAssembly.dll" 
            typename="Microsoft.Crm.Platform.Workflow.BuildIn" 
            methodname="SubtractDateTime"
            group="Date and time functions">
            <parameter name="Date and Time" datatype="datetime"/>
            <parameter name="Years" datatype="integer" default="0"/>
            <parameter name="Months" datatype="integer" default="0"/>
            <parameter name="Days" datatype="integer" default="0"/>
            <parameter name="Hours" datatype="integer" default="0"/>
            <parameter name="Minutes" datatype="integer" default="0"/>
            <result datatype="datetime"/>
        </method>
        <method name="Execute" 
            assembly="Microsoft.Crm.Platform.BulkOperationControlAssembly.dll" 
            typename="BulkOperationControlService" 
            methodname="Execute" 
            group="BulkOperationControl" 
            isvisible="0"
            timeout="7200">
            <parameter name="Caller" datatype="caller"/>
            <parameter name="BulkOperationId" datatype="lookup" entityname="bulkoperation"/>
            <result datatype="string"/>
        </method>
    <method name="Test method" 
            assebly="WorkingWithCrm.dll"
            typename="WorkingWithCrm.TestExpl"
            methodname="TestMethod"
            group="Custom Assemblies">
      <parameter name="ContactId" datatype="lookup" entityname="contact" />
    </method>
  </methods>
</workflow.config>
и после рестарта сервиса и iis всё равно получаю ошибку о которой писал в первом сообщении, может у меня код неправильный или config я не умею править?

Последний раз редактировалось zhenek; 23.05.2008 в 14:17.
Старый 23.05.2008, 14:15   #11  
zhenek is offline
zhenek
Участник
 
133 / 10 (1) +
Регистрация: 01.02.2007
да ещё права NETWORK SERIVCE для dll дал всевозможные


MS CRM 3.0, Rollup 2, MS SQL 2005
Старый 24.05.2008, 14:59   #12  
ShurikEv is offline
ShurikEv
CRM
 
213 / 28 (1) +++
Регистрация: 25.04.2006
Адрес: г. Новосибирск
Значит так
1. Ошибка в строчке assebly="WorkingWithCrm.dll" должно быть написано assembly!!!
2. Права на dll не обязательно давать, можно просто скопировать
X++:
        <method name="Test metod" 
            assembly="WorkingWithCrm.dll" 
            typename="WorkingWithCrm.TestExpl" 
            methodname="TestMethod" 
            group="Custom Assemblies">
            <parameter name="ContactId" datatype="lookup"  entityname="contact"/>
        </method>
__________________
MS CRM 3.0/4.0
Sharepoint 2003, MOSS 2007/2010
За это сообщение автора поблагодарили: zhenek (1).
Старый 25.05.2008, 15:25   #13  
zhenek is offline
zhenek
Участник
 
133 / 10 (1) +
Регистрация: 01.02.2007
Спасибо, ShurikEv! Действительно глупая ошибка и малозаметная для меня, но к сожалению после её исправления ничего не изменилось :-(
Хочу ещё попробовать переставить систему на компе где создаю dll, может на этом компе "мусор" остался от 2-го фраймворка или ещё что подобное, что косьвенно портит мне настроение. Может поможет.
Что ещё может быть уже даже предположить не могу. Workflow Manager упрямо говорит, что configuration file is corrupted or can not be accessible (извиняюсь если неграмотно написал)
Старый 26.05.2008, 06:59   #14  
ShurikEv is offline
ShurikEv
CRM
 
213 / 28 (1) +++
Регистрация: 25.04.2006
Адрес: г. Новосибирск
Ну сборка еще должна быть подписана, это так к сведению.
__________________
MS CRM 3.0/4.0
Sharepoint 2003, MOSS 2007/2010
Старый 26.05.2008, 13:05   #15  
zhenek is offline
zhenek
Участник
 
133 / 10 (1) +
Регистрация: 01.02.2007
разве указание в заголовке allowusingnedassemblies="true" не решает вопрос подписанности/не подписанности?
Если не решает, то как сборку подписывать? В книге я ответа не нашел
Старый 26.05.2008, 14:32   #16  
ShurikEv is offline
ShurikEv
CRM
 
213 / 28 (1) +++
Регистрация: 25.04.2006
Адрес: г. Новосибирск
Надо создать ключик утилитой sn.exe (входит в состав студии) и прописать ссылку на созданный ключ в свойствах проекта
__________________
MS CRM 3.0/4.0
Sharepoint 2003, MOSS 2007/2010
Старый 26.05.2008, 15:33   #17  
zhenek is offline
zhenek
Участник
 
133 / 10 (1) +
Регистрация: 01.02.2007
спасибо за совет, осталось разобраться как утилитой пользоваться, выданный ею список опций и параметров мне мало чего вразумительного сказал. Может есть ссылка на ресурс где приведен пример создания ключа?
Старый 26.05.2008, 16:12   #18  
ShurikEv is offline
ShurikEv
CRM
 
213 / 28 (1) +++
Регистрация: 25.04.2006
Адрес: г. Новосибирск
sn.exe -k prog.key
__________________
MS CRM 3.0/4.0
Sharepoint 2003, MOSS 2007/2010
Старый 27.05.2008, 11:40   #19  
zhenek is offline
zhenek
Участник
 
133 / 10 (1) +
Регистрация: 01.02.2007
Ещё раз хочу поблагодарить за отзывчивость ShurikEv! Подписанная сборка заработала, Workflow Manager больше не ругается на config.

Последний раз редактировалось zhenek; 28.05.2008 в 10:30.
Старый 27.05.2008, 12:25   #20  
ShurikEv is offline
ShurikEv
CRM
 
213 / 28 (1) +++
Регистрация: 25.04.2006
Адрес: г. Новосибирск
allowusingnedassemblies="true" - "Разрешить использование сборок" вроде так переводится, с подписью вроде не связано.
Насчет подписи, вроде в SDK написано, точно не помню, т.к. 2 года назад с этим столкнулся, один раз разобрался и мне хватило
Удачи в юзании ЦРМ ;-)
__________________
MS CRM 3.0/4.0
Sharepoint 2003, MOSS 2007/2010
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Ошибка при публикации бизнес-процесса Верба Dynamics CRM: Администрирование 2 27.03.2009 16:18
Событие "Назначение записи" для бизнес-процесса Lazarus Dynamics CRM: Функционал 1 22.01.2009 19:54
Мир CRM: Отправка ярлыка по электронной почте при помощи бизнес-процесса Blog bot Dynamics CRM: Blogs 0 29.09.2008 07:16
Проблема с созданием бизнес-процесса в CRM 4.0 IgorF Dynamics CRM: Функционал 3 19.08.2008 11:15
Мир CRM: Автоматизирование добавления основного контакта при помощи Бизнес-Процесса Blog bot Dynamics CRM: Blogs 0 31.07.2008 02:08

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 00:51.