Der DHL Fehler 214 wird nicht abgefangen und es kommt eine PHP Error Msg
Invalid argument supplied for foreach()

seit GX 3.8.0.0
PHP7

GXMainComponents/Controllers/HttpView/Admin/GeschaeftskundenversandController.inc.php

Zeile 511 wird davon ausgegangen, dass es ein Object mit LabelData gibt, dies ist in dem Fehlerfall aber nicht der Fall.

Code:
if((int)$response->Status->statusCode === 0)
			{
				[....]
			}
			else
			{
                $statusMessage = '';
                foreach($response->CreationState->LabelData->Status->statusMessage as $partMessage)
                {
                    $statusMessage .= !empty($statusMessage) ? ', ' : '';
                    $statusMessage .= (string)$partMessage;
                }
				$GLOBALS['messageStack']->add_session(sprintf('%s - %s (%s)',
				                                              $this->languageTextManager->get_text('gkv_error_creating_label'),
				                                              $statusMessage,
				                                              (string)$response->Status->statusCode), 'error');
				# $GLOBALS['messageStack']->add_session(sprintf('<pre>%s</pre>', htmlspecialchars(print_r($response, true))), 'error');
			}

Response sieht so aus:
Code:
USER NOTICE: "CreateShipmentOrder response:
stdClass Object
(
    [Version] => stdClass Object
(
[majorRelease] => 2
[minorRelease] => 0
)

[Status] => stdClass Object
(
[statusCode] => 214
[statusText] => invalid printer settings - please adjust your
printer settings in the DHL business customer portal "Sending > Basic Settings > General" and save
them in any case with occupied user.

[statusMessage] => Nicht unterstützte Pollingclient Druckkonfiguration.
)

)

Workaround/Fix
if Prüfung einbauen.
Else weil sonst doppelte Status Nachricht kommt weil in LabelData die gleiche MSG steht oder eine genauere.

Code:
$statusMessage = '';
                if(isset($response->CreationState->LabelData)){
	                foreach($response->CreationState->LabelData->Status->statusMessage as $partMessage)
	                {
	                    $statusMessage .= !empty($statusMessage) ? ', ' : '';
	                    $statusMessage .= (string)$partMessage;
	                }
                }else{
	                $statusMessage .= (string)$response->Status->statusMessage;
                }
                
                
				$GLOBALS['messageStack']->add_session(sprintf('%s - %s (%s)',
				                                              $this->languageTextManager->get_text('gkv_error_creating_label'),
				                                              $statusMessage,
				                                              (string)$response->Status->statusCode), 'error');

Git Change 3.7.2.0 auf 3.8.0.0 mit meinem Fix
Klicken Sie auf die Grafik für eine größere Ansicht 

Name:	Zofina_–_Working_Copy__master_–_1_Changed_Files_.jpg 
Hits:	7 
Größe:	22,3 KB 
ID:	689