Salesforce For循环:在“For”之后出现奇怪的行为;中断&引用;发生

Salesforce For循环:在“For”之后出现奇怪的行为;中断&引用;发生,salesforce,apex-code,xmlnode,force.com,Salesforce,Apex Code,Xmlnode,Force.com,我在一个函数中遇到了一些奇怪的行为,我无法解释发生了什么。我把它展示给一位同事,他也被它弄糊涂了 在我的代码中,包括在我的问题中 调试行“Value=”my for循环正确断开后,调试行 “Completed Value=“executes,后跟我的函数“updateBookingRecordWithConfirmationResponse”,后跟调试行“After updatefunctionCalled”。到目前为止,这一切都是正确的。接下来发生的事情很奇怪 调试语句“Completed

我在一个函数中遇到了一些奇怪的行为,我无法解释发生了什么。我把它展示给一位同事,他也被它弄糊涂了

在我的代码中,包括在我的问题中

  • 调试行“Value=”my for循环正确断开后,调试行 “Completed Value=“executes,后跟我的函数“updateBookingRecordWithConfirmationResponse”,后跟调试行“After updatefunctionCalled”。到目前为止,这一切都是正确的。接下来发生的事情很奇怪
  • 调试语句“Completed Value=”与函数“updateBookingRecordWithConfirmationResponse”一样再次执行,然后调试行“After updatefunctionCalled”再次执行。这不应该再次发生。不会再次调用我的函数“walkThroughReservationNode”,但调试日志和对UpdateBookRecordWithConfirmationResponse的调用不会再次调用
从这里详述的代码中,如果有人能看到我的代码中的错误在哪里,或者是什么原因导致for循环后的进程再次执行,我们将不胜感激

提前谢谢

private void演练ServationNode(DOM.XmlNode信封){
System.debug('在演练中的ServationNode');
ReservationConfirmationWrapper ReservationConfirmationWrapper=
新建reservationConfirmationWrapper();
对于(DOM.XMLNode childNode:envelope.getChildElements()){
system.debug('in-for-loop');
if(childNode.getName()=='UniqueID'){
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\u Value','');
打破
}else if(childNode.getName()=='Warning'){
debug('Warning Exists'+childNode.getText());
reservationConfirmationWrapper.warningMessage=childNode.getText();
打破
}否则{
system.debug(“新演练之前”);
演练ServationNode(子节点);
}
}
System.debug('Completed Value='+reservationConfirmationWrapper.confirmationNumber);
UpdateBookRecordWithConfirmationResponse(reservationConfirmationWrapper);
调试('After updatefunctionCalled');
}

您可以发布调试日志消息的堆栈吗

我的意思是:

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

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

  • 调用的上下文是什么?是VF/trigger/web服务等吗
  • updateBookingRecordWithConfirmationResponse
    做什么?任何可能需要再次调用
    演练ServationNode
    的DML
  • 多少次
    System.debug('在演练中的ServationNode')出现了吗

    • 你好,帕维尔谢谢你的帮助。我发现我的错误是由线路引起的

      }else{system.debug('new演练之前');演练servationNode(childNode);}

      这将导致再次执行完整演练,从而导致UpdateBookRecordWithConfirmationResponse(reservationConfirmationWrapper);每次都要打电话,这不是我应该做的


      谢谢你的帮助。

      嗨,帕维尔,谢谢你的帮助。我发现我的错误是由于行}else{system.debug('before new walkthrough');walkThroughReservationNode(childNode);}这会导致再次执行完整的演练,从而导致updateBookingRecordWithConfirmationResponse(reservationConfirmationWrapper);每次都要调用的行。谢谢你的帮助。