示例#1
0
        public void Init(CProcess process, Type typeObjet, CActionImportFromTableRow.CMappageColonne mappage)
        {
            m_mappage = mappage;
            CColonneTableParametrable col = new CColonneTableParametrable(CContexteDonneeSysteme.GetInstance());

            col.ReadIfExists(mappage.IdColonne);
            m_lblColonne.Text = col.Libelle;
            Type tp = col.TypeDonneeChamp.TypeDotNetAssocie;
            List <CDefinitionProprieteDynamique> lst = new List <CDefinitionProprieteDynamique>();

            foreach (CDefinitionProprieteDynamique def in new CFournisseurPropDynStd(false).GetDefinitionsChamps(typeObjet))
            {
                Type defType = def.TypeDonnee.TypeDotNetNatif;
                if (defType.IsGenericType && defType.GetGenericTypeDefinition() == typeof(Nullable <>))
                {
                    defType = defType.GetGenericArguments()[0];
                }
                if (defType == tp && !def.TypeDonnee.IsArrayOfTypeNatif)
                {
                    lst.Add(def);
                }
            }

            m_cmbChamp.ListDonnees       = lst;
            m_cmbChamp.ProprieteAffichee = "Nom";

            m_cmbChamp.SelectedValue = mappage.ProprieteCible;
            m_txtFormuleCondition.Init(process, typeof(CProcess));
            m_txtFormuleCondition.Formule = mappage.FormuleCondition;
        }
示例#2
0
        private ListViewItem GetPKListViewItem(CColonneTableParametrable col)
        {
            foreach (ListViewItem itm in m_lvPks.Items)
            {
                if ((CColonneTableParametrable)itm.Tag == col)
                {
                    return(itm);
                }
            }

            return(null);
        }
示例#3
0
        private void m_gestionnaireColonnes_InitChamp(object sender, CObjetDonneeResultEventArgs args)
        {
            if (args.Objet == null)
            {
                m_ctrlEditCol.Visible = false;
                return;
            }
            CColonneTableParametrable col = (CColonneTableParametrable)args.Objet;

            m_ctrlEditCol.Init(col);
            m_panelCol.Visible    = true;
            m_ctrlEditCol.Visible = true;
        }
示例#4
0
        private void AjouterPK(CColonneTableParametrable col)
        {
            if (col.PrimaryKeyPosition != null)
            {
                return;
            }

            m_typeTable.DefinirEnClePrimaire(col);
            ListViewItem itm = new ListViewItem(col.Libelle);

            itm.Tag = col;
            m_lvPks.Items.Add(itm);

            MAJComboBoxPKs();
        }
示例#5
0
        private void SupprimerPK(CColonneTableParametrable col)
        {
            if (col.PrimaryKeyPosition == null)
            {
                return;
            }

            m_typeTable.DefinirSansClePrimaire(col);

            ListViewItem itm = GetPKListViewItem(col);

            if (itm == null)
            {
                return;
            }

            m_lvPks.Items.Remove(itm);
            MAJComboBoxPKs();
        }
        public CResultAErreur Init(CColonneTableParametrable col)
        {
            m_bIsInitializing = false;
            CResultAErreur result = CResultAErreur.True;

            if (col == null)
            {
                return(result);
            }

            m_col = col;

            //Chargement des types possibles

            m_cmbTypesDonnees.Items.Clear();
            m_cmbTypesDonnees.BeginUpdate();
            m_cmbTypesDonnees.DisplayMember = "Libelle";
            m_cmbTypesDonnees.ValueMember   = "TypeDonnee";
            foreach (C2iTypeDonnee tp in CChampCustom.TypePossibles)
            {
                if (tp.TypeDonnee != TypeDonnee.tObjetDonneeAIdNumeriqueAuto)
                {
                    m_cmbTypesDonnees.Items.Add(tp);
                }
            }
            m_cmbTypesDonnees.EndUpdate();
            //m_cmbTypesDonnees.DataSource = CChampCustom.TypePossibles;
            //m_cmbTypesDonnees.Items.AddRange();
            //for (int i = m_cmbTypesDonnees.Items.Count; i > 0; i--)
            //    if (m_cmbTypesDonnees.Items[i - 1].ToString() == "Entité")
            //        m_cmbTypesDonnees.Items.RemoveAt(i - 1);

            m_cmbTypesDonnees.SelectedItem = m_col.TypeDonneeChamp;
            m_txtNom.Text     = m_col.Libelle;
            m_chkNull.Checked = !col.AllowNull;

            m_lblPK.Visible   = m_col.IsPrimaryKey;
            m_chkNull.Visible = !m_lblPK.Visible;

            m_bIsInitializing = true;

            return(result);
        }
