2012-07-31 35 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