PC SOFT

GRUPOS DE DISCUSSÃO PROFISSIONAL
WINDEVWEBDEV e WINDEV Mobile

Inicio → WEBDEV 2024 → Serialise dans code navigateur
Serialise dans code navigateur
Iniciado por PeHoBe, abr., 21 2021 3:30 PM - 19 respostas
Membro registado
123 mensagems
Publicado em abril, 21 2021 - 3:30 PM
Bonjour

J'ai une classe hybride, c-à-d une classe serveur et navigateur.
Du coté serveur je sais parfaitement la sérialiser dans une chaîne.
Du coté navigateur je sais parfaitement la désérialiser...

Par contre, du côté navigateur je n'arrive pas à la sérialiser de nouveau.
En utilisant la syntaxe suivante coté navigateur (aucune erreur de compilation):
//Serialize the object to pass to the Ajax call
SerBuf is Buffer
Serialize(NewMOList,SerBuf,psdJSON)
AJAXExecute(ajaxUpdateControls+ajaxSynchronizeServerVariables,MediaObjectAdd,SerBuf)


Je reçois l'erreur suivante pendant l'execution dans Chrome:




Donc le type buffer dans le navigateur semble être le problème...
En changeant "SerBuf is Buffer" en "SerBuf is String" j'ai une erreur de compilation sur la syntaxe sérialise...

Qui à pu faire de la sérialisation coté navigateur?
Qu'est-ce que je ne vois pas?

Merci d'avance !

--
Peter Holemans
www.mcs2.eu
www.pixontri.eu
Membro registado
1.603 mensagems
Publicado em abril, 21 2021 - 4:54 PM
Bonjour Peter,

https://doc.pcsoft.fr/fr-FR/?1514042&name=Type_buffer > étudier le cadre jaune fonctions limitées
On ne peut passer à de l'Ajax que des chaines...
Je ne sais pas s'il existe une solution

--
Cordialement
François
Membro registado
123 mensagems
Publicado em abril, 22 2021 - 12:23 PM
Bonjour François

Merci pour ton retour...
OK, j'ai compris que le type buffer n'est pas une option.
Alors j'ai relis la doc sur Sérialise en code navigateur et là il est indiqué que dans le code navigateur le paramètre pour Sérialise doit être une chaine.

https://doc.pcsoft.fr/fr-FR/?3013065&name=Serialise

Donc, j'ai changé le code en ce qui-est ci-dessous et maintenant le compilateur me donne une erreur...
//Serialize the object to pass to the Ajax call
SerBuf is string
Sérialise(NewMOList,SerBuf,psdJSON)
AJAXExecute(ajaxUpdateControls+ajaxSynchronizeServerVariables,MediaObjectAdd,SerBuf)






Un peu bizarre, non?

--
Peter Holemans
www.mcs2.eu
www.pixontri.eu
Publicado em abril, 22 2021 - 1:48 PM
bizarre uniquement si ton code est bien dans une zone de compilation conditionnelle code navigateur.
La syntaxe étant différente entre les cotés serveur et navigateur, il faut obligatoirement un <compile if...> pour séparer les cas, autrement, le compilateur te dit à juste titre que ta syntaxe n'est pas compatible avec tous les cas que tu recouvres dans du code mixte
Membro registado
123 mensagems
Publicado em abril, 22 2021 - 2:47 PM
Argus a écrit :
bizarre uniquement si ton code est bien dans une zone de compilation conditionnelle code navigateur.
La syntaxe étant différente entre les cotés serveur et navigateur, il faut obligatoirement un <compile if...> pour séparer les cas, autrement, le compilateur te dit à juste titre que ta syntaxe n'est pas compatible avec tous les cas que tu recouvres dans du code mixte


Merci Argus de réfléchir ensemble avec moi mais, c'est bien le navigateur, non?




--
Peter Holemans
www.mcs2.eu
www.pixontri.eu
Membro registado
949 mensagems
Publicado em abril, 22 2021 - 2:56 PM
Coucou,

ChaîneVersJSON ?
https://doc.pcsoft.fr/?1000024531&name=chaineversjson_fonction

---
#lapiraterienestjamaisfinie
Publicado em abril, 22 2021 - 3:42 PM
haa...

donc le code en question n'est PAS dans la classe hybride...

