Добро пожаловать, Гость
Вам необходимо зарегистрироваться перед тем, как пытататься написать сообщение.

Имя пользователя
  

Пароль
  





Поиск по сообществам

(Расширенный поиск)

Статистика сообществ
» Участники: 95
» Последний участник: VaniaAchen
» Темы сообществ: 38
» Сообщения сообществ: 64

Полная статистика

Пользователи в сети
Сейчас 1 пользователь в сети
» 0 Участник(-ов) | 1 Гость(-ей)

Последние темы
Как получить документацию...
Сообщество: Динамические приложения в WINNUM Platform
Последнее сообщение: Lamantur
09-24-2025, 09:28 AM
» Ответы: 1
» Просмотры: 310
Панель с кнопками для 3D ...
Сообщество: Динамические приложения в WINNUM Platform
Последнее сообщение: nponyatov
09-19-2025, 09:32 AM
» Ответы: 0
» Просмотры: 367
Панель с кнопками для 3D ...
Сообщество: Динамические приложения в WINNUM Platform
Последнее сообщение: nponyatov
09-19-2025, 08:31 AM
» Ответы: 0
» Просмотры: 330
Добавление библиотеки в п...
Сообщество: Динамические приложения в WINNUM Platform
Последнее сообщение: Lamantur
08-22-2025, 07:18 AM
» Ответы: 0
» Просмотры: 298
WinnumAjaxAuthHandler - П...
Сообщество: Динамические приложения в WINNUM Platform
Последнее сообщение: Lamantur
05-27-2025, 09:15 AM
» Ответы: 0
» Просмотры: 403
Эффективность работы опер...
Сообщество: Динамические приложения в WINNUM Platform
Последнее сообщение: Сергей Борисов
04-28-2025, 01:18 PM
» Ответы: 1
» Просмотры: 469
Переход на страницу
Сообщество: Динамические приложения в WINNUM Platform
Последнее сообщение: Lamantur
03-18-2025, 09:32 AM
» Ответы: 0
» Просмотры: 329
Убрать все всплывающие по...
Сообщество: Динамические приложения в WINNUM Platform
Последнее сообщение: Lamantur
03-18-2025, 08:42 AM
» Ответы: 0
» Просмотры: 340
График работы оборудовани...
Сообщество: Динамические приложения в WINNUM Platform
Последнее сообщение: Lamantur
02-20-2025, 01:05 PM
» Ответы: 0
» Просмотры: 481
Выбор объекта
Сообщество: Динамические приложения в WINNUM Platform
Последнее сообщение: Lamantur
01-21-2025, 12:23 PM
» Ответы: 0
» Просмотры: 355

 
  Как получить значение дополнительного параметра
Автор: Сергей Соловьев - 02-08-2024, 08:56 AM - Сообщество: Динамические приложения в WINNUM Platform - Нет ответов

Ниже пример кода получения значения дополнительного параметра  cost_per_hour_WNNCMachine. Результат будет выведен через alert

Код:
/****************** Получение дополнительного параметра объекта ******/
function _GetAttribute_(){
    var product_oid = 'winnum.org.product.WNProduct:40'; // класс и id изделия
    var attr_name = 'cost_per_hour_WNNCMachine'; // наименование параметра
    baseSdkUtils.service.WNAttributeHelper.getAttribute(product_oid, attr_name,  function(data){
        if ( baseSdkUtils.isSuccess(data) ){
            var _attr_ = '';
            if(data.getElementsByTagName('item').length > 0){
                var item = data.getElementsByTagName('item')[0];
                _attr_ = baseSdkUtils.decode(item.getAttribute('value1'));
            }
            alert ( _attr_ ); // значение параметра
        }
    });
}

Распечатать этот элемент

  Как получить список изделий приложения
Автор: Сергей Соловьев - 02-08-2024, 08:35 AM - Сообщество: Динамические приложения в WINNUM Platform - Нет ответов

Чтобы получить список изделий приложения, нужно выполнить функцию baseSdkUtils.service.WNApplicationHelper.getProduct. На вход дать идентификатор приложения в формате  'winnum.org.app.WNApplicationInstance:1'. Основные параметры вернутся в ответе для каждого изделия в атрибутах каждого item.

