Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

Version 1 Next »

There is now a way to throw an exception in the edmiNET binding's Execute function of the query object from the xpx machine. Works on externally callable query functions that has generic return type (generic or aggregate of generic). To raise an .NET xpxException in edmiNET you need to create a view_entity like this and return it in an aggregate:

Exception View Entity
VIEW_ENTITY Exception;
   _Type_       : STRING;  -- Either 'edmException' or 'xpxException'
   errCode      : INTEGER; -- EDM error code as returned from xpxExceptionId
   errMessage   : STRING;  -- EDM error message as returned from xpxExceptionId
   userCode     : INTEGER; -- Selfmade code
   userMessage  : STRING;  -- Selfmade message
   functionName : STRING;  -- Function as returned from xpxExceptionId or selfmade
   lineNumber   : INTEGER; -- Line number as returned from xpxExceptionId or selfmade.
   innerException : Exception;
END_VIEW_ENTITY;
Express Helper functions and procedures
-- Create an new innermost exception representing the current xpxExceptionId object
Function GetEDMException : Aggregate Of Exception; 
   GExceptions := [];
   CreateEDMException;
   Return(GExceptions);
End_Function;

Procedure NewEDMException;
   GExceptions := [];
   CreateEDMException;
End_Procedure;

-- Create an new "selfmade" innermost exception 
Function GetException(Message : String) : Aggregate Of Exception; 
   GExceptions := [];
   NewOuterException(Message);
   Return(GExceptions);
End_Function;

Procedure NewException(Message : String);
   GExceptions := [];
   NewOuterException(Message);
End_Procedure;

-- Create an new outer exception on the previous (inner) exception 
Function GetOuterException(Message : String) : Aggregate Of Exception; 
   NewOuterException(Message);
   Return(GExceptions);
End_Function;

Procedure NewOuterException(Message : String);
   Local
      lInnerException : Exception;
   End_Local;
   lInnerException := GException;
   New GException;
   GException._Type_         := 'xpxException';
   GException.userMessage    := Message;
   GException.innerException := lInnerException;
   GExceptions ++ GException;
End_Procedure;

Procedure CreateEDMException;
   Local
      lInnerException : Exception;
   End_Local;
   lInnerException := GException;
   New GException;
   GException._Type_       := 'edmException';
   GException.errCode      := xpxExceptionId.errCode;
   GException.errMessage   := xpxExceptionId.errMessage;
   GException.functionName := xpxExceptionId.functionName;
   GException.lineNumber   := xpxExceptionId.lineNumber;
   GException.innerException := lInnerException;
   GExceptions ++ GException;
End_procedure;
.Net VB Example
Try
   EnterpriseModel.NewQuery.Execute("CatDictionaryServices", "UpdateExchangeRequirementConceptAttribute", New Object() {New Instance(ProductPage.ERConceptId),
                                                                                                                                     New Instance(lGroupId),
                                                                                                                                     New Instance(lConceptId),
                                                                                                                                     Column.Name, NewValue})
    RefreshRow = True
Catch XPXEx As XPXException
    XtraMessageBox.Show(XPXEx.Message)
Catch Ex As Exception
    XtraMessageBox.Show(Ex.ToString)
End Try
.NET C# Example
try {
		EnterpriseModel.NewQuery.Execute("CatDictionaryServices", "UpdateExchangeRequirementConceptAttribute", new object[] {
			new Instance(ProductPage.ERConceptId),
			new Instance(lGroupId),
			new Instance(lConceptId),
			Column.Name,
			NewValue
		});
		RefreshRow = true;
} catch (XPXException XPXEx) {
		XtraMessageBox.Show(XPXEx.Message);
} catch (Exception Ex) {
		XtraMessageBox.Show(Ex.ToString);
}
  • No labels