与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"));
}
答案 0 :(得分:1)
&amp; THROW_PUBLIC根本不是Progress ABL关键字或任何标准功能。很可能它是Epicor特有的东西。
为了更好地理解这个问题,你应该发布更多代码!
但是:以&符号开头可能是它作为预处理器的线索。可以使用GLOBAL-DEFINE
或SCOPED-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中定义)有一些重载来记录框架的其他部分可以显示/记录的额外信息。