Код:
function startFunction( appid ){
    // appid в формате 'winnum.org.app.WNApplicationInstance:1'
    getProduct( appid, function (data){
           console.log ( data );
           // делаем что то с массивом изделий data
     });
}

/****************** Получение изделий и создание структуры их хранения ******/
function getProduct(appid, callBackFunc){
    var products = [];
    baseSdkUtils.service.WNApplicationHelper.getProduct(appid, function(data){
        if ( baseSdkUtils.isSuccess(data) ){
            for(var i = 0; i < data.getElementsByTagName('item').length ; i++ ) {
                var item = data.getElementsByTagName('item')[i];
                var attributes = {};
                attributes.product_class = item.getAttribute('id'); // класс и id изделия, например, winnum.org.product.WNProduct:47"
                attributes.product_id = item.getAttribute('PersistInfo__idA2');     // id изделия, например,   "47"          
                attributes.product_serial = baseSdkUtils.decode(item.getAttribute('SerialNumber')); // серийный номер
                attributes.product_name = baseSdkUtils.decode(item.getAttribute('name')); // наименование изделия
                attributes.product_UUID = baseSdkUtils.decode(item.getAttribute('ProductUUID')); // uuid изделия, например, "73DFAF61-DCD0-47F6-A38B-57A2707423DD"         
                attributes.connector_id = item.getAttribute('connectorId'); // id коннектора, например,   "47" 
                attributes.org_id= item.getAttribute('OrganizationInfo__idA3'); // id организации
                attributes.folder_name = baseSdkUtils.decode(item.getAttribute('FolderInfo__folderName'));  // имя папки
                attributes.folder_id = baseSdkUtils.decode(item.getAttribute('FolderInfo__idA6')); // id папки
                products[i] = attributes;
            }
            if ( callBackFunc ){
                callBackFunc.call( this, products);
            } 
        }
    });
}

В результате в консоли увидите массив data, в каждом из элементов которого список основных параметров

Распечатать этот элемент

  Настройка уведомлений в Telegram
Автор: wnadmin - 02-06-2024, 09:32 AM - Сообщество: Интеграция WINNUM Platform с другими информационными системами - Нет ответов

Очень эффектно смотрятся уведомления из WINNUM Platform в Telegram. В зависимости от тематики уведомления, его можно направлять в разные каналы, что вдвойне полезно.

Для настройки, нужно выполнить ряд подготовительных действий в Telegram, а потом настроить интеграцию в WINNUM Platform. 

Подготовка Telegram
Получаем идентификатор нового бота (далее <Bot_token>): 

  • через бот @BotFather создаем нового бота (команда /newbot)

Получаем идентификатор беседы с ботом (далее <chat_id>):
  •  Откройте диалог со своим созданным ботом и напишите ему произвольное сообщение
  •  Откройте в браузере ссылку, заменив <Bot_token> на полученный идентификатор от @BotFather https://api.telegram.org/bot<Bot_token>/getUpdates
В полученном json-ответе найдите значение в параметре result->message->chat->id, это и есть <chat-id>.

Откройте браузер и перейдите по ссылке, заменив <Bot_token> и <chat_id> на свои данные
https://api.telegram.org/bot<Bot_token>/...ивет%20мир

Настройка WINNUM Platform
Настраиваем интеграцию с Telegram в файле smsgateway/standalone.xml

Пример standalone.xml в Winnum
<?xml version="1.0" encoding="UTF-8"?>
<items>
                <item id="smsGateway.targetURL" value="https://api.telegram.org/bot<Bot_token>/sendMessage?chat_id=<chat_id>" description="Sms gateway target url, for example: http://smspilot.ru/api.php note: use & for ampersand" />
                <item id="smsGateway.apiKey" value="foo" description="Sms gateway api key" />
                <item id="smsGateway.fromId" value="Winnum" description="Registered sender ID" />
                <item id="smsGateway.fromTextURL" value="from" description="From send text URL parameter" />
                <item id="smsGateway.toTextURL" value="to" description="To send text URL parameter" />
                <item id="smsGateway.forwardOnTextURL" value="" description="Forward on send text URL parameter" />
                <item id="smsGateway.sendTextURL" value="text" description="Send URL parameter name" />
                <item id="smsGateway.textEncoding" value="UTF-8" description="Sms gateway default text output encoding. By default - UTF-8" />
                <item id="smsGateway.enable" value="true" description="Enable - disable sms gateway" />
                <item id="smsGateway.authType" value="Url" description="Sms gateway authentication type (Bearer, Url). By default - Url" />
