API do Magento 2: filtrar pedidos por atributo de extensão

10

Eu tenho uma extensão com um atributo atribuído a order itemschamado warehouse.
Eu posso ver esse atributo na propriedade " extension_attributes".
Preciso filtrar pedidos com base nesse atributo. Não consigo encontrar nenhuma documentação sobre como fazer isso.

Exemplo de fragmento de resposta da API:

[items] => Array(
    [0] => Array(
        [extension_attributes] => Array(
            [warehouse] => MyWarehouse
        )
    )
)

O filtro a seguir gera um erro interno:

searchCriteria[filter_groups][2][filters][0][field]=warehouse,searchCriteria[filter_groups][2][filters][0][value]=mywarehouse,searchCriteria[filter_groups][2][filters][0][condition_type]=eq

Alguma sugestão de como posso filtrar pedidos usando o atributo de armazém por meio do API?

- Ponto adicional sobre esta questão:

Nesse caso, se seguirmos o blog da Fooman. Podemos filtrar a coleção pelo atributo extension * ?

  • Filtro de coleção por esta extensão Atributo Deve ser executado rápido?
  • Se usarmos a tabela db personalizada para salvar esta tabela de atributos de extensão, como filtrar? Deve funcionar magento front-end e back-end também.
  • onde é necessário fazer modificações e qual classe precisa adicionar ou qualquer blog de referência?

Aguarde o melhor e descreva / breve resposta sobre esses pontos?

Jim
fonte
Ninguém respondeu?
Bunyamin Inan
11
Você declarou seu atributo em Module>/etc/extension_attributes.xml?
Thiago Lima
Sim, cara, eu não fiz isso.
Amit Bera
2
Você fez ou não? Talvez esse seja o problema.
Thiago Lima

Respostas:

4

Você pode tentar isso

/rest/V1/orders?searchCriteria[filter_groups][0][filters][0][field]=warehouse&searchCriteria[filter_groups][0][filters][0][value]=MyWarehouse&searchCriteria[filter_groups][0][filters][0][condition_type]=eq
Agnes
fonte
isto não é dada minha resposta :(
Amit Bera
Por favor, explique brevemente
Amit Bera
@AmitBera, você precisa salvar o atributo na tabela correspondente do banco de dados e chamar a API de acordo. Verifique minha resposta.
Vivek Kumar
@AmitBera, você está me pedindo para explicar sobre os atributos de extensão ou sobre o uso dos atributos de extensão nos critérios de pesquisa da API
Agnes
Eu estou perguntando sobre critérios de pesquisa na API
Amit Bera
1

O searchCriteria não filtra os resultados da resposta da API em vez do db / collection, se os atributos customizados no extension_attribute não estiverem disponíveis no db como uma coluna na tabela na qual os dados estão sendo buscados, eles não receberão resposta.

Por exemplo. Eu faço a seguinte chamada da API -

 http://example.com/rest/V1/orders?searchCriteria[filter_groups][0][filters][0][field]=random&searchCriteria[filter_groups][0][filters][0][value]=random&searchCriteria[filter_groups][0][filters][0][condition_type]=eq

Então, como não há coluna chamada aleatória na tabela sales_order (da qual a API está buscando resposta), recebo o seguinte erro;

SQLSTATE [42S22]: Coluna não encontrada: 1054 Coluna desconhecida 'aleatória' na cláusula 'where', a consulta foi: SELECT main_table. * FROM sales_orderAS main_tableWHERE (( random= 'random'))

Portanto, se você precisar chamar seus dados personalizados na API, precisará salvá-los na respectiva tabela em uma nova coluna, então poderá chamá-los normalmente usando o nome da coluna como o campo fiter e o valor como o valor desejado, como abaixo;

 http://example.com/rest/V1/orders?searchCriteria[filter_groups][0][filters][0][field]=column_name&searchCriteria[filter_groups][0][filters][0][value]=desired_value&searchCriteria[filter_groups][0][filters][0][condition_type]=eq

Eu testei eu mesmo, espero que o mesmo funcione para você também.

Vivek Kumar
fonte
1

No momento em que escrevi isso (Magento 2.2), não acho que haja uma maneira de filtrar os atributos de extensão. Embora eles estão presentes na coleção subjacente é selectse você definir uma <join>no extension_attributes.xml, parece que você não pode filtrar nele.

Cabe ao desenvolvedor da extensão fornecer uma maneira de filtrar os valores de um atributo de extensão. Você pode ver um exemplo no módulo de pagamentos da Amazon: https://github.com/amzn/amazon-payments-magento-2-plugin/blob/master/src/Login/Plugin/CustomerCollection.php#L51

Nesse plug-in, você pode ver como eles esperam que a tabela já esteja associada (como é definida em extension_attributes.xml), mas aplique o filtro manualmente.

Mark van der Sanden
fonte