2012-07-31 30 views
1

试图建立一个原型的应用程序,将发布一个新的要求HPQC 11C#中插入HP质量中心的新要求 - AccessViolationException

我已经得到了一个坚实的连接,但是当我试图添加空白要求我得到一个AccessViolationException。

TDConnectionClass td = HPQC_Connect(); //Open a connection 
ReqFactory myReqFactory = (ReqFactory)td.ReqFactory; //Start up the Requirments Factory. 
Req myReq = (Req)myReqFactory.AddItem(DBNull.Value); //Create a new blank requirement (AccessViolationException) 
myReq.Name = "New Requirement"; //Populate Name 
myReq.TypeId = "1"; // Populate Type: 0=Business, 1=Folder, 2=Functional, 3=Group, 4=Testing 
myReq.ParentId = 0; // Populate Parent ID 
myReq.Post(); // Submit 

任何想法?我对C#和编码一般都很陌生,所以最好假设我什么都不知道。

回答

2

通过ISSE一些显著的工作后,下面的代码工作正常:

private void HPQC_Req_Create_Click() 
    { 
     TDConnection td = null; 
     try 
     { 
      td = new TDConnection(); 
      td.InitConnectionEx("server"); 
      td.Login(HPQCUIDTextbox.Text.ToString(), HPQCPassTextbox.Text.ToString()); 
      Console.WriteLine(HPQCPassTextbox.Text.ToString()); 
      td.Connect("DEFAULT", "Test_Automation_Playground"); 

      bool check = td.LoggedIn; 
      if (check == true) 
      { 
       Console.WriteLine("Connected."); 
       HPQCStatus.Text = "Connected."; 
      } 

      ReqFactory myReqFactory = (ReqFactory)td.ReqFactory; 
      Req myReq = (Req)myReqFactory.AddItem(-1); //Error Here 
      myReq.Name = "New Requirement 1"; 
      myReq.TypeId = "1"; // 0=Business, 1=Folder, 2=Functional, 3=group, 4=testing 
      myReq.ParentId = 0; 
      myReq.Post(); 

      Console.WriteLine("Requirement Created."); 
      HPQCStatus.Text = "Requirement Created."; 

      try 
      { 
       td.Logout(); 
       td.Disconnect(); 
       td = null; 
      } 
      catch 
      { } 
     } 
     catch (Exception ex) 
     { 
      Console.WriteLine("[Error] " + ex); 
      try 
      { 
       td.Logout(); 
       td.Disconnect(); 
       td = null; 
      } 
      catch 
      { } 
     } 

此代码要求服务器为了工作进行修补,以QC 11片9(建设11.0.0.7274)。以前的版本会导致错误,尤其是问题中的错误。

+0

如果您有权访问HP ALM(在我的情况下为12),那么您可以单击右上角/ ALM开放式测试体系结构参考入门指南中的帮助按钮。在那里,查找CSharp示例,你会发现一些代码。 – JoanComasFdz 2015-08-10 06:56:22

0

ALM中的需求是分层的,创建需求时需要根据现有需求创建需求。

你想要做的是获得根的要求,它的ID应该是0或1,你可以在ALM UI中检查它。

然后从该Root需求的属性获取ReqFactory的实例。 然后将您的要求添加到该工厂。

此外,请确保您正在处理STA而不是MTA线程。

+0

不幸的是,这可能是对我有限的经验来说太高的答案。我得到的要求是分层次的,但我不清楚如何获得父级要求。根据API,我应该创建一个空对象,然后用相关信息(包括父ID)填充字段。但是,创建空对象时发生错误。至于线程,我完全失去了 - 我不知道我正在处理什么类型或类型的线程,也不知道如何找到它。 – 2012-08-06 15:43:49

+0

Ian - 您是否能够使用上面的代码成功添加需求,或者这是否会阻止您发布新需求?我试图确定它是否值得我走下去,因为我们使用QC进行需求管理 - 如果我可以从Excel表格或自定义表单应用程序中编程加载测试用例,那么对于我们的团队来说这将是巨大的。 – 2014-04-25 14:16:43