Online vs. Offline Plug-ins

You can register plug-ins to execute in online mode, offline mode, or both. Your plug-in code can check whether it is executing in offline mode. The following code sample shows you how to determine offline plug-in execution by checking the IPluginExecutionContext.IsExecutingInOfflineMode property value.

Example
using System;
using Microsoft.Crm.Sdk;
using Microsoft.Crm.SdkTypeProxy;

namespace MyPlugins
{
public class AccountCreateHandler: IPlugin
{
public void Execute(IPluginExecutionContext context)
{
// Check Whether the Web service is offline.
if (context.IsExecutingInOfflineMode)
{
// Do something…
}
}
}
}

When you design a plug-in that will be registered for both online and offline execution, you should consider the possibility that the plug-in could be executed two times. The first time that the plug-in could potentially execute is while Microsoft Dynamics CRM for Microsoft Office Outlook is offline. The plug-in is then executed again when Microsoft Dynamics CRM for Outlook goes online and synchronization between Microsoft Dynamics CRM for Outlook and the Microsoft Dynamics CRM server occurs.


You can add code to your plug-in to check if the plug-in is being executed due to a synchronization between Microsoft Dynamics CRM for Outlook and the Microsoft Dynamics CRM server. To add this functionality to your plug-in, add code to inspect the CallerOrigin property of IPluginExecutionContext as shown in the following code sample.

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.
}
}
}

When registering a plug-in for offline execution, always register the plug-in for a synchronous mode of execution. Asynchronous execution of offline plug-ins is not supported.