Puncte:0

Cron rulează, dar nu salvează entitatea

drapel cn

Încerc să creez un simplu hook_cron pentru a se conecta la un API extern, a returna unele date și a actualiza unele câmpuri în unele entități. Creez astfel pentru a înțelege mai bine cum funcționează cron, așa că îl voi actualiza mai târziu la o coadă.

Problema este că cronul rulează, dar chiar și fără erori entitatea nu salvează sau actualizează. Dacă copiez codul și încerc să-l execut cu o rută (nu folosesc cron), funcționează conform intenției. Chiar nu stiu care este problema cu el.

Vă mulțumesc pentru ajutor.

Codul de mai jos:

funcția correios_web_service_cron()
{
    $trackingService = \Drupal::service('correios_web_service.tracking');
    $eventService = \Drupal::service('correios_web_service.event');

    $eroare = null;

    încerca {
        $order_ids = \Drupal::entityQuery('commerce_order')
            ->condition('tip', 'campanie') //! Ver se terá que mudar o tipo
            ->condition('state', $eventService->getStatusByAlias('entregue')['description'], '<>')
            ->condition('state', $eventService->getStatusByAlias('avaliado')['description'], '<>')
            ->condition('state', $eventService->getStatusByAlias('cancelado')['description'], '<>')
            ->condition('field_tracking_code', NULL, '<>')
            ->execute();

        $Comenzi = \Drupal::entityTypeManager()->getStorage('commerce_order')->loadMultiple($order_ids);
    }
    prinde (\Throwable $e) {
        $eroare = $e->getMessage();
    }

    if (gol ($eroare) && !gol ($Comenzi)) {
        foreach ($Comenzi ca $Order) {
            $tracking_code = $Comandă->get('field_tracking_code')->valoare;

            încerca {
                $response = $trackingService->trackObjectFormatted($tracking_code);

                $Order->set('state', $response['description']);
                $Order->set('field_tracking_event_code', $response['event_code']);
                $Order->set('field_tracking_event_message', $response['event_message']);
                $Order->set('field_tracking_delivery_date', $response['delivery_date']);

                $Comanda->salvare();
            }
            prinde (\Throwable $e) {
                \Drupal::logger('correios_web_service_cron')->error($e->getMessage());
            }
        }
    }
    
    dacă (!gol ($eroare)) {
        \Drupal::logger('correios_web_service_cron')->error($error);
    }
}
Jean da Silva avatar
drapel cn
Făcând unele teste, m-am gândit că, cumva, atunci când execut Interogarea în cron, nu returnează date, dar când execută aceeași interogare în afara cron, returnează date. Stie cineva ce este asta?
beltouche avatar
drapel cn
Mi se pare o problemă de permisiuni. Luați în considerare că cron nu rulează neapărat lucrurile ca utilizator conectat, ca atunci când utilizați un controler. Într-o circumstanță similară, mi-am pus codul într-un controler și am cerut cron să-l invoce.
Jean da Silva avatar
drapel cn
mulțumesc pentru comentariu, voi încerca să folosesc interogarea într-un controler.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.