Partkeepr: Erro de digitalização ao usar o ID da peça

Criado em 14 nov. 2017  ·  4Comentários  ·  Fonte: partkeepr/PartKeepr

Estou usando o PartKeepr 1.3.0

Eu tenho um problema com a leitura de códigos de barras para abrir a caixa de diálogo de modificação de peça.

Criei códigos de barras com o prefixo "PID -" + ID exclusivo da peça

Eu configurei o código "PID-" no PartKeepr com "Search Part" como a Action e, em seguida, selecionei PartKeepr.PartBundle.Entity.Part. @id como o campo de pesquisa.

Consigo escanear outros códigos de barras para locais de armazenamento e eles abrem a consulta de peças no local conforme o esperado. Isso parece ser específico da Part Lookup.

Quando eu digitalizo um código de barras, por exemplo "PID-12", PartKeepr responde à digitalização, mas exibe o seguinte erro:

Detalhes

[Erro de sintaxe] linha 0, coluna 83: Erro: esperado =, <, <=, <>,>,> =,! =, Obteve 'id'

Solicitar

OBTER http://192.168.0.196/parts/web/api/parts?_dc=1510689688405

Código de Status de Resposta

500

Resposta

{"@context": "\ / parts \ / web \ / api \ / contexts \ / Error", "@ type": "Error", " hydra: title ": "Ocorreu um erro", " hydra: description " : "[Erro de sintaxe] linha 0, coluna 83: Erro: esperado =, \ u003C, \ u003C =, \ u003C \ u003E, \ u003E, \ u003E =,! =, Obtido \ u0027id \ u0027"}

Configuração do Servidor

doctrine_orm_version: 2.5.4
Doutrine_dbal_version: 2.5.2
Doutrine_common_version: 2.6.0-DEV
php_version: 7.0.22-0ubuntu0.16.04.1
auto_start_session: true
maxUploadSize: 2097152
isOctoPartAvailable: false
availableImageFormats: JPG, GIF, PNG
max_users: ilimitado
authentication_provider: PartKeepr.Auth.HTTPBasicAuthenticationProvider
tip_of_the_day_uri: https://partkeepr.org/tips/%s
password_change: true
patreonStatus: [objeto objeto]

Bug

Comentários muito úteis

A melhor solução é substituir o nome da propriedade diretamente em src/PartKeepr/DoctrineReflectionBundle/Filter/AssociationPropertyTrait.php

public function setProperty($property)
{
    $this->property = str_replace("@", "", $property);
}

Todos 4 comentários

Acho que sei o que está acontecendo aqui, mas não tenho ideia de como resolver. Parece que um @ está sendo anexado à variável id na solicitação GET.

Quando isso acontece, o erro ocorre, se eu modificar a solicitação get e remover o símbolo @, recebo uma resposta semelhante a esta:

{"@context":"\/parts\/web\/api\/contexts\/Part","@id":"\/parts\/web\/api\/parts?_dc=1510773608949\u0026page=1\u0026start=0\u0026itemsPerPage=50\u0026group={"property":"categoryPath","direction":"ASC"}\u0026order=[{"property":"category.categoryPath","direction":"ASC"},{"property":"name","direction":"ASC"}]\u0026filter=[{"subfilters":[{"subfilters":[],"property":"id","operator":"LIKE","value":"43W"}],"type":"OR"}]","@type":"hydra:PagedCollection","hydra:totalItems":0,"hydra:itemsPerPage":50,"hydra:firstPage":"\/parts\/web\/api\/parts?_dc=1510773608949\u0026start=0\u0026itemsPerPage=50\u0026group={"property":"categoryPath","direction":"ASC"}\u0026order=[{"property":"category.categoryPath","direction":"ASC"},{"property":"name","direction":"ASC"}]\u0026filter=[{"subfilters":[{"subfilters":[],"property":"id","operator":"LIKE","value":"43W"}],"type":"OR"}]","hydra:lastPage":"\/parts\/web\/api\/parts?_dc=1510773608949\u0026start=0\u0026itemsPerPage=50\u0026group={"property":"categoryPath","direction":"ASC"}\u0026order=[{"property":"category.categoryPath","direction":"ASC"},{"property":"name","direction":"ASC"}]\u0026filter=[{"subfilters":[{"subfilters":[],"property":"id","operator":"LIKE","value":"43W"}],"type":"OR"}]","hydra:member":[],"hydra:search":{"@type":"hydra:IriTemplate","hydra:template":"\/parts\/web\/api\/parts{?}","hydra:variableRepresentation":"BasicRepresentation","hydra:mapping":[]}}

Parece que ele retorna a resposta correta, informando a IU para invocar uma consulta de pesquisa ...?

Então, eu acho que a questão é como podemos limitar este @ de ser incluído na consulta GET na leitura de código de barras?

Ok, por mais que isso não seja uma solução, eu encontrei uma solução.

Tive que modificar o seguinte arquivo e tudo funciona agora, posso verificar a identificação do item e a pesquisa funciona conforme o esperado:

/src/PartKeepr/DoctrineReflectionBundle/Filter/AdvancedSearchFilter.php

Modifique a linha 353 de:

$filter->setProperty($data->property);
Para:
$filter->setProperty(str_replace("@","",$data->property));

Basicamente, é o símbolo @ que está causando o problema e precisa ser removido da solicitação GET Ajax. Não tenho certeza de onde fazer essa alteração, mas fazer o acima funcionou para mim como uma correção temporária até que alguém pudesse intervir sobre como fazer isso corretamente ...

Tenho o mesmo problema, parece ser o mesmo que https://github.com/partkeepr/PartKeepr/issues/894

A melhor solução é substituir o nome da propriedade diretamente em src/PartKeepr/DoctrineReflectionBundle/Filter/AssociationPropertyTrait.php

public function setProperty($property)
{
    $this->property = str_replace("@", "", $property);
}
Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

olewolf picture olewolf  ·  18Comentários

JoarGjersund picture JoarGjersund  ·  12Comentários

kgabryszewska picture kgabryszewska  ·  8Comentários

michielbrink picture michielbrink  ·  7Comentários

Drachenkaetzchen picture Drachenkaetzchen  ·  11Comentários