示例#7
0
        private void m_lnkSupprimer_LinkClicked(object sender, EventArgs e)
        {
            if (m_wndColonnes.SelectedItems.Count != 1)
            {
                return;
            }

            CColonneTableParametrable col = (CColonneTableParametrable)m_wndColonnes.SelectedItems[0].Tag;
            int pos = col.Position;

            if (col.PrimaryKeyPosition != null)
            {
                m_typeTable.DefinirSansClePrimaire(col);
            }

            m_gestionnaireColonnes.SetObjetEnCoursToNull();
            CResultAErreur result = col.Delete();

            if (!result)
            {
                CFormAlerte.Afficher(result.Erreur);
                return;
            }

            //On met à jour les positions des éléments restant
            if (m_wndColonnes.SelectedItems.Count == 1)
            {
                if (m_wndColonnes.SelectedItems[0] != null)
                {
                    m_wndColonnes.SelectedItems[0].Remove();
                }

                while (pos <= m_wndColonnes.Items.Count - 1)
                {
                    CColonneTableParametrable coltmp = (CColonneTableParametrable)m_wndColonnes.Items[pos].Tag;
                    coltmp.Position = pos;
                    pos++;
                }
            }

            MAJColonnesPks();
        }
示例#8
0
        private void InitialiserAffichage()
        {
            if (IsColonneSource)
            {
                m_cmbNom.BeginUpdate();
                m_cmbNom.Items.Clear();
                m_itm = new CItemAucun("Aucune");
                m_cmbNom.Items.Add(m_itm);
                CColonneTableParametrable col = m_mappage.ColonneB;
                foreach (CColonneTableParametrable c in m_tpTableSrc.Colonnes)
                {
                    if (c.TypeDonneeChamp.TypeDotNetAssocie == col.TypeDonneeChamp.TypeDotNetAssocie)
                    {
                        m_cmbNom.Items.Add(c);
                    }
                }

                m_cmbNom.EndUpdate();

                if (m_mappage.ColonneA == null)
                {
                    m_cmbNom.SelectedItem = m_itm;
                    InfosColonnePossible  = false;
                }
                else
                {
                    m_cmbNom.SelectedItem = m_mappage.ColonneA;
                }
            }
            else
            {
                m_lblNom.Text = m_mappage.ColonneB.Libelle;

                m_ctrlEditVal.Valeur = GetDefaultVal();
                m_chkNull.Checked    = !m_mappage.ColonneB.AllowNull;
            }
            MAJInfosColonne();
            ActualiserDefautPossible();
        }
示例#9
0
        private void m_lnkAjouter_LinkClicked(object sender, EventArgs e)
        {
            CColonneTableParametrable col = new CColonneTableParametrable(TypeTableParametrable.ContexteDonnee);

            col.CreateNewInCurrentContexte();
            col.Libelle         = I.T("New column|1242");
            col.TypeDonneeChamp = new C2iTypeDonnee(TypeDonnee.tString);
            col.TypeTable       = TypeTableParametrable;
            col.Position        = m_wndColonnes.Items.Count;

            ListViewItem item = new ListViewItem();

            m_wndColonnes.Items.Add(item);
            m_wndColonnes.UpdateItemWithObject(item, col);
            foreach (ListViewItem itemSel in m_wndColonnes.SelectedItems)
            {
                itemSel.Selected = false;
            }
            item.Selected = true;

            MAJComboBoxPKs();
        }
