|
| Started by guev, May, 27 2022 2:25 AM - 7 replies |
| |
| | | |
|
| |
Registered member 80 messages |
|
| Posted on May, 27 2022 - 2:25 AM |
Bonjour
Je dois transformer un fichier CSV vers un JSON afin d'envoyer ce dernier dans une API pour la mise à jour des données.
La structure du CSV est la suivante :
NoTicket;group;idExternal;date;class10;class2;quantity;class1;finalValue 75883;RYR03;110554607;20/05/2022;58509;20526;1,00;CN4 STYLO WATER 06 TURQUOIS nv;7,42 75884;RYR03;111208633;20/05/2022;40903;;1,00;EVIDENCE DEODORANT;14,74 75884;RYR03;111208633;20/05/2022;40904;;1,00;EVIDENCE DEODORANT 2;14,75 75894;RYR03;111829362;20/05/2022;11594;;1,00;BLOOM EDP 50ML;24,88 75896;RYR03;110099835;20/05/2022;21897;;1,00;OAV OP 05/22 SAC TPS DES CERISE;4,61 75896;RYR03;110099835;20/05/2022;82204;OFFID;1,00;OS21 ORANGE FONDANT GD200;3,23 75906;RYR03;111937140;20/05/2022;64449;;1,00;CNT21 BTE BEIGE PM FEMME;4,15 75908;RYR03;111880563;20/05/2022;94295;;1,00;OS21 EVIDENCE VAPO SAC 10ML;11,53 75909;RYR03;110360021;20/05/2022;36642;20526;1,00;HOGGAR EDT VAPO 50ML nv;19,93 75912;RYR03;111890513;20/05/2022;07792;;1,00;SV PIEDS BAUME REPARATEUR 75ML;14,10
La stucture du JSON doit être la suivante :
{ "AdEvent":{ "type":"addCA", "date":2022-05-20 00:00:00.000, "idExternal":"111208633", "member":{ "loadFromKeys":{ "idExternal":"111208633" } }, "fvalue":29.49, "group":"RYR03", "details":[ { "AdEventDetail":{ "idExternal":"111208633", "detailType":"I", "class1":"EVIDENCE DEODORANT", "class2":"", "class10":"40903", "quantity":1, "finalValue":14.74 } }, { "AdEventDetail":{ "idExternal":"111208633", "detailType":"I", "class1":"EVIDENCE DEODORANT 2", "class2":"", "class10":"40904", "quantity":1, "finalValue":14.75 } }, ] } }
J'ai commencé avec ce code mais il y un souci au niveau de la balise "details" car je n'ai pas les crochets.
vConstReq est un Variant sJsonData est une chaîne
vConstReq.AdEvent.type = "addCA" vConstReq.AdEvent.date = TempTickets.DateTicket vConstReq.AdEvent.idExternal = TempTickets.Tiers vConstReq.AdEvent.member.loadFromkeys.idExternal = TempTickets.Tiers vConstReq.AdEvent.fvalue = REQ_SommeTicket.la_somme_TotalHT vConstReq.AdEvent.group = TempTickets.Etablissement vConstReq.details.AdEventDetail.idExternal = TempTickets.Tiers sJsonData = "&json_data=" + Remplace(VariantVersJSON(vConstReq, psdMinifié), Caract(34), "'")
Si quelqu'un peut me donner un coup de main je serais ravi. Merci à tous.
-- Hervé |
| |
| |
| | | |
|
| | |
| |
Registered member 92 messages |
|
| Posted on May, 27 2022 - 3:42 AM |
Salut
Il faut remplir une variable tableau avant et faire vConstReq.AdEvent.details = nomDuTableau
-- Bon dev.
Patrick Lalemand https://www.lapalys.ca |
| |
| |
| | | |
|
| | |
| |
Registered member 80 messages |
|
| Posted on May, 27 2022 - 5:39 AM |
Bonjour
Merci pour votre aide.
Voici mon code modifié mais il manque les "titres" dans la partie "details" et la balise AdEventDetail pour chaque ticket.
vConstReq.AdEvent.type = "addCA" vConstReq.AdEvent.date = TempTickets.DateTicket vConstReq.AdEvent.idExternal = TempTickets.Tiers vConstReq.AdEvent.member.loadFromkeys.idExternal = TempTickets.Tiers vConstReq.AdEvent.fvalue = REQ_SommeTicket.la_somme_TotalHT vConstReq.AdEvent.group = TempTickets.Etablissement Ajoute(TabDetails,TempTickets.Tiers) Ajoute(TabDetails,"I") Ajoute(TabDetails,TempTickets.LibelleArticle) Ajoute(TabDetails,TempTickets.CodeCondition) Ajoute(TabDetails,TempTickets.CodeArticle) Ajoute(TabDetails,TempTickets.Quantite) Ajoute(TabDetails,TempTickets.TotalHT) vConstReq.AdEvent.details = TabDetails sJsonData = "&json_data=" + Remplace(VariantVersJSON(vConstReq, psdMiseEnForme), Caract(34), "'")
Voici le code JSON
&json_data={ 'AdEvent': { 'type':'addCA', 'date':'23\/05\/20', 'idExternal':'243054', 'member': { 'loadFromkeys': { 'idExternal':'243054' } }, 'fvalue':-11.05999994278, 'group':'RYR13', 'details': [ '243054', 'I', 'CN3 RAL VERTIGE 49 SATINE=====', '0', '37022', '-1', '-6.45' ] } }
Quel code je dois rajouter ? Merci
-- HervéMessage modified, May, 27 2022 - 5:53 AM |
| |
| |
| | | |
|
| | |
| |
Registered member 80 messages |
|
| Posted on May, 27 2022 - 8:18 AM |
J'ai pu avancé sur mon code mais il me manque une dernière chose et j'ai du mal à trouver la solution.
Dans le JSON il y a le tableau "details" avec le noeud "AdEventDetail". Je ne sais pas comment mettre ce noeud. Exemple code JSON
{ "AdEvent":{ "type":"addCA", "date":2022-05-20 00:00:00 "member":{ "loadFromKeys":{ "idExternal":"110554607" } }, "fvalue":150, "details":[ { "AdEventDetail":{ "class1":"CN4 STYLO WATER 06 TURQUOIS nv", "class10":"test", "quantity":1, "unitValue":50.0, "finalValue":50.0 } }, { "AdEventDetail":{ "class1":"Article test 2", "class10":"test", "quantity":2, "unitValue":50.0, "finalValue":100.0 } } ] } }
Voici mon code
cRequete est un HTTPRequête cReponse est un httpRéponse vConstReq est un Variant vConstReqCompl est un Variant vMonClient est un Variant sBasiAuth est une chaîne sJsonHeader est une chaîne sJsonData est une chaîne nLignes est un entier nIndice est un entier
ST_Details est une Structure ExternalId est une chaîne <Sérialise ="idExternal"> detailType est une chaîne class1 est une chaîne class2 est une chaîne class10 est une chaîne quantity est une chaîne finalValue est une chaîne FIN tableau de est un tableau de ST_Details
sBasiAuth = "Basic " + Encode(gApiKey + ";" + gUsername + ":" + gPassword, encodeBASE64SansRC)
HExécuteRequête(REQ_SommeTicket) POUR TOUT REQ_SommeTicket HLitRecherche(TempTickets, NoTicket, REQ_SommeTicket.NoTicket, hIdentique) vConstReq.AdEvent.type = "addCA" vConstReq.AdEvent.date = TempTickets.DateTicket vConstReq.AdEvent.idExternal = TempTickets.Tiers vConstReq.AdEvent.member.loadFromkeys.idExternal = TempTickets.Tiers vConstReq.AdEvent.fvalue = REQ_SommeTicket.la_somme_TotalHT vConstReq.AdEvent.group = TempTickets.Etablissement
nIndice = TableauAjoute(tabDetails) tabDetails[nIndice].ExternalId = TempTickets.Tiers tabDetails[nIndice].detailType = "I" tabDetails[nIndice].class1 = TempTickets.LibelleArticle tabDetails[nIndice].class2 = TempTickets.CodeCondition tabDetails[nIndice].class10 = TempTickets.CodeArticle tabDetails[nIndice].quantity = TempTickets.Quantite tabDetails[nIndice].finalValue = TempTickets.TotalHT vConstReq.details = tabDetails sJsonData = "&json_data=" + Remplace(VariantVersJSON(vConstReq, psdMiseEnForme), Caract(34), "'") cRequete..URL = gProtocole + gServeur + gUrlApi + sJsonHeader + sJsonData cRequete..Méthode = httpPut cRequete..ContentType = "application/json" cRequete..Entête["Accept"] = "application/json" cRequete..Entête["Authorization"] = sBasiAuth cRequete..IgnoreErreur = httpIgnoreCertificatExpiré + httpIgnoreCertificatInvalide + httpIgnoreNomCertificatInvalide + httpIgnoreRedirection + httpIgnoreRevocation cReponse = HTTPEnvoie(cRequete)
FIN
Qui a une solution ? Merci
-- Hervé |
| |
| |
| | | |
|
| | |
| |
Registered member 80 messages |
|
| Posted on May, 27 2022 - 10:38 PM |
Un peu de changement dans mon code ce qui donne le résultat attendu.
vConstReq.AdEvent.type = "addCA" vConstReq.AdEvent.date = "2022-05-20" vConstReq.AdEvent.idExternal = TempTickets.Tiers vConstReq.AdEvent.member.loadFromkeys.idExternal = TempTickets.Tiers vConstReq.AdEvent.fvalue = REQ_SommeTicket.la_somme_TotalHT vConstReq.AdEvent.group = TempTickets.Etablissement nIndice = TableauAjoute(details) vConstReq.AdEvent.details[nIndice].AdEventDetail.idExternal = TempTickets.Tiers vConstReq.AdEvent.details[nIndice].AdEventDetail.detailType = "I" vConstReq.AdEvent.details[nIndice].AdEventDetail.class1 = TempTickets.LibelleArticle vConstReq.AdEvent.details[nIndice].AdEventDetail.class2 = TempTickets.CodeCondition vConstReq.AdEvent.details[nIndice].AdEventDetail.class10 = TempTickets.CodeArticle vConstReq.AdEvent.details[nIndice].AdEventDetail.quantity = TempTickets.Quantite vConstReq.AdEvent.details[nIndice].AdEventDetail.finalValue = TempTickets.TotalHT sJsonData = "json_data=" + VariantVersJSON(vConstReq, psdMiseEnForme)
cRequete..URL = gProtocole + gServeur + gUrlApi + sJsonData cRequete..Méthode = httpPut cRequete..ContentType = "application/json" cRequete..Entête["Accept"] = "application/json" cRequete..Entête["Authorization"] = sBasiAuth cRequete..IgnoreErreur = httpIgnoreCertificatExpiré + httpIgnoreCertificatInvalide + httpIgnoreNomCertificatInvalide + httpIgnoreRedirection + httpIgnoreRevocation cReponse = HTTPEnvoie(cRequete) vMonClient = JSONVersVariant(cReponse.Contenu)
Par contre cela me dit que mon JSON est invalide lorsque je passe sur cRequete..Url. Je coince sur ce point.
Avez-vous une solution ?
Merci
-- Hervé |
| |
| |
| | | |
|
| | |
| |
Registered member 80 messages |
|
| Posted on May, 28 2022 - 12:23 AM |
Bonjour
Pour ceux qui peuvent m'aider à régler mon problème voici les infos pour tester l'API. J'ai mis les infos en dur dans le code, il s'agit de :
sBasiAuth = "Basic " + Encode("KEY-f6fde269-2753-4eba-8bf3-55928432c74a" + ";" + "API_YvesRocher_Gbh" + ":" + "XJcqLM759pd5", encodeBASE64SansRC)
Voici l'url pour tester l'API : https://qa.adelya.com/apiv1/test/api/testBasic.jsp Vous avez aussi l'accès à la doc.
Si je copie/colle le résultat de ma requête http dans le test la réponse est OK.
cRequete..URL = "https://" + "qa.adelya.com" + "/apiv1/webapi.do?" + sJsonData

