'Performs a ``search()`` followed by a ``read()``.
:param domain: Search domain, see ``args`` parameter in ``search()``. Defaults to an empty domain that will match all records.
:param fields: List of fields to read, see ``fields`` parameter in ``read()``. Defaults to all fields.
:param offset: Number of records to skip, see ``offset`` parameter in ``search()``. Defaults to 0.
:param limit: Maximum number of records to return, see ``limit`` parameter in ``search()``. Defaults to no limit.
:param order: Columns to sort result, see ``order`` parameter in ``search()``. Defaults to no sort.
:return: List of dictionaries containing the asked fields.
:rtype: List of dictionaries.'

@api.model
def search_read(self, domain=None, fields=None, offset=0, limit=None, order=None):

    records = self.search((domain or []), offset=offset, limit=limit, order=order)
    if (not records):
        return []
    if (fields and (fields == ['id'])):
        return [{'id': record.id} for record in records]
    if ('active_test' in self._context):
        context = dict(self._context)
        del context['active_test']
        records = records.with_context(context)
    result = records.read(fields)
    if (len(result) <= 1):
        return result
    index = {vals['id']: vals for vals in result}
    return [index[record.id] for record in records if (record.id in index)]
