Netsuite: как добавить пользовательскую ссылку на панель навигации или в заголовок

Есть ли способ настроить панель навигации или заголовок, чтобы иметь пользовательскую ссылку?

Вариант использования заключается в том, что у меня есть сборщик задач JIRA, управляемый javascript. Я хотел бы, чтобы пользователь оставил отзыв о странице, с которой у него возникли проблемы. Однако любое решение, которое я могу предложить, уводит пользователя с текущей страницы.

Пример того, что у меня есть, что уводит пользователя:

  1. В настоящее время у меня есть Suitelet, который находится в одном из меню. Этот Suitelet вызывает javascript, но даже тогда пользователя забирают.
  2. У меня есть рабочий процесс для записи case, который вызывает некоторый Javascript Javascript в одном из условий действия на основе пользовательского интерфейса. Аналогично № 1, но в истории болезни.

Я думаю, что мне нужно будет создать и опубликовать расширение Chrome для домена моей компании, чтобы получить распространенный бит javascript для запуска на всех страницах ... похоже на кувалду.


person gillyspy    schedule 16.12.2018    source источник


Ответы (1)


Я надеюсь, что кто-то может доказать, что я ошибаюсь, но, насколько мне известно, нет никакого способа нативно внедрить Javascript или что-то еще в заголовок/навигационную панель NetSuite - они не предлагают настройку заголовка/навигационной панели.

Я прибег к созданию сценария пользователя, который загружаю через расширение Violent Monkey для Chrome или Firefox.

Пример шаблона пользовательского скрипта

// ==UserScript==
// @name        NetSuite Mods (Example)
// @namespace   Violentmonkey Scripts
// @match       *.netsuite.com/*
// @include     *.netsuite.com/*
// @grant       GM_addStyle
// @version     1.0
// @author      Kane Shaw - https://stackoverflow.com/users/4561907/kane-shaw
// @description 6/11/2020, 6:25:20 PM
// ==/UserScript==


// Get access to some commonly used NLAPI functions without having to use "unsafeWindow.nlapi..." in our code
// You can add more of these if you need access to more of the functions contained on the NetSuite page
nlapiSetFieldText = unsafeWindow.nlapiSetFieldText;
nlapiSetFieldValue = unsafeWindow.nlapiSetFieldValue;
nlapiGetFieldText = unsafeWindow.nlapiGetFieldText;
nlapiGetFieldValue = unsafeWindow.nlapiGetFieldValue;
nlapiSearchRecord = unsafeWindow.nlapiSearchRecord;
nlobjSearchFilter = unsafeWindow.nlobjSearchFilter;
nlapiLookupField = unsafeWindow.nlapiLookupField;
nlapiLoadRecord = unsafeWindow.nlapiLoadRecord;
nlapiSubmitRecord = unsafeWindow.nlapiSubmitRecord;

GM_pageTransformations = {};

/**
 * The entrypoint for our userscript
 */
function GM_main(jQuery) {

    // We want to execute these on every NetSuite page
    GM_pageTransformations.header();
    GM_pageTransformations.browsertitle();

    // Here we build a function name from the path (page being accessed on the NetSuite domain)
    var path = location.pathname;
    if(path.indexOf('.')>-1) path = path.substr(0,path.indexOf('.'));
    path = toCamelCase(path,'/');

    // Now we check if a page "GM_pageTransformations" function exists with a matching name
    if(GM_pageTransformations[path]) {
        console.log('Executing GM_pageTransformations for '+path);
        GM_pageTransformations[path]();
    } else {
        console.log('No GM_pageTransformations for '+path);
    }
}

/**
 * Changes the header on all pages
 */
GM_pageTransformations['header'] = function() {
    // For example, lets make the header background red
    GM_addStyle('#ns_header, #ns_header * { background: red !important; }');
}

/**
 * Provides useful browser/tab titles for each NetSuite page
 */
GM_pageTransformations['browsertitle'] = function() {
    var title = jQuery('.uir-page-title-secondline').text().trim();
    var title2 = jQuery('.uir-page-title-firstline').text().trim();
    var title3 = jQuery('.ns-dashboard-detail-name').text().trim();
    if(title != '') {
        document.title = title+(title2 ? ': '+title2 : '')+(title3 ? ': '+title3 : '');
    } else if(title2 != '') {
        document.title = title2+(title3 ? ': '+title3 : '');
    } else if(title3 != '') {
        document.title = title3;
    }
}

/**
 * Changes app center card pages (dashboard pages)
 */
GM_pageTransformations['appCenterCard'] = function() {
    // For example, lets make add a new heading text on all Dashboard pages
    jQuery('#ns-dashboard-page').prepend('<h1>My New Dashboard Title</h1>');
}


/**
 * Convert a given string into camelCase, or CamelCase
 * @param {String} string - The input stirng
 * @param {String} delimter - The delimiter that seperates the words in the input string (default " ")
 * @param {Boolean} capitalizeFirstWord - Wheater or not to capitalize the first word (default false)
 */
function toCamelCase(string, delimiter, capitalizeFirstWord) {
    if(!delimiter) delimiter = ' ';
    var pieces = string.split(delimiter);
    string = '';
    for (var i=0; i<pieces.length; i++) {
        if(pieces[i].length == 0) continue;
        string += pieces[i].charAt(0).toUpperCase() + pieces[i].slice(1);
    }
    if(!capitalizeFirstWord) string= string.charAt(0).toLowerCase()+string.slice(1);
    return string;
}


// ===============
// CREDIT FOR JQUERY INCLUSION CODE: Brock Adams @ https://stackoverflow.com/a/12751531/4561907
/**
 * Check if we already have a local copy of jQuery, or if we need to fetch it from a 3rd-party server
 */
if (typeof GM_info !== "undefined") {
    console.log("Running with local copy of jQuery!");
    GM_main(jQuery);
}
else {
    console.log ("fetching jQuery from some 3rd-party server.");
    add_jQuery(GM_main, "1.9.0");
}
/**
 * Add the jQuery into our page for our userscript to use
 */
function add_jQuery(callbackFn, jqVersion) {
    var jqVersion   = jqVersion || "1.9.0";
    var D           = document;
    var targ        = D.getElementsByTagName ('head')[0] || D.body || D.documentElement;
    var scriptNode  = D.createElement ('script');
    scriptNode.src  = 'https://ajax.googleapis.com/ajax/libs/jquery/'
                    + jqVersion
                    + '/jquery.min.js'
                    ;
    scriptNode.addEventListener ("load", function () {
        var scriptNode          = D.createElement ("script");
        scriptNode.textContent  =
            'var gm_jQuery  = jQuery.noConflict (true);\n'
            + '(' + callbackFn.toString () + ')(gm_jQuery);'
        ;
        targ.appendChild (scriptNode);
    }, false);
    targ.appendChild (scriptNode);
}

Вы можете скопировать и вставить этот код как есть в новый пользовательский скрипт, и он сделает следующее:

  • Сделать вкладки/окна браузера полезными заголовками (показывает номера заказов, имена клиентов, имена поставщиков и т. д., а не только "Заказ на продажу").
  • Измените фон заголовка на красный (в качестве примера)
  • Добавьте новый заголовок вверху всех страниц «Панель инструментов» с надписью «Новый заголовок моей панели инструментов» (в качестве примера).
person Kane Shaw    schedule 11.06.2020