具有Java增强方向的XSLT映射

2020-08-19 12:32发布

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

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


专家们,

我开始学习XSLT映射,尽管我认为我已经掌握了一些基础知识,但是我仍在努力理解Java增强功能。 我已经尝试过许多博客和网站,但是必须很旧,链接指向不再存在的页面。 我有几个问题。

对于其中一个,我不确定这是否始终可行或取决于处理器。

第二,我不知道如何正确调用Java类。 在XSLT文件中,我声明在示例代码中找到的名称空间。 但是我不知道自己在哪里可以找到这些命名空间,或者现在如何知道特定类或函数所需的命名空间?

第三,我无法使用XSLT常量,例如$ MessageId。 我声明了一个MessageId参数,但是当尝试输出该数字时,该字段保持为空。 我使用ESR的测试功能,所以也许在那里没有构造MessageId(仅当发送真实消息时)?

我有一个输入IDOC,为了练习,我尝试连接两个值TABNAM和MESTYP。

 <?xml version =" 1.0" encoding =" UTF-8"?>
 
 
 
  EDI_DC40 
  310 
  0000000280974044 
  750 
  30 
  1 
  2 
  ZIKDTA01 
  ZMKADATA 
  SAPQAS 
  LS 
  QAS_310 
  SAPQX3_300 
  LS 
  QKADATA001 
  20200428 
  151804 
  20200428151804 
  

我的XSLT当前看起来像这样(部分)

 <?xml version =" 1.0" encoding =" UTF-8"?>
 

 

 

 
 
 
 
 
 

 

 
 
 <消息>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

这是Java代码:

包com.company.group;
 导入java.util.Map;
 导入com.sap.aii.mapping.api.AbstractTrace;
 导入com.sap.aii.mapping.api.StreamTransformationConstants;
 公共类MappingClass {
 公共静态字符串concat(String Table,
 字符串消息,
 地图输入参数)
 {
 跟踪=(AbstractTrace)inputparam.get(
 StreamTranformationConstants.MAPPING_TRACE);
 trace.addInfo(" concat():
 \ nTABNAM =" +表格+
 \ nMESTYP =" +消息);
 返回表+''+消息;
 }
 }


 

对于串联,我以SAP文档中的示例为例 https://help.sap.com/saphelp_nwpi71/helpdata/en/73/f61eea1741453eb8f794e150067930/content.htm?no_cache=true 在我的情况下,它跳过了XSLT中的javamap:concat部分。 此外,Mes

它不起作用,因为我对此不太熟悉,所以我不知道在哪里寻找答案:我的Java类正确吗? 处理器不能处理这个,我的XSLT错误吗?

在ESR中,我将XSLT和Java文件作为导入的档案上传并获得以下测试结果:

(128.8 kB)

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

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


专家们,

我开始学习XSLT映射,尽管我认为我已经掌握了一些基础知识,但是我仍在努力理解Java增强功能。 我已经尝试过许多博客和网站,但是必须很旧,链接指向不再存在的页面。 我有几个问题。

对于其中一个,我不确定这是否始终可行或取决于处理器。

第二,我不知道如何正确调用Java类。 在XSLT文件中,我声明在示例代码中找到的名称空间。 但是我不知道自己在哪里可以找到这些命名空间,或者现在如何知道特定类或函数所需的命名空间?

第三,我无法使用XSLT常量,例如$ MessageId。 我声明了一个MessageId参数,但是当尝试输出该数字时,该字段保持为空。 我使用ESR的测试功能,所以也许在那里没有构造MessageId(仅当发送真实消息时)?

我有一个输入IDOC,为了练习,我尝试连接两个值TABNAM和MESTYP。

 <?xml version =" 1.0" encoding =" UTF-8"?>
 
 
 
  EDI_DC40 
  310 
  0000000280974044 
  750 
  30 
  1 
  2 
  ZIKDTA01 
  ZMKADATA 
  SAPQAS 
  LS 
  QAS_310 
  SAPQX3_300 
  LS 
  QKADATA001 
  20200428 
  151804 
  20200428151804 
  

我的XSLT当前看起来像这样(部分)

 <?xml version =" 1.0" encoding =" UTF-8"?>
 

 

 

 
 
 
 
 
 

 

 
 
 <消息>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

这是Java代码:

包com.company.group;
 导入java.util.Map;
 导入com.sap.aii.mapping.api.AbstractTrace;
 导入com.sap.aii.mapping.api.StreamTransformationConstants;
 公共类MappingClass {
 公共静态字符串concat(String Table,
 字符串消息,
 地图输入参数)
 {
 跟踪=(AbstractTrace)inputparam.get(
 StreamTranformationConstants.MAPPING_TRACE);
 trace.addInfo(" concat():
 \ nTABNAM =" +表格+
 \ nMESTYP =" +消息);
 返回表+''+消息;
 }
 }


 

对于串联,我以SAP文档中的示例为例 https://help.sap.com/saphelp_nwpi71/helpdata/en/73/f61eea1741453eb8f794e150067930/content.htm?no_cache=true 在我的情况下,它跳过了XSLT中的javamap:concat部分。 此外,Mes

它不起作用,因为我对此不太熟悉,所以我不知道在哪里寻找答案:我的Java类正确吗? 处理器不能处理这个,我的XSLT错误吗?

在ESR中,我将XSLT和Java文件作为导入的档案上传并获得以下测试结果:

(128.8 kB)
付费偷看设置
发送
4条回答
落灬小鱼
1楼-- · 2020-08-19 12:39

嗨Reinout,

乍一看一切都很好。 我会做类似的。 有两种猜测可能会有所帮助:

  1. 您是否尝试过选中"操作映射"中的"使用SAP XML Toolkit"框。 (不需要,但有时它确实会产生奇迹...)
  2. 您是否尝试过将Java类文件放置到与ZIP中的XSL文件相同的级别上? (看来您将Java文件放在XSL下方的子目录中。请尝试将Java类放在ZIP文件的根目录上。)
Bunny_CDM
2楼-- · 2020-08-19 12:48

我想 " java"是一个文件夹... .zip文件应包含您Java开发的JAR文件。 此文件还应该具有.jar作为文件扩展名。

宇峰Kouji
3楼-- · 2020-08-19 12:53

嗨!

为了在ESR中测试操作映射时使用" MessageId"参数,应在OM"测试"页面的"参数"选项卡上手动填写相应的参数:

关于使用Java扩展,我建议从名称空间中删除" java"前缀。

此外,如果要在java类中传递map-type参数,则应将其强制转换为适当的Java类型:

xmlns:xsltc =" http://xml.apache.org/xalan/xsltc "

...

在将其用作方法的参数之前。

关于,Evgeniy。

SAP砖家
4楼-- · 2020-08-19 12:40

嗨!

.zip存档中的" java"文件是什么?

您应该提供。 包含.class文件的jar存档。

致谢,Evgeniy。

一周热门 更多>