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
--------------------------------------------------------------------------------------------- -- Exception handling -- In the global section declare the following: -- GLOBAL -- GExceptions : Aggregate Of Exception := []; -- GException : Exception; -- ... -- END_GLOBAL; 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;
The individual exception data is available in the xpxException object.
edmiNet
.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); }
If there is a usermessage in the xpxException object this will be shown as the Message of the exception object. If there is no usermessage and there is a edmErrroCode the message will look like this:
Example output
Error number 11298: Illegal data type or data value of argument #1. Function: xpfGetInstanceModel Line number: 1581 Query function: CatDictionaryServices.UpdateExchangeRequirementConceptAttribute