/// <summary> /// Constructeur /// </summary> /// <param name="token">Token.</param> /// <param name="isSilentException">Si false : les Exceptions à l'envoi ne sont pas levées ; si tru, elles le sont.</param> public ValidatePresenceService(string token, bool?isSilentExceptions = false) { sqlData = new SQLData <ValidatePresence>(); this.Token = token; if (isSilentExceptions.HasValue) { this.isSilentExceptions = isSilentExceptions.Value; } else { this.isSilentExceptions = false; } // On crée la table au besoin sqlData.CreateTable(); }
/// <summary> /// Récupère les données du WS et décode le JSON dans la bonne instance /// </summary> /// <returns>The data.</returns> public async Task <List <T> > GetData(Func <JsonObject, T> DecodeJSONObject, Func <JsonPrimitive, T> DecodeJSONPrimitive, bool isInCache = true, int?RecordsCount = null) { // On checke la présence de la table SI on veut stocker les données en local if (isInCache) { sqlData.CreateTable(); } List <T> instances = new List <T>(); // MODE CONNECTE if (!IsHorsConnexion) { // Attention : on vide en fonction du type de données // La donnée peut être IsManifFiltered : // Dans ce cas, on purge la donnée where idManif = idManif de la donnée // ou IsParticipantFiltered, IsPrestationFiltered... if (isInCache) { sqlData.PurgeDataWithParameters(this.IdManif, this.IdPrestation, this.IdParticipant); } // Creates HTTP web request string url = Global.GetUrlBase() + this.ActionUrl; // On récupère les données (ou la page de données) if (RecordsCount == null) { instances.AddRange(await getPagedData(DecodeJSONObject, DecodeJSONPrimitive, url, isInCache, null, null)); } else { // On pagine int nbRecords = RecordsCount.Value; int startRecord = 0; while (nbRecords == RecordsCount) { // On récupère la page var pagedInstances = await getPagedData(DecodeJSONObject, DecodeJSONPrimitive, url, isInCache, startRecord, RecordsCount); // Attention : le WS a été mal codé ! Il renvoie un doubon pour le premier élément ! // Pour éviter le problème, on va vérifier si le 1er élément trouvé n'est pas déjà dans la liste... if (pagedInstances != null && pagedInstances.Count > 0 && instances.Where(x => x.Id == pagedInstances.First().Id).Any()) { // On retire le premier pagedInstances.Remove(pagedInstances.First()); } instances.AddRange(pagedInstances); nbRecords = pagedInstances.Count; startRecord += nbRecords; } } } return(instances); }