キャッチされた例外についてより多くの情報を取得するためのメカニズムが必要です。 (特にトランザクションを中止するために私は自分自身を投げる例外がある)私は見てきたが、私が見つけることができる唯一のものは "情報ログを使う"であった。これは私にとっては良い考えのようには見えません。 1つは、最後のメッセージにアクセスして見つけることが面倒です。サイズには限界があり、ある時点で新しいメッセージは表示されません。例外理由/メッセージ。私はここに車輪を再発明していますか?
私の考えは次のとおりです。クラスNuExceptionを作成し、
すべてのメソッドを通じてそのインスタンスを渡します。
作業メソッドがあるクラスにインスタンスを格納します。私は例外をスローする必要があるときに私はGlobal::error()
に似たメソッドを呼び出しますが、これは識別子とメッセージを取ります。
キャッチブロックに達すると、
オブジェクトからアクセスできます。
CLRExceptionsの動作と同様に、ワークメソッドを含むクラスです。
class NuException
{
"public" str identifier;
"public" str message;
public Exception error(str _id, str _msg)
{
//set fields
return Exception::Error;
}
}
class Worker
{
"public" NuException exception;
void foo()
{
throw this.exception.error("Foo", "Record Foo already exists");
}
void bar()
{
this.foo();
}
}
void Job()
{
Worker w = new Worker();
try
{
w.bar(ex);
}
catch (Exception::Error)
{
info(w.exception().message());
}
}
これは機能しますが、より良い方法はありませんか?確かに誰かがこのAXの欠点を回避するための解決策を考え出す必要がありますか?
[タグ:dynamics-365-operations]、[AX 7の例外をキャッチ](http://dev.goshoom.net/en/2017/06/catching-exceptions-in-ax-7/)あなたのための興味深い読書かもしれません。 –
@ FH-Inwayありがとう。それは素晴らしい情報です。 AX7をお持ちの場合それは実際にはAX 2012で使用できるものを追加するものではありません... – Kempeth
無制限 'catch'は無駄です、避けてください。 –