Laravel API не может обновить Microsoft Dynamic Nav Клиент

У меня есть Laravel API, обращающийся к экземпляру MS Nav для выполнения перетасовки данных и миграции между двумя системами. Я могу создавать записи клиентов в Nav нормально, но у меня возникают некоторые проблемы с обновлением.

Я могу выполнить один запрос PATCH для обновления записи о клиенте, любые последующие запросы возвращают следующее сообщение об ошибке.

{
    "odata.error":{
        "code":"",
        "message":{
            "lang":"en-US",
            "value":"Another user has already changed the record."
        }
    }
}

Вот как выглядит мой PHP-код, если это имеет значение.

/**
 * @param string $navNo
 * @param string $eTag
 * @param array $data
 * @return array
 */
public function updateCustomer($navNo = '', $eTag = '', $data = []) {
    $url = $this->config['uri'] . ':' . $this->config['port'] . '/' . $this->config['server'] . '/' . $this->config['service'] . '/CustomerCardPage';
    $url .= "('$navNo')" . '?$format=json&company=' . $this->config['company'];

    $options = [
        'auth'    => $this->config['auth'],
        'headers' => [
            'Content-Type' => 'application/json',
            'If-Match'     => 'W/"\'' . $eTag . '\'"',
        ],
        'json'    => $data,
    ];

    return $this->makeRequest('PATCH', $url, $options);
}

/**
 * @param $method
 * @param $url
 * @param $options
 * @return array
 */
private function makeRequest($method, $url , $options) {
    $response = ['success' => true, 'data' => null, 'error' => null];

    try {
        $res = $this->client->request($method, $url, $options);

        $body = json_decode($res->getBody(), true);
        $response['data'] = $body;
    } catch (BadResponseException $e) {
        $res = $e->getResponse()->getBody()->getContents();

        $response['success'] = false;
        $response['error'] = $res;
    }

    return $response;
}

Мне не удалось найти ничего полезного на форумах поддержки Nav. Кто-нибудь еще сталкивался с этой проблемой с Laravel / PHP или любым другим внутренним языком / фреймворком?

Заявление об ограничении ответственности: У меня нет абсолютно никакого опыта работы с MS Dynamic Nav, и у меня нет прямого доступа к панели инструментов Nav или как вы бы это назвали.

Вот версии соответствующих фреймворков / пакетов / сервисов, с которыми я работаю:

  • Laravel: 5.6
  • Жрать: 6.3
  • Nginx: 1.13.6
  • Nav: ...? Может подслушать кого-нибудь, чтобы узнать, поможет ли это.
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
210
1

Ответы 1

Догадаться. ETag обновляется каждый раз, когда клиент обновляет, поскольку он действует как контроль версий. Ошибка в основном говорила мне, что я не могу обновить версию, потому что она уже была обновлена ​​ранее.

Чтобы исправить это, просто не забудьте обновить клиентский ETag после обновления.

Другие вопросы по теме