Điểm:0

Cron đang chạy nhưng không lưu thực thể

lá cờ cn

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);
    }
}
Jean da Silva avatar
lá cờ cn
Thực hiện một số thử nghiệm, tôi nhận thấy rằng bằng cách nào đó khi thực hiện Truy vấn trong cron, nó không trả về bất kỳ dữ liệu nào, nhưng khi thực hiện cùng một truy vấn bên ngoài cron, nó sẽ trả về dữ liệu. Ai đó biết đây là gì?
beltouche avatar
lá cờ cn
Âm thanh như một vấn đề quyền đối với tôi. Hãy xem xét rằng cron không nhất thiết phải chạy mọi thứ với tư cách là người dùng đã đăng nhập như khi bạn đang sử dụng Bộ điều khiển. Trong một trường hợp tương tự, tôi thực sự đã đặt mã của mình vào Bộ điều khiển và yêu cầu cron gọi nó.
Jean da Silva avatar
lá cờ cn
cảm ơn bạn đã nhận xét, tôi sẽ cố gắng sử dụng truy vấn trong Bộ điều khiển.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.