Пример #1
0
        protected virtual string GetDeclarationChamp_TypeAndLength(CInfoChampTable champ)
        {
            string strType = DataBaseTypesMappeur.GetStringDBTypeFromType(champ.TypeDonnee);

            if (champ.TypeDonnee == typeof(string))
            {
                if (champ.IsLongString || (champ.Longueur > DataBaseTypesMappeur.MaxDBStringLength && AutoAdaptLongString))
                {
                    strType = DataBaseTypesMappeur.DBLongStringDefinition;
                }
                else
                {
                    strType += "(";

                    if (champ.Longueur > DataBaseTypesMappeur.MaxDBStringLength)
                    {
                        strType += DataBaseTypesMappeur.MaxDBStringLength.ToString();
                    }
                    else
                    {
                        strType += champ.Longueur.ToString();
                    }

                    strType += ")";
                }
            }
            return(strType);
        }
Пример #2
0
        /// <summary>
        /// Supprime les dépendances (DeleteChamp_Dependances)
        /// Execute la requete d'update (GetRequeteUpdateChamp)
        /// Créé l'index si existant (CreateIndex)
        /// </summary>
        /// <param name="strNomTable"></param>
        /// <param name="champ"></param>
        /// <param name="bNotNull"></param>
        /// <param name="bLength"></param>
        /// <param name="bType"></param>
        /// <param name="bRelation"></param>
        /// <returns></returns>
        public virtual CResultAErreur UpdateChamp(string strNomTable, CInfoChampTable champ, bool bModifiedNotNull, bool bModifiedLength, bool bModifiedType)
        {
            //Suppression index
            CResultAErreur result = DeleteIndex(strNomTable, champ.NomChamp);

            //Mise à jour du champ
            if (result)
            {
                result = Connection.RunStatement(GetRequeteUpdateChamp(strNomTable, champ, bModifiedNotNull, bModifiedLength, bModifiedType));
            }
            if (result)
            {
                AfterChangeChamps(strNomTable);
            }

            //Creation de l'index
            if (result && champ.IsIndex)
            {
                result = CreateIndex(strNomTable, false, champ.NomChamp);
            }

            if (!result)
            {
                result.EmpileErreur(I.T("Error while fields updating of table @1|131", strNomTable));
            }

            return(result);
        }
Пример #3
0
 protected virtual bool Champ_ModifiedLength(CInfoChampTable champ, DataColumn colonne)
 {
     if (champ.IsLongString && colonne.MaxLength < DataBaseTypesMappeur.MinDBLongStringLength)
     {
         return(true);
     }
     if (AutoAdaptLongString && colonne.MaxLength > DataBaseTypesMappeur.MaxDBStringLength)
     {
         return(false);
     }
     if (champ.Longueur > DataBaseTypesMappeur.MaxDBStringLength && !champ.IsLongString)
     {
         if (colonne.MaxLength != DataBaseTypesMappeur.MaxDBStringLength)
         {
             return(true);
         }
     }
     else
     {
         if (colonne.MaxLength != champ.Longueur && champ.TypeDonnee == typeof(string) && !champ.IsLongString)
         {
             return(true);
         }
     }
     return(false);
 }
Пример #4
0
        public virtual CResultAErreur CreateChamp(string strNomTable, CInfoChampTable champ, bool bForcerNull)
        {
            CResultAErreur result = CheckNomColonne(strNomTable, champ.NomChamp);

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

            string strRequeteUpdate = "ALTER TABLE " + strNomTable + " ADD ";

            strRequeteUpdate += GetDeclarationChamp(champ, bForcerNull);

            result = Connection.RunStatement(strRequeteUpdate);
            if (result)
            {
                AfterChangeChamps(strNomTable);
            }

            if (!result)
            {
                result.EmpileErreur(I.T("Error while fields updating of table @1|131", strNomTable));
            }
            else if (champ.IsIndex)
            {
                result = CreateIndex(strNomTable, false, champ.NomChamp);
            }

            return(result);
        }
        ////////////////////////////////////////////////////
        protected override string GetNomParametreFor(CInfoChampTable champ, DataRowVersion version)
        {
            int nNumChamp = 0;
            if (m_tableChampToNumero[champ.NomChamp] == null)
            {
                nNumChamp = m_nNumeroVariable++;
                m_tableChampToNumero[champ.NomChamp] = nNumChamp;
            }
            else
                nNumChamp = (int)m_tableChampToNumero[champ.NomChamp];

            string strNom = m_connexion.GetNomParametre("A" + nNumChamp.ToString());
            switch (version)
            {
                case DataRowVersion.Current:
                    strNom += "_NEW";
                    break;
                case DataRowVersion.Original:
                    strNom += "_OLD";
                    break;
                default:
                    strNom += (int)version;
                    break;
            }
            return strNom;
        }
        ////////////////////////////////////////////////////
        protected override IDbDataParameter GetParametreFor(IDbCommand commande, CInfoChampTable champ, DataRowVersion version, ParameterDirection direction)
        {
            //DbType dbType = m_connexion.GetDbType(champ.TypeDonnee);
            IDbDataParameter parametre = commande.CreateParameter();

            parametre.ParameterName = GetNomParametreFor(champ, version);
            if (champ.IsLongString && champ.TypeDonnee == typeof(string))
            {
                if (parametre is OracleParameter)
                {
                    ((OracleParameter)parametre).OracleType = OracleType.NClob;
                }
            }
            else
            {
                parametre.DbType = m_connexion.GetDbType(champ.TypeDonnee);
                if (champ.TypeDonnee == typeof(string))
                {
                    parametre.Size = champ.Longueur;
                }
            }
            parametre.Direction     = direction;
            parametre.SourceColumn  = champ.NomChamp;
            parametre.SourceVersion = version;
            return(parametre);
        }
