У меня есть 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 или как вы бы это назвали.
Вот версии соответствующих фреймворков / пакетов / сервисов, с которыми я работаю:





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