PC SOFT

PROFESSIONAL NEWSGROUPS
WINDEVWEBDEV and WINDEV Mobile

Home → WINDEV 2025 → Comment récupérer le deltatoken d'une requête calendarview/delta ?
Comment récupérer le deltatoken d'une requête calendarview/delta ?
Started by NICOLAS LP, Nov., 10 2023 3:46 PM - 5 replies
Registered member
9 messages
Posted on November, 10 2023 - 3:46 PM
Bonjour,

Je n'arrive pas à récupérer le odata.deltalink que je vois pourtant dans la réponse.
Elle permet de ré-exécuter la requête avec les modifications réalisées entre temps seulement.

Procedure Evenements_LireSupprimes(
pdhDebut est une DateHeure = DateSys()+"0000",
pdhFin est une DateHeure = DateSys()+"2359"):booléen

LOCAL
vInfo est un Variant
vTemp est un Variant
sData est une chaîne

oRequête est une httpRequête
oRéponse est une httpRéponse

oRDV est un ST_OutlookEvenement
sTemp est une chaîne ANSI

//On cherche les événements supprimés dans la semaine précédente

oRequête..URL = :sURL_QueryMe + "calendarview/delta?startdatetime="+DateVersChaîne(pdhDebut,"AAAA-MM-JJ")+"T08:30:00-01:00"+"&enddatetime="+DateVersChaîne(pdhFin,"AAAA-MM-JJ")+"T17:30:00-01:00"
SI :oJetonJsonDelta <> Null ALORS
oRequête..URL += "&$deltatoken="+:oJetonJsonDelta
FIN
oRequête..Entête["Authorization"] = "Bearer "+:oJetonJson.access_token
oRequête..Méthode = httpGet
oRequête..ContentType = "application/json"

// Exécute la requête permettant d'obtenir les informations du profil de l'utilisateur connecté
oRéponse <- HTTPEnvoie(oRequête)
SI PAS ErreurDétectée _ET_ oRéponse..CodeEtat = ::C_Evt_Lire_OK ALORS

// Décode la réponse JSON contenu dans le message
vInfo = JSONVersVariant(oRéponse..Contenu)
sData = vInfo.@odata.deltaLink
vTemp = sData
:oJetonJsonDelta = VariantVersJSON(vTemp)
TableauSupprimeTout(:taListeEvtDelta)
POUR TOUT oEvenement de vInfo.value

SI oEvenement.@removed ALORS
VariableRAZ(oRDV)

oRDV.sLibelle = oEvenement.subject
oRDV.sDescription = oEvenement.body.content
sTemp = oEvenement.start.datetime
oRDV.dhDeb = :DateTimeToWindev(sTemp)
sTemp = oEvenement.end.datetime
oRDV.dhFin = :DateTimeToWindev(sTemp)
oRDV.sEntryID = oEvenement.id
oRDV.sGlobalAppointmentID = oEvenement.iCalUId
oRDV.dhModif = oEvenement.lastModifiedDateTime

TableauAjouteLigne(:taListeEvtDelta,oRDV)
FIN

FIN

RENVOYER Vrai
SINON
RENVOYER Faux
FIN


--
Nicolas LA PIETRA
LSI
Registered member
9 messages
Posted on November, 10 2023 - 4:26 PM




--
Nicolas LA PIETRA
LSI
Registered member
1,002 messages
Posted on November, 10 2023 - 5:24 PM
Bonjour,

essaye vInfo.'@odata'.deltaLink
Registered member
4,361 messages
Posted on November, 10 2023 - 8:42 PM
Bonjour,
Pourquoi ne par utiliser la désérialisation. Cela simplifierai aussi le remplissage de ton champ table en le reliant à la variable STRésultat.Values

--
Il y a peut être plus simple, mais, ça tourne
Registered member
9 messages
Posted on November, 13 2023 - 11:21 AM
Nadroj a écrit :
Bonjour,

essaye vInfo.'@odata'.deltaLink


MERCI
j'arrive à le récupérer ainsi

sData = vInfo.'@odata.deltaLink'


Mais la requête ne me renvoie toujours pas les événements supprimés :

Procedure Evenements_LireSupprimes(
pdhDebut est une DateHeure = DateSys()+"0000",
pdhFin est une DateHeure = DateSys()+"2359"):booléen

LOCAL
vInfo est un Variant
vTemp est un Variant
sData est une chaîne

oRequête est une httpRequête
oRéponse est une httpRéponse

oRDV est un ST_OutlookEvenement
sTemp est une chaîne ANSI

//On cherche les événements supprimés dans la semaine précédente

oRequête..URL = "https://graph.microsoft.com/v1.0/me/" + "calendarview/delta?"+
"startdatetime="+ :DateHeureToDateTime(pdhDebut) +
"&enddatetime=" + :DateHeureToDateTime(pdhFin)

SI :oJetonJsonDelta <> Null ALORS
sTemp = JSONVersChaîne(:oJetonJsonDelta)
sTemp = Droite(sTemp,Taille(sTemp)-1) //enlever le 1er "
sTemp = Gauche(sTemp,Taille(sTemp)-1) //enlever le dernier "
oRequête..Entête["$deltatoken"] = sTemp
FIN

oRequête..Entête["Authorization"] = "Bearer "+:oJetonJson.access_token
oRequête..Méthode = httpGet
oRequête..ContentType = "application/json"

// Exécute la requête permettant d'obtenir les informations du profil de l'utilisateur connecté
oRéponse <- HTTPEnvoie(oRequête)
SI PAS ErreurDétectée _ET_ oRéponse..CodeEtat = ::C_Evt_Lire_OK ALORS

// Décode la réponse JSON contenu dans le message
vInfo = JSONVersVariant(oRéponse..Contenu)
//on récupère le token de la requête pour que la prochaine ne retourne que le delta par rapport à la précédente
sData = vInfo.'@odata.deltaLink'
sData = Remplace(sData,"https://graph.microsoft.com/v1.0/me/calendarView/delta?$deltatoken=","")
vTemp = sData
:oJetonJsonDelta = VariantVersJSON(vTemp)
TableauSupprimeTout(:taListeEvtDelta)
POUR TOUT oEvenement de vInfo.value

SI oEvenement.@removed = "deleted" ALORS
VariableRAZ(oRDV)

oRDV.sLibelle = oEvenement.subject
oRDV.sDescription = oEvenement.body.content
sTemp = oEvenement.start.datetime
oRDV.dhDeb = :DateTimeToWindev(sTemp)
sTemp = oEvenement.end.datetime
oRDV.dhFin = :DateTimeToWindev(sTemp)
oRDV.sEntryID = oEvenement.id
oRDV.sGlobalAppointmentID = oEvenement.iCalUId
oRDV.dhModif = oEvenement.lastModifiedDateTime

TableauAjouteLigne(:taListeEvtDelta,oRDV)
FIN

FIN

RENVOYER Vrai
SINON
RENVOYER Faux
FIN


--
Nicolas LA PIETRA
LSI
Registered member
90 messages
Posted on November, 13 2023 - 2:23 PM
Bonjour

Pour info vous pouvez aussi le récupérer ainsi , puisque la requête renvoie en fait un JSON

jInfo est JSON
jInfo = oRéponse..Contenu
Trace(jInfo["@odata.deltaLink"])


ou

sdeltalink est chaîne = "@odata.deltaLink"
jInfo est JSON
jInfo = oRéponse..Contenu
Trace(jInfo[sdeltaLink])


Windèvement
Message modified, November, 13 2023 - 2:25 PM