Partkeepr: Error al escanear al usar la ID de pieza

Creado en 14 nov. 2017  ·  4Comentarios  ·  Fuente: partkeepr/PartKeepr

Estoy usando PartKeepr 1.3.0

Tengo un problema con el escaneo de códigos de barras para abrir el cuadro de diálogo de modificación de pieza.

Creé códigos de barras con el prefijo "PID -" + la ID única de la pieza

Configuré el código "PID-" en PartKeepr con "Buscar parte" como Acción, y luego seleccioné PartKeepr.PartBundle.Entity.Part. @id como campo de búsqueda.

Puedo escanear otros códigos de barras para ubicaciones de almacenamiento y estos abren la consulta de piezas en la ubicación como se esperaba. Esto parece ser específico de la búsqueda de piezas.

Cuando escaneo un código de barras, por ejemplo, "PID-12", PartKeepr responde al escaneo pero muestra el siguiente error:

Detalles

[Error de sintaxis] línea 0, columna 83: Error: esperado =, <, <=, <>,>,> =,! =, Obtuvo 'id'

Solicitar

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

Código de estado de respuesta

500

Respuesta

{"@context": "\ / parts \ / web \ / api \ / contexts \ / Error", "@ type": "Error", " hydra: title ": "Ocurrió un error", " hydra: description " : "[Error de sintaxis] línea 0, col 83: Error: esperado =, \ u003C, \ u003C =, \ u003C \ u003E, \ u003E, \ u003E =,! =, Got \ u0027id \ u0027"}

Configuración del servidor

doctrine_orm_version: 2.5.4
doctrine_dbal_version: 2.5.2
doctrine_common_version: 2.6.0-DEV
php_version: 7.0.22-0ubuntu0.16.04.1
auto_start_session: verdadero
maxUploadSize: 2097152
isOctoPartAvailable: false
availableImageFormats: JPG, GIF, PNG
max_users: ilimitado
proveedor_de_autenticación: PartKeepr.Auth.HTTPBasicAuthenticationProvider
tip_of_the_day_uri: https://partkeepr.org/tips/%s
cambio_contraseña: verdadero
patreonStatus: [objeto Objeto]

Bug

Comentario más útil

Una mejor solución es reemplazar el nombre de la propiedad directamente en src/PartKeepr/DoctrineReflectionBundle/Filter/AssociationPropertyTrait.php

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

Todos 4 comentarios

Creo que sé lo que está pasando aquí, pero no tengo idea de cómo resolverlo. Parece que se antepone una @ a la variable id en la solicitud GET.

Cuando eso sucede, se produce el error, si modifico la solicitud de obtención y elimino ese símbolo @, obtengo una respuesta que se ve así:

{"@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 devuelve la respuesta correcta que le dice a la interfaz de usuario que invoque una consulta de búsqueda ...?

Entonces, supongo que la pregunta es ¿cómo podemos evitar que este @ se incluya en la consulta GET en el escaneo del código de barras?

Ok, por mucho que esto no sea una solución, encontré una solución alternativa.

Tuve que modificar el siguiente archivo y todo funciona ahora, puedo escanear la identificación del elemento y la búsqueda funciona como se esperaba:

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

Modifique la línea 353 de:

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

Básicamente, es el símbolo @ el que está causando el problema y debe eliminarse de la solicitud GET Ajax. No estoy exactamente seguro de dónde hacer ese cambio, pero hacer lo anterior funcionó para mí como una solución temporal hasta que alguien pueda intervenir sobre cómo lograrlo correctamente ...

Tengo el mismo problema, parece ser el mismo que https://github.com/partkeepr/PartKeepr/issues/894

Una mejor solución es reemplazar el nombre de la propiedad directamente en src/PartKeepr/DoctrineReflectionBundle/Filter/AssociationPropertyTrait.php

public function setProperty($property)
{
    $this->property = str_replace("@", "", $property);
}
¿Fue útil esta página
0 / 5 - 0 calificaciones

Temas relacionados

JoarGjersund picture JoarGjersund  ·  12Comentarios

dani2bunny picture dani2bunny  ·  24Comentarios

gfarcas picture gfarcas  ·  20Comentarios

michielbrink picture michielbrink  ·  7Comentarios

Gasman2014 picture Gasman2014  ·  26Comentarios