Это несколько сбивает с толку, учитывая огромное количество библиотек и методов, которые можно использовать для решения этой проблемы. Я предполагаю, что я ищу доказанный опыт, чтобы ускорить время разработки.
В любом случае, сценарий таков, что у нас есть данные о завершении обучения персонала, размещенные на веб-сервере в виде файла XLSX. Файл содержит 1 077 200 строк и представляет собой дамп обучающих курсов, которые проходят все сотрудники компании по всему миру. Файл XLSX содержит строку заголовка и столбцы: EMPLOYEE (числовой [10]), COURSE_ID (буквенно-цифровой [20]), TITLE (буквенно-цифровой [100]), DATE (дата [дд-ммм-гг]). Мы не контролируем этот файл, не можем изменить его или формат и можем только читать его. Не существует уникальных полей, и у каждого сотрудника может быть 0..n рядов связанных данных обучения. Нам нужно прочитать этот XLSX в справочную таблицу. Таким образом, мы считаем, что нам нужно прочитать этот файл XLSX в двумерную таблицу поиска, идентификатор EMPLOYEE по идентификатору COURSE, то есть отношение 1..n.
Далее у нас есть список учебных курсов, также размещенных на веб-сервере, в виде файла XLSX; это просто два столбца, столбец 1 - это идентификатор курса [такой же, как в окончании обучения], а столбец 2 - это заголовок курса, который является локально переименованным заголовком [отличается от того, что указан в окончании обучения]. Таким образом, мы не используем название курса, как оно указано в файле «Завершение обучения». Опять же, мы считаем, что нам нужно прочитать этот файл XLSX в двумерную таблицу поиска, COURSE_ID от COURSE_TITLE, но это отношение 1..1.
Итак, у нас есть 2 таблицы поиска:
Table 1: Employee ID is unique key
EMPLOYEE_ID {COURSE_ID, COMPLETION_DATE}, {COURSE_ID, COMPLETION_DATE} , ...
EMPLOYEE_ID {COURSE_ID, COMPLETION_DATE}, {COURSE_ID, COMPLETION_DATE} , ...
EMPLOYEE_ID {COURSE_ID, COMPLETION_DATE}, {COURSE_ID, COMPLETION_DATE} , ...
Table 2: Course ID is unique key
COURSE_ID {COURSE TITLE}, {COURSE TITLE}, , ...
COURSE_ID {COURSE TITLE}, {COURSE TITLE}, , ...
COURSE_ID {COURSE TITLE}, {COURSE TITLE}, , ...
В SharePoint мы хотим разместить обучающую матрицу в веб-части контента html [html / css / javascript]. Матрица отобразит для зарегистрированного пользователя и всех прямых отчетов пройденные учебные курсы. Пользователи идентифицируются по номеру их РАБОТНИКА, который совпадает с номером, указанным в размещенном файле xlsx Завершение обучения персонала. Мы хотим отобразить эту матрицу в виде таблицы с именем сотрудника [которое мы получаем из SharePoint] внизу слева и поперек каждого возможного имени учебного курса [таблица поиска 2], а каждое пересечение (ячейка) содержит дату завершения [из поиска таблица 1] или пусто, если не заполнено: -
{Fire Handling} {Manual Handling} {Code of Conduct} ...
Anne 10/11/2018 10/01/2018
Fred 04/01/2018 10/01/2019 10/11/2018
Jo 11/12/2018 10/11/2018
...
В нем около 10 000 сотрудников, но самое большее, только около 20 будет отображаться в матрице, если у пользователя было 20 прямых отчетов, и, как минимум, 1 - пользователь вошел в SharePoint, если у него не было никаких прямых отчетов. И не забывайте, что список пройденных тренировок может составлять более 1 миллиона строк !!
Вот как мы читаем файлы XLSX [хотя на самом деле мы не знаем, какой путь идти после fileReader.readAsArrayBuffer(file);
function handleFile(e) {
var files = e.target.files,file;
if (!files || files.length == 0) return;
file = files[0];
var fileReader = new FileReader();
fileReader.onload = function (e) {
var filename = file.name;
// pre-process data
var binary = "";
var bytes = new Uint8Array(e.target.result);
var length = bytes.byteLength;
for (var i = 0; i < length; i++) {
binary += String.fromCharCode(bytes[i]);
}
// call 'xlsx' to read the file
var oFile = XLSX.read(binary, {type: 'binary', cellDates:true, cellStyles:true});
};
fileReader.readAsArrayBuffer(file);
};
Мы знаем, как заставить работать данные SharePoint.
У нас все хорошо с HTML и CSS для вывода матрицы.
Мы знаем, как читать файлы XLSX, используя одну из библиотек js, таких как xls / xlsx или js-xls
Чего мы не знаем, так это как смоделировать две таблицы поиска или, действительно, есть ли лучший способ. Мы не программисты на JavaScript, но учимся быстро. К сожалению, из-за многих проблем мы не можем использовать другие языки, кроме js, css и html. Поэтому решение должно опираться на эти три.
С чего мы начнем?
Спасибо. Надеюсь, этот тизер разогреет серое вещество :) 1023
Спасибо за участие.