| Добро пожаловать, Гость |
Вам необходимо зарегистрироваться перед тем, как пытататься написать сообщение.
|
| Пользователи в сети |
Сейчас 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>):
В полученном 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» укажите:
- id="mailServer.domain" value="gmail.com" вместо gmail.com укажите используемый почтовый домен (самый важный параметр при настройке почты)
- id="mail.smtp.starttls.enable" value="false или true" если используется STARTTLS на почте
- id="mail.smtp.ssl.trust" value="false или true" если используется SSL на почте
В файле «WinnumPlatform\config\appserver\standalone.xml» укажите:
- <smtp-server outbound-socket-binding-ref="mail-smtp" password="ПАРОЛЬ пользователя от которого будет отправляться почта" ssl="false или true" tls="false или true" username="почтовый ящик пользователя от которого будет отправляться почта, например admin@gmail.com" />
- <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" – это "Пользователь".
|
|
|
Пример графика на основе библиотеки 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 к динамическому приложению)
|
|
|
|