Подскажите, что не так, почему 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 редактировал админ?)
помогите пожалуйста разобраться, что я делаю неправильно