У меня есть интересная проблема, которую, к сожалению, хотя я думал, что изначально это было легко сделать, мне, похоже, не удалось решить. У меня есть метод GET, содержащий несколько значений, которые используются для вызова моей базы данных для заполнения таблицы.
testForm(test=%, test=%, groupType=1...)
Как вы можете видеть, groupType является целым числом, однако я хотел бы изменить его на мой CSV на имя, связанное с идентификатором. Я знаю, что немедленная логика c будет передавать целое число в ответ, но, к сожалению, я не могу этого сделать.
SpringDataRestService.query(
{
"collection": "userGroupTypes"
},
function (response) { // Success Function
var userGroupType = response;
for (var i = 0, len = userGroupType.length; i < len; i++) {
var newUserGroupType = {
id: userGroupType[i].groupTypeId,
name: userGroupType[i].groupTypeName
};
$scope.userGroupTypeList.push(newUserGroupType);
}
},
function (response) { // Failure Function
}
);
$scope.targetEntity.groupType = $scope.userGroupTypeList[0].id;
Как вы можете видеть, этот метод используется из выпадающего списка на GUI и передает идентификатор. Следующий фрагмент кода - мой метод JSON to CSV, который используется, когда метод GET заполняет таблицу.
function json2csv(data) {
var elementDelimiter = ',';
var rowDelimiter = '\n';
var csv_output = '';
// Getting all keys from first data entry
var keys = Object.keys(data[0]);
var filteredKeysString = '';
var filteredKeys = [];
// Counters
var numRows = 0;
var keyCtr = 0;
var nullFound = 0;
var ctr = 0;
// Get number of rows
angular.forEach(data, function (item) {
// Get number of rows of data
numRows++;
});
// Filtering out null keys for all rows
angular.forEach(keys, function (key) {
nullFound = 0;
angular.forEach(data, function (item) {
if (item[key] == null) {
nullFound++;
}
});
// if a null found in all columns, do not add it to filtered list
if (nullFound !== numRows) {
if (keyCtr > 0) {
filteredKeysString += elementDelimiter;
}
filteredKeys.push(key);
filteredKeysString += key;
keyCtr++;
}
});
// Add filtered keys as header of columns
csv_output += filteredKeysString;
csv_output += rowDelimiter;
// Loop over each row and get value detailed by key
angular.forEach(data, function (item) {
$log.info(JSON.stringify(item.grouptype.name))
ctr = 0;
angular.forEach(filteredKeys, function (key) {
// Don't allow null/empty values -> Will cause unnecessary commas
if (item[key] != null && item[key] !== ' ') {
if (ctr > 0) {
csv_output += elementDelimiter;
}
csv_output += item[key];
ctr++;
}
});
csv_output += rowDelimiter;
});
$scope.tableNotGenerated = false;
return csv_output;
}
$scope.downloadCSV = function (filename) {
if ($scope.csv_response != null && filename != null) {
var downloadElement = document.createElement('a');
downloadElement.href = 'data:text/csv;charset=utf-8,' + encodeURI(csv_file);
downloadElement.target = '_blank';
downloadElement.download = filename + "_" + today.toString() + '.csv';
downloadElement.click();
} else {
$log.error("Error")
}
};
Поэтому я надеюсь, что кто-то может пролить свет на эту проблему, поскольку я изо всех сил пытался увидеть, как именно я могу достичь этого. Я подумал позвонить в колонку и затем заменить идентификатор на имена, но даже не уверен, как это сделать. Любая помощь приветствуется.