|
31.03.2008, 13:14 | #1 |
Участник
|
Создание пользовательской конструкции бизнес-процесса...
Подскажите, что не так, почему 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 } } } } 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> и когда запускаю 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 |
Участник
|
Да, во первых, для работы с CRM 3.0 нужно использовать VS2003 (Framework 1.1)
И еще - возможно Dll-кам нужно будет дать права для NETWORK SERVICE |
|
31.03.2008, 21:35 | #3 |
Moderator
|
Полностью согласен с предыдущим оратором! А еще рекомендую конфиги писать в той же студии и в соответствии со схемой - меньше вероятность накосячить.
__________________
http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия. MS Certified Dirty Magic Professional |
|
01.04.2008, 14:36 | #4 |
Участник
|
ну со вторым пунктом разобраться можно, а вот первый - это просто задница какая-то. Неужели microsoft выпустив VS 2005 и Framework 2 не подумал о том как писать для его же детища пользовательские конструкции.
У меня такой вопрос, получиться ли делать конструкции в VS 2005 но со framework 1.1? Потому что я понятия не имею где мне щас добыть VS 2003 |
|
01.04.2008, 15:14 | #5 |
Участник
|
Увы....
|
|
01.04.2008, 15:16 | #6 |
Участник
|
К сожалению Framework 1.1 можно сделать только до VS2003
|
|
01.04.2008, 15:43 | #7 |
Участник
|
мм-да, приплыли ...
что ж буду искать эту самую 2003 студию А с 4-ым CRM такая же беда? или в нем уже можно писать из VS2005 + Framework 2? |
|
01.04.2008, 15:52 | #8 |
CRM
|
В ней уже можно 2005 студию использовать. Или даже 2008
__________________
MS CRM 3.0/4.0 Sharepoint 2003, MOSS 2007/2010 |
|
02.04.2008, 08:35 | #9 |
Moderator
|
А вот фреймворк лучше 3й использовать.
__________________
http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия. MS Certified Dirty Magic Professional |
|
23.05.2008, 14:14 | #10 |
Участник
|
Сделал все как советовали, наконец-то достал 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 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> Последний раз редактировалось zhenek; 23.05.2008 в 14:17. |
|
23.05.2008, 14:15 | #11 |
Участник
|
да ещё права NETWORK SERIVCE для dll дал всевозможные
MS CRM 3.0, Rollup 2, MS SQL 2005 |
|
24.05.2008, 14:59 | #12 |
CRM
|
Значит так
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 |
Участник
|
Спасибо, ShurikEv! Действительно глупая ошибка и малозаметная для меня, но к сожалению после её исправления ничего не изменилось :-(
Хочу ещё попробовать переставить систему на компе где создаю dll, может на этом компе "мусор" остался от 2-го фраймворка или ещё что подобное, что косьвенно портит мне настроение. Может поможет. Что ещё может быть уже даже предположить не могу. Workflow Manager упрямо говорит, что configuration file is corrupted or can not be accessible (извиняюсь если неграмотно написал) |
|
26.05.2008, 06:59 | #14 |
CRM
|
Ну сборка еще должна быть подписана, это так к сведению.
__________________
MS CRM 3.0/4.0 Sharepoint 2003, MOSS 2007/2010 |
|
26.05.2008, 13:05 | #15 |
Участник
|
разве указание в заголовке allowusingnedassemblies="true" не решает вопрос подписанности/не подписанности?
Если не решает, то как сборку подписывать? В книге я ответа не нашел |
|
26.05.2008, 14:32 | #16 |
CRM
|
Надо создать ключик утилитой sn.exe (входит в состав студии) и прописать ссылку на созданный ключ в свойствах проекта
__________________
MS CRM 3.0/4.0 Sharepoint 2003, MOSS 2007/2010 |
|
26.05.2008, 15:33 | #17 |
Участник
|
спасибо за совет, осталось разобраться как утилитой пользоваться, выданный ею список опций и параметров мне мало чего вразумительного сказал. Может есть ссылка на ресурс где приведен пример создания ключа?
|
|
26.05.2008, 16:12 | #18 |
CRM
|
sn.exe -k prog.key
__________________
MS CRM 3.0/4.0 Sharepoint 2003, MOSS 2007/2010 |
|
27.05.2008, 11:40 | #19 |
Участник
|
Ещё раз хочу поблагодарить за отзывчивость ShurikEv! Подписанная сборка заработала, Workflow Manager больше не ругается на config.
Последний раз редактировалось zhenek; 28.05.2008 в 10:30. |
|
27.05.2008, 12:25 | #20 |
CRM
|
allowusingnedassemblies="true" - "Разрешить использование сборок" вроде так переводится, с подписью вроде не связано.
Насчет подписи, вроде в SDK написано, точно не помню, т.к. 2 года назад с этим столкнулся, один раз разобрался и мне хватило Удачи в юзании ЦРМ ;-)
__________________
MS CRM 3.0/4.0 Sharepoint 2003, MOSS 2007/2010 |
|
|
|