public void Initialize(PluginConfigurationData configuration, PluginEnvironment environment)
        {
            // Initialize the activity data by deserializing it from an existing copy of configuration information.
            _activityData = configuration.GetMetadata <MailMergeActivityData>();

            DynamicLocalPrintQueueDefinition definition = configuration.PrintQueues.SelectedPrintQueues.First() as DynamicLocalPrintQueueDefinition;
            IPrinterInfo    printDevice = ConfigurationServices.AssetInventory.GetAsset(definition.AssetId) as IPrinterInfo;
            PrintDriverInfo printDriver = ConfigurationServices.AssetInventory.AsInternal().GetPrintDrivers().First(n => n.PrintDriverId == definition.PrintDriverId);

            _localPrintQueueInfo = new DynamicLocalPrintQueueInfo(printDevice, printDriver, definition.PrinterPort, definition.PrintDriverConfiguration);

            PopulateMailMergeUi();
        }
        public PluginExecutionResult Execute(PluginExecutionData executionData)
        {
            if (!_setupDone)
            {
                AddOfficeRegistryEntries();
                _setupDone = true;
            }

            _mailMergeData            = executionData.GetMetadata <MailMergeActivityData>();
            _printQueueInfoCollection = executionData.PrintQueues;
            _userName  = executionData.Credential.UserName;
            _sessionId = executionData.SessionId;

            _tempDataSourceFileName = Path.Combine(Path.GetTempPath(), $"{_userName}_{Guid.NewGuid()}_tempDataSourceFile.doc");

            //install the local printer or remote print queue
            // Set up the list of print devices
            if (_printQueueInfoCollection.Count == 0)
            {
                return(new PluginExecutionResult(PluginResult.Skipped));
            }

            PrintQueueInfo printQueueInfo = _printQueueInfoCollection.First();
            PrintQueue     printQueue     = PrintQueueController.Connect(printQueueInfo);

            // Log the device/server that was used for this job, if one was specified
            LogDevice(executionData, printQueueInfo);


            if (_mailMergeData.PrintJobSeparator)
            {
                PrintTag(printQueue, executionData);
            }

            _defaultPrintQueue = printQueue.FullName;

            //generate the mail merge doc and print it to default print queue
            try
            {
                ExecutionServices.CriticalSection.Run(new Framework.Synchronization.LocalLockToken(printQueueInfo.AssociatedAssetId, new TimeSpan(0, 0, 30), new TimeSpan(0, 5, 0)), PrintMailMerge);
            }
            catch (Exception ex)
            {
                return(new PluginExecutionResult(PluginResult.Failed, ex.Message));
            }

            return(new PluginExecutionResult(PluginResult.Passed));
        }
 public void Initialize(PluginEnvironment environment)
 {
     // Initialize the activity data with a default value
     _activityData = new MailMergeActivityData();
     PopulateMailMergeUi();
 }