Автор: Morpheus 7:08:2007, 10:10
Функция 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
попробуйте запустить этот код
Ну чтож теперь попробуем более сложный код, в котором сдержиться более одной строки
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 ). Этот метод хорошо использовать с точки зрения оптимизации - мы подгружаем только те модули которые будем использовать, ничего лишнего.
Конечо же эта техника не новая. Я лично пользуюсь ею(поисковая система). Можете прочитать про эту технику
]]>http://forum.codeby.net/go.php?http://www.redbooks.ibm.com/redbooks.nsf/0/bb2af5af66e01de9852567d3006a876a?OpenDocument
]]>Теперь я думаю пора привести более сложный пример
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 выведет нам одну из надписей про позитив или негатив
]]>http://forum.codeby.net/go.php?http://www.sbacode.com/pageTips.aspx?id=184&]]>
Автор: Mihal 7:09:2007, 14:46
Мало того, на Execute можно построить настраиваемое "слабое" взаимодействие между двумя базами. База А шлёт базе Б письмо с кодом, который надо выполнить в базе Б. В базе Б агент отлавливает пришедшее письмо и выполняет пришедший код. всё красиво, естественно и прозрачно.