06.05.2009, 11:21 | #1 |
Участник
|
Регистрация PlugIn
Привет, Всем.. Вот пытаюсь написать первый в жизни PlugIn. Пока не очень получается.. Задача состоит в том, что необходимо реализовать следующее: при добавлении продуктов в возможной сделке ,в форме продукт для возможной сделки при нажатии сохранить нужно брать значение суммы из моего поля "Моя сумма" и присваивать это значение в прайс-листе для соответствующего продукта.. Т.е. выставлять цену за данный продукт в прайс-лист из формы "Продукт для возможной сделки" ..
Не могу понять, как из текста PlugIn считать значение "Моя сумма" и еще сложнее как эту сумму подставить в прайс-лист.. Не знаю как зарегистрировать этот PlugIn "on Create message".. .. и что еще нужно регистрировать.. using System; using System.Collections.Generic; using System.Text; using Microsoft.Crm.Sdk; using Microsoft.Crm.SdkTypeProxy; using Microsoft.Win32; namespace TestPlugin { publicclassExecuteHandler : IPlugin { public ExecuteHandler(string config, string secureConfig) { } #region IPlugin Members publicvoid Execute(IPluginExecutionContext context) { } #endregion } } |
|
06.05.2009, 11:46 | #2 |
Чайный пьяница
|
Здравствуйте, уже здесь.
Итак. Для начала Вам надо создать плагин. Что для этого надо делать описано тут. Там же есть ссылка на ресурс, откуда нможно скачать утилиту регистрации плагинов.
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством. Подписывайтесь на мой блог, twitter и YouTube канал. Пользуйтесь моим Ultimate Workflow Toolkit |
|
06.05.2009, 12:33 | #3 |
Участник
|
Привет еще раз. Можно еще вопрос?.. Создаю плагин по вашей ссылки.
При создании нового проекта на C# , выбираю шаблон, однако появляется ошибка: "С:\Users\Таня\AppData\Local\Temp\elkeikyu.vsc\Temp\MSCRM Plug-in1.csproj(63,11): The imported project "C:\Microsoft.CSharp.targets" was not found. Confirm that the path in the <Import> declaration is correct? and that the file exists on disk" |
|
06.05.2009, 12:37 | #4 |
Чайный пьяница
|
Цитата:
Сообщение от Elka
Привет еще раз. Можно еще вопрос?.. Создаю плагин по вашей ссылки.
При создании нового проекта на C# , выбираю шаблон, однако появляется ошибка: "С:\Users\Таня\AppData\Local\Temp\elkeikyu.vsc\Temp\MSCRM Plug-in1.csproj(63,11): The imported project "C:\Microsoft.CSharp.targets" was not found. Confirm that the path in the <Import> declaration is correct? and that the file exists on disk"
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством. Подписывайтесь на мой блог, twitter и YouTube канал. Пользуйтесь моим Ultimate Workflow Toolkit |
|
|
За это сообщение автора поблагодарили: Elka (0). |
06.05.2009, 16:16 | #5 |
Участник
|
Спасибо. Начать получилось
|
|
06.05.2009, 16:20 | #6 |
Чайный пьяница
|
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством. Подписывайтесь на мой блог, twitter и YouTube канал. Пользуйтесь моим Ultimate Workflow Toolkit |
|
06.05.2009, 16:43 | #7 |
Участник
|
|
|
06.05.2009, 20:50 | #8 |
Участник
|
Можно еще попарить... А как обратиться в plugin к конкретному прайс-листу с названием "Основной" и найти в нем позицию с нужным продуктом...
|
|
06.05.2009, 21:21 | #9 |
Чайный пьяница
|
Цитата:
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством. Подписывайтесь на мой блог, twitter и YouTube канал. Пользуйтесь моим Ultimate Workflow Toolkit |
|
07.05.2009, 17:31 | #10 |
Участник
|
Спасибо большое за ссылки... У меня есть еще 2 вопроса ():
1)не знаю как получить значение из моего поля new_esum 2)Если я правильно понимаю , то BusinessEntityCollection retrieved = service.RetrieveMultiple(query); в retrieved я получаю все позиции прайс-листа с нужным мне значением продукта.. как можно перебрать эти позиции() и присвоить им новое значение amount publicvoid Execute(IPluginExecutionContext context) { DynamicEntity entity = null; if (context.InputParameters.Properties.Contains(ParameterName.Target) && context.InputParameters.Properties[ParameterName.Target] isDynamicEntity) { // Obtain the target business entity from the input parmameters. entity = (DynamicEntity)context.InputParameters.Properties[ParameterName.Target]; //______________________________ if (context.MessageName != MessageName.Update.ToString() && context.MessageName != MessageName.Create.ToString()) { thrownewInvalidPluginExecutionException("Smth wrong with Update stage may be"); } //___________________________ } else { return; } try { ICrmService crmService = context.CreateCrmService(true); //_________________________________________________________ //пытаюсь получить значение из моего поля new_esum (тип money)--- // float sum = (float)entity.Properties["new_esum"]; String new_productname = ""; //считываю значение продукта if(entity.Properties.Contains("productid")) { ColumnSet cs = newColumnSet(); Lookup regarding = (Lookup)entity.Properties["productid"]; cs.Attributes.Add("name"); product _product = (product)crmService.Retrieve(EntityName.product.ToString(), regarding.Value, cs); if (_product == null || _product.name == null) { return; } else { new_productname = _product.name.ToString(); } } //ищу нужную позицию в прайс-листе CrmService service = newCrmService(); service.Credentials = System.Net.CredentialCache.DefaultCredentials; // Create the query object. QueryByAttribute query = newQueryByAttribute(); query.ColumnSet = newAllColumns(); query.EntityName = EntityName.productpricelevel.ToString(); // The query will retrieve all productpricelevel whose productidname is new_productname. query.Attributes = newstring[] { "productidname" }; query.Values = newstring[] { new_productname }; // Execute the retrieval. // если правильно понимаю, получила все позиции прайс-листа с продуктом //равным new_productname BusinessEntityCollection retrieved = service.RetrieveMultiple(query); // не знаю как перебрать значения и присвоить значение sum // (((( retrieved.Properties.Add(newStringProperty("amount", sum)); } |
|
07.05.2009, 17:40 | #11 |
Чайный пьяница
|
Для того, чтобы перебрать, необходимо например использовать конструкцию foreach:
Код: ... BusinessEntityCollection retrieved = service.RetrieveMultiple(query); foreach (DynamicEntity product in retrieved.BusinessEntities) { product["amount"] = new CrmDecimal(sum); service.Update(product); } Код: decimal sum = (decimal)entity.Properties["new_esum"].Value;
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством. Подписывайтесь на мой блог, twitter и YouTube канал. Пользуйтесь моим Ultimate Workflow Toolkit |
|
07.05.2009, 17:57 | #12 |
Участник
|
Спасибо!!!
Только компилятор ругается на Value decimal sum = (decimal)entity.Properties["new_esum"].Value; Пишет: "object" не содержит определение "Value" и не был найден метод расширения "Value", принимающий тип "object" в качестве первого аргумента (возможно, пропущена директива using или ссылка на сборку) using System; using System.Collections.Generic; using Microsoft.Win32; using Microsoft.Crm.Sdk.Query; using Microsoft.Crm.Sdk; using Microsoft.Crm.SdkTypeProxy; using Microsoft.Crm.SdkTypeProxy.Metadata; using System.Text; |
|
07.05.2009, 17:59 | #13 |
Чайный пьяница
|
Цитата:
Сообщение от Elka
Спасибо!!!
Только компилятор ругается на Value decimal sum = (decimal)entity.Properties["new_esum"].Value; Пишет: "object" не содержит определение "Value" и не был найден метод расширения "Value", принимающий тип "object" в качестве первого аргумента (возможно, пропущена директива using или ссылка на сборку) using System; using System.Collections.Generic; using Microsoft.Win32; using Microsoft.Crm.Sdk.Query; using Microsoft.Crm.Sdk; using Microsoft.Crm.SdkTypeProxy; using Microsoft.Crm.SdkTypeProxy.Metadata; using System.Text; Код: decimal sum = ((CrmMoney)entity.Properties["new_esum"]).Value;// если поле - типа Money decimal sum = ((CrmDecimal)entity.Properties["new_esum"]).Value;// если поле - типа Decimal
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством. Подписывайтесь на мой блог, twitter и YouTube канал. Пользуйтесь моим Ultimate Workflow Toolkit |
|
07.05.2009, 18:30 | #14 |
Участник
|
Еще раз спасибо.. Если я вам еще не надоела, то у меня еще вопрос...
Я отладила (F6). Пытаюсь зарегистрировать..
"Unhandled Exception: System.IO.InvalidDataException: Assembly name MSCRM EditPrice, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null cannot be parsed. в PluginRegistrationTool.AssemblyReader.RetrieveAssemblyProperties(Assembly assembly, String path) в PluginRegistrationTool.AssemblyReader.RetrievePluginsFromAssembly(String path) в PluginRegistrationTool.AssemblyReader.RetrievePluginsFromAssembly(String path) в PluginRegistrationTool.RegistrationHelper.RetrievePluginsFromAssembly(String pathToAssembly) в PluginRegistrationTool.PluginRegistrationForm.btnLoadAssembly_Click(Object sender, EventArgs e)" Не подскажите, что не так...? |
|
07.05.2009, 18:35 | #15 |
Чайный пьяница
|
Цитата:
Сообщение от Elka
Еще раз спасибо.. Если я вам еще не надоела, то у меня еще вопрос...
Я отладила (F6). Пытаюсь зарегистрировать..
"Unhandled Exception: System.IO.InvalidDataException: Assembly name MSCRM EditPrice, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null cannot be parsed. в PluginRegistrationTool.AssemblyReader.RetrieveAssemblyProperties(Assembly assembly, String path) в PluginRegistrationTool.AssemblyReader.RetrievePluginsFromAssembly(String path) в PluginRegistrationTool.AssemblyReader.RetrievePluginsFromAssembly(String path) в PluginRegistrationTool.RegistrationHelper.RetrievePluginsFromAssembly(String pathToAssembly) в PluginRegistrationTool.PluginRegistrationForm.btnLoadAssembly_Click(Object sender, EventArgs e)" Не подскажите, что не так...? Для этого откройте свойства проекта, откройте Signing, укажите галочку Sign the assembly, в драпдауне выберите New, создайте новый, сохраните, сбилдьте, повторите регистрацию.
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством. Подписывайтесь на мой блог, twitter и YouTube канал. Пользуйтесь моим Ultimate Workflow Toolkit |
|
07.05.2009, 19:05 | #16 |
Участник
|
не помогло...
у меня Microsoft Visual C# 2008 Express Edition. В свойствах проекта я выбрала "Подписывание"-> "Подписать сборку"-> "Создать"... Ввела Имя файла ключей mypluginlib Не ставила галу на "Защитить мой файл ключей паролем" Создался файл mypluginlib.snk Потом сохранила, нажала F6 И попробовала снова зарегистрироваться, та же ошибка... |
|
07.05.2009, 19:17 | #17 |
Чайный пьяница
|
Цитата:
Сообщение от Elka
не помогло...
у меня Microsoft Visual C# 2008 Express Edition. В свойствах проекта я выбрала "Подписывание"-> "Подписать сборку"-> "Создать"... Ввела Имя файла ключей mypluginlib Не ставила галу на "Защитить мой файл ключей паролем" Создался файл mypluginlib.snk Потом сохранила, нажала F6 И попробовала снова зарегистрироваться, та же ошибка...
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством. Подписывайтесь на мой блог, twitter и YouTube канал. Пользуйтесь моим Ultimate Workflow Toolkit |
|
08.05.2009, 11:25 | #18 |
Участник
|
Добрый день. (Спасибо за ваше терпение..получается целое пособие "для чайников" )
Воспользовалась вашим тулом.. Ругаться стал как-то иначе.. Меня смущают 2 момента: 1)При попытке отладить plugin (F5) выдается ошибка "Проект, создающий библиотеку классов, не может быть непосредственно запущен. Для отладки данного проекта добавьте к решению проект создающий приложение и ссылающийся на эту библиотеку и сделайте его запускаемым" Это нормально? Так и должно быть? Или косяк? 2)Для всех вариантов CRM можно регистрировать plugin? У нас установлена Microsoft Dynamics CRM 4.0 Workgroup Edition . Ошибка, которую выдает Plugin Registration tools : Unhandled Exception: System.Runtime.Serialization.SerializationException: Тип "PluginRegistrationTool.CrmOrganization" в сборке "PluginRegistration, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null" не помечен как сериализуемый. Server stack trace: в System.Runtime.Serialization.FormatterServices.InternalGetSerializableMembers(RuntimeType type) в System.Runtime.Serialization.FormatterServices.GetSerializableMembers(Type type, StreamingContext context) в System.Runtime.Serialization.Formatters.Binary.WriteObjectInfo.InitMemberInfo() в System.Runtime.Serialization.Formatters.Binary.WriteObjectInfo.InitSerialize(Type objectType, ISurrogateSelector surrogateSelector, StreamingContext context, SerObjectInfoInit serObjectInfoInit, IFormatterConverter converter) в System.Runtime.Serialization.Formatters.Binary.WriteObjectInfo.Serialize(Type objectType, ISurrogateSelector surrogateSelector, StreamingContext context, SerObjectInfoInit serObjectInfoInit, IFormatterConverter converter) в System.Runtime.Serialization.Formatters.Binary.ObjectWriter.Write(WriteObjectInfo objectInfo, NameInfo memberNameInfo, NameInfo typeNameInfo) в System.Runtime.Serialization.Formatters.Binary.ObjectWriter.Serialize(Object graph, Header[] inHeaders, __BinaryWriter serWriter, Boolean fCheck) в System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Serialize(Stream serializationStream, Object graph, Header[] headers, Boolean fCheck) в System.Runtime.Remoting.Channels.CrossAppDomainSerializer.SerializeMessageParts(ArrayList argsToSerialize) в System.Runtime.Remoting.Messaging.SmuggledMethodReturnMessage..ctor(IMethodReturnMessage mrm) в System.Runtime.Remoting.Messaging.SmuggledMethodReturnMessage.SmuggleIfPossible(IMessage msg) в System.Runtime.Remoting.Channels.CrossAppDomainSink.DoDispatch(Byte[] reqStmBuff, SmuggledMethodCallMessage smuggledMcm, SmuggledMethodReturnMessage& smuggledMrm) в System.Runtime.Remoting.Channels.CrossAppDomainSink.DoTransitionDispatchCallback(Object[] args) Exception rethrown at [0]: в System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg) в System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type) в PluginRegistrationTool.AssemblyReader.RetrievePluginsFromAssembly(String path) в PluginRegistrationTool.RegistrationHelper.RetrievePluginsFromAssembly(String pathToAssembly) в PluginRegistrationTool.PluginRegistrationForm.btnLoadAssembly_Click(Object sender, EventArgs e) |
|
08.05.2009, 11:44 | #19 |
Чайный пьяница
|
Цитата:
Сообщение от Elka
Добрый день. (Спасибо за ваше терпение..получается целое пособие "для чайников" )
Воспользовалась вашим тулом.. Ругаться стал как-то иначе.. Меня смущают 2 момента: 1)При попытке отладить plugin (F5) выдается ошибка "Проект, создающий библиотеку классов, не может быть непосредственно запущен. Для отладки данного проекта добавьте к решению проект создающий приложение и ссылающийся на эту библиотеку и сделайте его запускаемым" Это нормально? Так и должно быть? Или косяк? 2)Для всех вариантов CRM можно регистрировать plugin? У нас установлена Microsoft Dynamics CRM 4.0 Workgroup Edition . Ошибка, которую выдает Plugin Registration tools : Unhandled Exception: System.Runtime.Serialization.SerializationException: Тип "PluginRegistrationTool.CrmOrganization" в сборке "PluginRegistration, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null" не помечен как сериализуемый. Server stack trace: в System.Runtime.Serialization.FormatterServices.InternalGetSerializableMembers(RuntimeType type) в System.Runtime.Serialization.FormatterServices.GetSerializableMembers(Type type, StreamingContext context) в System.Runtime.Serialization.Formatters.Binary.WriteObjectInfo.InitMemberInfo() в System.Runtime.Serialization.Formatters.Binary.WriteObjectInfo.InitSerialize(Type objectType, ISurrogateSelector surrogateSelector, StreamingContext context, SerObjectInfoInit serObjectInfoInit, IFormatterConverter converter) в System.Runtime.Serialization.Formatters.Binary.WriteObjectInfo.Serialize(Type objectType, ISurrogateSelector surrogateSelector, StreamingContext context, SerObjectInfoInit serObjectInfoInit, IFormatterConverter converter) в System.Runtime.Serialization.Formatters.Binary.ObjectWriter.Write(WriteObjectInfo objectInfo, NameInfo memberNameInfo, NameInfo typeNameInfo) в System.Runtime.Serialization.Formatters.Binary.ObjectWriter.Serialize(Object graph, Header[] inHeaders, __BinaryWriter serWriter, Boolean fCheck) в System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Serialize(Stream serializationStream, Object graph, Header[] headers, Boolean fCheck) в System.Runtime.Remoting.Channels.CrossAppDomainSerializer.SerializeMessageParts(ArrayList argsToSerialize) в System.Runtime.Remoting.Messaging.SmuggledMethodReturnMessage..ctor(IMethodReturnMessage mrm) в System.Runtime.Remoting.Messaging.SmuggledMethodReturnMessage.SmuggleIfPossible(IMessage msg) в System.Runtime.Remoting.Channels.CrossAppDomainSink.DoDispatch(Byte[] reqStmBuff, SmuggledMethodCallMessage smuggledMcm, SmuggledMethodReturnMessage& smuggledMrm) в System.Runtime.Remoting.Channels.CrossAppDomainSink.DoTransitionDispatchCallback(Object[] args) Exception rethrown at [0]: в System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg) в System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type) в PluginRegistrationTool.AssemblyReader.RetrievePluginsFromAssembly(String path) в PluginRegistrationTool.RegistrationHelper.RetrievePluginsFromAssembly(String pathToAssembly) в PluginRegistrationTool.PluginRegistrationForm.btnLoadAssembly_Click(Object sender, EventArgs e) 2. Плагин. Судя по всему не застронгнеймен. Потому что в стеке написано PublicKeyToken=null. 3. Віложите сюда, пожалуйста код плагина, будет понятнее где собака порылась.
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством. Подписывайтесь на мой блог, twitter и YouTube канал. Пользуйтесь моим Ultimate Workflow Toolkit |
|
08.05.2009, 11:59 | #20 |
Участник
|
"для отладки - необходимо атачиться к w3p процессу." А это как? (стыдно, но правда не знаю.. )
Код плагина: using System; using System.Collections.Generic; using Microsoft.Win32; using Microsoft.Crm.Sdk.Query; // Microsoft Dynamics CRM namespaces using Microsoft.Crm.Sdk; using Microsoft.Crm.SdkTypeProxy; using Microsoft.Crm.SdkTypeProxy.Metadata; using System.Text; namespace Crm.Plugins { publicclassMyPlugin : IPlugin { // Configuration information that can be passed to a plug-in at run-time. privatestring _secureInformation; privatestring _unsecureInformation; // Note: Due to caching, Microsoft Dynamics CRM does not invoke the plug-in // contructor every time the plug-in is executed. // Related SDK topic: Writing the Plug-in Constructor public MyPlugin(string unsecureInfo, string secureInfo) { _secureInformation = secureInfo; _unsecureInformation = unsecureInfo; } // Related SDK topic: Writing a Plug-in publicvoid Execute(IPluginExecutionContext context) { DynamicEntity entity = null; // Check if the InputParameters property bag contains a target // of the current operation and that target is of type DynamicEntity. if (context.InputParameters.Properties.Contains(ParameterName.Target) && context.InputParameters.Properties[ParameterName.Target] isDynamicEntity) { // Obtain the target business entity from the input parmameters. entity = (DynamicEntity)context.InputParameters.Properties[ParameterName.Target]; // TODO Test for an entity type and message supported by your plug-in. // if (entity.Name != EntityName.account.ToString()) { return; } // if (context.MessageName != MessageName.Create.ToString()) { return; } } else { return; } try { // Create a Microsoft Dynamics CRM Web service proxy. // TODO Uncomment or comment out the appropriate statement. // For a plug-in running in the child pipeline, use this statement. // CrmService crmService = CreateCrmService(context, true); // For a plug-in running in the parent pipeline, use this statement. ICrmService crmService = context.CreateCrmService(true); //Їлв обм Ї®«гзЁвм § 票Ґ Ё§ ¬®ҐЈ® Ї®«п new_esum ( вЁЇ money)--- // decimal sum = ((CrmMoney)entity.Properties["new_esum"]).Value; String new_productname = ""; //бзЁвлў о § 票Ґ Їа®¤гЄв if (entity.Properties.Contains("productid")) { ColumnSet cs = newColumnSet(); Lookup regarding = (Lookup)entity.Properties["productid"]; cs.Attributes.Add("name"); product _product = (product)crmService.Retrieve(EntityName.product.ToString(), regarding.Value, cs); if (_product == null || _product.name == null) { return; } else { new_productname = _product.name.ToString(); } } //Їлв обм ©вЁ г¦го Ї®§ЁжЁо Їа ©б «Ёбв CrmService service = newCrmService(); service.Credentials = System.Net.CredentialCache.DefaultCredentials; // Create the query object. QueryByAttribute query = newQueryByAttribute(); query.ColumnSet = newAllColumns(); query.EntityName = EntityName.productpricelevel.ToString(); // The query will retrieve all productpricelevel whose productidname is new_productname. query.Attributes = newstring[] { "productidname" }; query.Values = newstring[] { new_productname }; // Execute the retrieval. // п в Є Ї®Ё¬ о Ї®«гзЁ« ўбҐ Ї®§ЁжЁЁ Їа ©б «Ёбв б Їа®¤гЄв ¬Ё new_productname BusinessEntityCollection retrieved = service.RetrieveMultiple(query); // е®зг ®Ў®ўЁвм § 票Ґ ў Їа ©-«ЁбвҐ--- §¤Ґбм в®з® Ґ в Є..Ґ § о Є Є ЇҐаҐЎа вм § 票п... // (((( foreach (DynamicEntity product in retrieved.BusinessEntities) { product["amount"] = newCrmDecimal(sum); service.Update(product); } // TODO Plug-in business logic goes here. } catch (System.Web.Services.Protocols.SoapException ex) { thrownewInvalidPluginExecutionException( String.Format("An error occurred in the {0} plug-in.", this.GetType().ToString()), ex); } } #region Private methods ///<summary> /// Creates a CrmService proxy for plug-ins that execute in the child pipeline. ///</summary> ///<param name="context">The execution context that was passed to the plug-ins Execute method.</param> ///<param name="flag">Set to True to use impersontation.</param> ///<returns>A CrmServce instance.</returns> privateCrmService CreateCrmService(IPluginExecutionContext context, Boolean flag) { CrmAuthenticationToken authToken = newCrmAuthenticationToken(); authToken.AuthenticationType = 0; authToken.OrganizationName = context.OrganizationName; // Include support for impersonation. if (flag) authToken.CallerId = context.UserId; else authToken.CallerId = context.InitiatingUserId; CrmService service = newCrmService(); service.CrmAuthenticationTokenValue = authToken; service.UseDefaultCredentials = true; // Include support for infinite loop detection. CorrelationToken corToken = newCorrelationToken(); corToken.CorrelationId = context.CorrelationId; corToken.CorrelationUpdatedTime = context.CorrelationUpdatedTime; corToken.Depth = context.Depth; RegistryKey regkey = Registry.LocalMachine.OpenSubKey("SOFTWARE\\Microsoft\\MSCRM"); service.Url = String.Concat(regkey.GetValue("ServerUrl").ToString(), "/2007/crmservice.asmx"); service.CorrelationTokenValue = corToken; return service; } ///<summary> /// Creates a MetadataService proxy for plug-ins that execute in the child pipeline. ///</summary> ///<param name="context">The execution context that was passed to the plug-ins Execute method.</param> ///<param name="flag">Set to True to use impersontation.</param> ///<returns>A MetadataServce instance.</returns> privateMetadataService CreateMetadataService(IPluginExecutionContext context, Boolean flag) { CrmAuthenticationToken authToken = newCrmAuthenticationToken(); authToken.AuthenticationType = 0; authToken.OrganizationName = context.OrganizationName; // Include support for impersonation. if (flag) authToken.CallerId = context.UserId; else authToken.CallerId = context.InitiatingUserId; MetadataService service = newMetadataService(); service.CrmAuthenticationTokenValue = authToken; service.UseDefaultCredentials = true; RegistryKey regkey = Registry.LocalMachine.OpenSubKey("SOFTWARE\\Microsoft\\MSCRM"); service.Url = String.Concat(regkey.GetValue("ServerUrl").ToString(), "/2007/metadataservice.asmx"); return service; } #endregion Private Methods } } Последний раз редактировалось Elka; 08.05.2009 в 12:09. |
|
Теги |
c#, plugin, pluginregistrationtool, регистрация |
|
|