Autre possibilité : est ce que ton projet est en UNICODE par défaut ?
Si oui, il faut déclarer la chaine buffer en ANSI, d'après la doc SerBuf is string la déclarerait en unicode
Membro registado
123 mensagems
Publicado em abril, 22 2021 - 4:01 PM
Charly CANDO a écrit :
Coucou,

ChaîneVersJSON ?
https://doc.pcsoft.fr/?1000024531&name=chaineversjson_fonction

---
#lapiraterienestjamaisfinie


Merci Charly mais il faut faire la sérialisation de la classe navigateur...

--
Peter Holemans
www.mcs2.eu
www.pixontri.eu
Membro registado
123 mensagems
Publicado em abril, 22 2021 - 4:13 PM
Hello,

J'ai aussi ouvert un ticket auprès le support avec référence ST/G068145 car selon la doc cela devrait fonctionner.
Il serait quand même impossible que je suis le seul qui veut sérialiser des choses en code navigateur?

--
Peter Holemans
www.mcs2.eu
www.pixontri.eu
Membro registado
123 mensagems
Publicado em abril, 22 2021 - 5:06 PM
Bref, j'ai trouvé le soucis.
==> Un bug de WX en effet... ;(

- Tous mes projets sont en Unicode (quel développeur sérieux fait encore des nouveaux projets en ANSI depuis 10 ans?)
- La fonction Sérialise ne fonctionne qu'avec des chaînes ANSI en code navigateur
- Du côté navigateur il est impossible de déclarer une chaîne ANSI, juste une chaîne standard (en unicode si la config est unicode)
- Donc pour des projets en mode Unicode (c-à-d tous les projets modernes) la fonction Sérialise n'est pas disponible, quoi...

- L'erreur de syntaxe invalide du compilateur sur la fonction Sérialise dans le code navigateur ne s'affiche qu'en mode unicode du projet

Ceci devrait être un bug !
Aujourd'hui pour le développement web on ne peut pas y arriver sans serialisation/desérialisation côté nav et côté serveur pour faire des échanges d'objets, structures etc...

Incroyable...

--
Peter Holemans
www.mcs2.eu
www.pixontri.eu
Membro registado
123 mensagems
Publicado em abril, 22 2021 - 5:58 PM
Hello,

Le "workaround" que j'ai trouvé (mais qui n'est pas le plus beau) c'est de déclarer une chaine de travail en ANSI dans la section de déclaration de la page et d'utiliser celle là dans la procédure navigateur. Je n'aime pas le 'scoping' de ce variable car il est vraiment local à la procédure navigateur...

Procedure SomePageName(*)
GLOBAL
TMPSerialiseString is ANSI string


--
Peter Holemans
www.mcs2.eu
www.pixontri.eu
Membro registado
123 mensagems
Publicado em abril, 22 2021 - 5:59 PM
Correction:
TMPSerialiseString is ANSI string <browser synchronized>


--
Peter Holemans
www.mcs2.eu
www.pixontri.eu
Membro registado
123 mensagems
Publicado em abril, 22 2021 - 6:00 PM
Ce forum enlève l'attribut [browser synchronised]... Donc:
TMPSerialiseString is ANSI string, browser synchronized


--
Peter Holemans
www.mcs2.eu
www.pixontri.eu
Membro registado
123 mensagems
Publicado em abril, 22 2021 - 6:10 PM
Et merci à aArgus pour me mettre sur le bon pied...
Membro registado
123 mensagems
Publicado em abril, 22 2021 - 6:26 PM
Hello tous

Par contre, je n'arrive pas à le faire fonctionner avec un projet web awp en mode Unicode...
Même avec la chaîne déclaré en ANSI string dans la déclaration de la fenêtre et synchronisé avec le navigateur en exécution il y a une erreur du 'WB runtime' du navigateur...



