diff --git a/CRM/DataprocessorOutputExport/AbstractOutputExport.php b/CRM/DataprocessorOutputExport/AbstractOutputExport.php
index 3c2ac179850d4a8170531166d2588d183df29dfc..9642afbe2a40323c042670eb88c6d06f9832b2a2 100644
--- a/CRM/DataprocessorOutputExport/AbstractOutputExport.php
+++ b/CRM/DataprocessorOutputExport/AbstractOutputExport.php
@@ -46,16 +46,14 @@ abstract class CRM_DataprocessorOutputExport_AbstractOutputExport implements Exp
   /**
    * Run the export of the data processor.
    *
-   * @param $filename
-   * @param \Civi\DataProcessor\ProcessorType\AbstractProcessorType $dataProcessor
-   * @param $configuration
-   * @param $idField
+   * @param string $filename
+   * @param AbstractProcessorType $dataProcessor
+   * @param array $configuration
+   * @param string|null $idField
    * @param array $selectedIds
    * @param array $formValues
-   *
-   * @return mixed
    */
-  abstract protected function exportRecords($filename, AbstractProcessorType $dataProcessor, $configuration, $idField=null, array $selectedIds=[], array $formValues=[]);
+  abstract protected function exportRecords(string $filename, AbstractProcessorType $dataProcessor, array $configuration, string $idField=null, array $selectedIds=[], array $formValues=[]);
 
   /**
    * Returns the class name of the form with the export options.
@@ -125,7 +123,7 @@ abstract class CRM_DataprocessorOutputExport_AbstractOutputExport implements Exp
    *
    * @return false|string
    */
-  public function getConfigurationTemplateFileName() {
+  public function getConfigurationTemplateFileName():? string {
     return "CRM/DataprocessorOutputExport/Form/Configuration/GenericOutputExport.tpl";
   }
 
@@ -241,8 +239,8 @@ abstract class CRM_DataprocessorOutputExport_AbstractOutputExport implements Exp
     }
 
     $this->createHeader($path, $dataProcessorClass, $outputBAO['configuration'], $dataProcessor, $idField, $selectedIds, []);
-    $this->exportDataProcessor($path, $dataProcessorClass, $outputBAO['configuration'], $idField, $selectedIds, []);
-    $this->createFooter($path, $dataProcessorClass, $outputBAO['configuration'], $dataProcessor, $idField, $selectedIds, []);
+    $this->exportRecords($path, $dataProcessorClass, $outputBAO['configuration'], $idField, $selectedIds);
+    $this->createFooter($path, $dataProcessorClass, $outputBAO['configuration'], $dataProcessor, $idField, $selectedIds);
 
     $mimeType = $this->mimeType();
 
@@ -377,7 +375,7 @@ abstract class CRM_DataprocessorOutputExport_AbstractOutputExport implements Exp
     }
 
     $outputClass->queueCtx = $ctx;
-    $outputClass->exportDataProcessor($filename, $dataProcessorClass, $output['configuration'], $idField, $selectedIds, $formValues);
+    $outputClass->exportRecords($filename, $dataProcessorClass, $output['configuration'], $idField, $selectedIds, $formValues);
     return TRUE;
   }
 
@@ -475,6 +473,7 @@ abstract class CRM_DataprocessorOutputExport_AbstractOutputExport implements Exp
    * Checks whether the current user has access to this output
    *
    * @param array $output
+   * @param array $dataProcessor
    * @return bool
    */
   public function checkPermission(array $output, array $dataProcessor): bool {
diff --git a/CRM/DataprocessorOutputExport/CSV.php b/CRM/DataprocessorOutputExport/CSV.php
index ccf452169f011f0069f262b0b9c2c3b4a021a152..36f970e35f7a776863afb816a4fce36cc6fbce4c 100644
--- a/CRM/DataprocessorOutputExport/CSV.php
+++ b/CRM/DataprocessorOutputExport/CSV.php
@@ -178,7 +178,7 @@ class CRM_DataprocessorOutputExport_CSV extends CRM_DataprocessorOutputExport_Ab
     fclose($file);
   }
 
