You are not logged in.
Bonjour
j'avance toujours dans ma creation
j'ai un nouveau petit "probleme".
J'ai un champs etat que l'on peut mettre à jour : ok
il est bien sauvegardé, tout fonctionne
cependant, sa modification doit induire la mise à jour d'un autre champs afin de mémoriser quand l'etat a été modifié.
dans quelle partie du coding plugin cela doit il etre géré ?
Merci
Last edited by ec2311 (2023-08-25 11:37:37)
GLPI 10.0.10
GLPIinventory 1.3.4
Agents : FI (2.6, 2.5) et Glpiagents (1.7)
Offline
Bonjour, si le champs à modifier fait partie du même itemtype vous pouvez gérer cela dans prepareInputForAdd() et / ou prepareInput forUpdate().
Si le champ à modifier appartient à un autre itemtype, lié par une clé étrangère, il faut gérer cela dans post_addItem() et / ou post_updateItem(). Dans ces cas là vous avez accès aux données fournies en POST dans $this->input, et champs non modifiés sont dans $this->fields.
Si vous êtes dans le cas particulier où votre champ a modifier appartient à un autre objet du même itemtype (plus rare) alors c'est le 2e cas qui est généralement le plus approprié.
No support with MP - Always run an upgrade task on a testing instance before running it on production! Always backup before any upgrade task!
Offline
Hello @btry
Merci pour votre reponse, en effet cela fonctionne.
cependant,
j'ai un ensemble de fichiers entete/ligne
dans le fichier secondaire (enfant) je retrouve l'id du parent : ok
lorsque je fais la mise à jour je retrouve -1 dans ce champs id , pourtant il est bien sous format plugin_nomplugin_zone_id...
comme si, c'etait une valeur de creation ?
en fait j'ai l'impression que cela vient du showform, dans lequel $options ne contient pas le champs 'plugin_nomplugin_zone_id'.
Autant j'ai l'id de l'item enfant et [withtemplate] et [_target], mais rien d'autre
Last edited by ec2311 (2023-06-30 10:08:06)
GLPI 10.0.10
GLPIinventory 1.3.4
Agents : FI (2.6, 2.5) et Glpiagents (1.7)
Offline
Je m'auto corrige
tout est ok
en fait lors de l'appel au display, je dois mettre display($_GET)
Merci !
GLPI 10.0.10
GLPIinventory 1.3.4
Agents : FI (2.6, 2.5) et Glpiagents (1.7)
Offline
Par contre
si à partir d'une table parent (changement de status de l'entete), on doit mettre à jour l'ensemble des lignes de la table enfant :
j'aurais tendance à utiliser le prepareinputforupdate (car changement de status sur table actuelle de la classe) ?
mais d'un autre coté on fait la mise à jour d'enregistrement 'enfant' donc d'une autre classe... donc un post_updateItem...
Le prepareInputForUpdate fonctionne, mais en fait, il faut que je modifie ce champs induit que si un seul champs inducteur est modifié : la modification d'un autre champs ne doit pas modifier le champs induit : c'est uniquement pour 'memoriser' la date de changement d'un champs particulier. donc il faudrait vérifier entre 'ancienne' valeur et nouvelle valeur de ce champs.
Il me semble peut etre comprendre cela dans le formanswer.class.php, mais je n'en suis pas sur.
Last edited by ec2311 (2023-06-30 14:05:08)
GLPI 10.0.10
GLPIinventory 1.3.4
Agents : FI (2.6, 2.5) et Glpiagents (1.7)
Offline
j'ai reussi à recuperer , comme vous l'aviez signalé, la valeur initiale dans $this->fields
$tableau = $this->fields
puis
$old_value=$tableau['champs']
je ne sais pas si il y a mieux, mais cela fonctionne
GLPI 10.0.10
GLPIinventory 1.3.4
Agents : FI (2.6, 2.5) et Glpiagents (1.7)
Offline
Bonjour
Sur mon plugin j'ai donc parent/enfant
je reussis à integrer les valeurs id de l'enfant via la clé afin que ces valeurs soient visibles sur le parent (un peu comme la vue elements associés de application)
petit hic : je vois bien les id, mais ce n'est pas un champs 'hyperlink' alors que j'ai ajouté 'comme' dans la valeur application
ci-dessous c'est pour l'application et ses elements associés
$tab[] = [
'id' => '5',
'table' => Appliance_Item::getTable(),
'field' => 'items_id',
'name' => _n('Associated item', 'Associated items', 2),
'nosearch' => true,
'massiveaction' => false,
'forcegroupby' => true,
'additionalfields' => ['itemtype'],
'joinparams' => ['jointype' => 'child']
];
ce que j'ai mis
$tab[] = [
'id' => '16',
'table' => NomdeMaClasseEnfant::getTable(),
'field' => 'id',
'name' => _n('le champs', 'Les champs', 2),
'nosearch' => true,
'massiveaction' => false,
'forcegroupby' => true,
'joinparams' => ['jointype' => 'child']
];
j'ai supprimé la notion de aditionnal fields, car je n'ai pas de champs itemtype dans ma table enfant :mais peut etre en faudrait il un ?
Merci pour vos conseils
GLPI 10.0.10
GLPIinventory 1.3.4
Agents : FI (2.6, 2.5) et Glpiagents (1.7)
Offline
Bonjour,
Veuillez vous référer à la documentation du développeur concernant les options de recherche.
GLPI Collaborator and Plugin Developer.
My non-English comments are automated translations. Sorry for any confusion that causes.
Mes commentaires non anglais sont des traductions automatiques. Désolé pour toute confusion qui cause.
Mis comentarios que no están en inglés son traducciones automáticas. Perdón por cualquier confusión que cause.
Offline
bonjour
Merci @cconard96
si j'ajoute 'datatype' => 'itemlink', en effet j'obtiens le lien, mais seule la premiere valeur est affichee en hyper text, je vois alors une 'bulle' qui liste en effet l'ensemble des valeurs.
si je ne mets pas 'datatype' => 'itemlink', je vois l'ensemble des valeurs (ce que j'aimerai donc voir) mais sans lien hyper text.
quand je regarde dans 'appliance.class.php (en 9.5.5)
$tab[] = [
'id' => '5',
'table' => Appliance_Item::getTable(),
'field' => 'items_id',
'name' => _n('Associated item', 'Associated items', 2),
'nosearch' => true,
'massiveaction' => false,
'forcegroupby' => true,
'additionalfields' => ['itemtype'],
'joinparams' => ['jointype' => 'child']
];
-> je ne comprends pas comment le lien 'hypertext' est alors réalisé car là je n'ai aucune bulle et le lien hypertext est correctement realisé.
merci
GLPI 10.0.10
GLPIinventory 1.3.4
Agents : FI (2.6, 2.5) et Glpiagents (1.7)
Offline