2016-05-11 5 views
0

現在、ALM 11.52とALM 12.21の両方を使用しています。一部のプロジェクトが11.52にあり、一部が12.21にあるので、ALMバージョン9で実行する必要があるExcel vbaマクロがあります。しかし、ALM 11.52にあるプロジェクトに接続しようとすると、OTAバージョン(12.21)がALMサーバーバージョン11.52と互換性がないというエラーメッセージが表示されます。 OTAの互換性の問題を解決する方法はありますか?OTAバージョン12.21とALMバージョン11.52の互換性の問題

答えて

0

わかりやすくするために、VBAはシステムワイドレベルでOTA registedを使用しています。この場合、1つのクライアントしか登録できませんでした。 もちろん、2人の異なるクライアントと同じプロセスで作業しないでください。しかし、これが必要な場合は、ALMによって提供されるサイド・バイ・サイド・マニフェストをロードする必要があります。 デフォルトでは、フォルダ %LOCALAPPDATA%\ HP \ ALM-Clientにある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 
関連する問題