Я новичок в C# и плагинах для динамики. Чтобы учиться и тестировать, я успешно создал пару очень простых плагинов, которые сработали. Теперь я пытаюсь получить больше того, что мне действительно нужно делать с плагинами - я пытаюсь получить значение поля в настраиваемой сущности и использовать это значение для обновления атрибута в соответствующем настраиваемом организация.C# - динамика crm онлайн-плагин - использовать значение поля для заполнения атрибута связанного объекта
Мой плагин зарегистрирован в сообщении «Обновить» настраиваемого объекта (называемого new_registration). Он работает после операции, асинхронно. Поле, которое обновляет и запускает плагин (параметр, заданный в поле «Статус»), нигде не используется в коде.
Вот мой код:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.ServiceModel;
using Microsoft.Xrm.Sdk;
namespace PlugInTests
{
public class AdjustTimeSlots: IPlugin
{
public void Execute(IServiceProvider serviceProvider)
{
//Extract the tracing service for use in debugging sandboxed plug-ins.
ITracingService tracingService =
(ITracingService)serviceProvider.GetService(typeof(ITracingService));
// Obtain the execution context from the service provider.
IPluginExecutionContext context = (IPluginExecutionContext)
serviceProvider.GetService(typeof(IPluginExecutionContext));
if (context.InputParameters != null)
{
Entity entity = (Entity)context.InputParameters["Target"];
Guid id = entity.Id;
tracingService.Trace("got input parameters");
//get time slot
string slot = (string)entity.Attributes["new_yourtimeslot"];
EntityReference eventclass = (EntityReference)entity.Attributes["new_eventregistrationrelationshipid"];
tracingService.Trace("got time slot");
//set updated entity (event/class)
Entity parentevent = new Entity("new_eventclass");
parentevent.Id = eventclass.Id;
parentevent.Attributes["new_timeslotsfordelete"] = slot;
// Obtain the organization service reference.
IOrganizationServiceFactory serviceFactory = (IOrganizationServiceFactory)serviceProvider.GetService(typeof(IOrganizationServiceFactory));
IOrganizationService service = serviceFactory.CreateOrganizationService(context.UserId);
//update event record
tracingService.Trace("Update time slot plugin");
service.Update(parentevent);
}
}
}
}
Через испытание, я сузил, что это невозможно сделать (по крайней мере на начальном этапе) на этой линии:
string slot = (string)entity.Attributes["new_yourtimeslot"];
Ошибку я получаю в журналах отслеживания плагина:
Данный ключ отсутствует в словаре.
Я проверил и дважды проверял, и я знаю, что получаю имя поля правильно. Я делаю что-то неправильно в том, как я получаю значение от входных параметров? Или я что-то испортил, я даже не понимаю, что я могу запутаться? Любая помощь приветствуется, спасибо.
Спасибо. Это было очень полезно. Корректировки в работе с этими значениями атрибутов. Где ваша ссылка на этот синтаксис? Я читал документацию msdn, и я не верю, что видел этот синтаксис? Я мог бы смутить это со старыми онлайн-примерами с устаревшим синтаксисом. Спасибо за любую помощь. –