🍬 RMG 365 | Dev Tools

Набор инструмСнтов Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° ELMA365

Установка ΠΈ настройка Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ

ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ осущСствляСтся Π½Π° Π΄ΠΎΠ±Ρ€ΠΎΠ²ΠΎΠ»ΡŒΠ½ΠΎΠΉ основС Π² ΠΊΠ°Π½Π°Π»Π΅ Telegram

НаcΡ‚Ρ€ΠΎΠΉΠΊΠΈ:

image.png

Π³Π΄Π΅:

Кнопка ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ коррСктности Π²Π²ΠΎΠ΄Π° ΠΊΡ€Π΅Π΄ΠΎΠ² Π²Ρ‹ΡˆΠ΅:

image.png


Π›ΠΎΠ³ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π² скриптах

Π›ΠΎΠ³ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π² скриптах

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Π²Ρ‹Π·ΠΎΠ²Π° Π² скриптС Ρ‡Π΅Ρ€Π΅Π· Imports ΠΈ Namespace.action

Доступно с вСрсии 2024.2

Π’Π°Ρ€ΠΈΠ°Π½Ρ‚ с использованиСм Imports:

async function action(): Promise<void> {
    const message = `${Context.data.__item!.namespace}.${Context.data.__item!.code}.${Context.data.__item!.id}`;
    const details = JSON.stringify((<any>Context).json(), null, 2);
    Imports?.devtools?.action?.save_to_log?.call({message: message, details: details});
}

НуТно ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ псСвдоним, Π² Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ это devtools:

image.png

Π›ΠΎΠ³ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π² скриптах

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Π²Ρ‹Π·ΠΎΠ²Π° Π² скриптС

Π›ΠΎΠ³ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ поддСрТиваСтся ΠΊΠ°ΠΊ Π² клиСнтских, Ρ‚Π°ΠΊ ΠΈ сСрвСрных скриптах.

На Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π½Π°ΠΌΠΈ Π±Ρ‹Π» ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ СдинствСнный способ для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π΄Π°Π½Π½ΠΎΠΉ Π·Π°Π΄Π°Ρ‡ΠΈ. Он Π½Π΅ являСтся изящным, Π½ΠΎ "Π½Π° Π±Π΅Π·Ρ€Ρ‹Π±ΡŒΠ΅ ΠΈ Ρ€Π°ΠΊ Ρ‰ΡƒΠΊΠ°". ΠžΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠ΅ спасибо Π·Π° идСю Раису.

Для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π² Π»ΠΎΠ³ (ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ систСмных справочников) ΠΏΠΎΠΏΠ°Π»Π° информация, Π² скриптС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π²Ρ‹Π·Π½Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄:

const message = 'Π‘ΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ ΠΈΠ· сСрвСрного скрипта';
const details = 'ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π²Ρ‹Π·ΠΎΠ²Π° логирования ΠΈΠ· сСрвСрного скрипта Π² ' + Date().toString();
await System.templater.generateText(Context, `{ExtText('82fe0bc6-0564-4b8a-a7d4-4c136cf8a949', 'logger', '${message}', '${details}')}`);

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ выполнСния Π±ΡƒΠ΄Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅:

image.png

image.png

Π›ΠΎΠ³ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π² скриптах

Π›ΠΎΠ³ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ… Π² ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ΅ событий

Для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ½ΡΡ‚ΡŒ, ΠΊΠ°ΠΊΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Π΅Β  приходят Π² ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ событий Π² ΠΌΠΎΠ΄ΡƒΠ»Π΅, ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄:

async function action(): Promise<void> {
    const message = 'Π‘ΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ ΠΎ записи входящСго Ρ€Π°Π·Π³ΠΎΠ²ΠΎΡ€Π°';
    const details = JSON.stringify((<any>Context).json(), null, 2);
    await System.templater.generateText(Context, `{ExtText('82fe0bc6-0564-4b8a-a7d4-4c136cf8a949', 'logger', '${message}', ${details}')}`);
}

Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅, Π² Π»ΠΎΠ³Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ информация:

image.png

image.png

ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΡ Ρ€Π΅ΠΆΠΈΠΌΠ° окруТСния

Π§Ρ‚ΠΎΠ±Ρ‹ Π² своих Ρ€Π΅ΡˆΠ΅Π½ΠΈΡΡ… ΠΏΠΎΠ½ΡΡ‚ΡŒ Π² ΠΊΠ°ΠΊΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ систСма Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π² скриптах Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄:

let env_mode = 'Production';
const result = await Imports?.devtools?.action?.env_mode?.call( { for_service: true } )
if (result?.mode)
        env_mode = result.mode;

for_service ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰ΡΡ‚ΡŒ Π»ΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ 2 Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π°: Staging ΠΈΠ»ΠΈ Production (Development Π½Π΅ возвращаСтся, Ρ‚.ΠΊ. Π·Π°Ρ€Π΅Π·Π΅Ρ€Π²ΠΈΡ€ΠΎΠ²Π°Π½ΠΎ для ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ), Ссли Π½Π΅ ΡƒΠΊΠ°Π·Π°Π½ΠΎ ΠΈΠ»ΠΈ false, Ρ‚ΠΎ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ΡΡ всС значСния согласно настроСк модуля.

devtools для ΠΈΠΌΠΏΠΎΡ€Ρ‚Π° ΡƒΠΊΠ°Π·Π°Π½ для ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° ΠΈ задаСтся здСсь:

image.png

ПолСзноС ΠΎΡ‚ WhatDaELMA365

Π‘Π°ΠΉΡ‚
TG ΠΊΠ°Π½Π°Π»

Π•ΠΆΠ΅Π΄Π½Π΅Π²Π½Ρ‹Π΅ Π½Π°Ρ…ΠΎΠ΄ΠΊΠΈ ΠΈ ΠΏΡ€ΠΈΡ‘ΠΌΡ‹ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π² ELMA365: скрипты, ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹, автоматизация ΠΈ быстрыС Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ.

ПолСзноС ΠΎΡ‚ WhatDaELMA365

Custom Loader

ΠŸΡ€ΠΈΠΌΠ΅Ρ€, ΠΊΠ°ΠΊ выглядит Ρ€Π΅ΠΆΠΈΠΌ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ…:

Π’ клиСнтский скрипт Π½ΡƒΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄ Π² самом Π½Π°Ρ‡Π°Π»Π΅:

declare const window: any;

Для ΠΏΠΎΠΊΠ°Π·Π° ΠΈ скрытия Π°Π½ΠΈΠΌΠ°Ρ†ΠΈΠΈ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

async function updateOrganizations(): Promise<void> {

  // ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ loader
  window.CustomLoader.show();
    
  ViewContext.data.show_organizations_update = true;
  await Server.rpc.updateOrganizations();
  ViewContext.data.show_organizations_update = false;
  
  // Π‘ΠΊΡ€Ρ‹Ρ‚ΡŒ loader
  window.CustomLoader.hide();
}

Π”Π°Π½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² клиСнтских скриптах ΠΈ Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π² сСрвСрных.

Β