Сбой API Magento XMLRPC с использованием оператора finset - PullRequest
2 голосов
/ 19 сентября 2010

Magento версия 1.4.1.1

Я пытаюсь получить список продуктов, отфильтрованных для определенного веб-сайта, с помощью API XMLRPC (вызов метода catalog_product.list).Сервер возвращает «неизвестную ошибку».Я могу вызвать этот же метод и выполнить фильтрацию по статусу, sku и т. Д. Но каждый раз, когда я пытаюсь отфильтровать поле, которое может содержать несколько значений (например, веб-сайты, категории, category_ids), появляется неизвестная ошибка.Я использую C # и отличную библиотеку Чарльза Кука xmlrpc.net.Я захватил XML, отправляемый на сервер, как показано ниже.Может ли кто-нибудь объяснить, почему это происходит?

Это работает:

<?xml version="1.0"?>
<methodCall>
  <methodName>call</methodName>
  <params>
    <param>
      <value>
        <string>81a7c4fffec8e78a6fe4b3f15f3e5cd0</string>
      </value>
    </param>
    <param>
      <value>
        <string><b>catalog_product.list</b></string>
      </value>
    </param>
    <param>
      <value>
        <array>
          <data>
            <value>
              <struct>
                <member>
                  <name><b>status</b></name>
                  <value>
                    <struct>
                      <member>
                        <name><b>eq</b></name>
                        <value>
                          <string><b>1</b></string>
                        </value>
                      </member>
                    </struct>
                  </value>
                </member>
              </struct>
            </value>
          </data>
        </array>
      </value>
    </param>
  </params>
</methodCall>

Это не так:

<?xml version="1.0"?>
<methodCall>
  <methodName>call</methodName>
  <params>
    <param>
      <value>
        <string>5d7412249845e29458b63e3b03935445</string>
      </value>
    </param>
    <param>
      <value>
        <string><b>catalog_product.list</b></string>
      </value>
    </param>
    <param>
      <value>
        <array>
          <data>
            <value>
              <struct>
                <member>
                  <name><b>websites</b></name>
                  <value>
                    <struct>
                      <member>
                        <name><b>finset</b></name>
                        <value>
                          <string><b>1</b></string>
                        </value>
                      </member>
                    </struct>
                  </value>
                </member>
              </struct>
            </value>
          </data>
        </array>
      </value>
    </param>
  </params>
</methodCall>

Ответы [ 2 ]

0 голосов
/ 03 мая 2011

Возможно, вы захотите попробовать, он может предложить больше примеров в качестве руководства к вашей проблеме: http://code.google.com/p/csharlibformagexmlrpcapi/

0 голосов
/ 20 сентября 2010

Можете ли вы использовать xdebug и вашу IDE для пошагового выполнения запроса и отслеживания, какой класс его обрабатывает? Вы можете прочитать источник, чтобы отследить, требуется ли для нескольких операторов условий определенный синтаксис.

EDIT

Напоминаю, что XSLT не будет создавать массив, если вместо нескольких братьев и сестер существует один узел. Итак, если finset или другие операторы с несколькими условиями ожидают массив, и вы передаете один узел в <value>, возможно, он принимается как скаляр и, следовательно, вызов функции не выполняется? Возможно, попробуйте отправить <value><string>1</string><string>2</string></value>, чтобы проверить мою теорию?

...