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兼容性問題
我目前使用的是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兼容性問題
爲了簡單起見,我們可以說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