コード例 #1
0
        //----------------------------------------------------------------------------------------------------
        public CResultAErreur SendDonneesPooled(List <CDonneeCumuleeTransportable> lstDonnees)
        {
            CResultAErreur result = AssureSessionPolling();

            if (!result)
            {
                return(result);
            }

            using (CContexteDonnee ctx = new CContexteDonnee(m_sessionPolling.IdSession, true, false))
            {
                foreach (CDonneeCumuleeTransportable donnee in lstDonnees)
                {
                    CDonneeCumulee data = new CDonneeCumulee(ctx);
                    data.CreateNewInCurrentContexte();
                    if (!data.FillFromDonneeTransportable(donnee))
                    {
                        data.Delete(true);
                    }
                }
                ctx.EnableTraitementsAvantSauvegarde = false;
                ctx.EnableTraitementsExternes        = false;
                result = ctx.SaveAll(false);
            }
            result.Data = null;
            return(result);
        }
コード例 #2
0
        /// /////////////////////////////////////////////////////////////
        /// <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);
        }
コード例 #3
0
        /// /////////////////////////////////////////////////////////////
        public CListeObjetsDonnees GetDonneesCumuleesForObjet(CObjetDonneeAIdNumerique objet)
        {
            //Trouve le champ du paramètre qui est lié au type de l'objet lié
            CParametreDonneeCumulee parametre = Parametre;
            int    nCle        = 0;
            string strChampCle = "";

            foreach (CCleDonneeCumulee cle in parametre.ChampsCle)
            {
                if (cle.TypeLie != null && cle.TypeLie == objet.GetType())
                {
                    strChampCle = CDonneeCumulee.GetNomChampCle(nCle);
                    break;
                }
                else
                {
                    nCle++;
                }
            }
            CListeObjetsDonnees listeVide = new CListeObjetsDonnees(objet.ContexteDonnee, typeof(CDonneeCumulee));

            listeVide.Filtre = new CFiltreDataImpossible();
            if (strChampCle == "")
            {
                return(listeVide);
            }

            CFiltreData filtre = new CFiltreData(
                CTypeDonneeCumulee.c_champId + "=@1 and " +
                strChampCle + "=@2",
                this.Id,
                objet.Id.ToString());
            CListeObjetsDonnees liste = new CListeObjetsDonnees(objet.ContexteDonnee, typeof(CDonneeCumulee));

            liste.Filtre = filtre;
            return(liste);
        }