Пример #7
0
        ////////////////////////////////////////////
        private void OnChangeExpression(string strTexte, ref C2iExpression expToSet, CComboboxAutoFilled combo)
        {
            CContexteAnalyse2iExpression ctx = new CContexteAnalyse2iExpression(ActionSynchronisme.Process, typeof(CProcess));
            CResultAErreur result            = new CAnalyseurSyntaxiqueExpression(ctx).AnalyseChaine(strTexte);

            if (result)
            {
                ArrayList lstChamps = new ArrayList();
                expToSet = (C2iExpression)result.Data;
                Type            tp        = expToSet.TypeDonnee.TypeDotNetNatif;
                CStructureTable structure = null;
                try
                {
                    structure = CStructureTable.GetStructure(tp);
                    ArrayList lst = new ArrayList();
                    foreach (CInfoChampTable champ in structure.Champs)
                    {
                        if (champ.TypeDonnee == typeof(DateTime) || champ.TypeDonnee == typeof(DateTime?))
                        {
                            lst.Add(champ);
                        }
                    }
                    //Cherche les champs custom
                    if (typeof(CElementAChamp).IsAssignableFrom(tp))
                    {
                        //Crée les infos champ custom pour le type
                        using (CContexteDonnee contexte = new CContexteDonnee(
                                   CSessionClient.GetSessionUnique().IdSession,
                                   true, false))
                        {
                            string strCodeRole = CRoleChampCustom.GetRoleForType(tp).CodeRole;
                            CListeObjetsDonnees listeChamps = CChampCustom.GetListeChampsForRole(
                                contexte, strCodeRole);
                            new CListeObjetsDonnees(contexte, typeof(CChampCustom));
                            listeChamps.Filtre = new CFiltreData(
                                CChampCustom.c_champType + "=@1",
                                (int)TypeDonnee.tDate);
                            foreach (CChampCustom champ in listeChamps)
                            {
                                CInfoChampTable info = new CInfoChampTable(
                                    CSynchronismeDonnees.c_idChampCustom + champ.Id.ToString(),
                                    typeof(DateTime),
                                    0,
                                    false,
                                    false,
                                    true,
                                    false,
                                    true);
                                info.NomConvivial = champ.Nom;
                                lst.Add(info);
                            }
                        }
                    }
                    combo.ListDonnees = lst;
                }
                catch
                {
                }
            }
        }
Пример #8
0
        /// <summary>
        /// Retourne la déclaration d'un champ pour le créer
        /// </summary>
        /// <param name="champ"></param>
        /// <returns></returns>
        protected virtual string GetDeclarationChamp(CInfoChampTable champ, bool bForcerNull)
        {
            string strDeclaration = champ.NomChamp + " ";

            strDeclaration += GetDeclarationChamp_TypeAndLength(champ) + " ";
            strDeclaration  = bForcerNull || champ.NullAuthorized? strDeclaration += "NULL": strDeclaration += GetDeclarationChamp_NotNull(champ, false);
            return(strDeclaration);
        }
Пример #9
0
        public override CResultAErreur CreateChamp(string strNomTable, CInfoChampTable champ)
        {
            CResultAErreur result = base.CreateChamp(strNomTable, champ);

            if (result && !champ.NullAuthorized)
            {
                result = SetValeursParDefautAuxDonneesNulles(strNomTable, champ);
            }
            return(result);
        }
