我花了最后几个小时试图在“Apache Ofbiz Cookbook”和“Apache Ofbiz开发:初学者教程”中找到答案如何从Java方法获取Ofbiz中的DispatchContext。 Ruth Hoffman的Cookbook不包括她刚刚说的“准备任何上下文参数”的代码p.43。我可以理解你在注册服务或事件时如何获得DispatchContext但是如何从Java中获取它?谢谢。
我正在尝试从Tomcat中的REST Web服务的服务器端填充我在Ofbiz中定义的Ofbiz实体/表。
GenericDelegator delegator = ctx.getDelegator();
GenericValue myTable = delegator.makeValue("MyTable");
myTable.set("name", myTableAsJson.getString("name"));
try {
delegator.store(offering);
} catch(Exception e) {
}
答案 0 :(得分:5)
在Java方法/事件中,可以使用以下代码片段获取调度上下文:
GenericDispatcher dispatcher = (GenericDispatcher) request.getAttribute("dispatcher");
DispatchContext dctx = dispatcher.getDispatchContext();
在Java方法/事件中,可以使用以下代码片段调用任何服务:
GenericDispatcher dispatcher = (GenericDispatcher) request.getAttribute("dispatcher");
dispatcher.runSync("SERVICE_NAME", context);
其中context是所需的IN / IN-OUT参数到服务的映射。
要从Java方法/事件调用服务,不需要paas dispatch context。只需要服务名称和上下文。
答案 1 :(得分:0)
此方法不再起作用。来自控制器的HttpServletRequest仍将具有属性“ dispatcher”,但您现在必须将其强制转换为LocalDispatcher类,然后使用该类来获取DispatchContext。
这来自OFBiz服务引擎文档[1]: “服务框架的内部使用非常简单。在Web应用程序中,LocalDispatcher存储在ServletContext中,可以通过Event中的Session对象访问。”
这对我有用:
Delegator delegator = (Delegator) request.getAttribute("delegator");
LocalDispatcher ld = (LocalDispatcher) request.getAttribute("dispatcher");
DispatchContext dctx = ld.getDispatchContext();
[1] https://cwiki.apache.org/confluence/display/OFBIZ/Service+Engine+Guide