Есть ли способ отличить выполнение SSIS от выполнения веб-интерфейса в плагине CRM 4.0? - PullRequest
0 голосов
/ 18 августа 2011

Вот настройка:

Custom_entity берет несколько входных данных от пользователя, вычисляет число и сравнивает его с общим значением, хранящимся в нашей базе данных, чтобы получить общий процент. Итого обновляется каждую неделю. Чтобы обновить custom_entities каждого пользователя, чтобы отразить новые итоги и проценты этих итогов, я создал пакет служб SSIS, который будет запускаться каждую неделю. Конечно, я хороший и податливый, поэтому я использую API, чтобы запустить веб-сервис CRM для обновления custom_entities.

Однако , пользователи также хотят видеть обновление своих custom_entity в режиме реального времени, поэтому я создал плагин, который при обновлении custom_entity будет пересчитывать их числа, проверять наличие обновлений "total "в базе данных и обновите процент, соотнося все остальные обновления.

Возможно, вы видите проблему сейчас ...

  • Когда пользователь обновляет из Интернета, запускается плагин обновления для ТО экземпляра custom_entity, он получает мгновенную обратную связь, видит свои цифры и счастлив.
  • При запуске пакета служб SSIS плагин обновления запускается для ALL обновляемых строк custom_entity ...

Мой вопрос: Есть ли способ (возможно, с учетом контекста), чтобы я мог сказать, был ли плагин вызван через задание SSIS или через Интернет, а затем просто выйти из плагина?

В настоящее время есть несколько строк и нет реального снижения производительности, но очевидно, что это, безусловно, плохое программирование и ненужное использование ЦП / пропускной способности (сам плагин несколько раз попадает в веб-сервис в ходе выполнения. ). Я мог бы закоротить плагин, ища определенное свойство, которое будет присутствовать только тогда, когда пакет SSIS вызывает плагин, но я бы хотел найти лучший способ, чем этот.

Спасибо!

1 Ответ

0 голосов
/ 13 декабря 2011

Вы можете взглянуть на свойство context.CallerOrigin.Он покажет вам источник, который вызвал сообщение.В вашем случае вы должны проверить на WebServiceApi

using System;
using Microsoft.Crm.Sdk;
using Microsoft.Crm.SdkTypeProxy;
 
public class OnlinePlugin : IPlugin
{
  public void Execute(IPluginExecutionContext context)
  {
     // Check to see if this is a playback context.
     CallerOrigin callerOrigin = context.CallerOrigin;
  
     if (callerOrigin is OfflineOrigin)
     {
       // This plug-in was fired from the playback queue after the user
       // selected to go online within Microsoft Dynamics CRM for Outlook.
       return;
     }
     else
     {
       // Do something here.
     }
  }
}

Взгляните на мою статью Кто запустил мой плагин?

...