Пример #10
0
        //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        protected virtual bool Champ_ModifiedIndex(string strNomTable, CInfoChampTable champ)
        {
            bool bIndexExists = IndexExists(strNomTable, champ.NomChamp);

            if (bIndexExists != champ.IsIndex && !champ.IsId)
            {
                return(true);
            }
            return(false);
        }
Пример #11
0
        //Champs
        public override CResultAErreur CreateChamp(string strNomTable, CInfoChampTable champ)
        {
            CResultAErreur result = base.CreateChamp(strNomTable, champ);

            if (result && champ.IsAutoId && !SystemeAutoIncrementeExist(strNomTable, champ.NomChamp))
            {
                result = CreerSystemeAutoIncremente(strNomTable, champ.NomChamp);
            }
            return(result);
        }
Пример #12
0
        public override CResultAErreur UpdateChamp(string strNomTable, CInfoChampTable champ, bool bModifiedNotNull, bool bModifiedLength, bool bModifiedType)
        {
            CResultAErreur result = base.UpdateChamp(strNomTable, champ, bModifiedNotNull, bModifiedLength, bModifiedType);

            if (bModifiedNotNull && !champ.NullAuthorized)
            {
                result = SetValeursParDefautAuxDonneesNulles(strNomTable, champ);
            }
            return(result);
        }
Пример #13
0
        protected override IDbDataParameter GetParametreFor(IDbCommand commande, CInfoChampTable champ, DataRowVersion version, ParameterDirection direction)
        {
            IDbDataParameter parametre = base.GetParametreFor(commande, champ, version, direction);

            if (champ.IsLongString)
            {
                parametre.Size = -1;
            }

            return(parametre);
        }
 ////////////////////////////////////////////////////
 protected override IDbDataParameter GetParametreFor(IDbCommand commande, CInfoChampTable champ, DataRowVersion version, ParameterDirection direction)
 {
     //DbType dbType = m_connexion.GetDbType(champ.TypeDonnee);
     IDbDataParameter parametre = commande.CreateParameter();
     parametre.ParameterName = GetNomParametreFor(champ, version);
     parametre.DbType = m_connexion.GetDbType(champ.TypeDonnee);
     if (champ.TypeDonnee == typeof(string))
         parametre.Size = champ.Longueur;
     parametre.Direction = direction;
     parametre.SourceColumn = champ.NomChamp;
     parametre.SourceVersion = version;
     return parametre;
 }
        ////////////////////////////////////////////////////
        protected virtual OleDbParameter GetParametreFor(CInfoChampTable champ, DataRowVersion version, ParameterDirection direction)
        {
            OleDbParameter parametre = new OleDbParameter(GetNomParametreFor(champ, version), COleDbTypeConvertor.GetTypeOleDbFromType(champ.TypeDonnee));

            if ((parametre.DbType == DbType.String || parametre.DbType == DbType.AnsiString) && !champ.IsLongString)
            {
                parametre.Size = champ.Longueur;
            }
            parametre.Direction     = direction;
            parametre.SourceColumn  = champ.NomChamp;
            parametre.SourceVersion = version;
            return(parametre);
        }
Пример #16
0
        /// <summary>
        /// N'appelle pas GetDeclaration Champ mais GetDeclarationChamp_TypeAndLength puis
        /// GetDeclarationChamp_NotNull si le null à changé (sous oracle le redéclaration du null
        /// génère une erreur, sous SQL Serveur il n'est pas nécessaire de spécifier le null si ce
        /// dernier n'as pas changé)
        /// </summary>
        /// <param name="strNomTable"></param>
        /// <param name="champ"></param>
        /// <param name="bNotNull"></param>
        /// <param name="bLength"></param>
        /// <param name="bType"></param>
        /// <returns></returns>
        protected virtual string GetRequeteUpdateChamp(string strNomTable, CInfoChampTable champ, bool bModifiedNotNull, bool bModifiedLength, bool bModifiedType)
        {
            string strRequeteUpdate = "ALTER TABLE " + strNomTable + " ";

            strRequeteUpdate += "ALTER COLUMN " + champ.NomChamp + " ";

            strRequeteUpdate += GetDeclarationChamp_TypeAndLength(champ) + " ";
            if (!champ.NullAuthorized)
            {
                strRequeteUpdate += GetDeclarationChamp_NotNull(champ, true);
            }

            return(strRequeteUpdate);
        }
