# File lib/rfm_result.rb, line 62
    def initialize(server, fmresultset, layout = nil)
      @server = server
      @resultset = nil
      @layout = layout
      @fields = Rfm::Util::CaseInsensitiveHash.new
      @portals = Rfm::Util::CaseInsensitiveHash.new
      @date_format = nil
      @time_format = nil
      @timestamp_format = nil
      
      doc = REXML::Document.new(fmresultset)
      root = doc.root
      
      # check for errors
      error = root.elements['error'].attributes['code'].to_i
      if error != 0 && (error != 401 || @server.state[:raise_on_401])
        raise Rfm::Error::FileMakerError.getError(error) 
      end
      
      # ascertain date and time formats
      datasource = root.elements['datasource']
      @date_format = convertFormatString(datasource.attributes['date-format'])
      @time_format = convertFormatString(datasource.attributes['time-format'])
      @timestamp_format = convertFormatString(datasource.attributes['timestamp-format'])
      
      # process field metadata
      root.elements['metadata'].each_element('field-definition') { |field|
        name = field.attributes['name']
        @fields[name] = Field.new(self, field)
      }
      @fields.freeze
      
      # process relatedset metadata
      root.elements['metadata'].each_element('relatedset-definition') { |relatedset|
        table = relatedset.attributes['table']
        fields = {}
        relatedset.each_element('field-definition') { |field|
          name = field.attributes['name'].sub(Regexp.new(table + '::'), '')
          fields[name] = Field.new(self, field)
        }
        @portals[table] = fields
      }
      @portals.freeze
      
      # build rows
      root.elements['resultset'].each_element('record') { |record|
        self << Record.new(record, self, @fields, @layout)
      }
    end