</items>

Как-то так) незабываем указать у пользователя мобильный телефон в профиле)

Распечатать этот элемент

  Использование Медиа Библиотеки
Автор: Lamantur - 02-05-2024, 03:07 PM - Сообщество: Динамические приложения в WINNUM Platform - Ответы (1)

Поскольку стандартные элементы в редакторе имеют ограничение в 1000 символов по коду, а так же для удобства создания более сложных приложений - в редакторе предусмотрена медиабиблиотека.
   
Благодаря этому инструменту можно добавить файлы неограниченного объема и использовать их в своем динамическом приложении.
Для того чтобы элементы из библиотеки начали работать на странице, добавим событие при загрузке:
Настройка страницы => События  => Добавить событие  => При загрузке (On Load)
В событие добавляем следующий код:

Код:
var appid = ''; baseSdkUtils.the = {};
document.getElementById('9F740F6C-1E4D-4821-8B2F-C8E0586B7935').style.zIndex = '19999';
baseSdkUtils.service.WNFactory.getPersistable(baseApplicationDesignerUtils.getAppid(),   
  function(data){
   if ( baseSdkUtils.isSuccess(data) ){
    appid = data.getElementsByTagName('item')[0].getAttribute('ApplicationInfo__idA15');
    baseSdkUtils.the.appid = appid;
    baseSdkUtils.the.media_url = '/' + baseSdkUtils.appId + '/resources/themes/current/images/app/ui/designer/media/' + appid + '/';
     jQuery.ajax({ url: baseSdkUtils.the.media_url + 'manifest.js',
      dataType: 'script',
      success: function(){ loadResoursesProcessor(); }, async: true });
    }
  });
Этот код открывает файл  'manifest.js', который находится в библиотеке и запускает в нем функцию  loadResoursesProcessor()
Аналогичным образом можно загрузить другие файлы:
Пример:
Код:
$('#B1EA5CF6-A3D8-4118-A591-0D8AC29B3E39').ready(function(event){
    //place code here
    do__loadResources();
   
});
function do__loadResources(){
var appid = ''; baseSdkUtils.the = {};
document.getElementById('9F740F6C-1E4D-4821-8B2F-C8E0586B7935').style.zIndex = '19999';
baseSdkUtils.service.WNFactory.getPersistable(baseApplicationDesignerUtils.getAppid(),   
  function(data){
   if ( baseSdkUtils.isSuccess(data) ){
    appid = data.getElementsByTagName('item')[0].getAttribute('ApplicationInfo__idA15');
    baseSdkUtils.the.appid = appid;
    baseSdkUtils.the.media_url = '/' + baseSdkUtils.appId + '/resources/themes/current/images/app/ui/designer/media/' + appid + '/';
    $('#navtop').load(baseSdkUtils.the.media_url + '/navtop.html');
     jQuery.ajax({ url: baseSdkUtils.the.media_url + 'manifest.js',
      dataType: 'script',
      success: function(){ loadResoursesProcessor(); }, async: true });
    }
  });
}
 
В этом примере мы добавили загрузку файла  navtop.html в контейнер  с id =  navtop, при этом делаем это после формирования адреса страницы, таким образом мы уверены, что запрос выполнится.

Так же можно загружать и использовать изображения и другие файлы, например из функций, описанных в файле  manifest.js в зависимости от ваших потребностей.

Распечатать этот элемент

  Пример интеграции с почтовым сервисом GMAIL
Автор: wnadmin - 02-04-2024, 09:55 AM - Сообщество: Интеграция WINNUM Platform с другими информационными системами - Нет ответов

Для настройки интеграции с почтовым сервисом GMAIL нужно указать параметры соединения и параметры пользователя (от которого будут отправляться письма) в конфигурационных файлах WINNUM Platform.