Пример #17
0
 //-------------------------------------------------
 public CColumnDefinitionChampDeTable(
     ITableDefinition tableDefinition,
     CInfoChampTable info)
     : this()
 {
     m_tableDefinition = tableDefinition;
     m_strNomChamp     = info.NomChamp;
     m_strNomColonne   = info.NomConvivial;
     if (m_strNomColonne.Trim().Length == 0)
     {
         m_strNomColonne = info.NomChamp;
     }
     m_typeDonnee = info.TypeDonnee;
 }
Пример #18
0
 protected virtual bool Champ_ModifiedType(CInfoChampTable champ, DataColumn colonne)
 {
     if (champ.IsAutoId && !IsGoodDataColumnType(colonne, typeof(Int32)))
     {
         return(true);
     }
     else if (!champ.IsAutoId && !IsGoodDataColumnType(colonne, champ.TypeDonnee))
     {
         return(true);
     }
     else
     {
         return(false);
     }
 }
Пример #19
0
        protected override string GetRequeteUpdateChamp(string strNomTable, CInfoChampTable champ, bool bNotNull, bool bLength, bool bType)
        {
            string rqt = "ALTER TABLE " + strNomTable + " MODIFY( " + champ.NomChamp + " ";

            if (bType || bLength)
            {
                rqt += GetDeclarationChamp_TypeAndLength(champ) + " ";
            }
            if (bNotNull)
            {
                rqt += GetDeclarationChamp_NotNull(champ, true);
            }

            rqt += ")";
            return(rqt);
        }
Пример #20
0
 protected virtual string GetDeclarationChamp_NotNull(CInfoChampTable champ, bool bUpdate)
 {
     if (champ.IsAutoId)
     {
         return("NOT NULL");
     }
     else if (!champ.NullAuthorized && !bUpdate)
     {
         return(GetDeclarationDefaultValueForType(champ.TypeDonnee) + " NOT NULL");
     }
     else if (!champ.NullAuthorized && bUpdate)
     {
         return("NOT NULL ");
     }
     else
     {
         return("NULL");
     }
 }
        ////////////////////////////////////////////////////
        protected virtual string GetNomParametreFor(CInfoChampTable champ, DataRowVersion version)
        {
            string strNom = "@" + champ.NomChamp;

            switch (version)
            {
            case DataRowVersion.Current:
                strNom += "_NEW";
                break;

            case DataRowVersion.Original:
                strNom += "_OLD";
                break;

            default:
                strNom += (int)version;
                break;
            }
            return(strNom);
        }
Пример #22
0
        //--------------------------------------------------------------------------------------
        protected override bool Champ_ModifiedIndex(string strNomTable, CInfoChampTable champ)
        {
            bool bModifier = base.Champ_ModifiedIndex(strNomTable, champ);

            if (bModifier && !champ.IsIndex)
            {
                //Si le champ fait partie d'une clé externe, c'est
                //Normal qu'il y a ait un index dessus
                List <CInfoRelation> lstRels = new List <CInfoRelation>();
                GetRelationsExistantes(strNomTable, ref lstRels);
                foreach (CInfoRelation rel in lstRels)
                {
                    if (rel.ChampsFille.Length == 1 &&
                        rel.ChampsFille[0] == champ.NomChamp)
                    {
                        return(false);
                    }
                }
            }
            return(bModifier);
        }
Пример #23
0
        /// <summary>
        /// retourne l'objet donné sélectionné à partir de la valeur retournée
        /// </summary>
        /// <remarks>
        /// Ne fonctionne pas toujours, ça ne fonctionne que si la valeur retournée
        /// est un champ DOTNET de l'entité sélectionnée
        /// </remarks>
        /// <param name="valeurRetournee"></param>
        /// <param name="contexte"></param>
        /// <returns></returns>
        public CReferenceObjetDonnee GetObjetFromValeurRetournee(object valeurRetournee)
        {
            if (valeurRetournee == null)
            {
                return(null);
            }
            C2iExpressionChamp exp = ExpressionRetournee as C2iExpressionChamp;

            if (exp != null)
            {
                CDefinitionProprieteDynamique       propDyn   = exp.DefinitionPropriete;
                CDefinitionProprieteDynamiqueDotNet defDotNet = propDyn as CDefinitionProprieteDynamiqueDotNet;
                if (defDotNet != null)
                {
                    CObjetDonnee    objet     = (CObjetDonnee)Activator.CreateInstance(m_filtreSelection.TypeElements, new object[] { CContexteDonneeSysteme.GetInstance() });
                    CStructureTable structure = CStructureTable.GetStructure(m_filtreSelection.TypeElements);
                    CInfoChampTable info      = structure.GetChampFromPropriete(defDotNet.NomProprieteSansCleTypeChamp);
                    if (info != null)
                    {
                        CResultAErreur result = m_filtreSelection.GetFiltreData();
                        CFiltreData    filtre = null;
                        if (result && result.Data is CFiltreData)
                        {
                            filtre = result.Data as CFiltreData;
                        }

                        filtre = CFiltreData.GetAndFiltre(filtre,
                                                          new CFiltreData(info.NomChamp + "=@1",
                                                                          valeurRetournee));
                        if (objet.ReadIfExists(filtre))
                        {
                            return(new CReferenceObjetDonnee(objet));
                        }
                    }
                }
            }
            return(null);
        }