-  protected function exportRecords($filename, AbstractProcessorType $dataProcessor, $configuration, $idField=null, $selectedIds=array(), $formValues=array()) {
+  protected function exportRecords(string $filename, AbstractProcessorType $dataProcessor, array $configuration, string $idField=null, array $selectedIds=array(), array $formValues=array()) {
     $file = fopen($filename. '.'.$this->getExtension(), 'a');
     try {
       while($record = $dataProcessor->getDataFlow()->nextRecord()) {
diff --git a/CRM/DataprocessorOutputExport/Form/OutputExport.php b/CRM/DataprocessorOutputExport/Form/OutputExport.php
index ebbbfd911fb49eec07b46b9a9c9223ebbb3dee2e..895400400011d8d9a2d11c1d0c7ac23f95f1bc68 100644
--- a/CRM/DataprocessorOutputExport/Form/OutputExport.php
+++ b/CRM/DataprocessorOutputExport/Form/OutputExport.php
@@ -85,15 +85,16 @@ class CRM_DataprocessorOutputExport_Form_OutputExport extends CRM_Core_Form {
     $factory = dataprocessor_get_factory();
 
     $dataProcessorSearchForm = $this->controller->getPage('Search');
-    if (!$dataProcessorSearchForm instanceof CRM_DataprocessorSearch_Form_AbstractSearch) {
-      throw new Exception('Invalid search form');
-    }
-    $this->setDataProcessorSearchForm($dataProcessorSearchForm);
-
-    $this->output = civicrm_api3("DataProcessorOutput", "getsingle", array('id' => $export_id));
-    $this->outputClass = $factory->getOutputByName($this->output['type']);
-    if ($this->outputClass instanceof DirectDownloadExportOutputInterface) {
-      $this->runExport();
+    if ($dataProcessorSearchForm instanceof CRM_DataprocessorSearch_Form_AbstractSearch) {
+      $this->setDataProcessorSearchForm($dataProcessorSearchForm);
+      try {
+        $this->output = civicrm_api3("DataProcessorOutput", "getsingle", ['id' => $export_id]);
+        $this->outputClass = $factory->getOutputByName($this->output['type']);
+        if ($this->outputClass instanceof DirectDownloadExportOutputInterface) {
+          $this->runExport();
+        }
+      } catch (CiviCRM_API3_Exception $e) {
+      }
     }
   }
 
diff --git a/CRM/DataprocessorOutputExport/PDF.php b/CRM/DataprocessorOutputExport/PDF.php
index d90925528bd5bb3ca13a1966a8599566afc4fd83..67c0f026e18e58f50437014ff92cfe10ec896082 100644
--- a/CRM/DataprocessorOutputExport/PDF.php
+++ b/CRM/DataprocessorOutputExport/PDF.php
@@ -344,7 +344,7 @@ class CRM_DataprocessorOutputExport_PDF extends CRM_DataprocessorOutputExport_Ab
     return $pdfFilename;
   }
 
-  protected function exportRecords($filename, AbstractProcessorType $dataProcessor, $configuration, $idField=null, $selectedIds=array(), $formValues=array()) {
+  protected function exportRecords(string $filename, AbstractProcessorType $dataProcessor, array $configuration, string $idField=null, array $selectedIds=array(), array $formValues=array()) {
     $hiddenFields = array();
     if (isset($configuration['hidden_fields']) && is_array($configuration['hidden_fields'])) {
       $hiddenFields = $configuration['hidden_fields'];
diff --git a/CRM/DataprocessorSearch/StateMachine/Search.php b/CRM/DataprocessorSearch/StateMachine/Search.php
index be9e91b21a09da9c6fb6cb53a14532b79bc3fbd3..4b8f976eb0ce586c2534cc71f46f8724503df48c 100644
--- a/CRM/DataprocessorSearch/StateMachine/Search.php
+++ b/CRM/DataprocessorSearch/StateMachine/Search.php
@@ -102,12 +102,12 @@ class CRM_DataprocessorSearch_StateMachine_Search extends CRM_Core_StateMachine
    * @return string|null
    */
   private function getExportFormClass(CRM_DataprocessorSearch_Controller_Search $controller):? string {
-    $export_id = $controller->get('export_id');
+    try {
+      $export_id = CRM_Utils_Request::retrieve('export_id', 'Integer');
+    } catch (CRM_Core_Exception $e) {
+    }
     if (empty($export_id)) {
-      try {
-        $export_id = CRM_Utils_Request::retrieve('export_id', 'Integer');
-      } catch (CRM_Core_Exception $e) {
-      }
+      $export_id = $controller->get('export_id');
     }
     if ($export_id) {
       $controller->set('export_id', $export_id);