executeCall method
Executes rpc call
Implementation
Future<void> executeCall(OdooRpcCall call) async {
var executedCalls = <OdooRpcCall>[];
logger.d('call key ${call.cacheKey}');
final params = {
'model': call.modelName,
'method': call.method,
'args':
(call.args is List && call.args.isNotEmpty) ? call.args : [call.args],
'kwargs': call.kwargs,
};
/// Convert [params] to JSON and back to Map
/// using dedicated coverter that will replace
/// [OdooId] instance with real [id] if it is possible.
final rawParams = json.encode(params, toEncodable: (value) {
if (value is OdooId) {
// replace fake id with real one
return models[value.odooModel]!.newIdToId(value.odooId);
}
return value;
});
final res = await orpc.callKw(json.decode(rawParams));
if (call.method == 'create') {
// store mapping between real and fake id
await models[call.modelName]!.setNewIdMapping(
newId: call.recordId, realId: res is List ? res[0] : res);
}
logger.d(res.toString());
executedCalls.add(call);
}