Пример #24
0
 public CResultAErreur SetValeursParDefautAuxDonneesNulles(string strNomTable, CInfoChampTable champ)
 {
     if (!champ.NullAuthorized)
     {
         string strRequete = "Update " + strNomTable + " set " + champ.NomChamp + "=" +
                             GetStringValeurParDefaut(champ.TypeDonnee) + " where " + champ.NomChamp + " is null";
         return(m_connection.RunStatement(strRequete));
     }
     return(CResultAErreur.True);
 }
Пример #25
0
        //----------------------------------
        public CResultAErreur FillFromVersion(CVersionDonneesObjet vo, CContexteDonnee contexteEnVersion, Dictionary <CObjetDonneeAIdNumerique, CMacroObjet> dicObjetToMacro)
        {
            List <CDefinitionProprieteDynamique> lstChampsDotNet = new List <CDefinitionProprieteDynamique>();

            lstChampsDotNet.AddRange(new CFournisseurProprietesDynamiqueDynamicField().GetDefinitionsChamps(vo.TypeElement, null));
            List <CDefinitionProprieteDynamique> lstChampsCustom = new List <CDefinitionProprieteDynamique>();

            lstChampsCustom.AddRange(new CFournisseurProprietesDynamiqueChampCustom().GetDefinitionsChamps(vo.TypeElement, null));
            CResultAErreur           result = CResultAErreur.True;
            CObjetDonneeAIdNumerique objet  = Activator.CreateInstance(vo.TypeElement, new object[] { contexteEnVersion }) as CObjetDonneeAIdNumerique;

            if (!objet.ReadIfExists(vo.IdElement))
            {
                objet = null;
            }
            else
            {
                DesignationObjet = objet.DescriptionElement;
            }
            switch (vo.TypeOperation.Code)
            {
            case CTypeOperationSurObjet.TypeOperation.Ajout:
                if (objet != null && objet.IsValide())
                {
                    foreach (CDefinitionProprieteDynamique def in lstChampsDotNet)
                    {
                        string strNom = def.NomProprieteSansCleTypeChamp;
                        if (!def.IsReadOnly && strNom != "IsDeleted" && strNom != "Id" &&
                            strNom != "ContexteDeModification" && strNom != "IdVersionDatabase")
                        {
                            CResultAErreur resultVal = CInterpreteurProprieteDynamique.GetValue(objet, def);
                            if (resultVal)
                            {
                                object            data = resultVal.Data;
                                CMacroObjetValeur mv   = new CMacroObjetValeur(this);
                                mv.Champ = def;
                                if (FillMacroValeurWithValue(mv, data, dicObjetToMacro))
                                {
                                    AddValeur(mv);
                                }
                                else
                                {
                                    result.EmpileErreur(new CErreurValidation(I.T("Can not use field @1 in macro|20052", def.Nom), true));
                                }
                            }
                        }
                    }
                    if (objet is CElementAChamp)
                    {
                        foreach (CRelationElementAChamp_ChampCustom rel in ((CElementAChamp)objet).RelationsChampsCustom)
                        {
                            object data = rel.Valeur;
                            if (data != null)
                            {
                                CDefinitionProprieteDynamique defCust = lstChampsCustom.FirstOrDefault(c => ((CDefinitionProprieteDynamiqueChampCustom)c).IdChamp == rel.ChampCustom.Id);
                                if (defCust != null)
                                {
                                    CMacroObjetValeur mv = new CMacroObjetValeur(this);
                                    mv.Champ = defCust;
                                    mv.Champ = defCust;
                                    this.AddValeur(mv);
                                    if (FillMacroValeurWithValue(mv, data, dicObjetToMacro))
                                    {
                                        this.AddValeur(mv);
                                    }
                                    else
                                    {
                                        result.EmpileErreur(new CErreurValidation(I.T("Can not use field @1 in macro|20052", rel.ChampCustom.Nom), true));
                                    }
                                }
                            }
                        }
                    }
                }

                break;

            case CTypeOperationSurObjet.TypeOperation.Suppression:
                break;

            case CTypeOperationSurObjet.TypeOperation.Modification:
                CStructureTable structureObjet = CStructureTable.GetStructure(vo.TypeElement);
                foreach (CVersionDonneesObjetOperation valeur in vo.ToutesLesOperations)
                {
                    CDefinitionProprieteDynamique def   = null;
                    IChampPourVersion             champ = valeur.Champ;
                    if (champ is CChampPourVersionInDb)
                    {
                        string          strNomChamp = ((CChampPourVersionInDb)champ).NomPropriete;
                        CInfoChampTable infoChamp   = structureObjet.Champs.FirstOrDefault(c => c.NomChamp == strNomChamp);
                        if (infoChamp != null && infoChamp.NomChamp != CSc2iDataConst.c_champIdVersion &&
                            infoChamp.NomChamp != CSc2iDataConst.c_champIsDeleted &&
                            infoChamp.NomChamp != CObjetDonnee.c_champContexteModification)
                        {
                            string strNomPropriete = infoChamp.Propriete;
                            def = lstChampsDotNet.FirstOrDefault(c => c.NomProprieteSansCleTypeChamp == strNomPropriete);
                        }
                    }
                    else if (champ is CChampCustomPourVersion)
                    {
                        CChampCustom champCustom = ((CChampCustomPourVersion)champ).ChampCustom;
                        if (champCustom != null)
                        {
                            def = lstChampsCustom.FirstOrDefault(c => c is CDefinitionProprieteDynamiqueChampCustom &&
                                                                 ((CDefinitionProprieteDynamiqueChampCustom)c).IdChamp == champCustom.Id);
                        }
                    }
                    if (def != null && !def.IsReadOnly)
                    {
                        CMacroObjetValeur mv = new CMacroObjetValeur(this);
                        mv.Champ = def;
                        if (!FillMacroValeurWithValue(mv, valeur.GetValeur(), dicObjetToMacro))
                        {
                            result.EmpileErreur(new CErreurValidation(I.T("Can not use field @1 in macro|20052", valeur.NomChampConvivial), true));
                        }
                        else
                        {
                            AddValeur(mv);
                        }
                    }
                }
                break;
            }
            if (Valeurs.Count() == 0)
            {
                TypeOperation = new CTypeOperationSurObjet(CTypeOperationSurObjet.TypeOperation.Aucune);
            }
            return(result);
        }
