Beispiel #1
0
        /// <summary>
        /// Sets up the scan job.
        /// </summary>
        /// <param name="device">The device.</param>
        protected override void SetupJob(IDevice device)
        {
            ScanLog.JobEndStatus = "Failed";
            if (device == null)
            {
                throw new ArgumentNullException(nameof(device));
            }

            // Update the destination type
            ScanLog.ScanType = _data.DestinationType;

            UpdateStatus($"Setting up device at address {device.Address} for user {ExecutionData.Credential.UserName}");

            InitializeAuthenticator(_data.AuthProvider, device, ExecutionData);
            // Load the network folder application
            _folderApp = NetworkFolderAppFactory.Create(device);

            _folderApp.WorkflowLogger = Authenticator.WorkflowLogger = WorkflowLogger;
            _folderApp.Pacekeeper     = Authenticator.Pacekeeper = new Pacekeeper(_data.AutomationPause);
            _folderApp.Launch(Authenticator, !_data.ApplicationAuthentication ? AuthenticationMode.Eager : AuthenticationMode.Lazy);

            // Apply settings from the configuration
            if (_data.UseQuickset)
            {
                _folderApp.SelectQuickset(_data.QuickSetName);
            }
            else
            {
                //Network credential being passed as parameter to access the folder and it is used by jediomninetworkfolderapp now
                _folderApp.AddFolderPath(_data.FolderPath, ExecutionData.Credential, _data.ApplyCredentialsOnVerification);
            }

            // Update the destination count
            ScanLog.DestinationCount = (_data.DestinationCount > 0 ?
                                        (short)_data.DestinationCount :
                                        (short)_folderApp.GetDestinationCount());

            // Enter the file name
            _folderApp.EnterFileName(FilePrefix.ToString().ToLowerInvariant());

            //Sets the scan job options
            SetOptions(_data.ScanOptions, _folderApp.Options.GetType(), _folderApp.GetType(), device);
            ScanLog.Ocr = _data.UseOcr;

            // Set job build
            _folderApp.Options.SetJobBuildState(UseJobBuild);
        }
        /// <summary>
        /// Networks the folder lazy authentication.
        /// </summary>
        /// <param name="authenticator">The authenticator.</param>
        /// <param name="device">The device.</param>
        protected void NetworkFolderLazyAuth(IAuthenticator authenticator, IDevice device)
        {
            INetworkFolderApp networkFolderApp = NetworkFolderAppFactory.Create(device);

            networkFolderApp.Launch(authenticator, AuthenticationMode.Lazy);
        }
        /// <summary>
        /// Performs ScanToFolder job on Control Panel
        /// </summary>
        /// <param name="device"></param>
        /// <param name="folderScanData"></param>
        /// <returns></returns>
        private PluginExecutionResult ExecuteFolderActivity(IDevice device, ScanActivityData folderScanData, IAuthenticator authenticator)
        {
            var result = new PluginExecutionResult(PluginResult.Failed);

            // Make sure the device is in a good state
            UpdateStatus($"Setting up device at address {device.Address} for user {ExecutionData.Credential.UserName}");
            var devicePrepManager = DevicePreparationManagerFactory.Create(device);

            devicePrepManager.WorkflowLogger = WorkflowLogger;
            devicePrepManager.InitializeDevice(true);

            // Load the network folder application
            INetworkFolderApp contentionFolderApp = NetworkFolderAppFactory.Create(device);

            //Launch the Scan to Network Folder app
            UpdateStatus("ScanToFolder Activity: Launching the Scan To Folder application...");
            contentionFolderApp.Launch(authenticator, AuthenticationMode.Lazy);

            //Network credential being passed as parameter to access the folder and it is used by jediomninetworkfolderapp now
            UpdateStatus("ScanToFolder Activity: Entering folder path...");
            contentionFolderApp.AddFolderPath(folderScanData.FolderPath, ExecutionData.Credential, true);

            // Enter the file name
            ScanFilePrefix FilePrefix = new ScanFilePrefix(ExecutionData.SessionId, ExecutionData.Credential.UserName, "Folder");

            UpdateStatus("ScanToFolder Activity: Entering file name...");
            contentionFolderApp.EnterFileName(FilePrefix.ToString().ToLowerInvariant());

            // Set job build
            contentionFolderApp.Options.SetJobBuildState((folderScanData.PageCount > 1) ? true : false);

            try
            {
                ScanExecutionOptions options = new ScanExecutionOptions();
                options.ValidateJobExecution = false;
                if (folderScanData.PageCount > 1)
                {
                    options.JobBuildSegments = folderScanData.PageCount;
                }

                //Finish the job
                UpdateStatus("ScanToFolder Activity: Finishing the activity...");
                if (contentionFolderApp.ExecuteJob(options))
                {
                    result = new PluginExecutionResult(PluginResult.Passed);
                }
                else
                {
                    throw new DeviceWorkflowException(result.Message);
                }

                // Clean up
                try
                {
                    devicePrepManager.NavigateHome();
                    if (devicePrepManager.SignOutRequired())
                    {
                        UpdateStatus("ScanToFolder Activity: Signing Out...");
                        devicePrepManager.SignOut();
                    }
                    UpdateStatus("ScanToFolder Activity: Activity finished");
                }
                catch (Exception ex) when(ex is DeviceCommunicationException || ex is DeviceInvalidOperationException)
                {
                    // Don't fail the activity if there is an exception here.
                    ExecutionServices.SystemTrace.LogWarn($"Device could not return to home screen: {ex.ToString()}");
                }
            }
            finally
            {
                // End of ScanToFolder activity
                ExecutionServices.SystemTrace.LogDebug("ScanToFolder activity completed");
            }

            return(result);
        }