impex中的insert_update,但仅在插入期间使用值

2020-09-03 20:28发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


嗨,

我正在尝试通过Datahub将数据导入Hybris,并且遇到了以下问题:我们的Hybris模型中的必填字段(电子邮件地址)之一来自另一个系统,但可由用户更改 。 因此,当首次导入用户数据时,将正确插入电子邮件地址。 但是,如果用户随后在Hybris中更改其电子邮件地址,并且该用户再次从后端系统中导出,则该电子邮件地址将被原始值覆盖。 在impex文件中,是否可以在列上指定仅在INSERT而不是UPDATE期间使用其值?

史蒂芬

PS。 我已经简化了这种情况,所以请不要讨论要求:-)

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


嗨,

我正在尝试通过Datahub将数据导入Hybris,并且遇到了以下问题:我们的Hybris模型中的必填字段(电子邮件地址)之一来自另一个系统,但可由用户更改 。 因此,当首次导入用户数据时,将正确插入电子邮件地址。 但是,如果用户随后在Hybris中更改其电子邮件地址,并且该用户再次从后端系统中导出,则该电子邮件地址将被原始值覆盖。 在impex文件中,是否可以在列上指定仅在INSERT而不是UPDATE期间使用其值?

史蒂芬

PS。 我已经简化了这种情况,所以请不要讨论要求:-)

付费偷看设置
发送
7条回答
悻福寶寶
1楼-- · 2020-09-03 20:51

我们在语言方面也面临类似的情况。 导入新语言时,active的值是强制性的,并且首次导入时该值必须为false。 在为其他字段更新语言时,我们不希望更新active的值,因为它对于平台内的实现方案是可维护的。 如果禁止使用某种语言,则必须使用主动false来重新导入它,就像第一次一样。

解决方案是构建一个impex文件,该文件作为可选INSERT 行,然后是 UPDATE 。

请参阅beforeEach的用法,该操作会擦除数据库中已存在的行。 代码中的 line 字段是Map

  INSERT语言; isocode [unique = true];有效
  #%beforeEach:if(FlexibleSearch.getInstance()。search("从{语言}中选择{pk},在{isocode} ='" + line.get(1)+"'",de.hybris.platform.jalo中。  c2l.Language.class).getCount()> 0)line.clear();
  ; de; false
  ; en; false
  ; fr; false

  UPDATE语言; isocode [unique = true]; sapCode; name [lang = de]; name [lang = en]; name [lang = fr]
  ; de; D;" Deutsch";" German";" Allemand"
  ; en; E;"英语";"英语";"英语"
  ; fr; F;"Französisch";"法语";"Français"
  
DafaDDDa
2楼-- · 2020-09-03 21:01

嗨,

您找到了解决此问题的任何方法吗?

浮生未央
3楼-- · 2020-09-03 20:56

您可以创建两个单独的impex,一个 用于初始加载,另一个用于更新。 在更新文件中,省略电子邮件地址,现有值将不会被覆盖。

您需要的功能是impex文件中INSERT和UPDATE之间的区别。

大简至美
4楼-- · 2020-09-03 20:58

我认为忽略值不起作用,因为在这种情况下,电子邮件地址是必填字段。

xfwsx85
5楼-- · 2020-09-03 20:42

从面向服务的角度来看,您应该定义哪个系统是领先的。 就您而言,这听起来像是后端系统。 因此,更新不应由hybris处理。

您可以将请求发送到后端以进行更改,而不是立即将电子邮件更改保留在hybris中。 然后,杂波将通过现有的DataHub通道进行更新。

Cikesha
6楼-- · 2020-09-03 20:56

正如我在原始问题中提到的那样,我正在使用Datahub,因此对生成的实际impex语句几乎没有控制。 例如,当前不可能让datahub生成UPDATE语句,它将始终使用INSERT或INSERT_UPDATE。 而且,只能通过覆盖执行实际impex生成的bean来更改此行为。 不幸的是,包含实际逻辑的方法是私有的,因此不易被覆盖。

一周热门 更多>