【问题标题】:Try Catch block in Siebel在 Siebel 中尝试 Catch 块
【发布时间】:2010-12-25 04:29:17
【问题描述】:

我有一个将一组记录发送到文件中的脚本。我正在使用 Try - Catch 块来处理异常。在 catch 块中,我有一个代码,其中包含指向下一条记录的指针。但这不是执行。基本上我想跳过坏记录 n 移动到下一个记录。

while(currentrecord)
{
try
{
writerecord event
}
catch
{
currentrecord = next record
}
}

【问题讨论】:

  • 请用哪种编程语言?我们不是心灵感应者。
  • 一些示例代码会有所帮助。以及知道您说的是哪种语言。
  • 是的,我支持示例代码的请求。您的描述非常模糊。
  • Siebel 使用符合 ECMAScript 的 eScript 以及一些自定义对象。

标签: try-catch try-catch-finally siebel


【解决方案1】:

在大多数语言中(除非您使用非常奇怪的东西),如果“writerecord event”没有引发异常,则不会调用 catch 块。

你不是说:

while(currentrecord) { 
   try { writerecord event } 
   catch { log error } 
   finally { currentrecord = next record}
}

【讨论】:

    【解决方案2】:

    您是否尝试遍历查询返回的某些记录?做这样的事情:

    var yourBusObject = TheApplication().GetBusObject("Your Business Object Name");
    var yourBusComp = yourBusObject.GetBusComp("Your Business Component Name");
    
    // activate fields that you need to access or update here
    yourBusComp.ClearToQuery();
    // set search specs here
    yourBusComp.ExecuteQuery(ForwardOnly);
    
    if (yourBusComp.FirstRecord()) {
        do {
            try {
                // update the fields here
                yourBusComp.WriteRecord();
            } catch (e) {
                // undo any changes so we can go to the next record
                // If you don't do this I believe NextRecord() will implicitly save and trigger the exception again.
                yourBusComp.UndoRecord();
    
                // maybe log the error here, or just ignore it
            }
        } while (yourBusComp.NextRecord());
    }
    

    【讨论】:

      【解决方案3】:

      您可以使用 try-finally 结构,这样无论代码是否抛出异常,都会始终执行 finally 块中的任何内容。它通常用于清理资源,例如关闭文件或连接。如果没有 catch 子句,try 块中任何抛出的异常都将中止执行,跳转到 finally 块并运行该代码。

      【讨论】:

      • 如果他正在迭代 try-catch 块中的记录,这对他没有帮助。
      【解决方案4】:

      同意“终于”可能是这里最好的选择 - 但我们是否知道实际的例外情况是什么? - 你能在你的catch循环中输出它吗,这样:

      A)您可以证明正在抛出异常(而不是说返回“null”或其他东西)

      B)确保您得到的异常不会阻止“nextrecord”正常工作......[不确定“finally”在这种情况下会实现什么 - 大概异常必须冒泡到调用代码?

      【讨论】:

        【解决方案5】:

        因此,如果您未能提交该记录,您将尝试移至下一条记录。罗伯特穆勒是对的。解释...

        如果 WriteRecord 失败,则业务组件仍将定位在脏记录上。尝试移动到下一条记录将使 buscomp 尝试再次写入它——因为有一个称为“隐式保存”的功能。

        解决方案:您必须撤消记录 (UndoRecord) 以放弃失败的字段更改,然后再进行下一个。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2023-03-18
          • 2023-03-15
          • 1970-01-01
          • 2015-10-07
          • 2021-11-26
          • 2013-01-01
          • 2022-06-10
          相关资源
          最近更新 更多