|
Passage source données dans paramètres de tâches parallèles |
Iniciado por AZIZ AIT ZAGHAR, mar., 25 2024 6:45 AM - 5 respostas |
| |
| | | |
|
| |
Membro registado 12 mensagems |
|
Publicado em março, 25 2024 - 6:45 AM |
Bonjour à tous,
J'essai de mettre des tâches parallèles dans mon code, par conte si vous voyez d'autre chose pas très orthodoxe sur d'autre sujet par ex. l'utilisation des Interface (POO) ou autre ... ne m'en tenez pas rigueur, j'explore ...
Code avec tâches parallèles :
nItemErreur est un entier sur 8 octets tabTâches est un tableau de TâchesParallèles maTâche est une TâcheParallèle maTâche = TâcheParallèleExécute(ChargerEnregistrement,(sNomClasseEnfant,sNomIDFichierEnfant,sdSourceDeDonnées), tpoCopieDifféréeContexteHFSQL) PROCEDURE INTERNE ChargerEnregistrement(LOCAL sNomClasseEnfant_LOCAL, LOCAL sNomIDFichierEnfant_LOCAL, LOCAL sdSourceDeDonnées_LOCAL) iMonItemEnCours est un I_CRUD <- allouer un CGénérique(sNomClasseEnfant_LOCAL) iMonItemEnCours.CLit({"sdSourceDeDonnées_LOCAL." + sNomIDFichierEnfant_LOCAL}) TableauAjoute(:m_tabTravail, iMonItemEnCours.p_pclTravail) RENVOYER Vrai FIN Ajoute(tabTâches, maTâche) TâcheParallèleAttendToutes(tabTâches) POUR TOUT maTâche de tabTâches SI maTâche..ValeurRenvoyée = Faux ALORS nItemErreur++ FIN FIN
J'essai de passer une source de données, ici <sdSourceDeDonnées>, en paramètre de la tâche parallèle et ça ne fonctionne pas, ça me donne une chaine de l'autre coté dans la variable local <sdSourceDeDonnées_LOCAL> .
Le message d'erreur est le suivant : Le passage du paramètre 3 a provoqué une erreur. Un élément de type 'chaîne ANSI' ne peut pas être converti vers le type 'objet source de données'.
J'ai typé la source de données <sdSourceDeDonnées_LOCAL> est une Source de Données dans les paramètres de la procédure interne, pas de changement.
En mode pas à pas avec un point d'arrêt dans la procédure interne j'ai :
- sdSourceDeDonnées_LOCAL contient une chaine du type = "_SOURCE_sdSourceDeDonnées_18" - sdSourceDeDonnées qui est la source de données hors procédure interne donne bien une source de données mais vide
le passage de la source de données dans les paramètres me convertie donc la source de données en une chaine de caractères qui contient le nom de la source de données d'origine.
Là, je sèche !
Par avance merci.
Aziz |
| |
| |
| | | |
|
| | |
| |
Publicado em março, 27 2024 - 11:08 AM |
Bonjour.
maTâche = TâcheParallèleExécute(ChargerEnregistrement,(sNomClasseEnfant,sNomIDFichierEnfant,sdSourceDeDonnées), tpoCopieDifféréeContexteHFSQL)
Typer sdSourceDeDonnées comme une source de données |
| |
| |
| | | |
|
| | |
| |
Membro registado 3.891 mensagems Popularité : +227 (347 votes) |
|
Publicado em março, 28 2024 - 1:52 AM |
Bonjour, Tu ne types pas les paramètres de ta procédure interne.
-- Il y a peut être plus simple, mais, ça tourne |
| |
| |
| | | |
|
| | |
| |
Membro registado 12 mensagems |
|
Publicado em março, 30 2024 - 9:29 AM |
Bonjour,
Merci pour vos réponses, comme précisé dans mon message, j'ai typé mes paramètres et cela ne fonctionne pas plus.
1 - Si je type ça me déclenche une erreur : Le passage du paramètre 3 a provoqué une erreur. Un élément de type 'chaîne ANSI' ne peut pas être converti vers le type 'objet source de données'.
2 - Si je ne type pas d'erreur : je récupère une chaine de caractères dans la source de données "_SOURCE_sdSourceDeDonnées_18"
J'ai remplacé les paramètres par un tableau de paramètres pour voir si les paramètres ne sont pas limités à des types simples, mais finalement non, je récupère bien un tableau de l'autre coté mais la source de données est encore une chaine de caractères.
C'est étrange, avant l'entrée dans la procédure interne j'ai bien mes données dans ma source de données et une fois dans la procédure interne la variable local contient une chaine de caractères qui est le nom de la source de données.
Est ce quelqu'un a déjà passé des objets complexes en paramètre d'une tâche parallèles ? |
| |
| |
| | | |
|
| | |
| |
Membro registado 3.891 mensagems Popularité : +227 (347 votes) |
|
Publicado em março, 30 2024 - 9:47 AM |
Tu passes ton paramètre par valeur, as tu tenté le passage par adresse (sans le LOCAL) ? Tu utilises une procédure interne, elle "voit" les variable de la procédure/fonction principale. Tu peux éventuellement déclarer la source utilisée dans ta procédure principale (ce n'est pas très propre mais bon ...) En désespoir de cause, tu peux passer en paramètre non pas la SD, mais le résultat de la sérialisation de celle ci. Il suffira de désérialiser dans la procédure interne.
Ce type d'erreur survient aussi lorsque l'on passe en paramètre un champ de type date ou heure. Le paramètre d'appel doit être SAI_MonChampDate..Valeur
-- Il y a peut être plus simple, mais, ça tourne |
| |
| |
| | | |
|
| | |
| |
Membro registado 12 mensagems |
|
Publicado em março, 30 2024 - 6:12 PM |
J'ai supprimé le LOCAL et ça passe sans erreur, je rentre dans la procédure interne, mais la source de données reste désespérément vide.
J'ai une erreur sur la ligne :
MonItemEnCours.CLit({"sdSourceDeDonnées_LOCAL" + "." + sNomIDFichierEnfant_LOCAL})
L'élément 'sdSourceDeDonnées_LOCAL.ID_Désignation_Traduction' est inconnu.
Par contre, je me posait la question, si plusieurs tâches sont lancées, le fait de ne pas mettre LOCAL vont-elles manipuler la même "instance" de sdSourceDeDonnées_LOCAL ?
Vu la situation, je penses que je vais rester sur un version séquentiel, mais si quelqu'un à une explication je suis preneur.
P.S : Voroltinquo ta contribution sur un poste au sujet du sujet CRUD générique (il y a maintenant 1 an) m'a été d'une grande aide ! merci. |
| |
| |
| | | |
|
| | | | |
| | |
|