вызвать OSGI Service IPreferenceStore с помощью JavaScript в Sabre RedApp

Я создал приложение веб-службы Sabre Red App, используя RedApp_2.10 Developer Toolkit. Приложение похоже на пример com.sabre.redapp.example.cf.webapp.services из инструментария. Приложение содержит несколько настроек, которые хранятся в Java-контейнере org.eclipse.jface.preference.IPreferenceStore, как показано в примере com.sabre.redapp.example.editor.basic. В результате я могу просматривать и редактировать настройки в меню Инструменты->Параметры->Настройки Red Apps->страница myApp RedApp.

Как я могу получить доступ к настройкам с моей веб-страницы с помощью JavaScript? Думаю, мне нужно использовать функцию callOSGIService. Но возвращает только ошибку: "Служба org.eclipse.jface.preference.IPreferenceStore не может быть вызвана из JS".


person maovrn    schedule 25.05.2014    source источник


Ответы (2)


На данный момент Red App SDK не предоставляет прямого интерфейса для доступа к IPreferenceStore напрямую через JavaScript.

Одним из способов достижения этого является доступ к IPreferenceStore через собственный класс Java и его связь с компонентом браузера через пользовательскую функцию Javascript, которая раскрывает это. Red App SDK предоставляет примеры, связанные с расширенным взаимодействием браузера с помощью Java Script.

person jmacagno    schedule 03.06.2014

Я бы согласился с Джулианом.

Просто создайте свой собственный браузер, расширяющий браузер по умолчанию, и дополните его, объявив функцию обратного вызова JavaScript:

public class MbBrowserEditor extends DefaultBrowserEditor {

    ...

    public void createPartControl(Composite parent) {
        super.createPartControl(parent);
        this.registerJavaScriptCallback(new MbJavascriptCallback(this), "callSWS");
    }

    ...
}

Регистратор JavaScriptCallback может быть таким:

public class MbJavascriptCallback extends JavaScriptCallback {

    MbBrowserEditor browserView = null;

    // javascript callback function name
    String sbMergeBack = "callBackFromPnrMb";
    // parameters for the javascript callback function
    String sSuccess = "true";
    String sMessage = "PNR Merge Back executed successfully";
    String sErrorDetail = "No error";
    ...

    /**
     * this function will be called by JS to execute a SWS workflow
     * it expects the following parameters :
     * items        :   an array of strings
     * transactions :   an array of strings
     * cbMergeBack  :   a string
     */
    @Override
    public void function(Object[] arguments) {
        // do your stuff
        callBackWebApp();
    }


    private void callBackWebApp() {
        ...

        // callback javascript (with 3 params - set your own)
        final String cbFunction = sbMergeBack+"(\"" + sSuccess + "\", \"" + sMessage + "\", \"" + sErrorDetail + "\");";

        Display.getDefault().asyncExec(new Runnable() {
            @Override
            public void run() {
                ...
                try {
                    browserView.executeJavaScript(cbFunction);
                } catch (Exception ex) {
                    ...
                }
            }
        });
    }
    ...
}

это сработало здесь

person ccampisano    schedule 26.07.2014