Exemple #1
0
        /// <summary>
        /// Called when user makes a selection in the menu.
        /// This is your main exit point to the rest of your Add-in
        /// </summary>
        /// <param name="repository">the repository</param>
        /// <param name="location">the location of the menu</param>
        /// <param name="menuName">the name of the menu</param>
        /// <param name="itemName">the name of the selected menu item</param>
        public override void EA_MenuClick(EA.Repository repository, string location, string menuName, string itemName)
        {
            string    xml;
            DataTable dt;

            // for LINQ to SQL
            IDataProvider provider;         // the provider to connect to database like Access, ..
            string        connectionString; // The connection string to connect to database
            string        parametersToPassToQuery;
            string        linqQueryFileName;
            string        linqQueryFilePath;
            bool          result;
            LinqPad       linqPad;
            DataTable     dtHtml;

            switch (itemName)
            {
            // user has clicked the menuHello menu option
            case MenuHello:
                this.SayHello();
                break;

            // user has clicked the menuGoodbye menu option
            case MenuGoodbye:
                this.SayGoodbye();
                break;


            case MenuOpenProperties:
                this.TestPropertiesDialog(repository);
                break;

            // Test the Search and output the results to EA Search Window
            case MenuRunDemoSearch:
                // 1. Collect data
                dt = SetTable();
                // 2. Order, Filter, Join, Format to XML
                xml = QueryAndMakeXmlFromTable(dt);
                // 3. Out put to EA
                repository.RunModelSearch("", "", "", xml);
                break;

            case MenuRunDemoPackageContent:
                // 1. Collect data into a data table
                dt = SetTableFromContext(repository);
                // 2. Order, Filter, Join, Format to XML
                xml = QueryAndMakeXmlFromTable(dt);
                // 3. Out put to EA
                repository.RunModelSearch("", "", "", xml);
                break;

            // Example to run SQL, convert to DataTable and output in EA Search Window
            case MenuRunDemoSqlToDataTable:
                // 1. Run SQL
                string sql = "select ea_guid AS CLASSGUID, object_type AS CLASSTYPE, name, stereotype, object_type from t_object order by name";
                xml = repository.SQLQuery(sql);
                // 2. Convert to DataTable
                dt = Xml.MakeDataTableFromSqlXml(xml);
                // 2. Order, Filter, Join, Format to XML
                xml = QueryAndMakeXmlFromTable(dt);
                // 3. Out put to EA
                repository.RunModelSearch("", "", "", xml);
                break;


            // Read connection string from EA and try an ADODB Connection
            // Copy connection string to clipboard
            case MenuShowConnectionString:
                string eaConnectionString = repository.ConnectionString;
                if (eaConnectionString != null)
                {
                    connectionString = LinqUtil.GetConnectionString(repository, out provider);

                    string lConnectionString = $"{eaConnectionString}\r\n\r\nProvider for Linq for SQL:\r\n'{provider}\r\n{connectionString}";
                    Clipboard.SetText(lConnectionString);
                    MessageBox.Show($@"{lConnectionString}", @"Connection string (EA+LINQ + SQL) copied to clipboard");
                    if (connectionString == "")
                    {
                        return;
                    }


                    ADODB.Connection conn = new ADODB.Connection();
                    try
                    {
                        conn.Open(connectionString, "", "", -1);      // connection Open synchronously

                        //conn.Open(connectionString, "", "", -1);  // connection Open synchronously
                        MessageBox.Show($@"EA ConnectionString:    '{eaConnectionString}'
ConnectionString:
- '{connectionString}'
Provider:
-  '{provider}'
Mode:             
- '{conn.Mode}' 
State:
- '{conn.State}'", @"ODBC Connection established ");
                    }
                    catch (Exception e)
                    {
                        MessageBox.Show($@"EA ConnectionString:    '{eaConnectionString}'
ConnectionString:
- '{connectionString}'
Mode:             
- '{conn.Mode}' 
State:
- '{conn.State}'

{ e}", @"ODBC Connection error ");
                    }
                }
                break;

            // Basis LINQ to SQL example
            case MenuShowRunLinq2Db:
                // get connection string of repository
                connectionString = LinqUtil.GetConnectionString(repository, out provider);

                // Run LINQ query to dataTable
                dt = LinqUtil.RunLinq2Db(provider, connectionString);
                // Make EA xml
                OrderedEnumerableRowCollection <DataRow> rows = from row in dt.AsEnumerable()
                                                                orderby row.Field <string>(dt.Columns[0].Caption)
                                                                select row;

                xml = Xml.MakeXml(dt, rows);

                // Output to EA
                repository.RunModelSearch("", "", "", xml);
                break;

            // Advanced LINQ to SQL example
            case MenuShowRunLinq2DbAdvanced:
                // get connection string of repository
                connectionString = LinqUtil.GetConnectionString(repository, out provider);

                // Run LINQ query to dataTable
                dt = LinqUtil.RunLinq2DbAdvanced(provider, connectionString);

                // Make EA xml
                xml = Xml.MakeXmlFromDataTable(dt);
                // Output to EA
                repository.RunModelSearch("", "", "", xml);
                break;

            // run LINQPad query to HTML,csv, text (uses lprun.exe)
            // - !!!!You need a LINQPad license to run!!!!!!
            // - lprun installed at standard location (c:\Program Files (x86)\LINQPad5\lprun.exe)
            // - output to 'c:\temp\EaBasicQuery.html'
            // - EA standard installation (used for EAExample database)
            case MenuShowRunLinqPadToHtml:
                // Run query with lprun.exe
                parametersToPassToQuery = @"""Test query EaBasicQuery.linq""";
                linqQueryFileName       = "EaBasicQuery.linq";
                linqQueryFilePath       = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location) + @"\" + linqQueryFileName;

                linqPad = new LinqPad(repository);
                // Output as html with read back table and out put to EA Search Window
                result = linqPad.Run(linqQueryFilePath, @"html", parametersToPassToQuery);
                if (!result)
                {
                    return;
                }
                dtHtml = linqPad.ReadHtml();

                // Make EA xml
                xml = Xml.MakeXmlFromDataTable(dtHtml);
                // Output to EA
                repository.RunModelSearch("", "", "", xml);
                linqPad.Show();
                // csv
                result = linqPad.Run(linqQueryFilePath, @"csv", parametersToPassToQuery);
                if (!result)
                {
                    return;
                }
                linqPad.Show();
                // text
                result = linqPad.Run(linqQueryFilePath, @"text", parametersToPassToQuery);
                if (!result)
                {
                    return;
                }
                linqPad.Show();
                break;

            // Run LINQPad and output EA context information
            case MenuShowRunLinqPadEaContext:
                linqQueryFileName = "TestCallLinqWithParameter.linq";
                linqQueryFilePath = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location) + @"\" + linqQueryFileName;

                linqPad = new LinqPad(repository);
                // Output as html with read back table and out put to EA Search Window
                result = linqPad.Run(linqQueryFilePath, @"html", linqPad.GetArg(repository, "mySearchTerm"));
                if (!result)
                {
                    return;
                }
                dtHtml = linqPad.ReadHtml();

                // Make EA xml
                xml = Xml.MakeXmlFromDataTable(dtHtml);
                // Output to EA
                repository.RunModelSearch("", "", "", xml);
                linqPad.Show();
                break;


            // run LINQ XML query for own EA queries which are stored in *.xml
            case MenuShowRunLinqXml:
                // Make DataTable with LINQ Search/Query
                dt = EaSearches();

                // Make
                xml = Xml.MakeXmlFromDataTable(dt);

                // Output to EA
                repository.RunModelSearch("", "", "", xml);
                //linqPad.Show();
                break;

            case MenuShowShowLinqPadConnections:
                linqQueryFileName = "LinqPadConnections.linq";
                linqQueryFilePath = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location) + @"\" + linqQueryFileName;

                linqPad = new LinqPad(repository);
                // Output as html with read back table and out put to EA Search Window, don't use a connection
                result = linqPad.Run(linqQueryFilePath, @"html", linqPad.GetArg(repository, ""), noConnection: true);
                if (!result)
                {
                    return;
                }
                dtHtml = linqPad.ReadHtml();

                // Make EA xml
                xml = Xml.MakeXmlFromDataTable(dtHtml);
                // Output to EA
                repository.RunModelSearch("", "", "", xml);
                linqPad.Show();
                break;

            // run LINQ XML query for own EA queries which are stored in *.xml
            case MenuAbout:

                // get product version
                Assembly        assembly        = Assembly.GetExecutingAssembly();
                FileVersionInfo fileVersionInfo = FileVersionInfo.GetVersionInfo(assembly.Location);

                // Get file-version of dll
                string pathRoot = Assembly.GetExecutingAssembly().Location;
                pathRoot = Path.GetDirectoryName(pathRoot);

                string productVersion         = $"{fileVersionInfo.ProductVersion}{Environment.NewLine}";
                string pathAddInSimpleVersion = Path.Combine(new[] { pathRoot, "AddInSimple.dll" });
                string pathHoLinqToSql        = Path.Combine(new[] { pathRoot, "hoLinqToSql.dll" });
                string pathLinq2Db            = Path.Combine(new[] { pathRoot, "linq2db.dll" });

                MessageBox.Show($@"Product version: {productVersion}
AddInSimple.dll  {FileVersionInfo.GetVersionInfo(pathAddInSimpleVersion).FileVersion}
hoLinqToSql.dll   {FileVersionInfo.GetVersionInfo(pathHoLinqToSql).FileVersion}
linq2db.dll           {FileVersionInfo.GetVersionInfo(pathLinq2Db).FileVersion}

hoTools
[email protected]
+49 172 51 79 16 7
", @"AddInSimple, the example Add-In");
                break;
            }
        }