Insertion d'objet web service dans un business object via le code java

Bonjour,

Dans un de mes business object, j’ai un objet qui appartient à un autre environnement dont je récupère les informations via web service

Il marche bien dans une utilisation classique, je peux récupérer des informations extérieur quand je clique sur la loupe dans l’affichage formulaire
Cependant, je souhaiterai faire un import de mon business object par code java, et c’est là où ca ne répond plus, j’ai mon objet extérieur dans une variable, j’essaye de setValue l’objet extérieur (que ce soit par le row_id ou par l’objet entier) lors de la création d’un nouvel business object, ce setValue n’est pas prit en compte

Voilà les setValue que j’ai essayé:

pwoOA.setFieldValue("pwoSicSite.row_id", *row_id*);
ou
pwoOA.setFieldValue("pwoSicSite", *objetDB Site*);

Auriez-vous une idée pour le setValue ou bien une maniere alternative d’ajouter mon objet dans la création ?

[Platform]
Status=OK
Version=4.0.P24
BuiltOn=2020-07-21 16:40 (revision 28d01f4adf37b49491b6e7991d397e64a1965f86)
DBPatchLevel=P24;1114eaaa63b900d76fb574a9aa9f9c22

Cordialement,
KWu

Je ne suis pas bien sûr de comprendre ce que vous voulez faire…

S’il s’agit d’appeler un service web pour valoriser des attributs de votre objet c’est à priori à faire dans le hook postSelect, est-ce bien là que vous avez mis votre code ?

Mais ce n’est peut être pas ça que vous voulez faire. Envoyez moi plus d’extraits de votre code et de votre paramétrage pour que je puisse comprendre le contexte de ce que vous voulez faire

Pour résumé,
J’ai un objet Simplicité (qui se nomme “OA”) que j’ai configuré pour qu’il ait un champ objet qui récupère les informations d’un objet extérieur via web service (qui se nomme “Country”)


Ici, je n’ai pas créé l’objet “Country” dans mon instance Simplicité, elle vient d’une autre instance qui m’envoit l’information

Mon but final est de faire un import, j’ai toutes les informations qu’il me faut pour remplir mon objet “OA” dont notamment les informations pour mon “Country”, cependant quand j’essaye de lui donner le bon row_id Country ou voir meme l’objet Country dans mon import, lors de la sauvegarde, cette information n’est pas prise en compte

Config objet Country:

Je ne comprend pas votre pattern, si vous voulez faire un lien (lien “relationnel” local, méta-lien “objet” ou “data mapping”) entre votre objet et un objet “Country”, celui-ci doit exister dans votre instance (par exemple en tant qu’objet “service” s’il s’agit d’un objet distant).

De mémoire il y a de nombreux exemples de ce genre d’objets service dans les référentiels.

EDIT: PS: ok je vois que vous avez bien configuré un objet service “Country” en fait ce que je ne comprend pas c’est ce que vous voulez dire par “import”, ou pour le dire autrement je ne comprend pas votre besoin

Bonjour,

Pas sur de comprendre non plus de quoi on parle ici.

Un type d’attribut “objet” est stocké en base et dans la valeur en mémoire comme suit :

<object name>:<row_id>

par exemple field.setValue("MyCountry:123")

C’est un lien logique vers n’importe quel objet (pas de jointure SQL possible, c’est Simplicité qui gère ce type de lien), l’attribut peut aussi limiter les objets ciblés en précisant la liste dans sa définition.

Oui on en revient à dire qu’on ne comprend pas votre besoin.

Vous avez un lien “objet” vers un objet “service” (pattern classique dans les référentiels sur lesquels vous travaillez). Ce qu’on en comprend pas c’est ce que vous voulez faire en plus dans ce cas particulier

Ma demande est juste que on voudrait importer des données via un fichier csv pour nourrir notre table avec différentes informations, par exemple dans le cas présent, on souhaite mettre des informations dans un objet avec les champs:
code | label | type | Objet Country

j’ai un fichier CSV qui aura
code;label;type;CountryCode
00001;label1;type1;FR
00002;label2;type2;EN

Country étant toujours un référentiel extérieur dont je récupère les informations
Dans mon code, je récupère FR (ou EN) pour chercher ses informations dans Country
par exemple, Country:
row_id | code | label
01 | FR | France
02 | EN | Angleterre

Je récupère la premiere ligne de cet objet et je voudrais le lier dans mon objet OA

OK je comprend maintenant on parle d’import en masse.

De mémoire il y a des exemples de ce type dans le référentiels.

Sur le principe dans votre code d’import (un Adapter), pour chaque record CSV vous devez :

  1. faire un search sur l’objet country avec le code pour récupérer son row ID
  2. valoriser le field lien “object” de votre objet avec <nom logique de votre objet service country>:<row ID du record trouve au 1)>

Pour optimiser (= éviter de faire un appel de service search à chaque ligne), comme la liste des pays est courte (200-250 record au max) vous pouvez aussi la charger totalement en mémoire au début (faites un search sans filtre et charger la correspondance code - row ID dans un hashmap) sinon, à minima, évitez de chercher 2 fois le même code en conservant le row ID trouvé la 1ère fois dans un hashmap.

Ok donc si je comprend bien pour mettre le bon record dans mon objet, je dois mettre dans mon code une ligne comme ca:

Update: Vue avec BMo, le code pour que cela soit fonctionnel est

pwoOA.setFieldValue("pwoSicSite", "PwoSiteCountryService:" + mapCountryRowid.get(index);

Merci pour votre aide

Oui bien sur, pour l’import, je ne fais qu’un seul call pour récuperer toute la liste des country que je stock dans une hashmap