В файле «WinnumPlatform\config\mailserver\standalone.xml» укажите:

  1. id="mailServer.domain" value="gmail.com" вместо gmail.com укажите используемый почтовый домен (самый важный параметр при настройке почты)
  2. id="mail.smtp.starttls.enable" value="false или true" если используется STARTTLS на почте
  3. id="mail.smtp.ssl.trust" value="false или true" если используется SSL на почте

В файле «WinnumPlatform\config\appserver\standalone.xml» укажите:
  1. <smtp-server outbound-socket-binding-ref="mail-smtp" password="ПАРОЛЬ пользователя от которого будет отправляться почта" ssl="false или true" tls="false или true" username="почтовый ящик пользователя от которого будет отправляться почта, например admin@gmail.com" />
  2. <remote-destination host="адрес почтового сервера, например exchange2013.winnum.io" port="порт почтового сервера, например 587"/>

На этом все, незабываем перезапустить WINNUM Platform для применения новых настроек.

Распечатать этот элемент

  Создание простого дашборда
Автор: wnadmin - 02-03-2024, 10:03 AM - Сообщество: Динамические приложения в WINNUM Platform - Нет ответов

Создание простого дашборда, который в табличном виде выводит несколько последних значений сигналов из BigData.

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

Далее добавим таблицу в пустой контейнер. Для этого откроем свойства контейнера и в поле «Данные» укажем:

Код:
<table class="table table-bordered table-hover" style="background-color: #f7f7f9;">
<thead>
<tr>
  <th>#</th>
  <th>ID</th>
  <th>Время</th>
  <th>Значение</th>
</tr>
</thead>
<tbody id="t-body"></tbody></table>

Получится, что-то вроде этого:
   

Визуальная часть нового дашборда готова. Остается получить данных из BigData и поместить их в таблицу. Для получения данных будем использовать Restful API, в поле "Скрипт" у контейнера укажем:
Код:
baseSdkUtils.service.WNConnectorHelper.getSignal(
'1738AF55-BAAC-49B9-B3EA-400D58B5136E', //uuid
'A01', //signal
true,  //typeByCount
'asc', // orderByDesc
'',    //startTime
'',    //endTime
10,    //count
function(data){
  if (baseSdkUtils.isSuccess(data) ){
   for(var i = 0 ; i < data.getElementsByTagName('item').length ; i++ ){
    var signal = data.getElementsByTagName('item')[i];
    var newElement = document.createElement('tr');
    newElement.innerHTML = '<td>' + (i+1) + '</td><td>' + baseSdkUtils.decode(signal.getAttribute('signal_id')) + '</td>';
    newElement.innerHTML += '<td>' + baseSdkUtils.decode(signal.getAttribute('event_time')) + '</td>';
    newElement.innerHTML += '<td>' + baseSdkUtils.decode(signal.getAttribute('value')) + '</td>';
    document.getElementById('t-body').appendChild(newElement);
   }
}
});

Вот и все, наш новый дашборд готов!

Давайте разберем вызов поподробнее. Функция baseSdkUtils.service.WNConnectorHelper.getSignal - получает нужные сигналы согласно заданным параметрам. Используется WINNUM Javascript SDK, а значит нам не нужно ничего дополнительно подключать и не нужно выбирать какие-либо библиотеки. В нашем случае мы просто указываем какой вызов мы хотим выполнить и с какими параметрами. В примере выше в вызове мы указываем:
  • UUID продукта
  • Код сигнала, значения которого мы хотим получить
  • Указываем, что мы хотим получить по количеству ( typeByCount = true ), если false - это по дате
  • Указываем порядок сортировки (asc / desc ) - от нового к позднему или наоборот
  • Поля даты начала и даты завершения пропускаем, указывая в них пустую строку
  • Указываем количество сигналов, которые хотим получить - в нашем случае 10

После завершения вызова полученный результат передаем функции, которая вставляет данные в таблицу.

По завершению мы получаем вот такой результат:
   

Распечатать этот элемент

  Пример простого вызова
Автор: wnadmin - 02-02-2024, 02:27 PM - Сообщество: Вызовы функций посредством WINNUM Restful API - Нет ответов