Пример #26
0
        //----------------------------------
        public CResultAErreur FillFromVersion(CVersionDonneesObjet vo, CContexteDonnee contexteEnVersion, Dictionary <CObjetDonneeAIdNumerique, CMacroObjet> dicObjetToMacro)
        {
            CStructureTable structure = CStructureTable.GetStructure(vo.TypeElement);

            List <CDefinitionProprieteDynamique> lstChampsDotNet = new List <CDefinitionProprieteDynamique>();

            lstChampsDotNet.AddRange(new CFournisseurProprietesDynamiqueDynamicField().GetDefinitionsChamps(vo.TypeElement, null));
            List <CDefinitionProprieteDynamique> lstChampsCustom = new List <CDefinitionProprieteDynamique>();

            lstChampsCustom.AddRange(new CFournisseurProprietesDynamiqueChampCustom().GetDefinitionsChamps(vo.TypeElement, null));
            CResultAErreur           result = CResultAErreur.True;
            CObjetDonneeAIdNumerique objet  = Activator.CreateInstance(vo.TypeElement, new object[] { contexteEnVersion }) as CObjetDonneeAIdNumerique;

            if (!objet.ReadIfExists(vo.IdElement))
            {
                objet = null;
            }
            else
            {
                DesignationObjet = objet.DescriptionElement;
            }
            switch (vo.TypeOperation.Code)
            {
            case CTypeOperationSurObjet.TypeOperation.Ajout:
                if (objet != null && objet.IsValide())
                {
                    foreach (CDefinitionProprieteDynamique def in lstChampsDotNet)
                    {
                        string strNom = def.NomProprieteSansCleTypeChamp;
                        if (strNom != "IsDeleted" && strNom != "Id" &&
                            strNom != "ContexteDeModification" && strNom != "IdVersionDatabase")
                        {
                            bool bAdd = !def.IsReadOnly;
                            if (def.IsReadOnly)
                            {
                                //Si readonly mais a l'attribut ForceSetOnMacro, on l'ajoute quand même
                                PropertyInfo info = vo.TypeElement.GetProperty(strNom);
                                if (info != null && info.GetCustomAttributes(typeof(TiagRelationAttribute), true).Length != 0)
                                {
                                    bAdd = true;
                                }
                            }
                            if (bAdd)
                            {
                                CResultAErreur resultVal = CInterpreteurProprieteDynamique.GetValue(objet, def);
                                if (resultVal)
                                {
                                    object            data = resultVal.Data;
                                    CMacroObjetValeur mv   = new CMacroObjetValeur(this);
                                    mv.Champ = def;
                                    if (FillMacroValeurWithValue(mv, data, dicObjetToMacro))
                                    {
                                        AddValeur(mv);
                                    }
                                    else
                                    {
                                        result.EmpileErreur(new CErreurValidation(I.T("#Can not use field @1 of type @2 in macro", def.Nom,
                                                                                      DynamicClassAttribute.GetNomConvivial(vo.TypeElement)), true));
                                    }
                                }
                            }
                        }
                    }
                    if (objet is IObjetDonneeAChamps)
                    {
                        foreach (CRelationElementAChamp_ChampCustom rel in ((IObjetDonneeAChamps)objet).RelationsChampsCustom)
                        {
                            object data = rel.Valeur;
                            if (data != null)
                            {
                                CDefinitionProprieteDynamique defCust = lstChampsCustom.FirstOrDefault(c => ((CDefinitionProprieteDynamiqueChampCustom)c).DbKeyChamp == rel.ChampCustom.DbKey);
                                if (defCust != null)
                                {
                                    CMacroObjetValeur mv = new CMacroObjetValeur(this);
                                    mv.Champ = defCust;
                                    mv.Champ = defCust;
                                    if (FillMacroValeurWithValue(mv, data, dicObjetToMacro))
                                    {
                                        this.AddValeur(mv);
                                    }
                                    else
                                    {
                                        result.EmpileErreur(new CErreurValidation(I.T("#Can not use field @1 of type @2 in macro", rel.ChampCustom.Nom,
                                                                                      DynamicClassAttribute.GetNomConvivial(vo.TypeElement)), true));
                                    }
                                }
                            }
                        }
                    }
                }

                break;

            case CTypeOperationSurObjet.TypeOperation.Suppression:
                break;

            case CTypeOperationSurObjet.TypeOperation.Modification:
                CStructureTable structureObjet = CStructureTable.GetStructure(vo.TypeElement);
                foreach (CVersionDonneesObjetOperation valeur in vo.ToutesLesOperations)
                {
                    CDefinitionProprieteDynamique def   = null;
                    IChampPourVersion             champ = valeur.Champ;
                    if (champ is CChampPourVersionInDb)
                    {
                        string          strNomChamp = ((CChampPourVersionInDb)champ).NomPropriete;
                        CInfoChampTable infoChamp   = structureObjet.Champs.FirstOrDefault(c => c.NomChamp == strNomChamp);
                        if (infoChamp != null && infoChamp.NomChamp != CSc2iDataConst.c_champIdVersion &&
                            infoChamp.NomChamp != CSc2iDataConst.c_champIsDeleted &&
                            infoChamp.NomChamp != CObjetDonnee.c_champContexteModification)
                        {
                            string strNomPropriete = infoChamp.Propriete;
                            def = lstChampsDotNet.FirstOrDefault(c => c.NomProprieteSansCleTypeChamp == strNomPropriete);
                        }
                        if (def == null)
                        {
                            CInfoRelation relation = structureObjet.RelationsParentes.FirstOrDefault(i => i.ChampsFille.Length == 1 && i.ChampsFille[0] == strNomChamp);
                            if (relation != null)
                            {
                                def = lstChampsDotNet.FirstOrDefault(c => c.NomProprieteSansCleTypeChamp == relation.Propriete);
                            }
                        }
                    }
                    else if (champ is CChampCustomPourVersion)
                    {
                        CChampCustom champCustom = ((CChampCustomPourVersion)champ).ChampCustom;
                        if (champCustom != null)
                        {
                            def = lstChampsCustom.FirstOrDefault(c => c is CDefinitionProprieteDynamiqueChampCustom &&
                                                                 ((CDefinitionProprieteDynamiqueChampCustom)c).DbKeyChamp == champCustom.DbKey);
                        }
                    }
                    if (def != null)
                    {
                        bool bAdd = !def.IsReadOnly;
                        if (def.IsReadOnly)
                        {
                            //Si readonly mais a l'attribut TiagRelation, on l'ajoute quand même
                            PropertyInfo info = vo.TypeElement.GetProperty(def.NomProprieteSansCleTypeChamp);
                            if (info != null && info.GetCustomAttributes(typeof(TiagRelationAttribute), true).Length > 0)
                            {
                                bAdd = true;
                            }
                        }
                        if (bAdd)
                        {
                            CMacroObjetValeur mv = new CMacroObjetValeur(this);
                            mv.Champ = def;
                            object val = valeur.GetValeur();
                            if (val != null && typeof(CObjetDonneeAIdNumerique).IsAssignableFrom(def.TypeDonnee.TypeDotNetNatif) && valeur.TypeValeur == typeof(int))
                            {
                                CObjetDonneeAIdNumerique objetParent = Activator.CreateInstance(def.TypeDonnee.TypeDotNetNatif, new object[] { objet.ContexteDonnee }) as CObjetDonneeAIdNumerique;
                                if (objetParent.ReadIfExists((int)valeur.GetValeur()))
                                {
                                    val = objetParent;
                                }
                                else
                                {
                                    val = null;
                                }
                            }

                            if (!FillMacroValeurWithValue(mv, val, dicObjetToMacro))
                            {
                                result.EmpileErreur(new CErreurValidation(I.T("#Can not use field @1 of @2 in macro", valeur.NomChampConvivial,
                                                                              DynamicClassAttribute.GetNomConvivial(vo.TypeElement)), true));
                            }
                            else
                            {
                                AddValeur(mv);
                            }
                        }
                    }
                }
                break;
            }
            if (Valeurs.Count() == 0)
            {
                TypeOperation = new CTypeOperationSurObjet(CTypeOperationSurObjet.TypeOperation.Aucune);
            }
            return(result);
        }
