Axapta try-catch块中的句柄异常

Axapta try-catch块中的句柄异常,axapta,dynamics-ax-2012,x++,dynamics-ax-2012-r2,dynamics-ax-2012-r3,Axapta,Dynamics Ax 2012,X++,Dynamics Ax 2012 R2,Dynamics Ax 2012 R3,我有一个切换案例场景,在这个场景中,我事先知道用户可能无法使用正确的类别设置规则。只要我能弹出一个对话框,说明如何运行程序,这对我来说完全没问题。然而,我遗漏了一些东西,这是我的问题 当我按照上面的方法测试一个场景时,光标穿过默认情况,并弹出错误。我怎样才能让它进入我的接球区 try { switch (userInput) { case 1: case 2: case 3: if (condition)

我有一个切换案例场景,在这个场景中,我事先知道用户可能无法使用正确的类别设置规则。只要我能弹出一个对话框,说明如何运行程序,这对我来说完全没问题。然而,我遗漏了一些东西,这是我的问题

当我按照上面的方法测试一个场景时,光标穿过默认情况,并弹出错误。我怎样才能让它进入我的接球区

try  
{
    switch (userInput)
    {
        case 1:
        case 2:
        case 3:
            if (condition)
            {
               some code here
            }
            else
            {
                throw error();
            }
            break;
        case 4:
            postingType = smth;
            break;
        default:
            throw Global::error("here blows the error and does not move on to the catch");
    }
}
catch(exception::Error)
{
    info("test");
}
非常感谢你的帮助

提前谢谢你,祝你晚上愉快


H.

我不知道axapta,但从逻辑上看,您可以在不抛出错误的情况下实现此行为(这可能是一个更好的主意,因为这实际上是一个验证错误,而不是应用程序错误)

那么:

  switch (userInput)
  {
    case 1:
    case 2:
    case 3:
        if (condition)

        {
           some code here
        }
        else
        {
            throw error();
        }
        break;
    case 4:
        postingType = smth;
        break;
    default:
        info("test");
        //handle invalid user input here.
        break;
  }

原因是数据库事务中通常不会捕获异常。我在中详细解释了它,其中它被标记为已验证的答案。

不确定axapta,但正常的C#将是
抛出新异常(“消息”)然后>代码> catch(异常e)代码。代码不是C++,甚至在托管C++中它也不会编译。提供一个真实的工作示例。您的
else
将永远不会启动。请提供一个有意义的例子。我们无法猜测您的环境是什么——您必须告诉我们。我的问题更像是-理论上如何处理默认情况(在情况4之后)?-我唯一关心的是,当遇到错误时,它会停止,而不是转到catch块,上面的所有内容都正常。2:将异常写入InfologYes的错误方法,在switch案例中有userInput,正如前面提到的,代码进入默认案例并运行。谢谢谢谢,在我找到更好的解决方案之前,这就是我将使用的解决方法。享受吧!当然,如果这解决了您的问题,请标记为答案。