Mais la réponse renvoyé par mon code est 400 bad request. Voici mon code
cRequete est un HTTPRequête cReponse est un httpRéponse vConstReq est un Variant sBasiAuth est une chaîne sJsonData est une chaîne ANSI nIndice est un entier
ST_Details est une Structure idExternal est une chaîne detailType est une chaîne class1 est une chaîne class2 est une chaîne class10 est une chaîne quantity est une chaîne finalValue est une chaîne FIN details est un tableau de ST_Details
sBasiAuth = "Basic " + Encode("KEY-f6fde269-2753-4eba-8bf3-55928432c74a" + ";" + "API_YvesRocher_Gbh" + ":" + "XJcqLM759pd5", encodeBASE64SansRC)
HExécuteRequête(REQ_SommeTicket) POUR TOUT REQ_SommeTicket HLitRecherche(TempTickets, NoTicket, REQ_SommeTicket.NoTicket, hIdentique) vConstReq.AdEvent.type = "addCA" vConstReq.AdEvent.date = "2022-05-20" vConstReq.AdEvent.idExternal = TempTickets.Tiers vConstReq.AdEvent.member.loadFromKeys.idExternal = TempTickets.Tiers vConstReq.AdEvent.fvalue = REQ_SommeTicket.la_somme_TotalHT nIndice = TableauAjoute(details) vConstReq.AdEvent.details[nIndice].AdEventDetail.idExternal = TempTickets.Tiers vConstReq.AdEvent.details[nIndice].AdEventDetail.detailType = "I" vConstReq.AdEvent.details[nIndice].AdEventDetail.class1 = TempTickets.LibelleArticle vConstReq.AdEvent.details[nIndice].AdEventDetail.class2 = TempTickets.CodeCondition vConstReq.AdEvent.details[nIndice].AdEventDetail.class10 = TempTickets.CodeArticle vConstReq.AdEvent.details[nIndice].AdEventDetail.quantity = TempTickets.Quantite vConstReq.AdEvent.details[nIndice].AdEventDetail.finalValue = TempTickets.TotalHT sJsonData = "json_data=" + VariantVersJSON(vConstReq, psdMiseEnForme) cRequete..URL = "https://" + "qa.adelya.com" + "/apiv1/webapi.do?" + sJsonData cRequete..Méthode = httpPut cRequete..ContentType = "application/json" cRequete..Entête["Accept"] = "application/json" cRequete..Entête["Authorization"] = sBasiAuth cRequete..IgnoreErreur = httpIgnoreCertificatExpiré + httpIgnoreCertificatInvalide + httpIgnoreNomCertificatInvalide + httpIgnoreRedirection + httpIgnoreRevocation cReponse = HTTPEnvoie(cRequete) SI ErreurDétectée ALORS Erreur(ErreurInfo(errComplet)) SINON Info(cReponse.Contenu) FIN FIN
Code JSON avec les valeurs
{ "AdEvent": { "type":"addCA", "date":"2022-05-20", "idExternal":"243054", "member": { "loadFromKeys": { "idExternal":"243054" } }, "fvalue":-11.05999994278, "details": [ { "AdEventDetail": { "idExternal":"243054", "detailType":"I", "class1":"CN3 RAL VERTIGE 49 SATINE=====", "class2":0, "class10":37022, "quantity":-1, "finalValue":-6.45 } } ] } }
Je vous remercie pour l'aide que vous pourrez m'apporter.
-- Hervé |
| |
| |
| | | |
|
| | |
| |
Registered member 80 messages |
|
| Posted on May, 28 2022 - 2:54 AM |
Et bien avec ce code la réponse est ok.
cRequete..URL = URLEncode(gProtocole + gServeur + gUrlApi + "json_data="+Remplace(VariantVersJSON(vConstReq,psdMinifié),Caract(34),"'"),encodeURLDepuisAnsi)
-- Hervé |
| |
| |
| | | |
|
| | |
| |
| Posted on August, 18 2022 - 10:20 AM |
| Un grand merci pour le partage de ta solution qui m'a enlevé une épine du pied. |
| |
| |
| | | |
|
| | | | |
| | |
|