从客户端javascript发送数据SAP Fiori启动板webapp / SAPUI5 webapp

时间:2016-06-13 11:37:36

标签: javascript sapui5

这是一个普遍的问题,因为我正在探索在我的工作场所自动执行某些任务的世界。

我们的商家网站上有一个门户/启动板环境,其中的应用程序显示为磁贴。

其中一个应用程序在打开时有一个主页,其中有一堆搜索字段和选择器与(我假设)SAP数据接口。

最终我的目标是能够将数字发送到客户端本地webapp上的特定搜索字段(只是普通的旧HTML / jquery内容),然后在sapui webapp中搜索该数字。

我正在使用javascript / HTML / CSS达到一个称职的水平,但我完全迷失在哪里开始这类问题,因为MVC的东西对我来说完全不同。

我所有的经验都是创建完全客户端的Web应用程序,主要是与本地MS Access数据库的接口。

我建议甚至可能吗?

到目前为止,我可以通过执行组织中其他人使用的以下代码来打开主页:

window.open('https://fiori.mycompany.com/sap/bc/ui5_ui5/sap/z_cs_ch/index.html

是否可以在网址末尾的?....后添加某种形式的字符串?

我再次对此完全陌生,看看sapui网站上的开发指南也没有任何消息。可能是因为我并不确切地知道我在寻找什么!

非常感谢任何帮助/指导。

修改 在下面的评论之后,我可以看到发送到服务器的请求采用以下格式:

Request GET /sap/opu/odata/sap/someotherlocation/SearchTerm('<variable to search for>')?$format=json HTTP/1.1

我是否正确地认为我可能会发送ajax请求来做类似的事情?如果是这样,我该怎么做呢?

再次感谢

3 个答案:

答案 0 :(得分:1)

有可能实现这一点,但我认为它不是一个真正好的解决方案,填充另一个Web应用程序中的字段并触发搜索。

如果您了解此Fiori应用程序使用的后端服务并直接集成该服务,那会更好。如果它是Fiori App我可能是OData / REST服务。 Odata / REST服务也可以通过HTML / jquery JavaScript调用。

要确定网络应用与搜索字段一起使用的服务网址和有效负载,只需使用Chrome调试工具(或其他浏览器调试工具),然后在网络下查看哪个服务器地址和哪些有效负载参数已发送当您手动触发搜索时,到服务器。希望对你有所帮助。

答案 1 :(得分:1)

在整个Fiori概念中,绝对有可能让应用程序调用其他应用程序并让它们在用户期望的时刻准确打开。例如。从订单中单击要带到物料主数据的产品,并让物料主应用程序准确显示用户单击的产品。

正如您所提到的,这确实需要目标应用程序(导航到)来支持某些参数。您在问题中已经提到过,您想知道是否可以添加&#34;?....&#34;部分到URL。 Fiori应用程序肯定支持这个概念,但它的实现方式在很大程度上取决于应用程序本身。在我之前的例子中,它可以像虽然添加?product_id=abcde

Fiori内置了非常好的可扩展性概念。因此,如果您的目标应用程序并不完全支持您打算传递的参数,您可以轻松扩展应用程序以支持它,而无需重写复制整个应用程序(当您收到更新时,这将是一场灾难原始开发人员)。

要从一个Fiori应用程序导航到另一个,建议使用Fiori启动板附带的toExternal服务的CrossApplicationNavigation方法。此服务允许您指定参数,例如您要导航到的应用,意图(显示,创建等),参数(例如产品ID)和应用特定路线(例如/ supplierdetails以查看供应商产品的详细信息)。

CrossApplicationNavigation服务正式记录在SAPUI5 SDK中,但我担心SDK并不包含非常复杂的描述。但是,如果您使用谷歌,那么您也可以在此主题上找到关于SCN和Stackoverflow的大量信息和示例。

答案 2 :(得分:0)

正如我在这里所承诺的那样 - 实际上从其他地方的答案中得到了整体方法。

这将发回足够的详细信息,我至少可以向用户显示一些更新但是在搜索后我相信我真正需要做的是批量请求...我正在研究Apache Olingo到看看是否可能。

    function orderSmmary(SO) {
    var uri = "https://fiori.<company>.com/sap/opu/odata/sap/<environment>/Details('"+ SO + "')?$format=json";

    var http_request = new XMLHttpRequest();
    http_request.onreadystatechange  = function() {
        if (http_request.readyState == 4  ) {
            var data = JSON.parse(http_request.responseText);
            // Do lots of awesome stuff with response
        }
    }

    http_request.open('GET',uri, true);
    http_request.setRequestHeader("Authorization", "Negotiate");
    http_request.send();    
}

同样,这完全是客户端解决方案,完全在任何flori环境之外,所以我希望保持完全基于javascript。