getEntityFieldsData method
Retrieves data from any Dynamics 365 entity as a list.
Supports optional field selection and filtering:
entity - the name of the target entity.
fields - optional list of fields to select from the entity.
keyField & keyValue - optional filter to return only matching records.
Returns a list of records (dynamic objects) or an empty list if the request fails.
Implementation
Future<List<dynamic>> getEntityFieldsData({
required String entity,
List<String>? fields,
String? keyField,
String? keyValue,
}) async {
final token = await getAccessToken();
if (token == null) return [];
// Build select query if fields are provided
String selectQuery = '';
if (fields != null && fields.isNotEmpty) {
selectQuery = "\$select=${fields.join(',')}";
}
// Build filter query if keyField and keyValue are provided
String filterQuery = '';
if (keyField != null && keyValue != null) {
filterQuery = "\$filter=$keyField eq '$keyValue'";
}
// Combine select + filter
String query = '';
if (selectQuery.isNotEmpty && filterQuery.isNotEmpty) {
query = "$selectQuery&$filterQuery";
} else if (selectQuery.isNotEmpty) {
query = selectQuery;
} else if (filterQuery.isNotEmpty) {
query = filterQuery;
}
final String url = query.isNotEmpty
? "$resource/data/$entity?$query"
: "$resource/data/$entity";
final response = await http.get(
Uri.parse(url),
headers: {
"Authorization": "Bearer $token",
"Content-Type": "application/json",
"Accept": "application/json",
},
);
if (response.statusCode == 200) {
return jsonDecode(response.body)["value"] ?? [];
} else {
print(
"❌ Failed to get $entity: ${response.statusCode} - ${response.body}");
return [];
}
}