Инструменты пользователя

Инструменты сайта


app

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
app [2025/10/03 12:39]
root [Создания интерфейса функции]
app [2025/10/09 09:23] (текущий)
root
Строка 130: Строка 130:
 </wrap> </wrap>
 \\ \\
-В функция **main** при запуске передается аргумент **ctx**, содержащий в себе набор объектов, посредством которых можно в дальнейшем взаимодействовать с ядром системы и другими приложениями. В начале функции из нее выбираются наиболее часто используемые объекты, и сохраняются в глобальной области видимости, для удобства дальнейшей работы с ними. В частности это:+В функцию **main** при запуске передается аргумент **ctx**, содержащий в себе набор объектов, посредством которых можно в дальнейшем взаимодействовать с ядром системы и другими приложениями. В начале функции из нее выбираются наиболее часто используемые объекты, и сохраняются в глобальной области видимости, для удобства дальнейшей работы с ними. В частности это:
 \\ \\
 <wrap ks> <wrap ks>
Строка 339: Строка 339:
  
 {{ ::app10.png?nolink |}} {{ ::app10.png?nolink |}}
 +
 +====== Вызов функции из скриптов DevelSCADA ======
 +<wrap ks>
 +Помимо взаимодействия между приложениями, данный механизм позволяет работать и с пользовательскими скриптами самой системы DevelSCADA при разработке проектов посредством вызова функции [[ds.rpccall|ds.rpcCall]] ядра исполнения системы. Для примера, создадим в нашем приложении функцию, и вызовем ее из скриптов проекта.
 +</wrap>
 +<wrap ks>
 +Код приложения:
 +</wrap>
 +
 +<code javascript>
 +'use strict';
 +
 +let logCtx = null, log = null;
 +let rpc = null, cfg = null;
 +
 +async function main(ctx) {
 +    ({ logCtx, rpc, cfg } = ctx);
 +    ({ log } = logCtx);
 +    module.paths.push(ctx.modPath);
 +    
 +    rpc.regFunc('myFunc', () => {
 +        const { exec } = require('node:child_process');
 +        exec('notepad');
 +    });
 +}
 +
 +exports.main = main;
 +
 +exports.about = {
 +    mark: 'MA',
 +    descr: 'Мое приложение', 
 +    isSingle: true,
 +    isGui: false,
 +    isPm: false,
 +    order: 1000,
 +    depend: []
 +};
 +</code>
 +<wrap ks>
 +В данном приложении мы создали единственную функцию **myFunc**, которая будет из операционной системы запускать блокнот. Запустим это приложение в диспетчере приложений.
 +</wrap>
 +
 +{{ ::app5.png?nolink |}}
 +
 +<wrap ks>
 +Далее в редакторе проектов создадим новый проект, на экране разместим кнопку, и в событии кнопки "Нажатие", выберем действие "Скрипт".
 +</wrap>
 +
 +{{ ::app11.png?nolink |}}
 +
 +{{ ::app12.png?nolink |}}
 +
 +<wrap ks>
 +Далее напишем следующий код скрипта:
 +</wrap>
 +
 +<code javascript>
 +async function main(val) {
 +    await ds.rpcCall('myapp.myFunc');
 +}
 +</code>
 +
 +<wrap ks>
 +Данный код должен будет вызвать **myFunc** из приложения **myapp**. Запустим проект на исполнение и нажмем кнопку. В результате должен будет открыться блокнот.
 +</wrap>
 +
 +{{ ::app13.png?nolink |}}
  
app.1759484351.txt.gz · Последнее изменение: 2025/10/03 12:39 — root