2016-05-11 84 views
0

我目前使用的是ALM 11.52和ALM 12.21。有一個excel vba宏,我需要在兩個ALM版本9上運行,其中一些項目在11.52上,一些在12.21上)。但是當我嘗試連接到ALM 11.52上的項目時,我收到一條錯誤消息,指出OTA版本(12.21)與ALM服務器版本11.52不兼容。有沒有辦法解決OTA兼容性問題?OTA版本12.21和ALM版本11.52兼容性問題

回答

0

爲了簡單起見,我們可以說VBA使用OTA在系統級別上註冊。對於這種情況,只有一個客戶可以註冊。坦白地說,你不應該嘗試在同一個過程中與2個不同的客戶端合作。但是如果你需要這個,你需要加載由ALM提供的Side-by-side清單。 默認情況下,位於文件夾 %LOCALAPPDATA%\ HP \ ALM-客戶端中的ALM客戶端。在Deployments.ini文件中,您可以找到準確部署ALM客戶端的位置(取決於ALM URL或版本) 您可以使用文件application.sxs.manifest激活您需要的激活上下文。以下是示例代碼:

Private Declare Function CreateActCtx Lib "kernel32" Alias "CreateActCtxA" (ByRef pActCtx As ACTCTX_) As Long 
Private Declare Sub ReleaseActCtx Lib "kernel32" (ByVal hActCtx As Long) 

Private Declare Function ActivateActCtx Lib "kernel32" (ByVal hActCtx As Long, ByRef lpCookie As Long) As Integer 
Private Declare Function DeactivateActCtx Lib "kernel32" (ByVal dwFlags As Long, ByVal ulCookie As Long) As Boolean 


Private Declare Function GetLastError Lib "kernel32"() As Long 
Declare Sub SetLastError Lib "kernel32.dll" (ByVal dwErrCode As Long) 

Private Type ACTCTX_ 
    cbSize As Long 
    dwFlags As Long 
    lpSource As String 
    wProcessorArchitecture As Integer 
    wLangId As Integer 
    lpAssemblyDirectory As String 
    lpResourceName As String 
    lpApplicationName As String 
    hModule As Long 
End Type 

Private actctx As ACTCTX_ 
Private hActCtx As Long 
Private actCtxCookie As Long 

Const ACTCTX_FLAG_ASSEMBLY_DIRECTORY_VALID As Long = 4 
Const INVALID_HANDLE_VALUE As Long = -1 

Const CREATE_CONTEXT_ERROR As Long = 1 
Const ACTIVATE_CONTEXT_ERROR As Long = 2 

Public Sub ActivateOtaContext(ByVal almClientDeploymendPath As String) 
    Dim actctx As ACTCTX_, ativated As Integer 


    If Right(almClientDeploymendPath, 1) = "\" Then 
    almClientDeploymendPath = Left(almClientDeploymendPath, Len(almClientDeploymendPath) - 1) 
    End If 
    actctx.cbSize = Len(actctx) 
    actctx.dwFlags = ACTCTX_FLAG_ASSEMBLY_DIRECTORY_VALID 
    actctx.lpAssemblyDirectory = almClientDeploymendPath 
    actctx.lpSource = almClientDeploymendPath & "\application.sxs.manifest" 

    hActCtx = CreateActCtx(actctx) 
    If hActCtx = INVALID_HANDLE_VALUE Then 
    Err.Raise vbObjectError + CREATE_CONTEXT_ERROR, , "Cannot create activation context. Error code: " + GetLastError 
    End If 
    If ActivateActCtx(hActCtx, actCtxCookie) <> 1 Then 
    Err.Raise vbObjectError + ACTIVATE_CONTEXT_ERROR, , "Cannot activate context. Error code: " + GetLastError 
    End If 
End Sub 

Public Sub DeactivateOtaContext() 
    If actCtxCookie > 0 Then 
    Call DeactivateActCtx(0, actCtxCookie) 
    actCtxCookie = 0 
    End If 
    If hActCtx > 0 Then 
    Call ReleaseActCtx(hActCtx) 
    End If 
End Sub 

Sub Test() 
    Dim tdConnection As ITDConnection10 
    Dim AlmClientsBasePath As String 
    AlmClientsBasePath = Environ("LocalAppData") + "\HP\ALM-Client" 

    ActivateOtaContext AlmClientsBasePath + "\alm1221" 

    Set tdConnection = CreateObject("TDApiOle80.TDConnection") 
    tdConnection.InitConnectionEx "http://alm1221.company.net/qcbin/" 
    tdConnection.LoginEx "user1", "pwd1" 
    tdConnection.Logout 
    tdConnection.ReleaseConnection 
    Set tdConnection = Nothing 

    DeactivateOtaContext 

    ActivateOtaContext AlmClientsBasePath + "\alm115" 


    Set tdConnection = CreateObject("TDApiOle80.TDConnection") 
    tdConnection.InitConnectionEx "http://alm.company.net/qcbin/" 
    tdConnection.LoginEx "user2", "pwd2" 
    tdConnection.Logout 
    tdConnection.ReleaseConnection 
    Set tdConnection = Nothing 

    DeactivateOtaContext 
End Sub