Пример #27
0
        public virtual CResultAErreur UpdateStructureTableRegistre()
        {
            CResultAErreur result = CResultAErreur.True;
            //Cherche la table de registre
            bool bExist = false;

            foreach (string strNomTable in Connection.TablesNames)
            {
                if (strNomTable == CDatabaseRegistre.c_nomTable)
                {
                    bExist = true;
                    break;
                }
            }
            if (!bExist)
            {            //C'est une initialisation initiale
                return(result);
            }
            else
            {
                //Vérifie que toutes les colonnes existent
                string[] strColonnes = Connection.GetColonnesDeTable(CDatabaseRegistre.c_nomTable);
                Dictionary <string, bool> tableColonnes = new Dictionary <string, bool>();
                foreach (string strColonne in strColonnes)
                {
                    tableColonnes.Add(strColonne, true);
                }
                if (!tableColonnes.ContainsKey(CDatabaseRegistre.c_champCle))
                {
                    CInfoChampTable info = new CInfoChampTable(
                        CDatabaseRegistre.c_champCle,
                        typeof(string),
                        255,
                        false,
                        true,
                        false,
                        false,
                        true);
                    result = CreateChamp(CDatabaseRegistre.c_nomTable, info);
                    if (!result)
                    {
                        return(result);
                    }
                }
                if (!tableColonnes.ContainsKey(CDatabaseRegistre.c_champValeur))
                {
                    CInfoChampTable info = new CInfoChampTable(
                        CDatabaseRegistre.c_champValeur,
                        typeof(string),
                        255,
                        false,
                        false,
                        true,
                        false,
                        true);
                    result = CreateChamp(CDatabaseRegistre.c_nomTable, info);
                    if (!result)
                    {
                        return(result);
                    }
                }
                if (!tableColonnes.ContainsKey(CDatabaseRegistre.c_champBlob))
                {
                    CInfoChampTable info = new CInfoChampTable(
                        CDatabaseRegistre.c_champBlob,
                        typeof(CDonneeBinaireInRow),
                        255,
                        false,
                        false,
                        true,
                        false,
                        true);
                    result = CreateChamp(CDatabaseRegistre.c_nomTable, info);
                    if (!result)
                    {
                        return(result);
                    }
                }
            }
            return(result);
        }
Пример #28
0
 public virtual CResultAErreur CreateChamp(string strNomTable, CInfoChampTable champ)
 {
     return(CreateChamp(strNomTable, champ, false));
 }
Пример #29
0
 /// <summary>
 /// Retourne la déclaration d'un champ pour le créer
 /// </summary>
 /// <param name="champ"></param>
 /// <returns></returns>
 protected virtual string GetDeclarationChamp(CInfoChampTable champ)
 {
     return(GetDeclarationChamp(champ, false));
 }
Пример #30
0
 protected virtual bool Champ_ModifiedNotNull(CInfoChampTable champ, DataColumn colonne, ArrayList champsAutorisesANull)
 {
     return(colonne.AllowDBNull != champ.NullAuthorized);
 }