Esempio n. 1
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" }
            });
        }
Esempio n. 2
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);
        }