docs: public void updateMessageProcessInfo(String elementIn, String elementOut, String elementFault, boolean bIsSafe, String address)
      {
          MessageInfo recMessageInfo = this.getMessageInfo(elementIn);   // Note: Message IN for them is Message Out for me
          if (recMessageInfo != null)
          {
              MessageProcessInfo recMessageProcessInfo = (MessageProcessInfo)this.getRecord(MessageProcessInfo.MESSAGE_PROCESS_INFO_FILE);
              FileListener listener = new SubFileFilter(recMessageInfo);
              recMessageProcessInfo.addListener(listener);
              recMessageProcessInfo.setKeyArea(MessageProcessInfo.MESSAGE_INFO_ID_KEY);
              recMessageProcessInfo.close();
              try {
                  while (recMessageProcessInfo.hasNext())
                  {
                      recMessageProcessInfo.next();
                      if (!MessageType.MESSAGE_OUT.equalsIgnoreCase(((ReferenceField)recMessageProcessInfo.getField(MessageProcessInfo.MESSAGE_TYPE_ID)).getReference().getField(MessageType.CODE).toString()))
                          continue;
                      boolean safe = CreateWSDL.SAFE_DEFAULT;
                      String safeValue = ((PropertiesField)recMessageProcessInfo.getField(MessageProcessInfo.PROPERTIES)).getProperty(MessageProcessInfo.SAFE);
                      if (safeValue != null)
                          safe = Boolean.parseBoolean(safeValue);
                      if (safeValue != null)
                          if (safe != bIsSafe)
                              continue;
                      
                      Record recMessageProcessInfo2 = ((ReferenceField)recMessageProcessInfo.getField(MessageProcessInfo.REPLY_MESSAGE_PROCESS_INFO_ID)).getReference();
                      if (recMessageProcessInfo2 != null)
                          if ((recMessageProcessInfo2.getEditMode() == DBConstants.EDIT_IN_PROGRESS) || (recMessageProcessInfo2.getEditMode() == DBConstants.EDIT_CURRENT))
                          {
                              Record recMessageInfo2 = ((ReferenceField)recMessageProcessInfo2.getField(MessageProcessInfo.MESSAGE_INFO_ID)).getReference();
                              if (recMessageInfo2 != null)
                              {
                                  if (elementOut != null)
                                      if (elementOut.equalsIgnoreCase(recMessageInfo2.getField(MessageInfo.CODE).getString()))
                                      {
                                          Map<String,Object> map = null;
                                          if (address != null)
                                          {
                                              map = new Hashtable<String,Object>();
                                              String site = this.getSiteFromAddress(address, null);
                                              map.put(TrxMessageHeader.DESTINATION_PARAM, site);
                                              map.put(TrxMessageHeader.DESTINATION_MESSAGE_PARAM, this.getPathFromAddress(address, site));
                                          }
                                          this.updateMessageDetail(recMessageProcessInfo, map);   // Found
                                      }
                              }
                          }
                  }
              } catch (DBException e) {
                  e.printStackTrace();
              } finally {
                  recMessageProcessInfo.removeListener(listener, true);
              }
          }
      }