コード例 #4
0
        /// //////////////////////////////////////////
        public override CResultAErreur MyEval(CContexteEvaluationExpression ctx, object[] listeParametres)
        {
            CResultAErreur result = CResultAErreur.True;

            try
            {
                CContexteDonnee contexteDonnee = (CContexteDonnee)ctx.GetObjetAttache(typeof(CContexteDonnee));
                if (contexteDonnee == null)
                {
                    if (ctx.ObjetSource != null && ctx.ObjetSource is IObjetAContexteDonnee)
                    {
                        contexteDonnee = ((IObjetAContexteDonnee)ctx.ObjetSource).ContexteDonnee;
                    }
                    else
                    {
                        contexteDonnee = new CContexteDonnee(CSessionClient.GetSessionUnique().IdSession, true, false);
                    }
                    ctx.AttacheObjet(typeof(CContexteDonnee), contexteDonnee);
                }

                /*//Cherche un objet donnée dans le contexte d'évaluation pour pouvoir
                 * //avoir un contexte de donnee;
                 * if ( !(ctx.ObjetSource is CObjetDonnee) )
                 * {
                 *  result.EmpileErreur("Impossible de récupérer une donnée de production si la source de la formule n'est pas un objet donnee");
                 *  return result;
                 * }
                 * CContexteDonnee contexte = ((CObjetDonnee)ctx.ObjetSource).ContexteDonnee;*/
                bool bHasNoReadInDb           = listeParametres[0] is bool;
                bool bNePasLireEnBase         = bHasNoReadInDb ? (bool)listeParametres[0] : false;
                int  nStartParam              = bHasNoReadInDb ? 1 : 0;
                CTypeDonneeCumulee typeDonnee = new CTypeDonneeCumulee(contexteDonnee);
                if (!typeDonnee.ReadIfExists(new CFiltreData(CTypeDonneeCumulee.c_champCode + "=@1",
                                                             listeParametres[0 + nStartParam].ToString())))
                {
                    result.EmpileErreur(I.T("The cumulated data type @1 does not exist|218", listeParametres[0 + nStartParam].ToString()));
                    return(result);
                }
                CListeObjetsDonnees liste  = new CListeObjetsDonnees(contexteDonnee, typeof(CDonneeCumulee));
                CFiltreData         filtre = new CFiltreData(
                    CTypeDonneeCumulee.c_champId + "=@1", typeDonnee.Id);
                //Indice de la clé
                int nCle = 0;
                CParametreDonneeCumulee parametre = typeDonnee.Parametre;
                for (int nParam = nStartParam + 2; nParam < listeParametres.Length; nParam++)
                {
                    if (listeParametres[nParam] != null)
                    {
                        CCleDonneeCumulee cle = parametre.GetChampCle(nCle);
                        while ((cle == null || cle.Champ == "") && nCle < CParametreDonneeCumulee.c_nbChampsCle)
                        {
                            nCle++;
                            cle = parametre.GetChampCle(nCle);
                        }
                        if (nCle > CParametreDonneeCumulee.c_nbChampsCle)
                        {
                            break;
                        }
                        else
                        {
                            if (cle.Champ != "")
                            {
                                filtre.Filtre += " and " + CDonneeCumulee.c_baseChampCle + nCle.ToString() + "=@" +
                                                 (filtre.Parametres.Count + 1).ToString();
                                filtre.Parametres.Add(listeParametres[nParam].ToString());
                            }
                            nCle++;
                        }
                    }
                }
                liste.Filtre = filtre;
                liste.InterditLectureInDB = bNePasLireEnBase;
                if (liste.Count > 0)
                {
                    CDonneeCumulee donnee = (CDonneeCumulee)liste[0];
                    int            nParam = Convert.ToInt32(listeParametres[nStartParam + 1]);
                    if (nParam < 0 || nParam > CParametreDonneeCumulee.c_nbChampsValeur)
                    {
                        result.EmpileErreur(I.T("The cumulated data has no value @1|219", nParam.ToString()));
                        return(result);
                    }
                    result.Data = (double)donnee.Row[CDonneeCumulee.c_baseChampValeur + nParam.ToString()];
                }
                else
                {
                    result.Data = (double)0;
                }
            }
            catch (Exception e)
            {
                result.EmpileErreur(new CErreurException(e));
                return(result);
            }
            return(result);
        }
