Использование интерфейса IgetFunctionText с полной реализацией Назад В начало Вперед

Данный пример демонстрирует полную реализацию функциональности интерфейса IGetFunctionText.

#include getFunctionText.vih

//=========================================================
vipInterface IScriptHolder implements IGetFunctionText;
  static: function Execute(func_Name : string);
end;

//=========================================================
interface IScriptHolder;

//---------------------------------------------------------
function Compile(func_Name : string) : longInt;
begin
  Message('Trying to compile '+Func_Name+'...');
  if func_Name='Какой_то__скрипт' then
  begin
	Message('Script source found. compiling...');

	var sourceHandle : LongInt;

	sourceHandle := vaGetFreeHandle;
	vaAddStr(sourceHandle, 'script Какой_то__скрипт : word;');
	vaAddStr(sourceHandle, 'begin');
	vaAddStr(sourceHandle, '   result := 65535;');
	vaAddStr(sourceHandle, '   Message(''it works =)'');');
	vaAddStr(sourceHandle, 'end.');

	result := vacompile(sourceHandle);
	vaFreeSource(sourceHandle);
  end;
end;

//---------------------------------------------------------
function Execute(func_Name : String);
begin
  if func_Name = 'Какой_то__скрипт' then
  begin
	var result : word;
	vaExecute(vaGet('Какой_то__скрипт'), result);
	Message('script returned ' + result);
  end
  else
	Message('Неизвестная функция. Обратитесь к разработчикам =)');
end;

end.

//=========================================================
interface test;

create view

as select
  *
from
  x$files
;

//---------------------------------------------------------
screen sc
<<
>>
end;


//---------------------------------------------------------
handleEvent
cmInit:
{
  var scriptHolder : IScriptHolder new;

  // устанавливаем автоматический обработчик
  vaSetIFunctionText(scriptHolder); 

  // срабатывает автоматический обработчик
  vaGet('Какой_то__скрипт'); 
  
  scriptHolder.Execute('Какой_то__скрипт');
};
end;

end.