示例#10
0
        public void MAJInfosColonne()
        {
            CColonneTableParametrable col = null;

            if (IsColonneSource)
            {
                if (m_cmbNom.SelectedItem != m_itm)
                {
                    col = (CColonneTableParametrable)m_cmbNom.SelectedItem;
                }
            }
            else
            {
                col = m_mappage.ColonneB;
            }


            m_panKey.BackgroundImage         = col != null && col.IsPrimaryKey ? Properties.Resources.cle : null;
            m_panObligatoire.BackgroundImage = col != null && col.AllowNull ? Properties.Resources.ok : null;
            if (col != null)
            {
                m_lblType.Text = col.TypeDonneeChamp.Libelle;
            }
        }
示例#11
0
        public void TestVersionsDeTables()
        {
            System.Console.WriteLine("-----------------------------------Test versions de tables----------------------");
            System.Console.WriteLine("Initialisation");
            ResetModifs();

            string strNomTableTest = "TEST_NUNIT";

            string[] strNomsCols = new string[] { "Cle", "Val1", "Val2" };
            //Supprime les tables de test
            m_contexteDonnee.SetVersionDeTravail(-1, false);            //Toutes versions
            CListeObjetsDonnees listeTables = new CListeObjetsDonnees(m_contexteDonnee, typeof(CTableParametrable));

            listeTables.Filtre = new CFiltreData(CTableParametrable.c_champLibelle + "=@1",
                                                 strNomTableTest);
            Assert.IsTrue(CObjetDonneeAIdNumerique.Delete(listeTables));

            //Création du type de table
            m_contexteDonnee.SetVersionDeTravail(null, false);
            CTypeTableParametrable typeTable = new CTypeTableParametrable(m_contexteDonnee);

            if (typeTable.ReadIfExists(new CFiltreData(CTypeTableParametrable.c_champLibelle + "=@1",
                                                       strNomTableTest)))
            {
                Assert.IsTrue(CObjetDonneeAIdNumerique.Delete(typeTable.Colonnes));
                typeTable.BeginEdit();
            }
            else
            {
                typeTable.CreateNew();
            }
            typeTable.Libelle = strNomTableTest;
            CColonneTableParametrable col1 = new CColonneTableParametrable(typeTable.ContexteDonnee);

            col1.CreateNewInCurrentContexte();
            col1.Libelle            = strNomsCols[0];
            col1.TypeDonneeChamp    = new C2iTypeDonnee(TypeDonnee.tString);
            col1.AllowNull          = false;
            col1.TypeTable          = typeTable;
            col1.PrimaryKeyPosition = 0;
            col1.Position           = 0;

            CColonneTableParametrable col2 = new CColonneTableParametrable(typeTable.ContexteDonnee);

            col2.CreateNewInCurrentContexte();
            col2.Libelle         = strNomsCols[1];
            col2.TypeDonneeChamp = new C2iTypeDonnee(TypeDonnee.tString);
            col2.TypeTable       = typeTable;
            col2.Position        = 1;

            CColonneTableParametrable col3 = new CColonneTableParametrable(typeTable.ContexteDonnee);

            col3.CreateNewInCurrentContexte();
            col3.Libelle         = strNomsCols[2];
            col3.TypeDonneeChamp = new C2iTypeDonnee(TypeDonnee.tString);
            col3.TypeTable       = typeTable;
            col3.Position        = 2;

            Assert.IsTrue(typeTable.CommitEdit());

            //Création d'une table dans le référentiel
            CTableParametrable tableP = new CTableParametrable(m_contexteDonnee);

            tableP.CreateNew();
            tableP.Libelle   = strNomTableTest;
            tableP.TypeTable = typeTable;
            DataTable table = tableP.DataTableObject;

            /*Table dans le referentiel
             * KEY	|	Val1	|	Val2
             * A1	|	A2		|	A3
             * B1	|	B2		|	B3
             * C1	|	C2		|	C3
             * D1	|	D2		|	D3
             * */
            DataRow row = null;

            for (int nRow = 0; nRow < 4; nRow++)
            {
                row = table.NewRow();
                string strCleLigne = (new string[] { "A", "B", "C", "D" })[nRow];
                for (int nCol = 1; nCol < table.Columns.Count; nCol++)
                {
                    if (table.Columns[nCol].ColumnName != CTableParametrable.c_strColTimeStamp)
                    {
                        row[nCol] = strCleLigne + (nCol).ToString();
                    }
                }
                table.Rows.Add(row);
            }
            tableP.DataTableObject = table;
            Assert.IsTrue(tableP.CommitEdit());

            //---------------------------------------------------------
            ///Modification de la table en V1
            System.Console.Write("Modif dans V1");
            string strA2V1 = "A2 en V1";

            m_contexteDonnee.SetVersionDeTravail(m_nIdsVersions[0], false);
            table = tableP.DataTableObject;
            row   = table.Rows[0];
            row[strNomsCols[1]] = strA2V1;
            tableP.BeginEdit();
            tableP.DataTableObject = table;
            Assert.IsTrue(tableP.CommitEdit());

            //La table n'a pas bougé en version référentiel
            m_contexteDonnee.SetVersionDeTravail(null, false);
            table = tableP.DataTableObject;
            VerifTable(table, strNomsCols, new string[][] {
                new string[] { "A1", "A2", "A3" },
                new string[] { "B1", "B2", "B3" },
                new string[] { "C1", "C2", "C3" },
                new string[] { "D1", "D2", "D3" }
            });

            //La table n'a pas bougé en V2
            m_contexteDonnee.SetVersionDeTravail(m_nIdsVersions[1], false);
            table = tableP.DataTableObject;
            VerifTable(table, strNomsCols, new string[][] {
                new string[] { "A1", "A2", "A3" },
                new string[] { "B1", "B2", "B3" },
                new string[] { "C1", "C2", "C3" },
                new string[] { "D1", "D2", "D3" }
            });

            //La table a bougé en V1
            m_contexteDonnee.SetVersionDeTravail(m_nIdsVersions[0], false);
            table = tableP.DataTableObject;
            VerifTable(table, strNomsCols, new string[][] {
                new string[] { "A1", strA2V1, "A3" },
                new string[] { "B1", "B2", "B3" },
                new string[] { "C1", "C2", "C3" },
                new string[] { "D1", "D2", "D3" }
            });

            //La table a bougé en V3
            m_contexteDonnee.SetVersionDeTravail(m_nIdsVersions[2], false);
            table = tableP.DataTableObject;
            VerifTable(table, strNomsCols, new string[][] {
                new string[] { "A1", strA2V1, "A3" },
                new string[] { "B1", "B2", "B3" },
                new string[] { "C1", "C2", "C3" },
                new string[] { "D1", "D2", "D3" }
            });

            //---------------------------------------------------------
            //Modification de la table dans le référentiel :
            //Modif ligne 1 et ligne 2.
            System.Console.Write("Modif dans Ref");
            m_contexteDonnee.SetVersionDeTravail(null, false);
            table = tableP.DataTableObject;
            row   = table.Rows[0];
            string strA3REF = "A3 ref";

            row[strNomsCols[2]] = strA3REF;
            row = table.Rows[1];
            string strB2REF = "B2 ref";

            row[strNomsCols[1]] = strB2REF;
            tableP.BeginEdit();
            tableP.DataTableObject = table;
            Assert.IsTrue(tableP.CommitEdit());

            //La table n'a pas bougé en version référentiel
            m_contexteDonnee.SetVersionDeTravail(null, false);
            table = tableP.DataTableObject;
            VerifTable(table, strNomsCols, new string[][] {
                new string[] { "A1", "A2", strA3REF },
                new string[] { "B1", strB2REF, "B3" },
                new string[] { "C1", "C2", "C3" },
                new string[] { "D1", "D2", "D3" }
            });

            //La table n'a pas bougé en V2
            m_contexteDonnee.SetVersionDeTravail(m_nIdsVersions[1], false);
            table = tableP.DataTableObject;
            VerifTable(table, strNomsCols, new string[][] {
                new string[] { "A1", "A2", strA3REF },
                new string[] { "B1", strB2REF, "B3" },
                new string[] { "C1", "C2", "C3" },
                new string[] { "D1", "D2", "D3" }
            });

            //la ligne A de V1 ne doit pas être modifiée,
            //Par contre la ligne 2 oui
            m_contexteDonnee.SetVersionDeTravail(m_nIdsVersions[0], false);
            table = tableP.DataTableObject;
            VerifTable(table, strNomsCols, new string[][] {
                new string[] { "A1", strA2V1, "A3" },
                new string[] { "B1", strB2REF, "B3" },
                new string[] { "C1", "C2", "C3" },
                new string[] { "D1", "D2", "D3" }
            });

            //V3 = V1
            m_contexteDonnee.SetVersionDeTravail(m_nIdsVersions[2], false);
            table = tableP.DataTableObject;
            VerifTable(table, strNomsCols, new string[][] {
                new string[] { "A1", strA2V1, "A3" },
                new string[] { "B1", strB2REF, "B3" },
                new string[] { "C1", "C2", "C3" },
                new string[] { "D1", "D2", "D3" }
            });

            //---------------------------------------------------------
            System.Console.Write("Modif dans V3");
            //Modification de la ligne en V3
            string strA2V3 = "A2 en V3";

            m_contexteDonnee.SetVersionDeTravail(m_nIdsVersions[2], false);
            table = tableP.DataTableObject;
            row   = table.Rows[0];
            row[strNomsCols[1]] = strA2V3;
            tableP.BeginEdit();
            tableP.DataTableObject = table;
            Assert.IsTrue(tableP.CommitEdit());

            //La table n'a pas bougé en version référentiel
            m_contexteDonnee.SetVersionDeTravail(null, false);
            table = tableP.DataTableObject;
            VerifTable(table, strNomsCols, new string[][] {
                new string[] { "A1", "A2", strA3REF },
                new string[] { "B1", strB2REF, "B3" },
                new string[] { "C1", "C2", "C3" },
                new string[] { "D1", "D2", "D3" }
            });

            //La table n'a pas bougé en V2
            m_contexteDonnee.SetVersionDeTravail(m_nIdsVersions[1], false);
            table = tableP.DataTableObject;
            VerifTable(table, strNomsCols, new string[][] {
                new string[] { "A1", "A2", strA3REF },
                new string[] { "B1", strB2REF, "B3" },
                new string[] { "C1", "C2", "C3" },
                new string[] { "D1", "D2", "D3" }
            });

            //La table a bougé en V1
            m_contexteDonnee.SetVersionDeTravail(m_nIdsVersions[0], false);
            table = tableP.DataTableObject;
            VerifTable(table, strNomsCols, new string[][] {
                new string[] { "A1", strA2V1, "A3" },
                new string[] { "B1", strB2REF, "B3" },
                new string[] { "C1", "C2", "C3" },
                new string[] { "D1", "D2", "D3" }
            });

            //La table a bougé en V3
            m_contexteDonnee.SetVersionDeTravail(m_nIdsVersions[2], false);
            table = tableP.DataTableObject;
            VerifTable(table, strNomsCols, new string[][] {
                new string[] { "A1", strA2V3, "A3" },
                new string[] { "B1", strB2REF, "B3" },
                new string[] { "C1", "C2", "C3" },
                new string[] { "D1", "D2", "D3" }
            });

            //-----------------------------------------------
            //Suppression de la ligne C en V1
            System.Console.Write("Delete dans V1");
            m_contexteDonnee.SetVersionDeTravail(m_nIdsVersions[0], false);
            table = tableP.DataTableObject;
            table.Rows[2].Delete();
            tableP.BeginEdit();
            tableP.DataTableObject = table;
            Assert.IsTrue(tableP.CommitEdit());

            //La table n'a pas bougé en version référentiel
            m_contexteDonnee.SetVersionDeTravail(null, false);
            table = tableP.DataTableObject;
            VerifTable(table, strNomsCols, new string[][] {
                new string[] { "A1", "A2", strA3REF },
                new string[] { "B1", strB2REF, "B3" },
                new string[] { "C1", "C2", "C3" },
                new string[] { "D1", "D2", "D3" }
            });

            //La table n'a pas bougé en V2
            m_contexteDonnee.SetVersionDeTravail(m_nIdsVersions[1], false);
            table = tableP.DataTableObject;
            VerifTable(table, strNomsCols, new string[][] {
                new string[] { "A1", "A2", strA3REF },
                new string[] { "B1", strB2REF, "B3" },
                new string[] { "C1", "C2", "C3" },
                new string[] { "D1", "D2", "D3" }
            });

            //La table a bougé en V1 (plus de ligne C)
            m_contexteDonnee.SetVersionDeTravail(m_nIdsVersions[0], false);
            table = tableP.DataTableObject;
            VerifTable(table, strNomsCols, new string[][] {
                new string[] { "A1", strA2V1, "A3" },
                new string[] { "B1", strB2REF, "B3" },
                new string[] { "D1", "D2", "D3" }
            });

            //La table a bougé en V3 (plus de ligne C)
            m_contexteDonnee.SetVersionDeTravail(m_nIdsVersions[2], false);
            table = tableP.DataTableObject;
            VerifTable(table, strNomsCols, new string[][] {
                new string[] { "A1", strA2V3, "A3" },
                new string[] { "B1", strB2REF, "B3" },
                new string[] { "D1", "D2", "D3" }
            });
        }
