CallFunction(Request: String): String;
CallFunction(Request: String): String;
Request. XML-строка, с помощью которой указана выполняемая функция и ее параметры.
Метод CallFunction выполняет функцию, реализованную в загруженном флэш-объекте, и возвращает результат ее выполнения.
Взаимодействие флеш-объектов с контейнерами, в которых они отображаются, в ActionScript осуществляется через специальный класс - ExternalInterface. Для вызова какой-либо функции, реализованной в ActionScript-коде, данная функция должна быть зарегистрирована в классе ExternalInterface. Регистрации осуществляется с помощью метода ExternalInterface.addCallback.
Для вызова ActionScript-кода с помощью метода CallFunction в качестве параметра Request необходимо указать XML-строку, содержащую наименование функции и значения ее параметров, сериализованные в специальном формате. В общем виде формат XML-строки выглядит следующим образом:
<invoke name="functionName" returntype="xml">
<arguments>
//Отдельные значения параметров
</arguments>
</invoke>
Корневая вершина «Invoke» содержит два атрибута: name - наименование функции, под которым она зарегистрирована с помощью метода ExternalInterface.addCallback; returntype - возвращаемый методом CallFunction тип значения. В качестве значения атрибута всегда указывается "xml".
Отдельные значения параметров указываются в специальном формате, содержащем информацию о типе данных в дополнении с фактическим значением:
ActionScript класс/значение | Формат | Комментарии |
null | <null/> | |
Логическое True | <true/> | |
Логическое False | <false/> | |
String | <string>Значение</string> | |
Number, int, uint | <number>Значение</number> | |
Array (элементы могут быть различных типов) | <array> <property id="0"> <number>Значение</number> </property> <property id="1"> <string>Значение</string> </property> ... </array> |
Вершина «property» определяет отдельный элемент массива, а атрибут «id» определяет индекс элемента. Индекс указывается начиная с нуля. |
Object | <object> <property id="Property1"> <string>Значение</ String> </property> <property id="Property2"> <string>Значение</String> </property> ... </object> |
Вершина «property» определяет отдельные свойства объекта, а атрибут «id» определяет наименование этих свойств. |
Другие встроенные или пользовательские классы | <null/> или <object> </object> |
ActionScript кодирует другие объекты как значение null, либо как пустые объекты. В любом случае какие-либо значения свойств будут потеряны. |
Результатом работы метода CallFunction будет XML-строка, содержащая результат выполнения указанной функции флеш-объекта. Данная строка также будет содержать информацию о типе данных в дополнении с фактическим значением.
Для выполнения примера предполагается наличие регламентного отчета. На лист отчета добавлен флеш-объект с идентификатором «PrxFlash1». В своей реализации флеш-объект содержит следующий код:
//...
function TestFunc(i1,i2: int): Number
{
var i3: Number = i1 * i2 / (i1 + i2);
return i3;
}
ExternalInterface.addCallback("TestFunc", TestFunc); //В контейнерах для флеш-объекта функция будет доступна с наименованием TestFunc
//...
Также в ячейке листа создана гиперссылка, которая настроена на вызов следующей процедуры:
Sub TestFunction;
Var
Sheet: IPrxSheet;
TSheet: ITabSheet;
Flash: IPrxFlash;
SWFlash: IShockWaveFlash;
Request, Result: String;
Begin
Debug.WriteLine("TestRun");
Sheet := PrxReport.ActiveReport.ActiveSheet;
TSheet := (Sheet As IPrxTable).TabSheet;
Flash := TSheet.Objects.Object("PrxFlash1") As IPrxFlash;
SWFlash := Flash.ShockWaveFlash;
Request := "<invoke name=""TestFunc"" returntype=""xml"">" +
"<arguments>" +
"<number>2</number>" +
"<number>6</number>" +
"</arguments>" +
"</invoke>";
Result := SWFlash.CallFunction(Request);
TSheet.ParseCell("A0").Value := Result;
End Sub TestFunction;
При выполнении данной процедуры будет выполнена функция «TestFunc» флеш-объекта. В качестве значений параметров для данной функции будут указаны значения «2» и «6». Результатом выполнения данной функции будет значение «1,5». Метод CallFunction вернет данное значение, представленное в виде XML-строки: <number>1.5</number>. Результат выполнения будет записан в ячейку «A0» листа.
См. также: