Exemplo n.º 1
0
        /// ////////////////////////////////////////
        public override CResultAErreur Serialize(C2iSerializer serializer)
        {
            int            nVersion = GetNumVersion();
            CResultAErreur result   = serializer.TraiteVersion(ref nVersion);

            if (!result)
            {
                return(result);
            }
            result = base.Serialize(serializer);
            if (!result)
            {
                return(result);
            }
            if (nVersion < 1)
            {
                //TESTDBKEYOK
                serializer.ReadDbKeyFromOldId(ref m_dbKeyChamp, typeof(CChampCustom));
                CChampCustom champ = new CChampCustom(CContexteDonneeSysteme.GetInstance());
                if (champ.ReadIfExists(m_dbKeyChamp))
                {
                    //Convertit le nom de propriété avec les DbKey
                    //ne pas appeller SetNomProprieteSansCleTypeChamp(GetKeyChamp()) car pour les filtres,
                    //le nom de propriété peut contenir un chemin
                    ConvertNomProprieteFromIdToDbKey();
                }
            }
            else
            {
                //TESTDBKEYOK
                serializer.TraiteDbKey(ref m_dbKeyChamp);
            }
            return(result);
        }
Exemplo n.º 2
0
        //-----------------------------------------------------
        public CResultAErreur Serialize(C2iSerializer serializer)
        {
            int            nVersion = GetNumVersion();
            CResultAErreur result   = serializer.TraiteVersion(ref nVersion);

            if (!result)
            {
                return(result);
            }
            switch (serializer.Mode)
            {
            case ModeSerialisation.Ecriture:
                //TESTDBKEYTODO : remplacer IdChamp par DbKey
                CDbKey dbKeyChampWrite = ChampCustom != null ? ChampCustom.DbKey : null;
                if (nVersion < 1)
                {
                    serializer.ReadDbKeyFromOldId(ref dbKeyChampWrite, typeof(CChampCustom));
                }
                else
                {
                    serializer.TraiteDbKey(ref dbKeyChampWrite);
                }
                break;

            case ModeSerialisation.Lecture:
                CContexteDonnee contexte = serializer.GetObjetAttache(typeof(CContexteDonnee)) as CContexteDonnee;
                if (contexte == null)
                {
                    contexte = CContexteDonneeSysteme.GetInstance();
                }
                //TESTDBKEYTODO : remplacer IdChamp par DbKey
                CDbKey dbKeyChampRead = null;
                if (nVersion < 1)
                {
                    serializer.ReadDbKeyFromOldId(ref dbKeyChampRead, typeof(CChampCustom));
                }
                else
                {
                    serializer.TraiteDbKey(ref dbKeyChampRead);
                }
                if (dbKeyChampRead == null)
                {
                    m_champ = null;
                }
                else
                {
                    m_champ = new CChampCustom(contexte);
                    if (!m_champ.ReadIfExists(dbKeyChampRead))
                    {
                        m_champ = null;
                    }
                }
                break;
            }
            return(result);
        }
Exemplo n.º 3
0
        //---------------------------------------------------------------------------------
        public static object GetValeurChamp(IObjetDonneeAChamps objet, string strIdChamp)
        {
            CChampCustom champ = new CChampCustom(objet.ContexteDonnee);

            if (champ.ReadIfExists(CDbKey.CreateFromStringValue(strIdChamp)))
            {
                return(GetValeurChamp(objet, champ.Id, DataRowVersion.Default));
            }
            return(null);
        }
Exemplo n.º 4
0
        public static int GetIdFromDbKey(CDbKey dbKey)
        {
            CChampCustom champ = new CChampCustom(CContexteDonneeSysteme.GetInstance());

            if (champ.ReadIfExists(dbKey))
            {
                return(champ.Id);
            }

            return(-1);
        }
        //------------------------------------------------------------
        public override CResultAErreur GetValue(object objet, string strPropriete)
        {
            CResultAErreur result = CResultAErreur.True;

            result.Data = null;
            string strIdChamp     = null;
            bool   bEntiteToChamp = false;

            if (

                /*Pour compatibilité, avant modifs de décembre 2015, le nom du champ était en fait le même qu'une propriété champ custom.
                 * En décembre 2015, ajout de la possiblité de retourner les valeurs display de champ custom dans les requêtes,
                 * ce qui a changé le nom de la propriétés
                 * */
                CInfoRelationEntiteToValeurChampCustom.DecomposeNomPropriete(strPropriete, ref strIdChamp) ||
                /*fin pour compatiblité*/
                CInfoRelationComposantFiltreEntiteToChampEntite.DecomposeNomPropriete(strPropriete, ref strIdChamp, ref bEntiteToChamp))
            {
                IElementAChamps eltAChamps = objet as IElementAChamps;
                if (eltAChamps == null)
                {
                    return(result);
                }
                result.Data = eltAChamps.GetValeurChamp(strIdChamp);
                CChampCustom champ = new CChampCustom(CContexteDonneeSysteme.GetInstance());
                if (result.Data != null && champ.ReadIfExists(CDbKey.CreateFromStringValue(strIdChamp)))
                {
                    if (!champ.IsChoixParmis())
                    {
                        result.Data = result.Data.ToString();
                    }
                    else
                    {
                        foreach (CValeurChampCustom valeur in champ.ListeValeurs)
                        {
                            if (valeur.Value.Equals(result.Data))
                            {
                                result.Data = valeur.Display;
                                return(result);
                            }
                        }
                    }
                }
            }
            else if (CInfoRelationEValeurChampCustomToDisplay.DecomposeNomPropriete(strPropriete, ref strIdChamp))
            {
                //Rien de spécial, il s'agit de la navigation vers la valeur du champ qui a déjà été reprise par le composant filtre to champ entité
                //car la propriété complète d'un definitionDisplayValue est donnée par GetKeyChamp qui ajoute un composant Element->ValeurChamp + ValeurChamp->Display value
                result.Data = objet;
            }

            return(result);
        }
Exemplo n.º 6
0
 public static object GetValeurChamp(this IElementAChamps elt, CDbKey key, DataRowVersion version)
 {
     if (key != null)
     {
         CChampCustom champ = new CChampCustom(CContexteDonneeSysteme.GetInstance());
         if (champ.ReadIfExists(key))
         {
             return(elt.GetValeurChamp(champ.Id, version));
         }
     }
     return(null);
 }
Exemplo n.º 7
0
        //---------------------------------------------------------------------------------
        public static CResultAErreur SetValeurChamp(IObjetDonneeAChamps objet, string strIdChamp, object valeur)
        {
            CResultAErreur result = CResultAErreur.True;

            CChampCustom champ = new CChampCustom(objet.ContexteDonnee);

            if (champ.ReadIfExists(CDbKey.CreateFromStringValue(strIdChamp)))
            {
                return(SetValeurChamp(objet, champ.Id, valeur));
            }

            result.EmpileErreur("Invalid Custom Field Id in SetValeurChamps (Line 179)");
            return(result);
        }
        public COptimiseurProprieteDynamiqueChampCustomDisplayValue(CDbKey keyChamp)
        {
            m_dbKeyChamp = keyChamp;
            CChampCustom champ = new CChampCustom(CContexteDonneeSysteme.GetInstance());

            if (champ.ReadIfExists(keyChamp))
            {
                if (champ.IsChoixParmis())
                {
                    foreach (CValeurChampCustom valeur in champ.ListeValeurs)
                    {
                        m_dicValeurs[valeur.Value] = valeur.Display;
                    }
                }
            }
        }
Exemplo n.º 9
0
        //----------------------------------------------------------------
        public CDefinitionProprieteDynamique GetProprieteInverse(Type typePortantLaPropriete, CDefinitionProprieteDynamique def)
        {
            CDefinitionProprieteDynamiqueChampCustomFils defFils = def as CDefinitionProprieteDynamiqueChampCustomFils;

            if (defFils == null)
            {
                return(null);
            }
            CChampCustom champ = new CChampCustom(CContexteDonneeSysteme.GetInstance());

            if (champ.ReadIfExists(defFils.KeyChamp))
            {
                return(new CDefinitionProprieteDynamiqueChampCustom(champ));
            }
            return(null);
        }
 //---------------------------------------------------------------
 public IChampPourVersion GetChamp(IElementAChampPourVersion element)
 {
     if (element.TypeChamp == CChampCustomPourVersion.c_typeChamp)
     {
         try
         {
             int          nIdChamp = Int32.Parse(element.FieldKey);
             CChampCustom champ    = new CChampCustom(element.ContexteDonnee);
             if (champ.ReadIfExists(nIdChamp))
             {
                 return(new CChampCustomPourVersion(champ));
             }
         }
         catch { }
     }
     return(null);
 }
Exemplo n.º 11
0
        //----------------------------------------------------------------------------------
        public CResultAErreur CreateChampInTable(IChampDeTable champExport, DataTable table)
        {
            CResultAErreur result = CResultAErreur.True;

            if (champExport is C2iChampExport && ((C2iChampExport)champExport).Origine is C2iOrigineChampExportChampCustom)
            {
                C2iOrigineChampExportChampCustom origineCustom = (C2iOrigineChampExportChampCustom)((C2iChampExport)champExport).Origine;
                //Récupère les noms et les types des champs custom
                CContexteDonnee ctx = null;
                if (table.DataSet is CContexteDonnee)
                {
                    ctx = (CContexteDonnee)table.DataSet;
                }
                else
                {
                    ctx = new CContexteDonnee(0, true, false);
                }
                //Lit les champs custom
                CListeObjetsDonnees listeChamps = new CListeObjetsDonnees(ctx, typeof(CChampCustom));
                listeChamps.AssureLectureFaite();

                foreach (int nIdChamp in origineCustom.IdsChampCustom)
                {
                    CChampCustom champ = new CChampCustom(ctx);
                    if (champ.ReadIfExists(nIdChamp))
                    {
                        if (champ.TypeDonneeChamp.TypeDonnee != TypeDonnee.tObjetDonneeAIdNumeriqueAuto)
                        {
                            DataColumn colChamp = new DataColumn(c_strPrefixeChampCustom + champ.Nom, champ.TypeDonnee.TypeDotNetNatif);
                            colChamp.AllowDBNull = true;
                            table.Columns.Add(colChamp);
                        }
                    }
                }
                return(result);
            }

            if (table.Columns.Contains(champExport.NomChamp))
            {
                return(result);
            }
            DataColumn col = new DataColumn(champExport.NomChamp, champExport.TypeDonnee);

            table.Columns.Add(col);
            return(result);
        }
Exemplo n.º 12
0
        //-------------------------------------------------------------------
        //S'il n'y a pas de paramètres, lit tous les champs custom
        public static void ReadChampsCustom(CListeObjetsDonnees lstObjets, params int[] idsChamps)
        {
            if (lstObjets.Count == 0)
            {
                return;
            }
            IObjetDonneeAChamps eltAChamps = lstObjets[0] as IObjetDonneeAChamps;

            if (eltAChamps == null)
            {
                return;
            }
            if (idsChamps.Length == 0)
            {
                lstObjets.ReadDependances("RelationsChampsCustom");
                foreach (IObjetDonneeAChamps eltAChamp in lstObjets)
                {
                    SetTousChampsLus(eltAChamp);
                }
                return;
            }
            List <string> lstChamps = new List <string>();

            foreach (int nIdChamp in idsChamps)
            {
                CChampCustom champ = new CChampCustom(eltAChamps.ContexteDonnee);
                if (champ.ReadIfExists(nIdChamp))
                {
                    CDefinitionProprieteDynamiqueChampCustom def = new CDefinitionProprieteDynamiqueChampCustom(champ);
                    lstChamps.Add(def.NomPropriete);
                }
            }
            lstObjets.ReadDependances(lstChamps.ToArray());
            foreach (IObjetDonneeAChamps eltAChamp in lstObjets)
            {
                foreach (int nIdChamp in idsChamps)
                {
                    SetChampsLus(eltAChamp, nIdChamp);
                }
            }
        }
Exemplo n.º 13
0
        public string GetCleRestrictionCompatible(string strAncienneCleRestriction)
        {
            if (strAncienneCleRestriction.Length > CChampCustom.c_prefixeCleRestriction.Length &&
                strAncienneCleRestriction.Substring(
                    0, CChampCustom.c_prefixeCleRestriction.Length) == CChampCustom.c_prefixeCleRestriction)
            {
                // Lire l'Id du Champ Custom
                int    nIdChamp          = -1;
                string strExtractIdChamp = strAncienneCleRestriction.Substring(CChampCustom.c_prefixeCleRestriction.Length);
                try
                {
                    nIdChamp = Int32.Parse(strExtractIdChamp);
                    CChampCustom champ = new CChampCustom(CContexteDonneeSysteme.GetInstance());
                    if (champ.ReadIfExists(nIdChamp))
                    {
                        return(champ.CleRestriction);
                    }
                }
                catch { }
            }

            return(strAncienneCleRestriction);
        }
Exemplo n.º 14
0
        public override object GetValeur(object obj, CCacheValeursProprietes cacheValeurs, CRestrictionUtilisateurSurType restriction)
        {
            IApplatisseurProprietes applatisseur = obj as IApplatisseurProprietes;

            if (applatisseur != null)
            {
                obj = applatisseur.GetObjetParDefaut();
            }
            if (m_strCleRestriction == "")
            {
                if (m_champOrigine is CDefinitionProprieteDynamiqueChampCustom)
                {
                    CDbKey       keyChamp = ((CDefinitionProprieteDynamiqueChampCustom)m_champOrigine).DbKeyChamp;
                    CChampCustom champ    = new CChampCustom(CContexteDonneeSysteme.GetInstance());
                    if (champ.ReadIfExists(keyChamp))
                    {
                        m_strCleRestriction = champ.CleRestriction;
                    }
                }
                else if (m_champOrigine != null)
                {
                    m_strCleRestriction = m_champOrigine.NomProprieteSansCleTypeChamp;
                }
            }

            if (restriction != null && m_strCleRestriction != "" && (restriction.GetRestriction(m_strCleRestriction) & ERestriction.Hide) == ERestriction.Hide)
            {
                return(null);
            }

            if (!m_bOptimFaite && obj != null)
            {
                m_bOptimFaite = true;
                if (obj is CObjetDonnee)
                {
                    m_strChampOrigineOptim = "";
                    PropertyInfo info = obj.GetType().GetProperty(m_champOrigine.NomProprieteSansCleTypeChamp);

                    //Il faut absolument stocker le type, car si
                    //Le champ vient d'une interface, tous les éléments ne sont pas forcement
                    //du même type, et ne proviennent pas forcement du même champ
                    m_typeOptim = obj.GetType();

                    if (info != null)
                    {
                        object[] attribs = info.GetCustomAttributes(typeof(AccesDirectInterditAttribute), true);
                        if (attribs.Length == 0)
                        {
                            attribs = info.GetCustomAttributes(typeof(TableFieldPropertyAttribute), true);
                            if (attribs != null && attribs.Length > 0)
                            {
                                m_strChampOrigineOptim = ((TableFieldPropertyAttribute)attribs[0]).NomChamp;
                            }
                        }
                    }
                }
                if (m_strChampOrigineOptim == "")
                {
                    m_optimiseur = CInterpreteurProprieteDynamique.GetOptimiseur(obj.GetType(), m_champOrigine.NomPropriete);
                }
            }
            if (m_strChampOrigineOptim != "" && obj is CObjetDonnee && obj.GetType() == m_typeOptim)
            {
                return(((CObjetDonnee)obj).Row[m_strChampOrigineOptim]);
            }
            else if (m_optimiseur != null)
            {
                return(m_optimiseur.GetValue(obj));
            }
            else
            {
                return(CInterpreteurProprieteDynamique.GetValue(obj, ChampOrigine, cacheValeurs).Data);
            }
        }
Exemplo n.º 15
0
        //-------------------------------------------------------------------
        public static CResultAErreur SetValeurChamp(IObjetDonneeAChamps objet, int nIdChamp, object valeur)
        {
            /*
             * ///Stef 18052011, passage de la recherche de l'élément sous forme de fonction
             *
             *          string strTableValeurs = objet.GetNomTableRelationToChamps();
             *          string strChampId = objet.GetChampId();
             *          object dummy = null;
             *          if (!objet.IsDependanceChargee(strTableValeurs, strChampId))
             *                  dummy = objet.RelationsChampsCustom;
             *          DataTable table = objet.ContexteDonnee.Tables[strTableValeurs];
             *
             *          string strFiltre = CChampCustom.c_champId + "=" + nIdChamp + " and " +
             *                  strChampId + "=" + ((IObjetDonneeAIdNumerique)objet).Id;
             *
             *
             * //Stef 20/07/2010 : si on fait un set avec version à -1, on modifie la version Referentiel.
             * //Le pb était que si on ne fait pas ça, on utilise CContexteDonnee.c_colIsHorsVersion = 0,
             * //ce qui peut ramener plus d'1 élément, du coup, applique version fonctionne de manière aléatoire
             * //car parfois, on modifie bien la version référentiel, d'autres fois, on modifie
             * //autre chose (suivant ce qui est dans le contexte de données).
             * if (objet.ContexteDonnee.IdVersionDeTravail == null || objet.ContexteDonnee.IdVersionDeTravail == -1)
             *          {
             *                  strFiltre += " and " + CSc2iDataConst.c_champIdVersion + " is null and " +
             *                          CSc2iDataConst.c_champIsDeleted + "=0";
             *          }
             *          else
             *          {
             *                  strFiltre += " and " + CContexteDonnee.c_colIsHorsVersion + "=0";
             *          }
             *
             *          DataRow[] rows = table.Select(strFiltre);
             *          if (rows.Length > 0)
             *          {
             *                  CRelationElementAChamp_ChampCustom rel = (CRelationElementAChamp_ChampCustom)objet.ContexteDonnee.GetNewObjetForTable(table);
             *                  rel.SetRow(rows[0]);
             *                  rel.Valeur = valeur;
             *                  return CResultAErreur.True;
             *          }*/
            CRelationElementAChamp_ChampCustom rel = GetRelationToChamp(objet, nIdChamp);

            if (rel != null)
            {
                rel.Valeur = valeur;
                return(CResultAErreur.True);
            }


            CChampCustom   champ  = new CChampCustom(objet.ContexteDonnee);
            CResultAErreur result = CResultAErreur.True;

            if (champ.ReadIfExists(nIdChamp))
            {
                CRelationElementAChamp_ChampCustom relation = objet.GetNewRelationToChamp();
                relation.CreateNewInCurrentContexte();
                relation.ElementAChamps = objet;
                relation.ChampCustom    = champ;
                relation.Valeur         = valeur;
            }
            else
            {
                result.EmpileErreur(I.T("The field n°@1 doesn't exist|234", nIdChamp.ToString()));
            }
            return(result);
        }
Exemplo n.º 16
0
        /// //////////////////////////////////////////////////
        protected override CResultAErreur MySerialize(C2iSerializer serializer)
        {
            int            nVersion = GetNumVersion();
            CResultAErreur result   = serializer.TraiteVersion(ref nVersion);

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


            serializer.TraiteInt(ref m_nButtonHorizontalMargin);
            serializer.TraiteInt(ref m_nMargeVertical);
            serializer.TraiteInt(ref m_nButtonWidth);
            serializer.TraiteInt(ref m_nButtonHeight);

            if (nVersion < 2)
            {
                int nTmp = 0;
                serializer.TraiteInt(ref nTmp);
            }

            CDbKey key = null;

            switch (serializer.Mode)
            {
            case ModeSerialisation.Ecriture:
                if (m_champCustom != null)
                {
                    key = m_champCustom.DbKey;
                }
                serializer.TraiteDbKey(ref key);
                break;

            case ModeSerialisation.Lecture:
                if (nVersion < 4)
                {
                    // TESTDBKEYOK
                    serializer.ReadDbKeyFromOldId(ref key, typeof(CChampCustom));
                }
                else
                {
                    serializer.TraiteDbKey(ref key);
                }
                if (key != null)
                {
                    CContexteDonnee ctx = (CContexteDonnee)serializer.GetObjetAttache(typeof(CContexteDonnee));
                    if (ctx == null)
                    {
                        ctx = CContexteDonneeSysteme.GetInstance();
                    }
                    m_champCustom = new CChampCustom(ctx);
                    if (!m_champCustom.ReadIfExists(key))
                    {
                        m_champCustom = null;
                    }
                }
                else
                {
                    m_champCustom = null;
                }
                break;
            }
            if (nVersion >= 2)
            {
                int nTmp = m_buttonColor.ToArgb();
                serializer.TraiteInt(ref nTmp);
                m_buttonColor = Color.FromArgb(nTmp);

                nTmp = m_buttonInvalidateColor.ToArgb();
                serializer.TraiteInt(ref nTmp);
                m_buttonInvalidateColor = Color.FromArgb(nTmp);

                nTmp = m_buttonSelectedColor.ToArgb();
                serializer.TraiteInt(ref nTmp);
                m_buttonSelectedColor = Color.FromArgb(nTmp);
            }

            if (nVersion >= 3)
            {
                serializer.TraiteListString(m_listeLimitToValues);
            }


            return(result);
        }
Exemplo n.º 17
0
        /// //////////////////////////////////////////////////
        protected override CResultAErreur MySerialize(C2iSerializer serializer)
        {
            int            nVersion = GetNumVersion();
            CResultAErreur result   = serializer.TraiteVersion(ref nVersion);

            if (!result)
            {
                return(result);
            }
            result = base.MySerialize(serializer);
            if (!result)
            {
                return(result);
            }

            bool bHasChamp = m_champCustom != null;

            serializer.TraiteBool(ref bHasChamp);
            int nId = 0;

            if (bHasChamp)
            {
                switch (serializer.Mode)
                {
                /* TESTDBKEYOK (XL) */
                case ModeSerialisation.Ecriture:
                    CDbKey dbKeyW = m_champCustom.DbKey;
                    serializer.TraiteDbKey(ref dbKeyW);
                    break;

                case ModeSerialisation.Lecture:
                    CDbKey dbKey = null;
                    if (nVersion < 4)
                    {
                        serializer.ReadDbKeyFromOldId(ref dbKey, typeof(CChampCustom));
                    }
                    else
                    {
                        serializer.TraiteDbKey(ref dbKey);
                    }

                    CContexteDonnee ctx = (CContexteDonnee)serializer.GetObjetAttache(typeof(CContexteDonnee));
                    if (ctx == null)
                    {
                        ctx = CContexteDonneeSysteme.GetInstance();
                    }
                    m_champCustom = new CChampCustom(ctx);
                    if (!m_champCustom.ReadIfExists(dbKey))
                    {
                        m_champCustom = null;
                    }

                    break;
                }
            }
            else
            {
                m_champCustom = null;
            }

            if (nVersion > 0)
            {
                serializer.TraiteString(ref m_strLibelleWeb);
                serializer.TraiteInt(ref m_nNumWeb);
            }
            if (nVersion >= 2)
            {
                serializer.TraiteBool(ref m_bUseCombo);
            }
            else
            {
                m_bUseCombo = false;
            }
            if (nVersion >= 3)
            {
                serializer.TraiteBool(ref m_bAutoSetValue);
            }
            return(result);
        }
Exemplo n.º 18
0
        /// //////////////////////////////////////////
        public override CResultAErreur MyEval(CContexteEvaluationExpression ctx, object[] listeParametres)
        {
            CResultAErreur result = CResultAErreur.True;

            try
            {
                CDbKey dbKeyIdChamp    = null;
                object valeurRetournee = null;
                //TESTDBKEYOK : le premier paramètre peut être un Id ou un UniversalId de champ
                if (listeParametres.Length == 2)
                {
                    if (listeParametres[0] is int)
                    {
                        int nIdChamp = (int)listeParametres[0];
                        dbKeyIdChamp = CDbKey.GetNewDbKeyOnIdAUtiliserPourCeuxQuiNeGerentPasLeDbKey(nIdChamp);
                    }
                    else
                    {
                        dbKeyIdChamp = CDbKey.CreateFromStringValue((string)listeParametres[0]);
                    }

                    valeurRetournee = listeParametres[1];
                }

                if (listeParametres.Length == 1)
                {
                    //1 seul paramètre, ce doit être une expression variable avec une variable champ
                    C2iExpressionChamp exChamp = Parametres2i[0] as C2iExpressionChamp;
                    if (exChamp != null)
                    {
                        CDefinitionProprieteDynamiqueChampCustom def = exChamp.DefinitionPropriete as CDefinitionProprieteDynamiqueChampCustom;
                        if (def != null)
                        {
                            dbKeyIdChamp = def.DbKeyChamp;
                        }
                    }
                    valeurRetournee = listeParametres[0];
                }
                if (valeurRetournee == null || dbKeyIdChamp == null)
                {
                    result.Data = "";
                    return(result);
                }

                CContexteDonnee contexteDonnee = (CContexteDonnee)ctx.GetObjetAttache(typeof(CContexteDonnee));
                if (contexteDonnee == null)
                {
                    contexteDonnee = new CContexteDonnee(CSessionClient.GetSessionUnique().IdSession, true, false);
                    ctx.AttacheObjet(typeof(CContexteDonnee), contexteDonnee);
                }
                CChampCustom champ = new CChampCustom(contexteDonnee);
                if (champ.ReadIfExists(dbKeyIdChamp))
                {
                    if (!champ.IsChoixParmis())
                    {
                        result.Data = valeurRetournee.ToString();
                    }
                    else
                    {
                        foreach (CValeurChampCustom valeur in champ.ListeValeurs)
                        {
                            if (valeur.Value.Equals(valeurRetournee))
                            {
                                result.Data = valeur.Display;
                                return(result);
                            }
                        }
                    }
                }
                result.Data = "";
            }
            catch (Exception e)
            {
                result.EmpileErreur(new CErreurException(e));
            }
            return(result);
        }
Exemplo n.º 19
0
        /// ///////////////////////////////////////////////////////////
        public object GetValue(object objetInterroge, CDefinitionProprieteDynamique propriete)
        {
            //Récupère l'objet à interroger
            string strProp = propriete.NomPropriete;
            object valeur  = m_cache.GetValeurCache(objetInterroge, strProp);

            if (valeur != null)
            {
                return(valeur);
            }

            CContexteDonnee contexteForObjets = ContexteDonneeCache;

            if (objetInterroge is IObjetAContexteDonnee)
            {
                contexteForObjets = ((IObjetAContexteDonnee)objetInterroge).ContexteDonnee;
            }
            if (contexteForObjets == null)
            {
                contexteForObjets = ContexteDonneeCache;
            }


            object objetFinal = objetInterroge;
            int    nPos       = strProp.LastIndexOf('.');

            if (nPos > 0 && !(propriete is CDefinitionProprieteDynamiqueDonneeCumulee) &&
                !(propriete is CDefinitionProprieteDynamiqueChampCustom) &&
                !(propriete is CDefinitionProprieteDynamiqueChampCustomFils) &&
                !(propriete is CDefinitionProprieteDynamiqueFormule))
            {
                string strPropDebut;
                strPropDebut = strProp.Substring(0, nPos);
                strProp      = strProp.Substring(nPos + 1);
                objetFinal   = m_cache.GetValeurCache(objetInterroge, strPropDebut);
                if (objetFinal == null)
                {
                    objetFinal = GetValue(objetInterroge, strPropDebut);

                    /*object objetAInterroger = null;
                     * MemberInfo membre = null;
                     * CInterpreteurTexteProptVariete.GetObjetFinalEtMemberInfo ( objetInterroge, strPropDebut, ref objetAInterroger, ref membre );
                     * if ( membre != null )
                     * {
                     *      objetFinal = CInterpreteurTextePropriete.GetValue ( objetAInterroger, membre );
                     * }
                     * else
                     * {
                     *      //On n'a pas trouvé le membre, il s'agit donc d'autre chose, il faut donc décomposer
                     *      //Le champ
                     * }*/
                    //objetFinal = CInterpreteurTextePropriete.GetValue(objetInterroge, strPropDebut);
                    m_cache.StockeValeurEnCache(objetInterroge, strPropDebut, objetFinal);
                }
                if (objetFinal == null)
                {
                    return(null);
                }
                valeur = m_cache.GetValeurCache(objetFinal, strProp);
                if (valeur != null)
                {
                    return(valeur);
                }
            }


            if (propriete is CDefinitionProprieteDynamiqueChampCustom)
            {
                if (!(objetFinal is IElementAChamps))
                {
                    valeur = null;
                }

                else
                {
                    //TESTDBKEYTODO qui ne peut pas marche
                    valeur = ((IElementAChamps)objetFinal).GetValeurChamp(((CDefinitionProprieteDynamiqueChampCustom)propriete).DbKeyChamp.InternalIdNumeriqueANeJamaisUtiliserSaufDansCDbKeyAddOn.Value, System.Data.DataRowVersion.Default);

                    /*if (m_bValeurAfficheeDeChampsCustom)
                     * {
                     *      CChampCustom champ = new CChampCustom(ContexteDonneeCache);
                     *      if (champ.ReadIfExists(((CDefinitionProprieteDynamiqueChampCustom)propriete).IdChamp))
                     *      {
                     *              object valTmp = champ.DisplayFromValue(valeur);
                     *              if (valTmp != null)
                     *                      valeur = valTmp;
                     *      }
                     * }*/
                }
            }
            else if (propriete is CDefinitionProprieteDynamiqueChampCustomFils && objetInterroge is CObjetDonneeAIdNumerique)
            {
                CChampCustom champ = new CChampCustom(ContexteDonneeCache);
                if (champ.ReadIfExists(((CDefinitionProprieteDynamiqueChampCustomFils)propriete).KeyChamp))
                {
                    Type tp = champ.Role.TypeAssocie;

                    try
                    {
                        IObjetDonneeAChamps elt = (IObjetDonneeAChamps)Activator.CreateInstance(tp, new object[] { contexteForObjets });
                        CRelationElementAChamp_ChampCustom rel = elt.GetNewRelationToChamp();
                        CListeObjetsDonnees liste = new CListeObjetsDonnees(contexteForObjets, tp);
                        liste.Filtre = new CFiltreDataAvance(
                            elt.GetNomTable(),
                            rel.GetNomTable() + "." +
                            CRelationElementAChamp_ChampCustom.c_champValeurString + "=@1 and " +
                            rel.GetNomTable() + "." +
                            CRelationElementAChamp_ChampCustom.c_champValeurInt + "=@2 and " +
                            rel.GetNomTable() + "." +
                            CChampCustom.c_champId + "=@3",
                            objetInterroge.GetType().ToString(),
                            ((CObjetDonneeAIdNumerique)objetInterroge).Id,
                            champ.Id);
                        valeur = liste.ToArray(tp);
                    }
                    catch
                    {
                        valeur = null;
                    }
                }
            }
            else if (propriete is CDefinitionProprieteDynamiqueListeEntites)
            {
                CListeEntites liste = new CListeEntites(contexteForObjets);
                try
                {
                    if (liste.ReadIfExists(((CDefinitionProprieteDynamiqueListeEntites)propriete).DbKeyListeEntite))
                    {
                        CListeObjetsDonnees resultListe = liste.GetElementsLiesFor(objetInterroge);
                        if (resultListe != null)
                        {
                            valeur = resultListe.ToArray(liste.TypeElements);
                        }
                    }
                }
                catch
                {
                    valeur = null;
                }
            }


            else if (propriete is CDefinitionProprieteDynamiqueRelationTypeId)
            {
                if (!(objetFinal is CObjetDonneeAIdNumerique))
                {
                    valeur = null;
                }
                else
                {
                    CDefinitionProprieteDynamiqueRelationTypeId defRel = (CDefinitionProprieteDynamiqueRelationTypeId)propriete;
                    return(((CObjetDonneeAIdNumerique)objetFinal).GetDependancesRelationTypeId(
                               defRel.Relation.TableFille,
                               defRel.Relation.ChampType,
                               defRel.Relation.ChampId,
                               false));
                }
            }
            else if (propriete is CDefinitionProprieteDynamiqueDonneeCumulee)
            {
                if (!(objetFinal is CObjetDonneeAIdNumerique))
                {
                    valeur = null;
                }
                else
                {
                    CDefinitionProprieteDynamiqueDonneeCumulee defType = (CDefinitionProprieteDynamiqueDonneeCumulee)propriete;
                    CObjetDonneeAIdNumerique objet = (CObjetDonneeAIdNumerique)objetFinal;
                    CTypeDonneeCumulee       type  = new CTypeDonneeCumulee(contexteForObjets);
                    if (type.ReadIfExists(defType.DbKeyTypeDonnee))
                    {
                        valeur = type.GetDonneesCumuleesForObjet(objet);
                    }
                    else
                    {
                        valeur = null;
                    }
                }
            }
            else if (propriete is CDefinitionProprieteDynamiqueChampCalcule)
            {
                CChampCalcule champ = new CChampCalcule(contexteForObjets);
                if (champ.ReadIfExists(((CDefinitionProprieteDynamiqueChampCalcule)propriete).DbKeyChamp))
                {
                    valeur = champ.Calcule(objetFinal, new CFournisseurPropDynStd(true));
                }
                else
                {
                    valeur = null;
                }
            }
            else if (propriete is CDefinitionProprieteDynamiqueFormule)
            {
                CContexteEvaluationExpression contexte = new CContexteEvaluationExpression(objetInterroge);
                contexte.AttacheObjet(typeof(CContexteDonnee), contexteForObjets);
                CResultAErreur result = ((CDefinitionProprieteDynamiqueFormule)propriete).Formule.Eval(contexte);
                if (result)
                {
                    return(result.Data);
                }
            }
            else if (propriete is CDefinitionProprieteDynamiqueVariableDynamique && objetFinal is IElementAVariables)
            {
                valeur = ((IElementAVariables)objetFinal).GetValeurChamp(((CDefinitionProprieteDynamiqueVariableDynamique)propriete).IdChamp);
            }
            else
            {
                valeur = CInterpreteurTextePropriete.GetValue(objetFinal, strProp);
            }
            m_cache.StockeValeurEnCache(objetInterroge, propriete.Nom, valeur);
            if (objetFinal != objetInterroge)
            {
                m_cache.StockeValeurEnCache(objetFinal, strProp, valeur);
            }
            return(valeur);
        }
