Le forum (ô combien francophone) des utilisateurs de Powerbuilder.
Bonjour,
J'utilise un objet global qui permet de passer des paramètres sous forme de any entre les écrans.
Style nvo_param, c'est assez pratique...
Seulement voilà : je dois à présent passer un tableau à 2 dimensions, et là, j'ai un problème pour reconvertir de any vers l'array string[].
Dans le code ci-dessous, unefonction de mon nvo_param me permet de récupérer un des paramètres, sur base des clés "paramètres" et "tab_result" qui forment une sorte d'identifiant.
L'argument la_result est passé en référence, et reçoit théoriquement le any à reconvertir en string[].
Si je teste le datatype de la_result après la fct, on a bien du string.
C'est au moment de la reconversion vers un tableau que ça plante : Any expected etc.
lvo_param.of_getparam(la_result, "paramètres", "tab_result") ls_dummy[] =la_result //<-- runtimeerror "Any expected..."
Cela parait bien simple pourtant...
Auriez-vous quelque idée ???
Merci d'avance !
Dernière modification par walter (21-09-2011 18:24:34)
Hors ligne
Salut, comment as-tu déclaré ls_dummy et la_result ?
Hors ligne
Bonsoir,
string ls_dummy[]
any la_result
Une piste à ce niveau ?
De mon côté, je commence à soupçonner un traitement inadapté dans la fonction of_getparam...
Ou dans son binome of_setparam... style écrasement du tableau par un pur string...
Merci !
Hors ligne
bah il manque un indice dans ton affectation :
ls_dummy[1] =la_result
Hors ligne
erasorz a écrit:
bah il manque un indice dans ton affectation :
Code: pb
ls_dummy[1] =la_result
non, je crois comprendre qu'il cherche a récupérer le tableau complet via le ANY, ce qui fonctionne, je l'utilise aussi.
je conseillerais de tester l'appel de fonction of_getparam en debug pas à pas et espionner les différentes variables...
Hors ligne
xlat a écrit:
non, je crois comprendre qu'il cherche a récupérer le tableau complet via le ANY, ce qui fonctionne, je l'utilise aussi.
je conseillerais de tester l'appel de fonction of_getparam en debug pas à pas et espionner les différentes variables...
ok à ce moment là il faut déclarer la_result en tableau :
string ls_dummy[]
any la_result[]
et faire tout simplement
ls_dummy =la_result
Hors ligne
mais c'est pas obligé, tu peux stocker un tableau dans un any scalaire :
exemple issue de la documentation :
PowerBuilder Help a écrit:
Syntax for data in a single row or all rows
This example assigns all the data in dw_1 to the Any variable la_dwdata. The value assigned to la_dwdata is an array of data structures whose members match the column datatypes:
any la_dwdata
la_dwdata = dw_1.Object.Data
This example assigns all the data in the delete buffer for dw_1 to the Any variable la_dwdata:
any la_dwdata
la_dwdata = dw_1.Object.Data.Delete
Hors ligne
xlat a écrit:
mais c'est pas obligé, tu peux stocker un tableau dans un any scalaire
ah ok, j'ignorais cela
donc l'erreur peut provenir du fait que le tableau contient autre-chose que des strings (?)
Hors ligne
Bonjour,
En effet, l'objectif est de reprendre l'entièreté du tableau (2 dimensions) dans un any.
Puis, de le transférer - en tant que Any - vers un objet "client".
Rester en Any nous permet de tranquillement gérer tous les datatypes.
Cela fonctionne bien avec les classiques string, long, decimal etc.
mais dès qu'on passe un tableau ça glisse...
J'ai débugué et entré des string à la main dans ce tableau.
On voit bien que le any est passé, avec les strings encodés jusque l'objet demandeur (donc dans la variable la_any )
Mais lorsque je veux repasser les valeurs dans la variable tableau récepteur (la variable ls_dummy[]), badaboum...
Pour contourner, j'ai essayé avec un userobject possédant une structure.
Mais je rencontre le même type de problème.
J'avais pourtant -me semble-t-il - déjà vu passer des dw, des objects et autres de cette façon.
J'étais convaincu que ça marchait nickel... mais là, je rame...
Pour précision : PB11.5, win XP.
Merci d'avance pour toute piste...
Dernière modification par walter (21-09-2011 10:14:11)
Hors ligne
Bonjour,
Si, j'ai bien compris tu as en retour un tableau any 2 dimensions que tu veux transférer dans un tableau de type string en 2 dimensions :
string ls_array[100,100] string ls_one1d[] ls_array = la_result ls_one1d = la_result // Transformation tableau 2D vers 1D
Par contre en 2 dimensions, tu ne peux pas utiliser l'allocation dynamique. tu dois définir une taille au tableau (par exemple l'indice maximum que tu pense ne jamais dépasser avec ton type any).
Hors ligne
Bonsoir !
Merci pour votre aide.
J'ai découvert que l'objet gérant le transfert lvo_param ne gérait pas les tableaux.
Un tableau de strings était systématiquement transformé en string pur (détermination du datatype par className -> un tableau de string ou un string donne le même résultat mais la suite du traitement est valable pour les string uniquement).
Par contre, j'ai pu l'adapter pour qu'il accepte des any, dans lesquels on peut faire passer des objets utilisateurs.
Je passe donc mes données via un userobject qui a une structure où stocker mes données et les fonctions nécessaires à leur exploitation.
Cela marche nickel à présent !
Merci à tous !
Bonne soirée !
Hors ligne