Tôi đang cố gắng tạo hook_cron đơn giản để kết nối với API bên ngoài, trả về một số dữ liệu và cập nhật một số trường trong một số thực thể. Mình đang tạo như thế này để hiểu rõ hơn về cách thức hoạt động của cron nên sau này mình sẽ nâng cấp nó thành queue.
Vấn đề là cron đang chạy, nhưng ngay cả khi không có lỗi, thực thể vẫn không lưu hoặc cập nhật. Nếu tôi sao chép mã và cố gắng thực thi nó bằng một tuyến đường (không sử dụng cron), thì nó sẽ hoạt động như dự định. Tôi thực sự không biết vấn đề với nó là gì.
Tôi cảm ơn bạn đã giúp đỡ của bạn.
Mã dưới đây:
chức năng correios_web_service_cron()
{
$trackingService = \Drupal::service('correios_web_service.tracking');
$eventService = \Drupal::service('correios_web_service.event');
lỗi $ = null;
cố gắng {
$order_ids = \Drupal::entityQuery('commerce_order')
->điều kiện('loại', 'chiến dịch') //! Ver se terá que mudar o tipo
->điều kiện('trạng thái', $eventService->getStatusByAlias('entregue')['description'], '<>')
->điều kiện('trạng thái', $eventService->getStatusByAlias('avaliado')['description'], '<>')
->điều kiện('trạng thái', $eventService->getStatusByAlias('cancelado')['description'], '<>')
->điều kiện('field_tracking_code', NULL, '<>')
->thực thi();
$Orders = \Drupal::entityTypeManager()->getStorage('commerce_order')->loadMultiple($order_ids);
}
bắt (\Throwable $e) {
$error = $e->getMessage();
}
if (trống($error) && !empty($Orders)) {
foreach ($Orders as $Order) {
$tracking_code = $Order->get('field_tracking_code')->value;
cố gắng {
$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']);
$Order->save();
}
bắt (\Throwable $e) {
\Drupal::logger('correios_web_service_cron')->error($e->getMessage());
}
}
}
if (!empty($error)) {
\Drupal::logger('correios_web_service_cron')->error($error);
}
}