;( systdem*

--
Peter Holemans
www.mcs2.eu
www.pixontri.eu
Publicado em abril, 23 2021 - 9:59 AM
- Tous mes projets sont en Unicode (quel développeur sérieux fait encore des
nouveaux projets en ANSI depuis 10 ans?)


Merde !!! on n'est pas sérieux !!!

sans rire ... j'ai voulu tenter plusieurs fois mais j'ai eu de tels
avertissements notamment sur le code de mes classes partagées partout
que j'ai laissé tomber.

j'avoue que je mesure mal les incidences et les effets de bord si je
voulais quand même le faire

surtout pour quels bénéfices ?

Vos réponses bien sûr m'interessent.

--
L'absence de virus dans ce courrier électronique a été vérifiée par le logiciel antivirus Avast.
https://www.avast.com/antivirus
Membro registado
123 mensagems
Publicado em abril, 23 2021 - 10:28 AM
Roumegou a écrit :
- Tous mes projets sont en Unicode (quel développeur sérieux fait encore des
nouveaux projets en ANSI depuis 10 ans?)

surtout pour quels bénéfices ?
Vos réponses bien sûr m'interessent.

--


Hello Roumegou

Bénéfices?
--> Ouverture à une échelle globale sans contraintes
--> Multi-plateforme (Mobile = Unicode car le ANSI n'existe pas)
--> Développement Web (UTF8/Unicode est le standard)
--> Dévelopement en architecture moderne 'Orientée Service' (SOA) et intégrations de parties en cloud
--> Aucune de mes solutions sont des solutions isolées mais s'intègrent avec des plateformes existantes dont tous sont en Unicode (La plupart d'entre eux a migré entre 2000 et 2010 en unicode). Il n'y a que du vieux brol qui se limite au monde latin/anglophone qui est encore fait en ANSI.
--> La plupart de mes solutions sont utilisés dans trois continents, donc aussi avec de charactères chinois, coréen, etc...

Food for thought ;-)

--
Peter Holemans
www.mcs2.eu
www.pixontri.eu
Publicado em abril, 23 2021 - 2:31 PM
Roumegou a écrit :
- Tous mes projets sont en Unicode (quel développeur sérieux fait encore des
nouveaux projets en ANSI depuis 10 ans?)


Ceux qui font des projets pour un marché précis (USA uniquement ou France uniquement par exemple) et qui ne veulent pas doubler toutes les tailles de chaines partout pour rien, que ce soit dans les Bases ou dans les communications.
>
Membro registado
123 mensagems
Publicado em abril, 23 2021 - 3:13 PM
aArgus a écrit :
Ceux qui font des projets pour un marché précis (USA uniquement ou France uniquement par exemple) et qui ne veulent pas doubler toutes les tailles de chaines partout pour rien, que ce soit dans les Bases ou dans les communications.


Beaucoup d'éditeurs connus de systèmes d'exploitation, de bases de données et systèmes de communications utilisent des standard de compression pour Unicode (comme BOCU-1 ou SCSU) (https://en.wikipedia.org/wiki/Binary_Ordered_Compression_for_Unicode / https://en.wikipedia.org/wiki/Standard_Compression_Scheme_for_Unicode) ce qui veut dire que si ton système unicode utilise pour 99% des caractères à un octet, la sauvegarde et les transferts de données sera pour 99% identique à celui d'un système d'encodage à un octet comme le ANSI...

Mais des que tu intègres des solutions mobiles dans tes projets je ne vois aucun intérêt à rester sur de l'ANSI car là tu n'as simplement pas de choix et même pour le web et les web services rester sur de l'ANSI me ne semble pas une bonne idée afin d'être 'future proof'.

Mais hein, ce n'est que mon opinion bien sûre...
Just my 2 cents ;-)

--
Peter Holemans
www.mcs2.eu
www.pixontri.eu
Membro registado
123 mensagems
Publicado em abril, 30 2021 - 4:56 PM
Support Technique a écrit :
Merci pour ce projet, qui produit bien des erreurs avec la commande Sérialise() en code navigateur.
Ces erreurs de compilation sont abusives, car tout est fait pour un fonctionnement correct en exécution.
Le problème a bien été pris en charge par les développeurs.
Dans l'attente d'un correctif, une solution consiste à encapsuler l'appel de la commande Serialise() dans une procédure. Dans ce cas, cela compile.
Voici un exemple de code navigateur mettant en application ce contournement. Vous pourrez le tester dans un bouton Navigateur :
// code navigateur wlangage - version 2
EXTERN console

myStruct is Structure
t is string
n is int
END

st1 is myStruct
st1 . t = "Some text"
st1 . n = 1

stemp is string

__SérialiseJSON ( st1 , stemp )

console . log ( stemp )


PROCEDURE INTERNE __SérialiseJSON ( o , s )
Sérialise ( o , s , psdJSON )
FIN


Solution temporaire fourni par le ST.

Bon WE !

Peter Holemans