0

我使用 RedApp_2.10 Developer Toolkit 创建了 Sabre Red App Web 服务应用程序。该应用程序类似于工具包中的 com.sabre.redapp.example.cf.webapp.services 示例。该应用程序包含一些存储在 org.eclipse.jface.preference.IPreferenceStore Java 容器中的设置,如示例 com.sabre.redapp.example.editor.basic 中所示。结果,我可以在 RedApp 的 Tools->Options->Red Apps Settings->myApp 页面中查看和编辑设置。

如何使用 JavaScript 从我的网页访问设置?猜猜我需要使用 callOSGIService 函数。但它只返回错误:“无法从 JS 调用服务 org.eclipse.jface.preference.IPreferenceStore”。

4

2 回答 2

1

我同意朱利安的观点。

只需创建您自己的浏览器扩展默认浏览器并扩展它并声明一个 JavaScript 回调函数:

public class MbBrowserEditor extends DefaultBrowserEditor {

    ...

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

    ...
}

registererd 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) {
                    ...
                }
            }
        });
    }
    ...
}

在这里工作得很好

于 2014-07-26T10:05:48.967 回答
0

目前 Red App SDK 不提供直接通过 JavaScript 访问 IPreferenceStore 的直接接口。

实现此目的的一个选项是通过本机 Java 类访问 IPreferenceStore,并通过自定义 Javascript 函数与浏览器组件进行通信,该函数将公开这一点。Red App SDK 提供了与来自 Java Script 的高级浏览器通信相关的示例。

于 2014-06-03T01:39:48.707 回答