Специальные параметры в скриптах ДС-ВДС

Со временем всё больше появляется необходимость в доступе к внутренним данным прорабатываемого скрипта. Например, для определения процента начисления бонусов по заказу.

Скриптер позволяет передать в него внешнюю переменную, которую он сможет спокойно использовать, менять её значение, и по результату выполнения скрипта это значение можно получить во внешних обработках.

Визуально это примерно так:

Переменная scriptPercent не объявлена локально. Она попадает в скрипт «извне». После отработки скрипта стоит вывод значения этой переменной. Она используется для отображения информации о расчёте бонусов за заказ

Техническая часть

Чтобы подобное реализовать, нужно доработать модуль ScriptFunctions.pas:

  1. В тип TExtScriptResInfo добавляем нужное поле;
  2. В процедуре TScriptExecutor.PSScriptCompile, являющейся обработчиком PSSCript.OnCompile, регистрируем название новой переменной: Sender.AddRegisteredPTRVariable('scriptItogSum', 'double');
  3. В процедуре TScriptExecutor.PSScriptExecute, являющейся обработчиком PSSCript.OnExecute, связываем переменную с полем записи ExtScriptResInfo: PSScript.SetPointerToData('scriptItogSum', @ExtScriptResInfo.scriptItogSum, PSScript.FindBaseType(btDouble));

Базовые типы переменных в скриптах

Базовый тип в скриптере Соответствующий тип 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;