Различная структура XML от nodejs до Odoo с помощью пакета XML-RPC npm
- Я хотел бы обновить данные в odoo ERP, который принимает их как XML.
- Я использую пакет odoo-xmlrpc npm, для которого требуется модуль узла XML-RPC для обновления данных.
- Я отправляю данные в формате JSON в функции узла ниже (массив inParams) и преобразую в формат, который принимает odoo.
Моя проблема в том, что отправленный xml не тот формат, который принимает odoo.
Структура XML Odoo Принимает:
<?xml version="1.0" encoding="UTF-8"?>
<methodCall>
<!-- used to call methods of odoo models -->
<methodName>execute</methodName>
<params>
<param>
<!-- database name -->
<value>
<string>DataB_Name</string>
</value>
</param>
<param>
<!-- user id -->
<value>
<int>1</int>
</value>
</param>
<param>
<!-- password -->
<value>
<string>admin</string>
</value>
</param>
<param>
<!-- model name -->
<value>
<string>product.product</string>
</value>
</param>
<param>
<!-- method name -->
<value>
<string>update_by_sku</string>
</value>
</param>
<param>
<value />
</param>
<param>
<!-- Product Template SKU -->
<value>
<string>G9309AZ17SPAR111-S</string>
</value>
<value>
<struct>
<member>
<!-- define all Fields for update-->
<!-- field name -->
<name>name</name>
<!-- field’s value-->
<value>
<string>New Product</string>
</value>
<name>weight</name>
<value>
<double>10</double>
</value>
</member>
</struct>
</value>
</param>
</params>
</methodCall>
и это xml, отправленный odoo-xmlrpc, ну, в нем нет ненужных полей, но я сейчас проверяю "имя".
Мой вопрос заключается в том, как сделать так, чтобы приведенный ниже XML отправлял информацию о продукте (имя, вес и т. Д.) Ниже, не имея меток ARRAY & DATA, и делал так, как показано выше.
CallBack XML:
<?xml version="1.0" encoding="UTF-8"?>
<methodCall>
<methodName>execute_kw</methodName>
<params>
<param>
<value>
<string>DataB_Name</string>
</value>
</param>
<param>
<value>
<int>1</int>
</value>
</param>
<param>
<value>
<string>admin</string>
</value>
</param>
<param>
<value>
<string>product.product</string>
</value>
</param>
<param>
<value>
<string>update_by_sku</string>
</value>
</param>
<param>
<value>
<string />
</value>
</param>
<param>
<value>
<array>
<data>
<value>
<string>G9309AZ17SPAR111-S</string>
</value>
<value>
<struct>
<member>
<name>name</name>
<value>
<string>New Product</string>
</value>
</member>
</struct>
</value>
</data>
</array>
</value>
</param>
</params>
</methodCall>
Функция Nodejs:
Вот как я отправляю данные из nodejs:
exports.updateProductBySku = function(req, res) {
odoo.connect(function (err) {
if (err) { return console.log(err); }
console.log('Connected to Odoo server.');
var inParams = [];
inParams.push('G9309AZ17SPAR111-S'); // SKU to update
inParams.push({'name': 'New Product'});
var params = [];
params.push(inParams);
odoo.execute_kw('product.product', 'update_by_sku', params, function (err, value) {
if (err) { return console.log(err); }
console.log('Result: ', value);
});
});
};
PS: update_by_sku - это метод, созданный нашими разработчиками, и он не опубликован.