Création d'une Liste dynamic et MAJ de cette liste
Bonjour le forum,
Je rencontre un soucis depuis quelques jours, j'ai essayé toutes les méthodes possibles et rien n'y fait j'ai un problème quelque part dans mon code...
Le sujet :
- Je récupère via une API, la liste de tous les contrôles d'un traitement. (Liste A) --> Good
- Je récupère via une autre API, la liste de toutes les applications liées à ce traitement (Liste B) --> Good
- Je vais aller parcourir la liste A et aller chercher pour chaque application, la totalité de ses contrôles (totalité des données d'un contrôle) dans une nouvelle liste (Liste C) --> Good
- Ensuite, une fois que j'ai ma liste C avec tous mes contrôles pour UNE application, je la parcours et je crée une nouvelle liste (Liste D) avec seulement le statut, l'ID et le nom du contrôle. C'est ici que ça se corse. --> NOT GOOD
Je créé une variable dynamic ou je stocke mes 3 données différentes, lorsque j'essaye de les mettre dans une liste, ils se divisent en 3 données différentes de ma liste alors que j'aimerai qu'ils appartiennent à la même donnée ... Si quelqu'un sait pourquoi la fin de mon code ne marche pas (regarder à partir de la ligne 85) ça m'aiderai beaucoup, car du coup lorsqu'on a passé la première boucle et qu'on va check le deuxième contrôle, ça plante instantané quand j'utilise mon pointeur :(
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136
|
foreach (dynamic traitement in traitements)
{
List<dynamic> AppsDuTraitement= (traitement); // API fournissant la liste de toutes les applications liées au traitement (Liste B)
List<dynamic> ControlsinPAs = GetControlsFromPA(traitement ); // API fournissant la liste des contrôles du traitement (Liste A)
LogWrite("Check du traitement " + traitement.name + " (" + i + ")");
if (AppsDuTraitement!= null)
{
List<dynamic> ReferenceControls = null; // Création de la liste D
int j = 0; // Compteur
dynamic mavaleur = null; // Création d'une variable dynamic qu'on insérera dans notre nouvelle liste.
dynamic idToSearchInReferenceControl = null; // Variable permettant de check si contrôle déjà présent dans la liste qu'on vient de créer.
string statusFinalAsset = "";
foreach (dynamic PAAsset in PAAssets) // Je parcours chaque application
{
j++;
LogWrite("Check de l'Asset " + PAAsset.name + " (" + j + "/" + PAAssets.Count + ") ");
List<dynamic> AssetControls = GetAssetsControls(PAAsset); // Liste des contrôles d'une application (Liste C)
if (AssetControls != null)
{
foreach (dynamic AssetControl in AssetControls) // Je parcours chaque contrôle de l'application
{
LogWrite("Check du contrôle " + AssetControl.control.name + " de l'asset " + PAAsset.name);
string statusControlAsset = "";
string iDControlAsset = "";
string identifierControlAsset = "";
statusControlAsset = AssetControl.status;
iDControlAsset = AssetControl.implementationId;
identifierControlAsset = AssetControl.control.identifier;
if (ReferenceControls != null) // NUL à la première boucle donc ne rentre pas mais plante à la deuxieme
{
idToSearchInReferenceControl = ReferenceControls.FirstOrDefault(p => p.implementationId == iDControlAsset); // On recherche si le contrôle de l'asset est présent dans notre liste // PLANTE ICI CAR IL NE TROUVE PAS LE "p.implementationId"
if (idToSearchInReferenceControl != null)
{
LogWrite("On a trouvé le contrôle dans ma liste, on vient comparer ses valeurs");
if (statusControlAsset != idToSearchInReferenceControl.status)
{
// ici on veut modfifier la valeur
if (statusControlAsset == "Pending")
{
LogWrite("Si on rentre ici, on transforme le statut global du contrôle " + AssetControl.name + " en Pending");
// On met à jour le statut dans ma liste : COMMENT?
}
else if (statusControlAsset == "Implemented" && idToSearchInReferenceControl.status == "NotDoing")
{
LogWrite("Si on rentre ici, on transforme le statut global du contrôle " + AssetControl.name + " en Implemented");
//On met à jour le statut dans ma liste
}
else if (idToSearchInReferenceControl == null)
{
LogWrite("Si on rentre ici alors, pas de status sur l'asset dans ma liste, impossible");
}
}
}
else
{
LogWrite("Si Pas trouvé le contrôle de l'asset dans ma liste alors on vient ici pour l'ajouter");
if (mavaleur == null)
{
mavaleur = "{\"implementationId\":" + iDControlAsset + ",\"identifier\":" + AssetControl.control.identifier + ",\"status\":" + AssetControl.status + "},";
}
else
{
mavaleur = mavaleur + "{\"implementationId\":" + iDControlAsset + ",\"identifier\":" + AssetControl.control.identifier + ",\"status\":" + AssetControl.status + "},";
}
dynamic mavaleur2 = Newtonsoft.Json.JsonConvert.DeserializeObject<dynamic>(mavaleur);
if (ReferenceControls == null)
{
List<dynamic> temp = new List<dynamic>(mavaleur2);
ReferenceControls = temp;
}
else
{
ReferenceControls.AddRange(mavaleur2);
}
}
}
else // LA PREMIERE BOUCLE RENTRE ICI
{
LogWrite("Pas de liste créée. On la crée ici.");
if (mavaleur == null)
{
mavaleur = "{\"implementationId\":\"" + iDControlAsset + "\",\"identifier\":\"" + AssetControl.control.identifier + "\",\"status\":\"" + AssetControl.status + "\"}";
}
else
{
mavaleur = mavaleur + ",{\"implementationId\":" + iDControlAsset + ",\"identifier\":" + AssetControl.control.identifier + ",\"status\":" + AssetControl.status + "},";
}
dynamic mavaleur2 = Newtonsoft.Json.JsonConvert.DeserializeObject<dynamic>(mavaleur);
// ICI JE SUIS OBLIGE DE CONVERTIR MAVALEUR EN MAVALEUR2 pour avoir un format correct dans ma liste.
if (ReferenceControls == null)
{
dynamic temp = new List<dynamic>(mavaleur2);
ReferenceControls = temp;
}
else
{
ReferenceControls.AddRange(mavaleur2);
}
LogWrite("ici on a fait un tour ");
LogWrite("mavaleur" + mavaleur); // ICI j'obtiens {"implementationId":"ix5aq4avzakjdg","identifier":"P00.03","status":"implemented"}
LogWrite("refeControl " + ReferenceControls[0]); // ICI j'obtiens : "implementationId":"ix5aq4avzakjdg"
LogWrite("refeControl " + ReferenceControls[1]) // ICI j'obtiens : "identifier":"P00.03"
LogWrite("refectronol " + ReferenceControls[2]); // ICI j'obtiens : "status":"implemented"
// ICI JE VOUDRAIS QUE MON "ReferenceControls[0] = mavaleur. Je ne comprends pas pourquoi mes données pour UN contrôle d'UNE application créé une liste avec 3 différentes valeurs
}
}
}
else
{
LogWrite("L'asset " + PAAsset.name + " ne contient pas de contrôles.");
}
}
}
else
{
LogWrite("This processing activity " + otpa.name + " have no assets linked");
}
}
} |
Merci d'avance pour votre aide.
J'aurai un autre point sur le même sujet une fois ce soucis résolu !
Mojito