Проблема подкачки источника данных - PullRequest
0 голосов
/ 15 мая 2019

Простая настройка: отдел: сотрудник, 1: М и форма поиска, которая фильтрует по Фамилия =, Фамилия =, электронная почта содержит, возраст> =, дата присоединения <= и соответствующий отдел =. </p>

Кнопка отправки откроет страницу результатов с источником данных, установленным на соответствующий метод поиска. У меня есть прямая фильтрация, где мы привязываемся к @ datasource, query.filters.FirstName_equals и т. Д. У меня есть источник данных, основанный на решении для построения запросов, и третье решение на основе сценария запроса. При отправке открывается соответствующая страница результатов поиска, и для источника данных страницы результатов устанавливается соответствующий источник данных: фильтр, построитель запросов или сценарий запроса.

Решение, использующее скрипт запроса и страницу результатов на основе этого источника данных, выглядит следующим образом: -

скрипт запроса

var params = query.parameters;

return getEmployeeRecords_( 
  params.param_FirstName, 
  params.param_LastName, 
  params.param_Email, 
  params.param_StartDate, 
  params.param_Age, 
  params.param_Department
);

и

function getEmployeeRecords_( firstName, lastName, email, startDate, age, 
    department) {

 var ds = app.models.Employee.newQuery();

 if ( firstName )
    ds.filters.FirstName._equals = firstName;

  if ( lastName ) 
    ds.filters.LastName._equals = lastName;

  if ( email ) 
    ds.filters.Email._contains = email;

  if ( startDate )
    ds.filters.StartDate._greaterThanOrEquals = startDate;

  if ( age )
    ds.filters.Age._lessThanOrEquals = parseInt(age, 10);

  if ( department )
    ds.filters.Department.Department._equals = department;

  var records = ds.run();

  var recs = records.length;

  // update calculated model with record count
  var calculatedModelRecords = [];
  var calculatedModelRecord = app.models.Employee_RecordCount.newRecord();
  calculatedModelRecord.RecordCount = recs;
  calculatedModelRecords.push(calculatedModelRecord);

  return records;
}

На странице результатов для скрипта запроса страница источника данных просто не работает. Запрос, который корректно возвращает 8 записей, для которых размер страницы запроса установлен на 5, позволяет мне заставить пейджер перейти на страницу 1000, если я хочу, но источник данных всегда остается на первой странице записей. Если для размера страницы установлено, например, 100, правильный набор результатов четко отображается. Источники данных с прямым связыванием и построителем запросов работают должным образом.

Причиной выполнения этих различных поисков является проверка и оценка каждой опции, а также возможность возврата количества записей, что я могу сделать только с помощью скрипта запроса.

Кто-нибудь имеет какие-либо идеи относительно причины этого неправильного поведения App Maker?

Также, когда я запрашиваю вычисленную модель Employee_RecordCount для получения количества записей, используя метку пользовательского интерфейса с текстом «Количество записей:» + @ datasources.Employee_RecordCount.item.RecordCount, это показывает нулевое значение.

Каков наилучший способ получения количества записей с использованием рассчитанной модели Employee_RecordCount?

1 Ответ

0 голосов
/ 15 мая 2019

Я не уверен, что ваш фактический код пропускает {} в каждом операторе if или вы просто не включили их в свой вопрос. Тем не менее, посмотрите мои предлагаемые изменения в вашем коде ниже:

function getEmployeeRecords_( firstName, lastName, email, startDate, age, department) {

 var ds = app.models.Employee.newQuery();

 if ( firstName !== null ) {
    ds.filters.FirstName._equals = firstName;
 }
 if ( lastName !== null ) {
    ds.filters.LastName._equals = lastName;
 }
 if ( email !== null) {
    ds.filters.Email._contains = email;
 }
 if ( startDate !== null) {
    ds.filters.StartDate._greaterThanOrEquals = startDate;
 }
 if ( age !== null) {
    ds.filters.Age._lessThanOrEquals = parseInt(age, 10);
 }
 if ( department !== null) {
    ds.filters.Department.Department._equals = department;
 }
 var records = ds.run();

 var recs = records.length;

 // update calculated model with record count
 var calculatedModelRecord = app.models.Employee_RecordCount.newRecord();
 calculatedModelRecord.RecordCount = recs;

 return [calculatedModelRecord];
}

Что касается проблемы подкачки, то по какой-то причине у AM всегда была такая проблема с рассчитанными моделями. Может быть сообщение об ошибке, поданное в их систему отслеживания ошибок AM.

...