示例#12
0
        /// ////////////////////////////////////////////////////////
        protected override CResultAErreur MyExecute(CContexteExecutionAction contexte)
        {
            CResultAErreur result = CResultAErreur.True;

            CContexteEvaluationExpression ctxEval = new CContexteEvaluationExpression(Process);

            object elementCible = null;

            if (FormuleElementCible != null)
            {
                result = FormuleElementCible.Eval(ctxEval);
                if (result)
                {
                    elementCible = result.Data;
                }
            }
            if (elementCible == null)
            {
                result.EmpileErreur(I.T("Error in target element formula|20236"));
                return(result);
            }
            else if (elementCible is CObjetDonnee)
            {
                elementCible = ((CObjetDonnee)elementCible).GetObjetInContexte(contexte.ContexteDonnee);
            }

            CLigneTableParametrable ligne = null;

            if (FormuleRow != null)
            {
                result = FormuleRow.Eval(ctxEval);
                if (result)
                {
                    ligne = result.Data as CLigneTableParametrable;
                }
            }
            if (ligne == null)
            {
                result.EmpileErreur(I.T("Error in table row formula|20238"));
                return(result);
            }

            //Identifie les colonnes à importer
            Dictionary <string, CDefinitionProprieteDynamique> dicMap = new Dictionary <string, CDefinitionProprieteDynamique>();

            foreach (CMappageColonne mappage in Mappages)
            {
                if (mappage.ProprieteCible != null)
                {
                    bool bPrendre = true;
                    CColonneTableParametrable col = new CColonneTableParametrable(contexte.ContexteDonnee);
                    if (col.ReadIfExists(mappage.IdColonne))
                    {
                        if (mappage.FormuleCondition != null)
                        {
                            result = mappage.FormuleCondition.Eval(ctxEval);
                            if (!result || result.Data == null)
                            {
                                bPrendre = false;
                            }
                            else
                            {
                                bool?bTmp = CUtilBool.BoolFromString(result.Data.ToString());
                                if (bTmp != null)
                                {
                                    bPrendre = bTmp.Value;
                                }
                                else
                                {
                                    bPrendre = false;
                                }
                            }
                        }
                        if (bPrendre)
                        {
                            object val = ligne.GetValue(col.Libelle);
                            if (val != null || !m_bIgnorerLesValeursVides)
                            {
                                try
                                {
                                    CInterpreteurProprieteDynamique.SetValue(elementCible, mappage.ProprieteCible, ligne.GetValue(col.Libelle));
                                }
                                catch
                                {
                                }
                            }
                        }
                    }
                }
            }
            return(result);
        }
