0

对于我拥有的功能,我遇到了一些奇怪的行为,我无法解释发生了什么。我已经把它展示给了一位也对此感到困惑的同事。

在我的问题中包含的代码中。

  • 在调试行“Value=”之后,我的 for 循环被正确破坏并且调试行“Completed Value=”执行,然后是我的函数“updateBookingRecordWithConfirmationResponse”,然后是调试行“After updatefunctionCalled”。到目前为止,这一切都是正确的。接下来发生的事情很奇怪。
  • 调试语句 "Completed Value=" 再次执行,函数 "updateBookingRecordWithConfirmationResponse" 再次执行,然后调试行 "After updatefunctionCalled" 再次执行。这不应该发生第二次。我的函数“walkThroughReservationNode”没有被再次调用,但调试日志和调用 updateBookingRecordWithConfirmationResponse 可以。

如果有人可以从此处详述的代码中看到我的代码中的错误在哪里,或者可能导致 for 循环之后的进程再次执行的原因,将不胜感激。

提前致谢。

 private void walkThroughReservationNode(DOM.XmlNode envelope) {
     System.debug('in walkThroughReservationNode');
     ReservationConfirmationWrapper reservationConfirmationWrapper =
                                        new reservationConfirmationWrapper();
     for (DOM.XMLNode childNode : envelope.getChildElements()) {
         system.debug('in for loop');
         if (childNode.getName() == 'UniqueID') {
             System.debug('uniqueIDNodeVal=' + childNode.getAttribute('ID', ''));
             reservationConfirmationWrapper.bookingId = childNode.getAttribute('ID', '');
         } else if (childNode.getName() == 'ReservationID') {
             System.debug('Value=' + childNode.getAttribute('ID_Value', ''));
             reservationConfirmationWrapper.confirmationNumber = childNode.getAttribute('ID_Value', '');
             break;
         } else if (childNode.getName() == 'Warning') {
             System.debug('Warning Exists ' + childNode.getText());
             reservationConfirmationWrapper.warningMessage = childNode.getText();
             break;
         } else {
             system.debug('before new walkthrough');
             walkThroughReservationNode(childNode);
         }
     }
     System.debug('Completed Value=' + reservationConfirmationWrapper.confirmationNumber);
     updateBookingRecordWithConfirmationResponse(reservationConfirmationWrapper);
     System.debug('After updatefunctionCalled');
 }
4

2 回答 2

0

您能否发布调试日志消息堆栈?

我的意思是这样的:

dbgMsg1
dbgMsg2
dbgMsg3
....
dbgMsgN

按照它的执行顺序,因为从您的描述来看,它不是完全可以理解的(System.debug(LoggingLevel.INFO, 'dbgMsg')用于过滤所需的 dbg 消息)

从我的角度来看,代码似乎是正确的,但是:

  • 什么是调用上下文walkThroughReservationNode?是 VF/触发器/Web 服务/等吗?
  • updateBookingRecordWithConfirmationResponse什么?任何可能walkThroughReservationNode再次调用的 DML?
  • System.debug('in walkThroughReservationNode');出现了多少次?
于 2013-07-25T04:51:39.810 回答
0

嗨,帕维尔,感谢您的帮助。我发现我的错误是由于线条

} else { system.debug('在新演练之前'); walkThroughReservationNode(childNode); }

这会导致完整的演练再次发生,从而导致 updateBookingRecordWithConfirmationResponse(reservationConfirmationWrapper); 每次都要调用线路,这不是我应该做的。

谢谢你的帮助。

于 2013-07-29T09:26:22.683 回答