2017-01-31 2 views
0

Что равнозначно & THROW_PUBLIC в C# или что такое & THROW_PUBLIC означает ABL? Я мало знаю об ABL, но мне нужно преобразовать его в C#.Как сделать исключение в epicor 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. 
+0

Возможно, вы захотите объяснить, что делает '& THROW_PUBLIC'. –

+0

Это мой вопрос. Я не знаю, является ли это распространенным в ABL или зарезервированным словом в ABL. – Arcadian

ответ

1

& 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. 
+0

Я добавил код в свой OP. Я не вижу объявления для THROW_PUBLIC. Может ли он быть в файле .I? – Arcadian

+0

@ magic-c0d3r да, он может! – Jensd

0

{& THROW_PUBLIC}. определяется в Epicor include file 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) имеет несколько перегруженных записывать дополнительную информацию, которую другие части структура может отображать/регистрировать.

Смежные вопросы