云服务器价格_云数据库_云主机【优惠】最新活动-搜集站云资讯

阿里云_新东方企业邮箱登陆_精选特惠

小七 141 0

12.05.2017在比较上次更改日期的时间戳和更新方法中从etag读取的时间戳之前,添加了锁定数据的代码。16.05.2017修复了创建函数import的MPC\u EXT代码在比较上次更改日期的时间戳和从函数导入

中的etag读取的时间戳之前,添加了锁定数据的代码。如果实体类型的属性被标记为etag,SAP Gateway提供了对etag的现成支持。使用通用框架支持时,在使用Etag时会发生以下情况。

在执行更新之前,集线器上的网关框架会执行读取请求,并将客户端发送的Etag与从后端检索的Etag进行比较。框架提供的Etag处理不需要任何编码,但需要实现GET\u ENTITY方法。提供了通用的SAP网关框架支持以供读取,更新和删除请求。

不使用通用框架支持,可以在SAP Business Suite后端系统中执行基于代码的实现。

这有一些优点,因为它允许开发人员在执行更新之前检查etag时锁定数据。当使用现成的框架支持时,这是不可能的,并且您不能100%确定另一个用户在框架的读取请求和您的更新请求之间的短时间内更新了数据。

第二个优点是基于代码的实现还为函数导入提供etag支持。

处理从SAP Gateway 2.0 SP09和SAP NetWeaver 740 SP08开始,后端中的ETag可用。你必须实现一些方法,在这些方法中你必须添加代码来告诉框架数据提供者类已经实现了ETag处理。

这个博客是基于一个OData服务的,这个OData服务已经在我下面的博客中被删除:

ETag通常是当一个实体被更新时被更新的时间戳。但是,对于更复杂的场景,超级淘客,时间戳可能不是最佳选择,数据中国,而hashtag是更好的方法。如何实现一个基于hash标签的etag已经在下面的博客中进行了描述https://blogs.sap.com/2016/03/18/maintain-data-concurrency-in-odata/通过Thiru Siva

在进行基于代码的开发时,您可以选择应在实体类型级别用作etag的属性。

如果您使用了引用的数据源,大数据怎么查询,请必须在模型提供程序扩展类的DEFINE方法中执行这些更改。

在我们在下面的博客中使用的OData服务的DEFINE方法中

我们必须添加到行中,以便将属性"LastChangedDateTime"设置为实体类型"Zsepm\u C\u Salesorder\u TplType"的etag。

在实施了这些更改尝试使用http状态代码428值"Precondition Required"执行更新时,您将收到以下错误消息。

此检查由集线器上的SAP网关框架完成。

我们必须添加一个if match http头,其值如下此:

W/"datetimeoffset'2017-05-05T09%3A15%3A05.6050000Z'"

在网关客户端中,您可以轻松添加此标头,如下面的屏幕截图所示。

如果现在再次执行更新请求,我们将收到一个空http响应,http返回码204,表示更新成功。

如果您尝试执行更新不更改etag值的更新您将收到错误消息Precondition Failed with a http return code 428.

/IWBEP/IF\u MGW\u APPL\u SRV\u RUNTIME~GET\u IS\u CONDITIONAL\u IMPLEMENTED

我们首先必须实现方法/IWBEP/IF\u MGW\u APPL\u SRV\u RUNTIME~GET\u IS\u CONDITIONAL\u IMPLEMENTED,云服务器品牌,添加以下代码

请注意我们使用引用的数据源和服务生成器创建的服务的enity集的名称称为"Zsepm\u C\u Salesorder\u Tpl"。对于其他实体集,框架将处理Etag支持。

由于SAP Gatway Hub框架现在不执行Etag处理,我们必须将以下代码添加到我们的更新方法中,否则所有更新的请求都将在不检查Etag内容的情况下执行。

将Etag检查添加到更新方法

我们现在有对更新方法进行编码,首先通过比较上次更改日期的值与if match头中更新请求提供的值来检查销售订单是否没有更改。

为此,我们使用io技术请求上下文对象的get\u conditional\u info方法。此方法返回深度结构中的if\u match以及if\u non\u match标头,我们必须对其进行评估。

此外,大数据分析技术,我们正在锁定要在执行更新之前更新的销售订单。

如果未更新则解除锁定,如果检查etag失败则执行该锁定。

如果在代码中添加断点,则可以看到在事务SM12中获取锁。

添加函数导入

由于我们使用的服务是使用引用的数据源方法生成的,因此我们无法使用service builder创建函数导入。原因是创建函数导入的对话框找不到CDS视图的实体类型和实体集。

因此,我们必须通过向模块提供程序扩展类的DEFINE方法添加代码来创建函数导入"ConfirmOrder"。

通过后端激活etag支持

如果要添加etag对函数的支持模块您必须实现以下方法/IWBEP/IF\u MGW\u APPL\u SRV\u RUNTIME~GET\u IS\u CONDI\u IMPLE\u FOR\u ACTION。在这种情况下,代码将通知框架,条件处理是由后端的服务实现为函数导入"ConfirmOrder"完成的。

实现函数导入并添加etag支持

通过实现方法/iwbep/如果\u mgw\u appl\u srv\u runtime~ execute\u action,我们可以向函数添加业务逻辑导入

像在更新方法中一样,在检查etag之前添加了锁定销售订单的代码。只有在检查了销售订单之后。未被其他用户更改状态已更新。

因此,我们现在可以通过执行以下URI执行乐观锁定的销售订单确认。