如何在epicor C#中抛出异常

时间:2017-01-31 16:03:43

标签: c# progress-4gl epicorerp

与C#中的& THROW_PUBLIC相同或者& THROW_PUBLIC是什么意思是ABL?我对ABL了解不多,但需要将其转换为C#。

Epicor 9.05中数据指令的代码片段

#include <stdlib.h>
#include <stdio.h>


int Convert24bitColorStringTo12BitColor(const char *colorcode24)
{
  long color24 = strtol(colorcode24, NULL, 16);
  long color12 = ((color24 & 0xf0) >> 4) | ((color24 & 0xf000) >> 8) | ((color24 & 0xf00000) >> 12);
  return color12;
}

int main()
{
  printf("%x\n", Convert24bitColorStringTo12BitColor("abcdef"));
  printf("%x\n", Convert24bitColorStringTo12BitColor("ffff"));
}

2 个答案:

答案 0 :(得分:1)

&amp; THROW_PUBLIC根本不是Progress ABL关键字或任何标准功能。很可能它是Epicor特有的东西。

为了更好地理解这个问题,你应该发布更多代码!

但是:以&符号开头可能是它作为预处理器的线索。可以使用GLOBAL-DEFINESCOPED-DEFINE定义预处理器 - 在代码中查找。

编译程序时,对预处理程序的任何引用(如{&name-of-preprocesor}所写)都将替换为它的定义。可以进行某些有限的检查(例如,用于编译的操作系统)。

以下是定义和使用两个预处理器的示例。

&GLOBAL-DEFINE THROW_PUBLIC1 MESSAGE "HELLO 1".
&SCOPED-DEFINE THROW_PUBLIC2 MESSAGE "HELLO 2".

{&THROW_PUBLIC1}
{&THROW_PUBLIC2}

在预编译器之后,程序将如下所示:

MESSAGE "HELLO 1".
MESSAGE "HELLO 2".

THROW部分可能表示正在使用某种错误处理,如THROW-CATCH - 情况或类似情况。他们写的是这样的:

BLOCK-LEVEL ON ERROR UNDO, THROW. 

DEFINE VARIABLE i AS INTEGER     NO-UNDO.
ASSIGN 
    i = INTEGER("hello").

CATCH err AS Progress.Lang.Error:
    MESSAGE "Error is caught here" VIEW-AS ALERT-BOX.
END.

FINALLY:
    MESSAGE "This is run in the end" VIEW-AS ALERT-BOX.
END.

答案 1 :(得分:0)

{&安培; THROW_PUBLIC}。在Epicor中定义了包含文件管理器\ Exception.i(这可能是xcoded所以你无法读取它)。这基本上会跳到{&amp; TRY_PUBLIC} / {&amp; CATCH_PUBLIC}块的末尾并发布异常。

在c#中它更容易:

throw new Ice.BLException("Please select a Product Group for this Part");

您可以使用标准的System.Exception,但Ice.BLException(在Epicor.ServiceModel.dll中定义)有一些重载来记录框架的其他部分可以显示/记录的额外信息。