我在SAP应用菲奥里两个领域: Template_ID
和Offer_ID
。
我想选择中值Offer_ID
根据Template_ID
字段值。
为了解决这个问题,我试图做到这一点的步骤:
当用户点击Template_ID
在后端运行领域的方法:
CL_CUAN_CAMPAIGN_DPC->contentset_get_entityset()
该方法已返回paramater et_result
。 在et_result
我有必要的实地temp_id
。
为了节省temp_id
价值我创建了一流的全局属性ZCL_CUAN_CLASS
。
ZCL_CUAN_CLASS=>GV_CONTENT = VALUE #( et_result[ 1 ]-temp_ID OPTIONAL ).
我将使用这个全局属性作为input
我的第二个方法参数:
CL_CUAN_CAMPAIGN_DPC->GET_OFFER_BY_TEMPLATE()
这个方法返回给我的内部表与offer_id
,属于我的choosen temp_id
。
但是,当用户点击Offer_ID
Web的用户界面领域,调试我看到我的全局属性是空白。
可它是因为会议或其他什么东西,但它是空白。
的OData是无状态协议 ,这意味着服务器响应您的查询,然后忘记你曾经有。 根据定义,这不会让你从一个请求到下一个传输主内存的内容。
另一方面,用户界面通常需要的状态。 它可以通过下列选项之一来获得:
有状态的用户界面
正如豪杰所指出的,一种解决方案是存储在所述用户界面选择的数据和与下一个请求提交它作为一个过滤标准回服务器。 有一个有状态的用户界面是无状态的服务器应用程序的标准解决方案。
有状态的持久性
另一种选择是preferredly永久存储数据在服务器的数据库中,ABAP的业务对象。 这个对象有一个唯一的标识符,可能是一个GUID,您可以在您的要求参考,以确定您正在使用的进程。
持续草案
如果不是所有的信息都在一个步骤可用,如在多步骤的向导,不应该成为“活动”马上,或者您希望能够切换设备,而在一个多步骤的过程工作,汇票是一种选择。 汇票是定期的业务对象,与一个专门它们保持惰性,直到用户触发最终激活步骤。
软状态
对于性能优化,你可以看看SAP网关的软状态模式 ,它允许你缓存一些数据能够对相关的要求更快速地响应。 这是一般不提倡,虽然,因为它违背的OData的无状态的范例。
状态协议
在某些情况下,如OData的无状态协议是不正确的方式去。 例如,银行应用程序仍倾向于属于状态,以避免用户留在无限登录,并因此成为容易受到像CSRF攻击。 如果这是你的话,你应该看看ABAP WebDynpro为用户界面。 一般来说,因为他们结合大量的长时间的服务器资源,因此无法处理更大的用户数量有状态的服务器协议被认为逊色。
当OFFERID场疗法用户点击,就会启动一个新的会话,当然你作为存储GV_CONTENT
类ZCL_CUAN_CLASS
丢失。
你应该做的是,对第二个请求,你应该发送带有过滤器的后端Template_ID
所以在您的CL_CUAN_CAMPAIGN_DPC->GET_OFFER_BY_TEMPLATE()
方法,您可以进一步处理由结果Template_ID
。
或SET / GET参数。