在Sabre RedApp中使用JavaScript调用OSGI服务IPreferenceStore

时间:2014-05-25 14:55:57

标签: sabre

我使用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的myApp页面中查看和编辑设置。

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

2 个答案:

答案 0 :(得分: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) {
                    ...
                }
            }
        });
    }
    ...
}

工作得很好here

答案 1 :(得分:0)

目前Red App SDK没有直接通过JavaScript提供直接访问IPreferenceStore的界面。

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