Exemplo n.º 20
0
        //---------------------------------------------------------------------------------
        public static object GetValeurChamp(IObjetDonneeAChamps objet, int nIdChamp, DataRowVersion version)
        {
            string strTableValeurs = objet.GetNomTableRelationToChamps();
            string strChampId      = objet.GetChampId();

            if (!objet.IsDependanceChargee(strTableValeurs, strChampId) && !IsChampLu(objet, nIdChamp))
            {
                object dummy;
                dummy = objet.RelationsChampsCustom;
                SetTousChampsLus(objet);
            }

            DataTable table     = objet.ContexteDonnee.Tables[strTableValeurs];
            string    strFiltre = CChampCustom.c_champId + "=" + nIdChamp + " and " +
                                  strChampId + "=" + ((IObjetDonneeAIdNumerique)objet).Id;

            //Stef 20/07/2010 : si on fait un get avec version à -1, on récupère la version Referentiel.
            //Le pb était que si on ne fait pas ça, on utilise CContexteDonnee.c_colIsHorsVersion = 0,
            //ce qui peut ramener plus d'1 élément, du coup, GetValeur champ retourne
            //n'importe quelle valeur, et pas forcement celle du référentiel
            if (table.Columns.Contains(CSc2iDataConst.c_champIdVersion))
            {
                if (objet.ContexteDonnee.IdVersionDeTravail == null || objet.ContexteDonnee.IdVersionDeTravail == -1)
                {
                    strFiltre += " and " + CSc2iDataConst.c_champIdVersion + " is null and " +
                                 CSc2iDataConst.c_champIsDeleted + "=0";
                }
                else
                {
                    strFiltre += " and " + CContexteDonnee.c_colIsHorsVersion + "=0";
                }
            }
            DataRow[] rows = table.Select(strFiltre);

            if (rows.Length > 0)
            {
                CRelationElementAChamp_ChampCustom rel = (CRelationElementAChamp_ChampCustom)objet.ContexteDonnee.GetNewObjetForTable(table);
                DataRow row = rows[0];
                if (row.HasVersion(version))
                {
                    rel.SetRow(row);
                    rel.VersionToReturn = version;
                    return(rel.Valeur);
                }
                else
                {
                    return(null);
                }
            }


            /*CListeObjetsDonnees liste = GetRelationsToChamps(nIdChamp);
             *
             * if (liste.Count > 0)
             *  return ((CRelationElementAChamp_ChampCustom) liste[0]).Valeur;*/

            //Changement le 12/10/03 :

            /*Si l'objet n'a pas la relation du champ, mais qu'elle devrait (par ses groupes),
             * retourne la valeur par défaut du champ
             * si le champ ne doit pas apparaitre dans cet élément, retourne null
             * */
            // Lecture de la valeur par défaut du champ
            /* le 3/2/04 pourquoi ? ça ralentit tout !!, annule cette modif*/
            CChampCustom champ = new CChampCustom(objet.ContexteDonnee);

            if (champ.ReadIfExists(nIdChamp))
            {
                object valeurParDefaut = champ.ValeurParDefaut;

                /*if ( valeurParDefaut == null )
                 *  return null;
                 * //La valeur par défaut n'est pas null, regarde si cet élément doit avoir ce champ
                 * foreach ( CChampCustom champNormal in TousLesChamps )
                 * {
                 *      if ( champNormal == champ )
                 *          return valeurParDefaut;
                 * }*/
                return(valeurParDefaut);
            }
            return(null);
        }
