Show Posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.


Topics - richdenis

Pages: [1]
1
Automation Interface, Add-Ins and Tools / Interop'ing' with C#
« on: April 14, 2004, 10:34:45 am »
Hello,
 I am trying to use the sample code that is provided in the help file to no avail.  I am sure there is something I am not doing right but I am not sure what it could be.  While I can connect to the repository just fine and see that there are 2 models in the repository, when I try to access the model by doing a repository.Models.GetAt(i), I get an exception thrown that simply says "The server threw an exception".  I can not figure out what I could be doing wrong so I am including the code to see if anyone else can get any further.  Any help would be greatly appreciated:

private EA.Repository LoadRepository(string repositoryPath)
           {
                 EA.Repository _repository = new RepositoryClass();
                 try
                 {
                       _repository.OpenFile(repositoryPath);
                 }
                 catch( Exception e )
                 {
                       MessageBox.Show( e.StackTrace );
                 }
                 return _repository;
           }

           private void DumpModel(EA.Repository repository)
           {
                 for(short i=0;i< repository.Models.Count;i++)
                 {
                       try
                       {
                             object pack = ((Collection)repository.Models).GetAt(i);
                             DumpPackage((IPackage)repository.Models.GetAt(i), "");      
                       }
                       catch( Exception e )
                       {
                             MessageBox.Show( e.StackTrace );
                       }
                 }
           }

           private void DumpPackage(IPackage package, string indent)
           {
                 output.Append(indent + package.Name);
                 DumpElements(package, indent + "     ");
                 
                 for(short i=0;i<((Collection)package.Packages).Count;i++)
                 {
                       DumpPackage((IPackage)((Collection)package.Packages).GetAt(i) , indent + "    ");                        
                 }
           }

           private void DumpElements(IPackage package, string indent)
           {
                 for(short i=0;i<((Collection)package.Elements).Count;i++)
                 {
                       output.Append(indent + "::" + ((IPackage)((Collection)package.Elements).GetAt(i)).Name);
                 }
           }

Please look it over and give any suggestions you can.  I am attaching the entire form class file so you can implement it easier.



***BEGIN***
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
using EA;
using System.Text;

namespace EATestHarness
{
     /// <summary>
     /// Summary description for Form1.
     /// </summary>
     public class Form1 : System.Windows.Forms.Form
     {
           private System.Windows.Forms.OpenFileDialog openFileDialog1;
           private System.Windows.Forms.Button btnClickMe;

           private StringBuilder output = new StringBuilder();
           /// <summary>
           /// Required designer variable.
           /// </summary>
           private System.ComponentModel.Container components = null;

           public Form1()
           {
                 //
                 // Required for Windows Form Designer support
                 //
                 InitializeComponent();

                 //
                 // TODO: Add any constructor code after InitializeComponent call
                 //
           }

           /// <summary>
           /// Clean up any resources being used.
           /// </summary>
           protected override void Dispose( bool disposing )
           {
                 if( disposing )
                 {
                       if (components != null)
                       {
                             components.Dispose();
                       }
                 }
                 base.Dispose( disposing );
           }

           #region Windows Form Designer generated code
           /// <summary>
           /// Required method for Designer support - do not modify
           /// the contents of this method with the code editor.
           /// </summary>
           private void InitializeComponent()
           {
                 this.openFileDialog1 = new System.Windows.Forms.OpenFileDialog();
                 this.btnClickMe = new System.Windows.Forms.Button();
                 this.SuspendLayout();
                 //
                 // openFileDialog1
                 //
                 this.openFileDialog1.Filter = "\"EAP Files|*.EAP\"";
                 this.openFileDialog1.FileOk += new System.ComponentModel.CancelEventHandler(this.openFileDialog1_FileOk);
                 //
                 // btnClickMe
                 //
                 this.btnClickMe.Location = new System.Drawing.Point(176, 24);
                 this.btnClickMe.Name = "btnClickMe";
                 this.btnClickMe.Size = new System.Drawing.Size(72, 32);
                 this.btnClickMe.TabIndex = 0;
                 this.btnClickMe.Text = "ClickMe!";
                 this.btnClickMe.Click += new System.EventHandler(this.btnClickMe_Click);
                 //
                 // Form1
                 //
                 this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
                 this.ClientSize = new System.Drawing.Size(292, 273);
                 this.Controls.Add(this.btnClickMe);
                 this.Name = "Form1";
                 this.Text = "Form1";
                 this.ResumeLayout(false);

           }
           #endregion

           /// <summary>
           /// The main entry point for the application.
           /// </summary>
           [STAThread]
           static void Main()
           {
                 Application.Run(new Form1());
           }

           private void openFileDialog1_FileOk(object sender, System.ComponentModel.CancelEventArgs e)
           {
           
           }

           private EA.Repository LoadRepository(string repositoryPath)
           {
                 EA.Repository _repository = new RepositoryClass();
                 try
                 {
                       _repository.OpenFile(repositoryPath);
                 }
                 catch( Exception e )
                 {
                       MessageBox.Show( e.StackTrace );
                 }
                 return _repository;
           }

           private void DumpModel(EA.Repository repository)
           {
                 for(short i=0;i< repository.Models.Count;i++)
                 {
                       try
                       {
                             object pack = ((Collection)repository.Models).GetAt(i);
                             DumpPackage((IPackage)repository.Models.GetAt(i), "");      
                       }
                       catch( Exception e )
                       {
                             MessageBox.Show( e.StackTrace );
                       }
                 }
           }

           private void DumpPackage(IPackage package, string indent)
           {
                 output.Append(indent + package.Name);
                 DumpElements(package, indent + "     ");
                 
                 for(short i=0;i<((Collection)package.Packages).Count;i++)
                 {
                       DumpPackage((IPackage)((Collection)package.Packages).GetAt(i) , indent + "    ");                        
                 }
           }

           private void DumpElements(IPackage package, string indent)
           {
                 for(short i=0;i<((Collection)package.Elements).Count;i++)
                 {
                       output.Append(indent + "::" + ((IPackage)((Collection)package.Elements).GetAt(i)).Name);
                 }
           }


           private void btnClickMe_Click(object sender, System.EventArgs e)
           {
                 EA.Repository _repository = LoadRepository(@"C:\\Development\\Diagrams\\UseCase\\UseCase.EAP");
                 DumpModel(_repository);
                 MessageBox.Show(output.ToString());
           }
     }
}
***END***

Pages: [1]