'Attempts to load the data matrix, and returns a list of ids (or
``False`` if there was an error and no id could be generated) and a
list of messages.
The ids are those of the records created and saved (in database), in
the same order they were extracted from the file. They can be passed
directly to :meth:`~read`
:param fields: list of fields to import, at the same index as the corresponding data
:type fields: list(str)
:param data: row-major matrix of data to import
:type data: list(list(str))
:returns: {ids: list(int)|False, messages: [Message]}'

@api.model
def load(self, fields, data):

    mode = self._context.get('mode', 'init')
    current_module = self._context.get('module', '')
    noupdate = self._context.get('noupdate', False)
    self = self.with_context(_import_current_module=current_module)
    cr = self._cr
    cr.execute('SAVEPOINT    model_load')
    fields = map(fix_import_export_id_paths, fields)
    fg = self.fields_get()
    ids = []
    messages = []
    ModelData = self.env['ir.model.data']
    ModelData.clear_caches()
    extracted = self._extract_records(fields, data, log=messages.append)
    converted = self._convert_records(extracted, log=messages.append)
    for (id, xid, record, info) in converted:
        try:
            cr.execute('SAVEPOINT    model_load_save')
        except psycopg2.InternalError as e:
            if (not any(((message['type'] == 'error') for message in messages))):
                messages.append(dict(info, type='error', message=(u"Unknown    database    error:    '%s'" % e)))
            break
        try:
            ids.append(ModelData._update(self._name, current_module, record, mode=mode, xml_id=xid, noupdate=noupdate, res_id=id))
            cr.execute('RELEASE    SAVEPOINT    model_load_save')
        except psycopg2.Warning as e:
            messages.append(dict(info, type='warning', message=str(e)))
            cr.execute('ROLLBACK    TO    SAVEPOINT    model_load_save')
        except psycopg2.Error as e:
            messages.append(dict(info, type='error', **PGERROR_TO_OE[e.pgcode](self, fg, info, e)))
            cr.execute('ROLLBACK    TO    SAVEPOINT    model_load_save')
        except Exception as e:
            message = (_('Unknown    error    during    import:') + ('    %s:    %s' % (type(e), unicode(e))))
            moreinfo = _('Resolve    other    errors    first')
            messages.append(dict(info, type='error', message=message, moreinfo=moreinfo))
            cr.execute('ROLLBACK    TO    SAVEPOINT    model_load_save')
    if any(((message['type'] == 'error') for message in messages)):
        cr.execute('ROLLBACK    TO    SAVEPOINT    model_load')
        ids = False
    if (ids and self._context.get('defer_parent_store_computation')):
        self._parent_store_compute()
    return {'ids': ids, 'messages': messages}
