Partkeepr: Erreur de numérisation lors de l'utilisation de l'ID de pièce

Créé le 14 nov. 2017  ·  4Commentaires  ·  Source: partkeepr/PartKeepr

J'utilise PartKeepr 1.3.0

J'ai un problème avec la numérisation des codes-barres pour ouvrir la boîte de dialogue de modification de la pièce.

J'ai créé des codes à barres avec le préfixe "PID-" + l'identifiant unique de la pièce

J'ai configuré le code "PID-" dans PartKeepr avec "Rechercher une pièce" comme action, puis j'ai sélectionné PartKeepr.PartBundle.Entity.Part. @id comme champ de recherche.

Je suis capable de scanner d'autres codes-barres pour les emplacements de stockage et ceux-ci ouvrent la requête pour les pièces dans l'emplacement comme prévu. Cela semble être spécifique à la recherche de pièce.

Lorsque je scanne un code-barres par exemple "PID-12", PartKeepr répond au scan mais affiche l'erreur suivante :

Détails

[Erreur de syntaxe] ligne 0, col 83 : Erreur : Attendu =, <, <=, <>, >, >=, !=, obtenu 'id'

Demande

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

Code d'état de la réponse

500

Réponse

{"@context":"\/parts\/web\/api\/contexts\/Error","@type":"Error"," hydra:title ":"Une erreur s'est produite"," hydra:description " :"[Erreur de syntaxe] ligne 0, col 83 : Erreur : Attendu =, \u003C, \u003C=, \u003C\u003E, \u003E, \u003E=, !=, obtenu \u0027id\u0027"}

Configuration du serveur

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 : vrai
maxUploadSize : 2097152
isOctoPartAvailable : faux
Formats d'image disponibles : JPG, GIF, PNG
max_users : illimité
authentication_provider : PartKeepr.Auth.HTTPBasicAuthenticationProvider
tip_of_the_day_uri : https://partkeepr.org/tips/%s
password_change : vrai
patreonStatus : [objet Objet]

Bug

Commentaire le plus utile

Une meilleure solution de contournement consiste à remplacer le nom de la propriété directement dans src/PartKeepr/DoctrineReflectionBundle/Filter/AssociationPropertyTrait.php

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

Tous les 4 commentaires

Je pense que je sais ce qui se passe ici, mais aucune idée de comment résoudre. Il semble qu'un @ soit ajouté au début de la variable id dans la requête GET.

Lorsque cela se produit, l'erreur se produit, si je modifie la demande d'obtention et supprime ce symbole @, j'obtiens une réponse qui ressemble à ceci :

{"@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":[]}}

On dirait qu'il renvoie la bonne réponse indiquant à l'interface utilisateur d'invoquer une requête de recherche... ?

Donc, je suppose que la question est de savoir comment pouvons-nous empêcher ce @ d'être inclus dans la requête GET sur le scan du code-barres ?

Ok, même si ce n'est pas une solution, j'ai trouvé une solution de contournement.

J'ai dû modifier le fichier suivant et tout fonctionne maintenant, je peux analyser l'identifiant de l'article et la recherche fonctionne comme prévu :

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

Modifier la ligne 353 De :

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

Fondamentalement, c'est le symbole @ qui cause le problème et il doit être supprimé de la requête GET Ajax. Je ne sais pas exactement où apporter ce changement, mais cela a fonctionné pour moi comme une solution temporaire jusqu'à ce que quelqu'un puisse dire comment y parvenir correctement ...

Vous avez le même problème, semble être le même que https://github.com/partkeepr/PartKeepr/issues/894

Une meilleure solution de contournement consiste à remplacer le nom de la propriété directement dans src/PartKeepr/DoctrineReflectionBundle/Filter/AssociationPropertyTrait.php

public function setProperty($property)
{
    $this->property = str_replace("@", "", $property);
}
Cette page vous a été utile?
0 / 5 - 0 notes