Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Dynamic Lotusscript
Форум программистов > Hard & Soft > Исходники/Codebase > Lotus > Дизайн > Библиотеки скриптов
Morpheus
Функция Execute шикарная вещь при правильном применении.
Вы только вчитайтесь в описание
Цитата
LotusScript considers text a separate script, compiling and executing it as a temporary module that's unloaded as soon as execution finishes.

компиляции и запуска и выгрузки целых динамических библиотек
Синтаксис:
Execute ( text )
где text - собственно и есть запускаеммый скрипт

Sub Initialize
      Dim strCode As String
      strCode = { MsgBox "Это динамическая библиотека" }
      Execute( strCode )
End Sub

попробуйте запустить этот код wink.gif

Ну чтож теперь попробуем более сложный код, в котором сдержиться более одной строки
Sub Initialize
   Dim strCode As String
   strCode = {
   Dim strMessage as String
   strMessage = "Это динамическая библиотека"
   msgbox strMessage
    }
   Execute( strCode )
End Sub

Имейте в виду что символы перехода строки используються для разделения строк в переменной strCode
Как видите оба примера делают одно и тоже - показывают окно с соощением "Это динамическая библиотека".

Я думаю теперь суть функции Execute должна быть Вам ясна. Далее попытаемся продемонстрировать Вам возможность использования этой функции в приложениях

Работа с динамическими классами
В ниже приведённом примере некоторые переменные и процедуры загружены из другого модуля
 Sub Initialize
   Dim strCode as String
   strCode = {
   Use "libArrayManager"
   Dim AM as ArrayManager
   Set AM = new ArrayManager()
   }
   Execute strCode
End Sub


Этот динамический код загружает библиотеку ArrayManager и экземпляр класса ArrayManager. Фишка в том что в 4й строке мы динамически подгружаем модуль. Таким образом в режиме runtime мы можем программно решать - подгружать модули или нет. Эта техника называеться Динамическая загрузка классов ( Dynamic Class Loading ). Этот метод хорошо использовать с точки зрения оптимизации - мы подгружаем только те модули которые будем использовать, ничего лишнего.
Конечо же эта техника не новая. Я лично пользуюсь ею(поисковая система). Можете прочитать про эту технику ]]>тут]]>

Теперь я думаю пора привести более сложный пример
Declarations
   Dim strReturnVal as String
Sub Initialize
   Dim strCode as String
   Dim strModule as String
   Dim strFunction as String
   Dim strParam as String

   strModule = "libUser"
   strFunction = "getCountry"
   strParam = "Orky Dorky"

   strCode = |
   Use | & strModule & |
   strReturnVal = | & strFunction & |(| & strParam & |)|
   Execute strCode
   Msgbox strReturnVal
End Sub


Теперь как Вы видите - все динамическое: подгружаеммый модуль, имя запускаеммой функции, параметр для функции. Прошу обратить внимание на две верхние строки. они позволяют нам обьединять переменные для статического и динамического кода. ВАЖНО это будет работать только с глобальными декларациями, имено потому strReturnVal задекларированно в самом верху!

Канечно, приведённые выше примеры слишком просты, но я думаю суть фунции Execute у меня получилось Вам передать.

от себя отмечу что интересным есть то что возвратит нам фунция Execute
Return value
Цитата
The Execute function returns one of the following values:
The return code of an End statement, if one was executed.
Zero (0), if no End statement was executed, or if the executed End statement had no return value.

как видите
- код который идет за End
- или 0, если в код не был включен End, или End ничего не вернул.

Пример
Sub ComputeInterest
   Dim script As String, calc As String, retcode As Integer
   calc$ = InputBox("Compute loan interest (charge/loan)")
   script$ = _
      |Option Declare
      Sub Initialize
         Dim pct As Single  
         pct! = | &  calc$ & |
         If pct! < 0 Then
            End -2                   ' -2 is a status code.
         ElseIf pct! > 1 Then
            End -3                   ' -3 is a status code.
         End If
         MessageBox("Interest is " & Format(pct!,"percent"))
      End Sub|
   retcode% = Execute (script$)
   If retcode% = -2 Then
      MessageBox("You computed a negative interest rate!")
   ElseIf retcode% = -3 Then
      MessageBox("You computed an excessive interest rate!")
   End If
End Sub

Как видим в данном динамическом коде присутствуют End -2 и End -3. В зависимости от значения retcode наш MessageBox выведет нам одну из надписей про позитив или негатив



]]>Вольный перевод отсюда]]>
Mihal
Мало того, на Execute можно построить настраиваемое "слабое" взаимодействие между двумя базами. База А шлёт базе Б письмо с кодом, который надо выполнить в базе Б. В базе Б агент отлавливает пришедшее письмо и выполняет пришедший код. всё красиво, естественно и прозрачно.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2009 IPS, Inc.