Различная структура 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 - это метод, созданный нашими разработчиками, и он не опубликован.

0 ответов

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