Для всех вызовов WINNUM Restful API можно использовать обычный браузер. Например, для получения данных пользователя можно вставить в браузер следующий запрос:

Код:
http://127.0.0.1/Winnum/views/pages/app/agw.jsp?rpc=winnum.views.url.WNFactory&men=getPersistable&oid=winnum.org.user.WNUser:1&mode=yes

Вместо 127.0.0.1 - укажите адрес вашего сервера WINNUM.

Результатом вызова будет следующий ответ:
Код:
<?xml version="1.0" encoding="UTF-8"?>
  <items status="success" lang="ru_ru" >
    <item id="winnum.org.user.WNUser:1" PersistInfo__modifyStamp="2021-01-14%2014%3A49%3A54.548" TypeInfo__systemName="winnum.org.user.WNUser" Description="Winnum%20System%20Admin" Email="wnadmin%40example.com" TypeInfo__avatar="resources%2Fimages%2Fuser_32x32.png" TypeInfo__icon="resources%2Fimages%2Fuser.png" CellPhone="" PersistInfo__classNameA2="winnum.org.user.WNUser" TypeInfo__internalName="WNUser" TypeInfo__idA1="1" Locked="0" DomainInfo__classNameA7="winnum.org.domain.WNAdministrativeDomain" TypeInfo__subTypeable="true" TypeInfo__instantiable="true" TypeInfo__restrictedByDomain="false" PersistInfo__createStamp="2018-07-11%2011%3A17%3A49.144" DomainInfo__name="Domain" PersonnelNumber="" FirstName="Admin" DomainInfo__idA7="1" PersistInfo__markDelete="0" Login="wnadmin" TypeInfo__classNameA1="winnum.org.type.WNTypeDefinition" SurName="" TimeZone="Europe%2FMoscow" LastName="Administrator" />
</items>

Сходу, такой ответ в браузере увидеть не получится, чтобы увидеть данные нужно посмотреть непосредственно содержимое страницы (посмотреть исходный код), результатом будет вот такой вид:
   
 
Говоря о структуре и формате ответов в WINNUM Restful API, то они имеют общий вид:
Код:
<items>
<item/>
...
<item/>
</items>

Значения закодированы с помощью Url Encode / Decode. Например, значение "%D0%9F%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8C" – это "Пользователь".

Распечатать этот элемент

Lightbulb Пример графика на основе библиотеки NVD3
Автор: wnadmin - 02-02-2024, 01:29 PM - Сообщество: Динамические приложения в WINNUM Platform - Нет ответов

Для создания простого графика можно добавить пустой контейнер и в поле «Данные» вставить:

Код:
<div id='chart'>
  <svg style='height: 400px;'></svg>
</div>
<script>

function loadDiscreteBarChartData(myChart){
  var data = [
  {
    key: "Cumulative Return",
    values: [
      {
        "label" : "A" ,
        "value" : -29.765957771107
      } ,
      {
        "label" : "B" ,
        "value" : 0
      } ,
      {
        "label" : "C" ,
        "value" : 32.807804682612
      } ,
      {
        "label" : "D" ,
        "value" : 196.45946739256
      } ,
      {
        "label" : "E" ,
        "value" : 0.19434030906893
      } ,
      {
        "label" : "F" ,
        "value" : -98.079782601442
      } ,
      {
        "label" : "G" ,
        "value" : -13.925743130903
      } ,
      {
        "label" : "H" ,
        "value" : -5.1387322875705
      }
    ]
  }
];
  d3.select('#chart svg')
    .datum(data)
    .transition().duration(500)
    .call(myChart)
  ;
}
</script>

Вставить в поле «Скрипт»:

Код:
nv.addGraph(function() {
  var chart = nv.models.discreteBarChart()
    .x(function(d) { return d.label })
    .y(function(d) { return d.value })
    .staggerLabels(true)
    .showValues(true)
  nv.utils.windowResize(chart.update);
   
  setTimeout(
      function(){ loadDiscreteBarChartData(chart); }, 100);
   
  return chart;
});

В результате получим вот такой график:
   

Естественно, не забываем добавить библиотеку nvd3 к динамическому приложению)

Распечатать этот элемент