如何对B1IF中的数据列表执行SQL Atom

2020-09-12 05:00发布

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

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


专家们,

通过使用第三方API服务(使用HTTP调用),我可以获得业务合作伙伴数据列表。

现在,有了这个BP列表,使用for-each循环抛出,我想将业务伙伴数据更新到SAP B1(OCRD)表中。

这是业务合作伙伴xform原子列表(绿色框)。

 
          
          
         <!-xsl:value-of select =" $ length"> 
         
             <!-在变量中存储值->
              
              
              
           
             <!-SQL调用->
             
              -这里UPDATE查询
        例如:更新OCRD设置CardName ='XYZ'WHERE CARDCODE ='C0009'
            
             
         
         
             
                  
                  
             
         
      

使用SQL标记,我只能查看SQL查询(UPDATE OCRD SET CARDNAME ='XYZ'WHERE CARDCODE ='C0009'),无法执行查询。

如果我有任何遗漏,请建议我,

谢谢

Chenna。

(14.2 kB)

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

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


专家们,

通过使用第三方API服务(使用HTTP调用),我可以获得业务合作伙伴数据列表。

现在,有了这个BP列表,使用for-each循环抛出,我想将业务伙伴数据更新到SAP B1(OCRD)表中。

这是业务合作伙伴xform原子列表(绿色框)。

 
          
          
         <!-xsl:value-of select =" $ length"> 
         
             <!-在变量中存储值->
              
              
              
           
             <!-SQL调用->
             
              -这里UPDATE查询
        例如:更新OCRD设置CardName ='XYZ'WHERE CARDCODE ='C0009'
            
             
         
         
             
                  
                  
             
         
      

使用SQL标记,我只能查看SQL查询(UPDATE OCRD SET CARDNAME ='XYZ'WHERE CARDCODE ='C0009'),无法执行查询。

如果我有任何遗漏,请建议我,

谢谢

Chenna。

(14.2 kB)
付费偷看设置
发送
7条回答
奄奄一息的小鱼
1楼 · 2020-09-12 05:19.采纳回答

Chenna

有两种方法可以实现此目标:对于每个处理原子和元素。 当您可以改用XSL元素时,不建议使用foreach处理原子。

1)使用处理原子:

在我的基本场景中,我有1个具有传入XML的原子

 <传入>
     
          782076 
         十-10-1 
          
          
          
          www.supportten.com 
          
          
          
          
         <状态> 
          
     
     
          796691 
         艺术与咨询
          
          
          
          www.vFx-consulting.co.in 
          
          
          
          
         <状态> 
          
     
     
          782077 
         客户公司
          +91 950 254 22 82 
          
          
          http://www.cccomp.com 
         工业大道1号
          
          MyCity 
          306345 
          StateRecord 
         印度
     
     
          782927 
          XYZ 
          
          
          
          
          
          
          
          
         <状态> 
          
     
 
 

场景流程和foreach XPath表达式如下:

然后,如果我调试场景,我可以看到有4个传入的对象有4个会话:

这是非(!)推荐的方法。

2)使用XSLT foreach转换:

在这里,您可以在xform原子中准备一个复杂的对象。 处理流程将非常简单:

其中的转换方式如下:

< pre> 2 <版本> 2 <业务伙伴> <行> <卡名> <卡类型> 客户

相同的逻辑可以应用于SQL Call原子。

悻福寶寶
2楼-- · 2020-09-12 05:16

Sergei Travkin,

在这里,我有一点疑问,请您澄清一下。

我得到了xform atom7返回XML结果,如下所示:

 <有效负载角色=" X" id =" atom7">
 <业务伙伴>
 <行>
  781708 
  Spcece 
  cCustomer 
 
 

 <行>
  782921 
  ABC 
  cCustomer 
 
 

 <行>
  796690 
  Adrian Michel AG 
  cCustomer 
 
 

 <行>
  782680 
  BP-TEST-3 
  cCustomer 
 
 
 
  

下一步,我将创建B1object原子,

