IShockWaveFlash.CallFunction

Синтаксис Fore

CallFunction(Request: String): String;

Синтаксис Fore.NET

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» листа.

См. также:

IShockWaveFlash