Почему не обновляется сообщение об обновлении, когда я обновляю адрес пользователя на экране учетной записи - PullRequest
2 голосов
/ 25 октября 2011

Как я понимаю, к учетной записи в Dyanimcs CRM прикреплены две дочерние привычные адреса.В форме учетной записи, когда вы редактируете информацию об адресе и нажимаете кнопку Сохранить, я ожидаю, что обновление будет зарегистрировано на объекте customeraddress.

Я работаю над плагином, который поможет синхронизировать наши адреса по всем нашимпредприятия, и когда редактирование происходит на сервере CRM, ему необходимо убедиться, что оно распространяется на другие наши системы.

При написании некоторого диагностического кода я написал быстрый wcf-сервер, который позволит мне проверять сущностикак они существуют при исполнении.Однако этот плагин срабатывает только в том случае, если для редактирования используется фактическая форма адреса, а не при редактировании формы учетной записи.

public void Execute(IServiceProvider serviceProvider)
    {
        if (serviceProvider == null)
        {
            throw new ArgumentNullException("serviceProvider");
        }

        // Construct the Local plug-in context.
        ITracingService localcontext = (ITracingService)serviceProvider.GetService(typeof(ITracingService));
        localcontext.Trace(string.Format(CultureInfo.InvariantCulture, "Entered {0}.Execute()", "AuditAddressChange"));

        IPluginExecutionContext context = (IPluginExecutionContext)serviceProvider.GetService(typeof(IPluginExecutionContext));

        var WCFDebug = ChannelFactory<IService1>.CreateChannel(new BasicHttpBinding(),
           new EndpointAddress("http://localhost:8732/WcfDebug"));

        try
        {
            Entity e = context.InputParameters["Target"] as Entity;
            if (e != null)
            {
                foreach (var attribute in e.Attributes)
                {
                    WCFDebug.WriteLine(string.Format("{0} ==> {1}", attribute.Key, attribute.Value.ToString()));
                }
            }
        }
        catch (FaultException<OrganizationServiceFault> e)
        {
            localcontext.Trace(string.Format(CultureInfo.InvariantCulture, "Exception: {0}", e.ToString()));

            // Handle the exception.
            throw;
        }
        finally
        {
            localcontext.Trace(string.Format(CultureInfo.InvariantCulture, "Exiting {0}.Execute()", "AuditAddressChange"));
        }
    }

Этот плагин зарегистрирован для запуска на этапе обновления на обычном адресе.

Учитывая, что этот плагин выполняется правильно, когда редактирование происходит из формы адреса, почему не срабатывает, когда редактирование происходит из формы учетной записи?

1 Ответ

4 голосов
/ 26 октября 2011

Два адреса обрабатываются так, как будто они были частью учетной записи. Внутренне данные полей address1 и address2 хранятся в двух пользовательских адресных записях.

С точки зрения пользователя и SDK они являются частью учетной записи. Вот почему ваш плагин не сработал.

Чтобы обработать изменения адреса для учетной записи (в отношении полей address1 и address2), вам нужно обработать сообщение об обновлении для учетной записи. Для всех других записей обычного адреса вы должны обработать сообщение обновления для обычного адреса.

...