【问题标题】:How to throw exception in epicor C#如何在Epicor C#中抛出异常
【发布时间】:2017-01-31 16:03:43
【问题描述】:

C# 中 &THROW_PUBLIC 的等价物是什么,或者 &THROW_PUBLIC 是什么意思是 ABL?我对 ABL 不太了解,但需要将其转换为 C#。

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

If ttPart.ProdCode = '' then do:

   If lookup(SUBSTRING(ttPart.PartNum,1,3),'12-,13-,14-,15-',',') <> 0 then do:

    {lib\PublishEx.i &ExMsg = "'Please select a Product Group for this Part'"}
    {&THROW_PUBLIC}.

   End.

End.

【问题讨论】:

  • 您可能想解释一下&amp;THROW_PUBLIC 的作用。
  • 这是我的问题。不知道这是ABL中的通用词还是ABL中的保留字。

标签: c# progress-4gl epicorerp


【解决方案1】:

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

为了更好地理解问题,也许您应该发布更多代码!

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

当程序被编译时,任何对预处理器的引用(写成{&amp;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-situation 或类似情况。它们是这样写的:

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.

【讨论】:

  • 我在我的 OP 中添加了一些代码片段。我没有看到任何关于 THROW_PUBLIC 的声明。会不会在 .I 文件中?
【解决方案2】:

{&THROW_PUBLIC}。在 Epicor 包含文件 manager\Exception.i 中定义(这可能是 xcoded,因此您无法阅读)。这基本上会跳到 {&TRY_PUBLIC} / {&CATCH_PUBLIC} 块的末尾并发布异常。

在 c# 中要容易得多:

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

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

【讨论】:

    猜你喜欢
    • 2011-02-22
    • 2012-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多