Is this really the version you are looking for? Kentico 8.2 documentation is no longer updated. Use the switch in the header to choose your Kentico version.

Automatically synchronizing staging and integration tasks

You can use event handlers to automatically synchronize content staging and integration bus tasks. Use the API to synchronize the required tasks during the following events:

  • StagingEvents.LogTask.After
  • IntegrationEvents.LogInternalTask.After
  • IntegrationEvents.LogExternalTask.After

Tip: Access the data of the synchronization task through the Task property of the event handler's StagingLogTaskEventArgs or IntegrationTaskEventArgs parameter.

Example

The following example demonstrates how to automatically synchronize staging tasks and outgoing integration tasks:

  1. Assign handlers to the StagingEvents.LogTask.After and IntegrationEvents.LogInternalTask.After events. The example uses a custom class in the App_Code folder:

    using CMS.Base;
    using CMS.Synchronization;
    using CMS.SiteProvider;
    
    using CMS.SynchronizationEngine;
    
    [LogTaskHandlers]
    public partial class CMSModuleLoader
    {
    	/// <summary>
    	/// Custom attribute class.
    	/// </summary>
    	private class LogTaskHandlers : CMSLoaderAttribute
    	{
    		/// <summary>
    		/// Called automatically when the application starts
    		/// </summary>
    		public override void Init()
    		{
                // Assigns a handler to the StagingEvents.LogTask.After event
    			// This event occurs after the system creates content staging synchronization tasks (separately for each task)
    			StagingEvents.LogTask.After += LogStagingTask_After;
    
                // Assigns a handler to the IntegrationEvents.LogInternalTask.After event
    			// This event occurs after the system creates outgoing integration tasks (separately for each task)
    			IntegrationEvents.LogInternalTask.After += LogIntegrationTask_After;
    		}
    	}
    }
  2. Define the handler methods (inside the custom CMSLoaderAttribute class):

    // Automatically synchronizes staging tasks
    private void LogStagingTask_After(object sender, StagingTaskEventArgs e)
    {
    	// Gets the target server
    	ServerInfo targetServer = ServerInfoProvider.GetServerInfo("MyServer", SiteContext.CurrentSiteID);
    
    	if ((targetServer != null) && (e.Task != null))
    	{
    		// Synchronizes the processed staging task to the target server
    		StagingHelper.RunSynchronization(e.Task.TaskID, targetServer.ServerID);
    	}
    }
    
    // Automatically synchronizes outgoing integration tasks
    private void LogIntegrationTask_After(object sender, IntegrationTaskEventArgs e)
    {
    	// Gets the info object for an integration connector
    	IntegrationConnectorInfo connectorInfo = IntegrationConnectorInfoProvider.GetIntegrationConnectorInfo("MyConnector");
    
    	if ((connectorInfo != null) && (e.Task != null))
    	{
    		// Gets an instance of the integration connector class
    		BaseIntegrationConnector connector = IntegrationHelper.GetConnector(connectorInfo.ConnectorName) as BaseIntegrationConnector;
    
    		// Synchronizes the processed integration task
    		connector.ProcessInternalTask(e.Task);
    	}
    }
  3. Save the class.

The handlers ensure that the system immediately synchronizes:

  • All staging tasks to a target server
  • All outgoing integration tasks using a specified connector