1

尝试创建一个原型应用程序,该应用程序将向 HPQC 11 发布新需求。

我设法建立了稳固的连接,但是当我尝试添加空白要求时,我得到了一个 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# 和一般编码还很陌生,所以最好假设我什么都不知道。

4

2 回答 2

2

在完成了一些重要的工作后,以下代码可以正常工作:

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 Patch 9(内部版本 11.0.0.7274)才能工作。以前的版本会导致错误,最明显的是问题中的错误。

于 2012-08-08T17:14:55.977 回答
0

ALM 中的需求是分层的,在创建需求时,您需要在某些现有需求下创建它。

您要做的是获取根需求,它的 Id 应该是 0 或 1,您可以在 ALM UI 中检查它。

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

另外,请确保您正在使用 STA 而不是 MTA 线程。

于 2012-08-04T17:20:17.893 回答