DOUBT IS:B1object原子,使用#Synchronous Insert和后备Update方法自动执行以上所有4条记录数据(插入/更新)? 还是我需要编写其他逻辑?

能请您澄清我的疑问吗?

谢谢

Chenna。

四川大学会员
3楼-- · 2020-09-12 05:17

您好, Chenna Gadicherla

首先,绝对不允许在系统表上直接进行SQL更新/删除/插入。

请参阅此博客文章和SAP注意 1320484 有关修改SAP Business One数据的准则。

第二,B1iF还有其他几种方法可以使用 您将能够实现所需的功能。 例如:您可以仅在B1if中创建方案。 我建议使用官方支持的方式。

希望它会有所帮助!

亲切的问候

ANKIT CHAUHAN

SAP Business One支持

nice_wp
4楼-- · 2020-09-12 05:25

嗨,Sergei Travkin,

感谢您的及时重播,

在我的场景中,我已经使用了sqlCall原子,但是,这里的问题是如何调用sqlCall原子或B1对象原子来获取结果列表(我的意思是在for-each循环中,我希望每条记录都调用sqlCall )。

下面是PayloadRole =" C" id =" atom5" xform结果

 
  782076 
 十-10-1 
 
 
 
  www.supportten.com 
 
 
 
 
 <状态/>
 <国家/地区
//这里我想调用SQLCALL原子
 

 
  796691 
 艺术与咨询
 
 
 
  www.vFx-consulting.co.in 
 
 
 
 
 <状态/>
 <国家/地区
//这里我想调用SQLCALL原子
 

 
  782077 
 客户公司
  +91 950 254 22 82 
 
 
  http://www.cccomp.com 
 工业大道1号
 
  MyCity 
  306345 
  StateRecord 
 印度
//这里我想调用SQLCALL原子
 

 
  782927 
  XYZ 
 
 
 
 
 
 
 
 
 <状态/>
 <国家/地区
//这里我想调用SQLCALL原子
 
 

在我的下一个原子中,我创建了sqlcall原子,但是使用此sqlcall原子,它仅执行一次。 我的场景我想明智地对每个记录执行sqlcall(如上述代码示例所示)。

请建议我,如何实现上述方案。

谢谢

Chenna

微wx笑
5楼-- · 2020-09-12 05:28

您好,Chenna,

您可以通过sqlCall原子执行所有类型的SQL指令,但是您不应该这样做。 禁止使用直接SQL更新系统对象字段。 您需要改为使用B1对象原子(或HANA的服务层对象)。 否则,您可能会破坏数据完整性并失去对此数据库的SAP支持。

昵称总是被占用
6楼-- · 2020-09-12 05:02

Chenna

我不确定100%是否可以用这种方式进行更新,但是 键值选项肯定不正确。 如果可以通过这种方式进行更新,则必须传递多个值,请查看B1对象原子的文档。 您也可以检查多对象出站("帮助"->"文档"->"出站"->" B1"对象)。 如果您想在流程中使用它,我会考虑使用图形化的for-each原子。

Baoming ROSE
7楼-- · 2020-09-12 05:18

嗨,

我实现了超出要求的情况。

通过以下步骤:

使用HTTPCall,我获得了公司结果列表。

现在,在我的绿色方框" xform" atom(atom7)中,我编写了for-each循环逻辑来设置SQL查询

 
         
             
                 
                      
                 
                 
                      
                 
                 '
                 更新OCRD设置CardName =   WHERE CardCode =  
             
         
  

在我的atom7中,SQL标记返回的结果如下:

更新OCRD设置CardName ='XYZ'其中CardCode ='C0009'; 更新OCRD设置CardName ='ABC'其中CardCode ='C00010'; .......

下一步,我创建了" sqlCall" atom,在此窗口中,我给了sql查询原子ID(atom7)

'atom7'处理SQL语句,它将执行SQL语句。

最后将数据更新到OCRD表中。

谢谢

Chenna

一周热门 更多>

点击此处---> EasySAP.com 一起学习S4 HANA ...

相关问答