Exemplo n.º 21
0
        //------------------------------------------------------------------------------------------
        public void ReadArbre(CListeObjetsDonnees listeSource, CListeObjetsDonnees.CArbreProps arbre, List <string> lstPaquetsALire)
        {
            string strIdChamp   = "";
            string strPropriete = "";
            string strCle       = "";

            if (listeSource.Count == 0)
            {
                return;
            }
            bool bFromEntiteToChamp = false;

            if (!CDefinitionProprieteDynamique.DecomposeNomProprieteUnique(arbre.ProprietePrincipale, ref strCle, ref strPropriete))
            {
                return;
            }
            if (!CInfoRelationComposantFiltreEntiteToChampEntite.DecomposeNomPropriete(strPropriete, ref strIdChamp, ref bFromEntiteToChamp))
            {
                //c'est une relation vers des valeurs de champ qui pointent sur cette valeur.
                //Ignore, et traite tout dans le composant suivant qui est un Entité to champ à l'envers
                listeSource.ReadDependances(arbre);
                return;
            }
            //On a affaire à une liste source qui contient des valeurs qui sont pointées
            //par des valeurs de champs, et on veut les éléments qui pointent sur ces valeurs de champs

            CChampCustom champ      = new CChampCustom(listeSource.ContexteDonnee);
            CDbKey       dbKeyChamp = CDbKey.CreateFromStringValue(strIdChamp);

            if (!champ.ReadIfExists(dbKeyChamp))
            {
                return;
            }
            //Vérifie que la liste source est bien du type de données du champ custom
            if (champ.TypeDonnee.TypeDotNetNatif != listeSource.TypeObjets)
            {
                return;
            }
            IObjetDonneeAIdNumerique obj = listeSource[0] as IObjetDonneeAIdNumerique;

            if (obj == null)
            {
                return;
            }
            string strChampId = obj.GetChampId();

            if (lstPaquetsALire == null)
            {
                lstPaquetsALire = listeSource.GetPaquetsPourLectureFils(strChampId, null);
            }

            //Trouve le type des éléments à champs
            Type typeElementsFinaux = champ.Role.TypeAssocie;
            //Trouve le type des relations aux elementAchamp_ChampCustom
            IObjetDonneeAChamps elt = Activator.CreateInstance(typeElementsFinaux, new object[] { listeSource.ContexteDonnee }) as IObjetDonneeAChamps;

            if (elt == null)
            {
                return;
            }
            string strNomTableRelToChamp = elt.GetNomTableRelationToChamps();
            Type   tpRelToChamp          = CContexteDonnee.GetTypeForTable(strNomTableRelToChamp);

            if (tpRelToChamp == null)
            {
                return;
            }
            foreach (string strPaquet in lstPaquetsALire)
            {
                CListeObjetsDonnees lst = new CListeObjetsDonnees(listeSource.ContexteDonnee, typeElementsFinaux);

                //TESTDBKEYTODO
                string strChampCustomId = dbKeyChamp.IsNumericalId() ? CChampCustom.c_champId : CObjetDonnee.c_champIdUniversel;

                lst.Filtre = new CFiltreDataAvance(
                    CContexteDonnee.GetNomTableForType(typeElementsFinaux),
                    strNomTableRelToChamp + "." + strChampCustomId + "=@1 and " +
                    strNomTableRelToChamp + "." + CRelationElementAChamp_ChampCustom.c_champValeurInt + " in " +
                    strPaquet,
                    dbKeyChamp.GetValeurInDb());
                lst.AssureLectureFaite();
                lst.ReadDependances(arbre);
            }
        }