Подключение плагина аналитической панели в веб-приложении

Плагин – это отдельно написанный блок, подключаемый к аналитической панели.

При работе с плагинами в настольном приложении используются модули написанные на Fore. Для работы в веб-приложении код плагина пишется на JavaScript.

Плагины регистрируются в общих параметрах репозитория и ссылаются на модуль Fore для работы в настольном приложении и на скрипт для работы в веб-приложении.

Для подключения плагина в веб-приложении:

  1. Создайте *.js файл плагина с учетом структуры js-скрипта.

  2. Добавьте плагин *.js в корневую папку веб-приложения, например, C:\Program Files (x86)\Foresight\Foresight Analytics Platform 9 Web Application\plugins.

  3. Подключите плагин одним из способов:

Подключение плагина через репозиторий

Подключение плагина через файл PP.xml

Подключение плагина через метод регистрации regPluginBlock

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

После выполнения действий происходит регистрация плагина в веб-приложении:

Плагины отображаюся в раскрывающемся списке кнопки «Плагины» на ленте инструментов аналитической панели.

Структура js-скрипта плагина

При написании плагина и новых классов придерживайтесь рекомендаций по написанию кода.

Структура js-скрипта плагина:

// Зададим блок саморегистрации
(function ()
{
  if (window.Kap)
  {
    Kap.regPluginBlock({
      Id: "MyLabel",  //id, по которому происходит связка плагин-блока с его реализацией
      Name: "MyLabelText",  //наименование типа блока
      View: "PP.Ui.Dashboard.MyLabel",  //класс визуализатора или имя класса визуализатора
      Icon: "../build/img/app/MainIcon.png",  //путь к пиктограмме (16*16) для плагина, необязательный параметр
      SourceClass: PP.Mb.MetabaseObjectClass.KE_CLASS_EXPRESSREPORT, // тип или код класса источника данных
      Js: "../plugins/MyLabel.js",  //для динамической загрузки скрипта с реализацией плагина, обязательный параметр
      Master: "PP.Ui.MyMaster",  //класс мастера или имя класса мастера
      Props: {  // дополнительные параметры плагина для установки значений по умолчанию, необязательный параметр
        pluginProps: {}
      }
    });
  }
})();
 
if (!PP.Ui.MyLabel)
{
  PP.Ui.MyLabel = {};
  PP.initNamespace(PP.Ui.MyLabel, "PP.Ui.MyLabel");
}
 
// Создадим прототип своего визуализатора для регистрируемого блока
PP.Ui.MyLabel = function(settings) {
  this._Source = null;
  this._bgFlag = false;
  this.PropertyChanged = new PP.Delegate();
  this.Refreshed = new PP.Delegate();
  PP.Ui.MyLabel.base.constructor.apply(this, arguments);
  this.setContent("MyLabelText");
};
PP.initClass(PP.Ui.MyLabel, PP.Ui.Label, "PP.Ui.MyLabel");
 
PP.Ui.MyLabel.prototype._propertyChangedFire = function () {
  this.PropertyChanged.fire(this);
};
 
PP.Ui.MyLabel.prototype._refreshedFire = function () {
  console.log("My Label Refreshed");
  this.Refreshed.fire(this);
};
 
// Если плагин должен поддерживать работу с источником данных, то // установим источник визуализатору, который открыт в аналитической панели PP.Ui.MyLabel.prototype.setSource = function(source) {   this._Source = source;   this.setContent("Source loaded: " + this._Source.getId());   this._refreshedFire(); };  
// Если плагин должен поддерживать хранимые свойства зададим методы setProps и getProps PP.Ui.MyLabel.prototype.setProps = function(value) {  // метод установки хранимых свойств блока   if (value) {     var props = JSON.parse(value);     this._bgFlag = props.bgFlag ? props.bgFlag : false;   } else {     this._bgFlag = false;   }   this.refresh(); };   PP.Ui.MyLabel.prototype.getProps = function() {  //метод, предоставляющий аналитической панели свойства для сохранения   var props = {     bgFlag: this._bgFlag   };   return JSON.stringify(props); };   PP.Ui.MyLabel.prototype.refresh = function() {   this._DomNode.style.backgroundColor = this._bgFlag ? "green" : "transparent";   this._refreshedFire(); };   PP.Ui.MyLabel.prototype.refreshAll = function () {  // метод вызывается при обновлении блока с данными };   PP.Ui.MyLabel.prototype.setWidth = function () {   if (this._Instance)   this._redraw(); };   PP.Ui.MyLabel.prototype.setHeight = function () {   if (this._Instance)   this._redraw(); };   // Если плагин должен иметь собственное контекстное меню зададим метод getContextMenu PP.Ui.MyLabel.prototype.getContextMenu = function() {   var _DataView = this;   var menu = new PP.Ui.Menu({     Items : [ {       MenuItem : {         Id : "pluginMenuItem",         Content : "plugin menu item",         Checked : _DataView._bgFlag,         CheckedChanged : function(sender, args) {           _DataView._bgFlag = sender.getChecked();           _DataView.refresh();         }       }     }]   });   return menu; };   // Создадим прототип мастера для регистрируемого блока PP.Ui.MyMaster = function(settings) {   this._DataView;   PP.Ui.MyMaster.base.constructor.apply(this, arguments);   var myPanel = new PP.Ui.MasterPanel(   {     Id: "MyPluginMaster",     ViewType: PP.Ui.NavigationItem,     Content: "Plugin settings...",     Title: "My plugin master"   });   myPanel.getHeaderControl().CheckedChanged.add(this._onPropsChanged, this);   this.addMasterPanel(myPanel); }; PP.initClass(PP.Ui.MyMaster, PP.Ui.Master, "PP.Ui.MyMaster");   // Если для плагина должны отображаться дополнительные вкладки боковой панели, содержащие его настройки, // то зададим реализацию метода setDataView(view), где view - это экземпляр визуализатора плагина. // Дополнительно зададим свойство Master в блоке регистрации PP.Ui.MyMaster.prototype.setDataView = function(view) {   this._DataView = view;   for (var i = 0; i < this.getItems().length; i++) {     var item = this.getItem(i);     if (item.getId() === "MyPluginMaster") {       item.setTitle("My plugin master. Data view type: " + view.getTypeName());       if (view._bgFlag) {         item.getHeaderControl().setChecked(view._bgFlag, false);       }     }   } };   PP.Ui.MyMaster.prototype._onPropsChanged = function(sender, args) {   this._DataView._bgFlag = args.CheckedState;   this._DataView._propertyChangedFire();   this._DataView.refresh(); };

См. также:

Рекомендации по написанию кода | Регистрация плагина в настольном приложении