мета-данные страницы
Различия
Здесь показаны различия между двумя версиями данной страницы.
Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия | ||
special_params_in_scripts [22.02.2022 06:12] Lingri [Техническая часть] |
special_params_in_scripts [24.02.2022 06:22] |
||
---|---|---|---|
Строка 1: | Строка 1: | ||
- | ====== Специальные параметры в скриптах ДС-ВДС ====== | ||
- | Со временем всё больше появляется необходимость в доступе к внутренним данным прорабатываемого скрипта. Например, для определения процента начисления бонусов по заказу. | ||
- | |||
- | Скриптер позволяет передать в него внешнюю переменную, которую он сможет спокойно использовать, менять её значение, и по результату выполнения скрипта это значение можно получить во внешних обработках. | ||
- | |||
- | Визуально это примерно так: | ||
- | {{:pasted:20211015-075314.png}} | ||
- | |||
- | Переменная scriptPercent не объявлена локально. Она попадает в скрипт "извне". После отработки скрипта стоит вывод значения этой переменной. | ||
- | |||
- | ===== Техническая часть ===== | ||
- | Чтобы подобное реализовать, нужно доработать модуль **ScriptFunctions.pas**: | ||
- | - В тип TExtScriptResInfo добавляем нужное поле; {{:pasted:20211015-075714.png}} | ||
- | - В процедуре **TScriptExecutor.PSScriptCompile**, являющейся обработчиком PSSCript.OnCompile, регистрируем название новой переменной: //Sender.AddRegisteredPTRVariable('scriptItogSum', 'double');// | ||
- | - В процедуре **TScriptExecutor.PSScriptExecute**, являющейся обработчиком PSSCript.OnExecute, связываем переменную с полем записи **ExtScriptResInfo**: //PSScript.SetPointerToData('scriptItogSum', @ExtScriptResInfo.scriptItogSum, PSScript.FindBaseType(btDouble));// | ||
- | - В процедуре **TScriptExecutor.PSScriptAfterExecute**, являющейся обработчиком PSSCript.PSScriptAfterExecute, делаем вывод этой переменных в запись **ExtScriptResInfo**: //ExtScriptResInfo.scriptPercent := VGetInt(PSScript.GetVariable('scriptPercent'));// | ||
- | |||
- | |||
- | ==== Базовые типы переменных в скриптах ==== | ||
- | ^ Базовый тип в скриптере ^ Соответствующий тип Delphi ^ | ||
- | | btU8 | Byte | | ||
- | | btS8 | ShortInt | | ||
- | | btU16 | Word | | ||
- | | btS16 | SmallInt | | ||
- | | btU32 | Longword | | ||
- | | btS32 | LongInt | | ||
- | | btS64 | Int64 | | ||
- | | btSingle | Single | | ||
- | | btDouble | Double | | ||
- | | btExtended | Extended | | ||
- | | btVariant | Variant | | ||
- | | btString | String | | ||
- | | btWideString| WideString| | ||
- | | btChar | Char | | ||
- | | btWideChar | WideChar | | ||
- | | || | ||
- | ==== Функции получения данных ==== | ||
- | |||
- | Весь список возможных функций получения данных: | ||
- | * function VGetUInt(const Src: PIFVariant): Cardinal; | ||
- | * function VGetInt64(const Src: PIFVariant): Int64; | ||
- | * function VGetReal(const Src: PIFVariant): Extended; | ||
- | * function VGetCurrency(const Src: PIFVariant): Currency; | ||
- | * function VGetInt(const Src: PIFVariant): Longint; | ||
- | * function VGetString(const Src: PIFVariant): String; | ||
- | * function VGetAnsiString(const Src: PIFVariant): tbtString; | ||
- | * function VGetWideString(const Src: PIFVariant): tbtWideString; | ||
- | * function VGetUnicodeString(const Src: PIFVariant): tbtunicodestring; | ||
- | |||
- | |||
- | |||
- | |||