/// ///////////////////////////////////////////////////////////// /// <summary> /// Crée un attribut relation décrivant la relation qui lie la donnée cumulée au type demandé /// </summary> /// <param name="tp"></param> /// <returns></returns> public RelationAttribute GetRelationAttributeToType(Type tp) { int nCle = 0; foreach (CCleDonneeCumulee cle in Parametre.ChampsCle) { if (cle.TypeLie != null && cle.TypeLie == tp) { CObjetDonneeAIdNumerique obj = (CObjetDonneeAIdNumerique)Activator.CreateInstance(tp, new object[] { ContexteDonnee }); RelationAttribute attr = new RelationAttribute( obj.GetNomTable(), obj.GetChampId(), CDonneeCumulee.GetNomChampCle(nCle), false, true, false); return(attr); } nCle++; } return(null); }
/// //////////////////////////////////////////////////////// protected override CResultAErreur MyExecute(CContexteExecutionAction contexte) { CResultAErreur result = CResultAErreur.True; //Calcule l'élément à supprimer CContexteEvaluationExpression contexteEval = new CContexteEvaluationExpression(Process); contexteEval.AttacheObjet(typeof(CContexteDonnee), contexte.ContexteDonnee); result = ExpressionEntiteASupprimer.Eval(contexteEval); if (!result) { result.EmpileErreur(I.T("Error during @1 formula evaluation|216", ExpressionEntiteASupprimer.ToString())); return(result); } if (result.Data is IEnumerable && (!(result.Data is CListeObjetsDonnees) || m_bPurgeAdmin)) { StringBuilder bl = new StringBuilder(); Type tp = null; string strChampId = ""; List <int> lstIds = new List <int>(); foreach (object obj in ((IEnumerable)result.Data)) { CObjetDonneeAIdNumerique objId = obj as CObjetDonneeAIdNumerique; if (objId == null) { result.EmpileErreur(I.T("Can not delete element of this type|20030")); return(result); } if (tp == null) { tp = objId.GetType(); strChampId = objId.GetChampId(); } if (objId.GetType() != tp) { result.EmpileErreur(I.T("Can not delete a list of different object types|20031")); return(result); } bl.Append(objId.Id); lstIds.Add(objId.Id); bl.Append(","); } if (m_bPurgeAdmin) { result = PurgeEntites(contexte.IdSession, tp, lstIds.ToArray()); } else { if (bl.Length == 0) { return(result); } bl.Remove(bl.Length - 1, 1); CListeObjetsDonnees lst = new CListeObjetsDonnees(contexte.ContexteDonnee, tp); lst.Filtre = new CFiltreData(strChampId + " in (" + bl.ToString() + ")"); if (DeleteFillesEnCascade) { result = CObjetDonneeAIdNumerique.DeleteAvecCascadeSansControleDoncIlFautEtreSurDeSoi(lst, true); } else { result = CObjetDonneeAIdNumerique.Delete(lst, true); } } return(result); } if (result.Data is CListeObjetsDonnees) { result = CObjetDonneeAIdNumerique.Delete(result.Data as CListeObjetsDonnees, true); return(result); } CObjetDonneeAIdNumerique objetASupprimer = (CObjetDonneeAIdNumerique)result.Data; ArrayList lstVariablesAVider = new ArrayList(); //CHerche les variables qui contiennent l'objet à supprimer foreach (CVariableDynamique variable in contexte.Branche.Process.ListeVariables) { object val = contexte.Branche.Process.GetValeurChamp(variable); if (val != null && val.Equals(objetASupprimer)) { lstVariablesAVider.Add(variable); } } if (m_bPurgeAdmin) { result = PurgeEntites(contexte.IdSession, objetASupprimer.GetType(), new int[] { objetASupprimer.Id }); } else { // Traite la suppression de tous les éléments filles en cascade. if (DeleteFillesEnCascade) { result = objetASupprimer.DeleteAvecCascadeSansControleDoncIlFautEtreSurDeSoi(true); } else { result = objetASupprimer.Delete(true); } } if (result) { foreach (CVariableDynamique variable in lstVariablesAVider) { Process.SetValeurChamp(variable, null); } } return(result); }
/* * //------------------------------------------------------- * private object GetObjetPourFormuleData(object valeur) * { * CChampFinalDeTableauCroiseCle champFinalCle = ChampFinal as CChampFinalDeTableauCroiseCle; * if (champFinalCle != null) * { * CCleDonneeCumulee cle = parametreDonnee.GetChampCle(champFinalCle.NomChamp); * if (cle != null && cle.TypeLie != null) * { * CObjetDonnee objet = Activator.CreateInstance(cle.TypeLie, new object[] { contexte }) as CObjetDonnee; * if (objet.ReadIfExists(new object[] { valeur })) * valeur = objet; * else * valeur = null; * } * } * return new CDummyForDataFormula(valeur); * }*/ public CResultAErreur PrepareAffichageDonnees( System.Data.DataTable table, CContexteDonnee contexte, CParametreDonneeCumulee parametreDonnee, CParametreVisuDonneePrecalculee parametreVisu) { CResultAErreur result = CResultAErreur.True; m_dummyForData = null; m_dummyForHeader = null; m_dummyForHeader = GetObjetPourFormuleHeader(parametreDonnee) as CDummyForHeaderFormula; CCleDonneeCumulee cle = null; #region Précharge les données nécéssaires pour les entetes de colonnes if (FormuleHeader != null) { //regarde si c'est un champ clé CChampFinalDeTableauCroiseDonnee champDonnee = m_champFinal as CChampFinalDeTableauCroiseDonnee; if (champDonnee != null && champDonnee.Pivot != null && parametreDonnee != null) { cle = parametreDonnee.GetChampCle(champDonnee.Pivot.NomChamp); if (cle != null && cle.TypeLie != null) { if (cle.TypeLie != null) { m_typeObjetDonneeHeader = cle.TypeLie; List <int> lstCles = new List <int>(); //Précharge les éléments correspondants. On trouve les valeurs //des éléments dans les données étendues de chaque colonne StringBuilder bl = new StringBuilder(); foreach (DataColumn col in table.Columns) { CChampFinalDetableauCroiseDonneeAvecValeur champFinalDeCol = col.ExtendedProperties[CTableauCroise.c_ExtendedPropertyToColumnKey] as CChampFinalDetableauCroiseDonneeAvecValeur; if (champFinalDeCol != null && champFinalDeCol.NomChamp == ChampFinal.NomChamp) { bl.Append(champFinalDeCol.ValeurPivot); bl.Append(','); } } if (bl.Length > 0) { bl.Remove(bl.Length - 1, 1); CListeObjetsDonnees lst = new CListeObjetsDonnees(contexte, cle.TypeLie); //trouve la clé CObjetDonneeAIdNumerique obj = Activator.CreateInstance(cle.TypeLie, new object[] { contexte }) as CObjetDonneeAIdNumerique; lst.Filtre = new CFiltreData(obj.GetChampId() + " in (" + bl.ToString() + ")"); foreach (CObjetDonneeAIdNumerique objTmp in lst) { parametreVisu.PutElementInCache(objTmp); } } } } } } #endregion m_dummyForData = GetObjetPourFormuleData(parametreDonnee); //Si le champ final correspond à une clé, précharge toutes les valeurs //de clé si la clé correspond à un type cle = parametreDonnee.GetChampCle(ChampFinal.NomChamp); if (cle != null && FormuleData != null && cle.TypeLie != null) { m_typeObjetDonneeData = cle.TypeLie; StringBuilder bl = new StringBuilder(); if (table.Columns.Contains(ChampFinal.NomChamp)) { foreach (DataRow row in table.Rows) { try { int nId = Int32.Parse(row[ChampFinal.NomChamp].ToString()); bl.Append(nId); bl.Append(','); } catch { } } if (bl.Length > 0) { bl.Remove(bl.Length - 1, 1); CObjetDonneeAIdNumerique obj = Activator.CreateInstance(cle.TypeLie, new object[] { contexte }) as CObjetDonneeAIdNumerique; CListeObjetsDonnees lst = new CListeObjetsDonnees(contexte, cle.TypeLie); lst.Filtre = new CFiltreData(obj.GetChampId() + " in (" + bl.ToString() + ")"); foreach (CObjetDonneeAIdNumerique objTmp in lst) { parametreVisu.PutElementInCache(objTmp); } } } } return(result); }
//********************************************************************************** public void ReadArbre(CListeObjetsDonnees listeSource, CListeObjetsDonnees.CArbreProps arbre, List <string> lstPaquetsALire) { if (listeSource.Count == 0) { return; } CObjetDonneeAIdNumerique objExemple = listeSource[0] as CObjetDonneeAIdNumerique; if (objExemple == null) { return; } string strCle = ""; string strPropSansCle = ""; if (!CDefinitionProprieteDynamique.DecomposeNomProprieteUnique(arbre.ProprietePrincipale, ref strCle, ref strPropSansCle)) { return; } //trouve la relation correspondante à l'identifiant de la propriété RelationTypeIdAttribute relation = null; foreach (RelationTypeIdAttribute relTest in CContexteDonnee.RelationsTypeIds) { if (relTest.IdRelation == strPropSansCle) { relation = relTest; break; } } if (relation == null) { return; } string strNomColDep = relation.GetNomColDepLue(); DataColumn col = objExemple.Table.Columns[strNomColDep]; if (col == null) { col = new DataColumn(strNomColDep, typeof(bool)); col.DefaultValue = false; col.AllowDBNull = false; objExemple.Table.Columns.Add(col); } if (lstPaquetsALire == null) { lstPaquetsALire = listeSource.GetPaquetsPourLectureFils(objExemple.GetChampId(), col); } foreach (string strPaquet in lstPaquetsALire) { if (strPaquet != null && strPaquet.Trim().Length > 0) { CListeObjetsDonnees lst = new CListeObjetsDonnees(listeSource.ContexteDonnee, CContexteDonnee.GetTypeForTable(relation.TableFille)); lst.Filtre = new CFiltreData( relation.ChampType + "=@1 and " + relation.ChampId + " in " + strPaquet, listeSource.TypeObjets.ToString()); lst.AssureLectureFaite(); lst.ReadDependances(arbre); } } foreach (CObjetDonneeAIdNumerique obj in listeSource) { CContexteDonnee.ChangeRowSansDetectionModification(obj.Row, strNomColDep, true); } }