HTML DataTable не работает должным образом в Form Suitelet - PullRequest
0 голосов
/ 04 августа 2020

Помогите, пожалуйста! Успешно смог отобразить DataTable в моей Form Suitelet и заполнил его данными из сохраненного поиска. Но по какой-то причине я столкнулся со следующими проблемами:

  1. разбивка на страницы не работает, и все данные отображаются на одной странице.
  2. А также, если я внесу изменения в какие-либо параметры DataTable ( например, Показать xx записи, отсортировать как c в порядке имя_столбца ) тело таблицы сразу становится «Нет данных в таблице» (и остается таким, пока страница не будет перезагружена).

Вот код Suitelet, который я использовал для DataTable:

//In Suitelet...
var form = serverWidget.createForm({
    title: 'The NetSuite Form'
});
form.clientScriptFileId = "1234";

var theInlineHTMLFld = form.addField({
     id: 'custpage_inline_html_fld',
     type: serverWidget.FieldType.INLINEHTML,
     label: 'Field for Data Table',
});

var dtCssCdn = '<link rel="stylesheet" type="text/css" href="https://cdn.datatables.net/1.10.20/css/jquery.dataTables.css">';
var dtJqueryCdn = '<script type="text/javascript" language="javascript" src="https://code.jquery.com/jquery-3.3.1.js"></script>';
var dtJsCdn = '<script type="text/javascript" charset="utf8" src="https://cdn.datatables.net/1.10.20/js/jquery.dataTables.js"></script>';
var dataTableHtml = '<table id="data_table_items" class="display" style="width: 100%"><thead><tr><th>INTERNAL ID</th><th>ITEM NUMBER</th></tr></thead><tbody id="data_table_items_body"></tbody></table>';
var executeDataTableHtml = '<script>jQuery(document).ready(function (){jQuery("#data_table_items").DataTable();});</script>';

theInlineHTMLFld.defaultValue = '<!DOCTYPE html><html lang="e"><html><head><meta charset="UTF-8">' + dtCssCdn + dtJqueryCdn + dtJsCdn + '</head><body>' + dataTableHtml + executeDataTableHtml;

Вот код клиентского скрипта, который я использовал для заполнения таблицы:

function pageInit(context){
     /*
          ran saved search on items and got the search results
     */
     for (var i = 0; i < searchResults.length; i++) {
          var internalId = searchResults[i].getValue('internalid');
          var itemNumber = searchResults[i].getValue('itemid');
          var rowHtmlContent = '<tr><td>'+ internalId +'</td><td>'+ itemNumber +'</td></tr>';

          document.querySelector('#data_table_items_body').insertAdjacentHTML('beforeend', rowHtmlContent);
     }
}

Примечание: Невозможно использовать полный HTML Suitelet , потому что в моем коде я добавляю поле выбора, которое является списком поставщиков (который огромен). Если каким-либо образом можно получить огромный список из NetSuite в HTML Suitelet без каких-либо проблем с производительностью, я мог бы рассмотреть возможность его использования.

Любая помощь будет принята с благодарностью. Спасибо.

1 Ответ

0 голосов
/ 10 августа 2020

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

Это устранило проблему:

//In Client script...
function pageInit(context){
     var DATA_TABLE = jQuery('#data_table_items').DataTable();
     /*
          ran saved search on items and got the search results
     */
     for (var i = 0; i < searchResults.length; i++) {
          var internalId = searchResults[i].getValue('internalid');
          var itemNumber = searchResults[i].getValue('itemid');
          
          DATA_TABLE.row.add([
                        '<span>' + internalId + '</span>',
                        '<span>' + itemNumber + '</span>'
          ]).draw(false);
     }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...