Altova MapForce 2024 Professional Edition

La API de MapForce devuelve errores de dos formas distintas. Todos los métodos de la API devuelven un elemento HRESULT. Este valor de retorno informa al emisor de la llamada de cualquier fallo durante la ejecución del método. Si la llamada se ha realizado con éxito, el valor de retorno es igual a S_OK. C/C++. Por lo general, los programadores suelen usar HRESULT para detectar errores.

 

Visual Basic, los lenguajes de programación y otros entornos de desarrollo de alto nivel no dan acceso al programador al HRESULT de retorno de una llamada COM, sino que usan el segundo mecanismo de detección de errores compatible con la API de MapForce, la interfaz IErrorInfo. Si ocurre un error, la API crea un objeto nuevo que implementa la interfaz IErrorInfo. El entorno de desarrollo usa esta interfaz para llenar su propio mecanismo de gestión de errores con la información obtenida.

 

A continuación describimos en detalle cómo gestionar los errores detectados por la API de MapForce en distintos entornos de desarrollo.

 

Visual Basic

Una forma común de gestionar errores en Visual Basic es definir un gestor de errores. Este se puede definir con la instrucción Cuando haya erIErrorInfo.rores. Normalmente el gestor muestra un mensaje de error y hace limpieza de código para evitar referencias duplicadas o cualquier tipo de recursos.Visual Basic rellena su propio objeto Err con la información que obtiene de la interfaz IErrorInfo.

 

Sub Validate()
'place variable declarations here
 
'set error handler
On Error GoTo ErrorHandler
 
'if generation fails, program execution continues at ErrorHandler:
 objMapForce.ActiveDocument.GenerateXSLT()
 
'additional code comes here
 
'exit
Exit Sub
 
 ErrorHandler:
MsgBox("Error: " & (Err.Number - vbObjectError) & Chr(13) &
    "Description: " & Err.Description)
End Sub

 

JavaScript

La implementación de Microsoft del JavaScript (JScript) ofrece un mecanismo try-catch para gestionar los errores derivados de las llamadas COM. Este mecanismo es muy parecido al enfoque VisualBasic en el sentido de que también se declara un objeto de error que contiene la información necesaria.

 

  function Generate()
  {
    // please insert variable declarations here
 
    try
     {
        objMapForce.ActiveDocument.GenerateXSLT();
     }
    catch(Error)
     {
        sError = Error.description;
        nErrorCode = Error.number & 0xffff;
        return false;
     }
 
    return true;
  }

 

C/C++

C/C++ ofrece un acceos fácil al HRESULT de la llamada COM y a la IErrorInterface.

 

  HRESULT hr;
 
  // Call GenerateXSLT() from the MapForce API
  if(FAILED(hr = ipDocument->GenerateXSLT()))
  {
    IErrorInfo *ipErrorInfo = Null;
 
    if(SUCCEEDED(::GetErrorInfo(0, &ipErrorInfo)))
    {
        BSTR   bstrDescr;
        ipErrorInfo->GetDescription(&bstrDescr);
 
        // handle Error information
        wprintf(L"Error message:\t%s\",bstrDescr);
        ::SysFreeString(bstrDescr);
 
        // release Error info
        ipErrorInfo->Release();
    }
  }

© 2017-2023 Altova GmbH