コード例 #5
0
        //-----------------------------------------------------------------
        /// <summary>
        /// Le data du result contient le datatable correspondant à ce paramètre de visu
        /// </summary>
        /// <returns></returns>
        public CResultAErreur GetDataTable(CContexteDonnee contexteDonnee)
        {
            CResultAErreur     result     = CResultAErreur.True;
            CTypeDonneeCumulee typeDonnee = GetTypeDonneeCumulee(contexteDonnee);

            if (typeDonnee == null)
            {
                result.EmpileErreur(I.T("Unable to load Precalculated data type|20041"));
                return(result);
            }
            CListeObjetsDonnees lstDatas = new CListeObjetsDonnees(
                contexteDonnee,
                typeof(CDonneeCumulee),
                new CFiltreData(CTypeDonneeCumulee.c_champId + "=@1", m_nIdTypeDonneeCumulee));

            CParametreDonneeCumulee parametre = typeDonnee.Parametre;

            #region Filtrage des données
            CFiltreData filtreDonnees = null;
            int         nCle          = 0;
            foreach (CCleDonneeCumulee cle in parametre.ChampsCle)
            {
                if (cle.Champ != null && cle.Champ != "")
                {
                    CFiltreDonneePrecalculee filtreBase    = m_listeFiltresDeBase.FirstOrDefault(f => f.ChampAssocie == cle.Champ);
                    CFiltreDonneePrecalculee filtreUser    = m_listeFiltresUser.FirstOrDefault(f => f.ChampAssocie == cle.Champ);
                    CFiltreDynamique         filtreDynBase = filtreBase != null ? filtreBase.Filtre : null;
                    CFiltreDynamique         filtreDynUser = filtreUser != null ? filtreUser.Filtre : null;
                    CFiltreData filtre = null;
                    if (filtreDynUser != null && filtreDynUser.ComposantPrincipal != null)
                    {
                        result = filtreDynUser.GetFiltreData();
                        if (result)
                        {
                            filtre = result.Data as CFiltreData;
                        }
                    }
                    if (filtreDynBase != null && filtreDynBase.ComposantPrincipal != null)
                    {
                        result = filtreDynBase.GetFiltreData();
                        if (result)
                        {
                            filtre = CFiltreData.GetAndFiltre(filtre, result.Data as CFiltreData);
                        }
                    }
                    if (filtre != null && filtre.HasFiltre)
                    {
                        //Crée une liste d'objets correspondant au filtre
                        CListeObjetsDonnees lst = new CListeObjetsDonnees(contexteDonnee, cle.TypeLie);
                        lst.Filtre = filtre;
                        StringBuilder bl = new StringBuilder();
                        foreach (CObjetDonneeAIdNumerique obj in lst)
                        {
                            bl.Append(obj.Id);
                            bl.Append(',');
                        }
                        filtre = null;
                        if (bl.Length == 0)
                        {
                            filtre        = new CFiltreDataImpossible();
                            filtreDonnees = new CFiltreDataImpossible();
                        }
                        else
                        {
                            bl.Remove(bl.Length - 1, 1);
                            filtre        = new CFiltreData(CDonneeCumulee.GetNomChampCle(nCle) + " in (" + bl.ToString() + ")");
                            filtreDonnees = CFiltreData.GetAndFiltre(filtreDonnees, filtre);
                        }
                    }
                }
                nCle++;
            }
            #endregion
            if (filtreDonnees != null)
            {
                lstDatas.Filtre = filtreDonnees;
            }


            //Crée le datatable de base
            DataTable table = new DataTable();

            Dictionary <string, string> dicChampsACopier = new Dictionary <string, string>();
            nCle = 0;
            foreach (CCleDonneeCumulee cle in parametre.ChampsCle)
            {
                if (cle.Champ != "")
                {
                    DataColumn col = new DataColumn(cle.Champ, typeof(string));
                    table.Columns.Add(col);
                    dicChampsACopier[CDonneeCumulee.GetNomChampCle(nCle)] = col.ColumnName;
                }
                nCle++;
            }
            foreach (CParametreDonneeCumulee.CNomChampCumule nom in parametre.NomChampsDecimaux)
            {
                if (nom.NomChamp != "")
                {
                    DataColumn col = new DataColumn(nom.NomChamp, typeof(double));
                    table.Columns.Add(col);
                    dicChampsACopier[CDonneeCumulee.GetNomChampValeur(nom.NumeroChamp)] = nom.NomChamp;
                }
            }
            foreach (CParametreDonneeCumulee.CNomChampCumule nom in parametre.NomChampsDates)
            {
                if (nom.NomChamp != "")
                {
                    DataColumn col = new DataColumn(nom.NomChamp, typeof(DateTime));
                    table.Columns.Add(col);
                    dicChampsACopier[CDonneeCumulee.GetNomChampDate(nom.NumeroChamp)] = nom.NomChamp;
                }
            }
            foreach (CParametreDonneeCumulee.CNomChampCumule nom in parametre.NomChampsTextes)
            {
                if (nom.NomChamp != "")
                {
                    DataColumn col = new DataColumn(nom.NomChamp, typeof(string));
                    table.Columns.Add(col);
                    dicChampsACopier[CDonneeCumulee.GetNomChampTexte(nom.NumeroChamp)] = nom.NomChamp;
                }
            }

            foreach (CDonneeCumulee donnee in lstDatas)
            {
                DataRow rowSource = donnee.Row.Row;
                DataRow rowDest   = table.NewRow();
                foreach (KeyValuePair <string, string> kv in dicChampsACopier)
                {
                    rowDest[kv.Value] = rowSource[kv.Key];
                }
                table.Rows.Add(rowDest);
            }
            result = m_tableauCroise.CreateTableCroisee(table);

            if (OperationCumul != OperationsAgregation.None)
            {
                DataTable tableFinale = result.Data as DataTable;
                DataRow   row         = tableFinale.NewRow();
                bool      bHeaderFait = false;
                foreach (DataColumn col in tableFinale.Columns)
                {
                    CChampFinalDeTableauCroiseDonnee champDonnee = col.ExtendedProperties[CTableauCroise.c_ExtendedPropertyToColumnKey] as CChampFinalDeTableauCroiseDonnee;
                    if (champDonnee != null)
                    {
                        CDonneeAgregation donnee = CDonneeAgregation.GetNewDonneeForOperation(OperationCumul);
                        donnee.PrepareCalcul();
                        foreach (DataRow rowTmp in tableFinale.Rows)
                        {
                            donnee.IntegreDonnee(rowTmp[col]);
                        }
                        row[col] = donnee.GetValeurFinale();
                    }
                    else if (!bHeaderFait)
                    {
                        row[col]    = m_strLibelleTotal;
                        bHeaderFait = true;
                    }
                }
                tableFinale.Rows.Add(row);
            }
            return(result);
        }