示例#13
0
        /// ////////////////////////////////////////////////////////
        protected override CResultAErreur MyExecute(CContexteExecutionAction contexte)
        {
            CResultAErreur result = CResultAErreur.True;
            CProxyGED      proxy  = null;

            try
            {
                CContexteEvaluationExpression ctxEval = new CContexteEvaluationExpression(Process);
                if (FormuleFichierSource == null)
                {
                    result.EmpileErreur(I.T("Incorrect source file formula|506"));
                    return(result);
                }
                result = FormuleFichierSource.Eval(ctxEval);
                if (!result)
                {
                    return(result);
                }


                string strFichier = "";

                if (result.Data is CDocumentGED)
                {
                    CDocumentGED doc = result.Data as CDocumentGED;
                    proxy  = new CProxyGED(contexte.IdSession, doc.ReferenceDoc);
                    result = proxy.CopieFichierEnLocal();
                    if (!result)
                    {
                        return(result);
                    }
                    strFichier = proxy.NomFichierLocal;
                }
                else
                {
                    strFichier = result.Data.ToString();
                }
                if (!File.Exists(strFichier))
                {
                    result.EmpileErreur(I.T("Source file @1 doesn't exist |508", result.Data.ToString()));
                    return(result);
                }

                if (FormuleTableAImporter == null)
                {
                    result.EmpileErreur(I.T("Incorrect destination table formula|505"));
                    return(result);
                }
                result = FormuleTableAImporter.Eval(ctxEval);
                if (!result)
                {
                    result.EmpileErreur(I.T("Error while evaluating destination table formula|510"));
                    return(result);
                }
                if (!(result.Data is CTableParametrable))
                {
                    result.EmpileErreur(I.T("Destination table formula doesn't return a table|511"));
                    return(result);
                }
                CTableParametrable tableParametrable = (CTableParametrable)result.Data;

                if (tableParametrable.TypeTable.ParametrageCSV == null)
                {
                    result.EmpileErreur(I.T("Table type @1 doesn't contains import setup|20002", tableParametrable.TypeTable.Libelle));
                    return(result);
                }

                // Sélectionne le type de fichier Excel ou CSV (texte)
                IParametreLectureFichier parametre;
                int    nPositionduPoint = strFichier.LastIndexOf('.');
                string strExtension     = strFichier.Substring(nPositionduPoint + 1, strFichier.Length - nPositionduPoint - 1);
                if (strExtension.ToUpper() == "XLS" || strExtension.ToUpper() == "XLSX")
                {
                    parametre = tableParametrable.TypeTable.ParametrageXLS;
                }
                else
                {
                    parametre = tableParametrable.TypeTable.ParametrageCSV;
                }

                result = parametre.LectureFichier(strFichier);

                if (!result || !(result.Data is DataTable))
                {
                    result.EmpileErreur(I.T("Error while reading text file|509"));
                    return(result);
                }
                DataTable tableSource = (DataTable)result.Data;

                Dictionary <DataColumn, CColonneTableParametrable> mappage = new Dictionary <DataColumn, CColonneTableParametrable>();
                int nNbChamps = Math.Min(parametre.Mappage.StringsA.Count, parametre.Mappage.StringsB.Count);
                for (int nChamp = 0; nChamp < nNbChamps; nChamp++)
                {
                    DataColumn col = tableSource.Columns[parametre.Mappage.StringsA[nChamp]];
                    if (col != null)
                    {
                        CColonneTableParametrable colRetenue = null;
                        foreach (CColonneTableParametrable colonne in tableParametrable.TypeTable.Colonnes)
                        {
                            if (colonne.Libelle == parametre.Mappage.StringsB[nChamp])
                            {
                                colRetenue = colonne;
                                break;
                            }
                        }
                        if (colRetenue != null)
                        {
                            mappage[col] = colRetenue;
                        }
                    }
                }


                // Réalise l'import
                result = tableParametrable.ImportTable(tableSource, mappage, m_modeImport);
                if (!result)
                {
                    return(result);
                }
            }
            catch (Exception e)
            {
                result.EmpileErreur(new CErreurException(e));
            }
            finally
            {
                if (proxy != null)
                {
                    proxy.Dispose();
                }
            }

            return(result);
        }