系统调用说明管理模式导致错误

2020-08-15 16:46发布

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

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


有人给我一个用于SQL查询的RFC。

 TYPE-POOLS:abap。
   数据:
         columnName TYPE SO_TEXT,
         fieldDataDescrRef类型参考abap_componentdescr,
         numberFields TYPE i,
         fieldDescr TYPE abap_componentdescr,
         字段名TYPE字符串,
         fieldDescrTab TYPE abap_component_tab,
         rowStructDescr类型参考cl_abap_structdescr,
         rowReference TYPE REF TO数据,
         returnRowString TYPE字符串,
         dataFieldString TYPE字符串,
         数据线类数据,
         fromClauseRow TYPE ZSQL_CLAUSE_ELEMENTS,
         fromClauseString TYPE字符串,
         其中,ClauseRow类型为ZSQL_CLAUSE_ELEMENTS,
         whereClauseString TYPE字符串,
         栏位类型为ZSQL_CLAUSE_ELEMENTS,
         FNAME(600)VALUE'myfile'。

   字段符号:
            TYPE ANY,
           <数据字段> TYPE ANY。
 *使用字段名称创建DataStructure
 *数据类型是从FIELDS输入表的字段名中读取的
   描述表字段行numberFields。

   将字段环入字段行。
     栏位名称= SY-TABIX。
 *名称必须唯一,并且必须以char开头
     CONCATENATE'字符串'字段名INTO字段名。
     CONDENSE字段名称。
     fieldDescr-name =字段名。
 *对于字典查找,我们需要从Open SQL更改列名
 *到字典符号
     columnName = fieldsRow-TEXT。
     用'-'替换大小写来替换columnName中用'〜'开头的情况。
     fieldDescr-type?= cl_abap_typedescr => describe_by_name(columnName)。
     将fieldDescr附加到fieldDescrTab。
   结局。

   rowStructDescr = cl_abap_structdescr => create(fieldDescrTab)。
 *现在我们在内存中创建实际的数据结构
   创建数据rowReference类型的HANDLE rowStructDescr。
 *最后,我们将其分配给select语句使用的字段符号
   ASSIGN rowReference-> *至。
 *结束创建数据结构

 *为了简化调用,我们将字符串从哪里串联起来
 *这样,呼叫者无需检查自动换行
   fromClauseString =''。
   从FROMCLAUSE跳入fromClauseRow。
     CONCATENATE fromClauseString fromClauseRow-TEXT INTO from ClauseString。
   结局。
   whereClauseString =''。
   将WHERECLAUSE放入ClauseRow。
     CONCATENATE whereClauseString whereClauseRow-TEXT到whereClauseString中。
   结局。
 *现在开始实际选择操作
   从(fromClauseString)中选择(FIELDS)INTO 在哪里(whereClauseString)。
 *我们读取当前行的所有字段,将其强制转换为字符串,然后
 *用除法字符将其连接成数据线。
     清除:returnRowString。
     DO numberFields TIMES。
       结构的ASSIGN组件sy-index。
       dataFieldString = <数据字段>。
       CONCATENATE returnRowString'^'数据字段字符串INTO returnRowString。
     ENDDO。
     数据线= returnRowString。
 *最后,数据线被添加到返回表中。
     将数据线插入表数据中。
   ENDSELECT。
 打开DATASET FNAME,以附加默认模式的文本模式。
 将whereClauseString转移到FNAME。
 如果SY-SUBRC <> 0。
   写:" SY-SUBRC:",SY-SUBRC,
       /"系统消息:"。
 万一。
 CLOSE DATASET FNAME。

有时在FIELDS循环的下面一行中发生错误。

 fieldDescr-type?= cl_abap_typedescr => describe_by_name(columnName)。

FIELDS是内部表,其行类型为char(72)。 我尝试了两个测试用例,案例1 FIELDS为'cosp_bak〜objnr',并且还可以。 当我用" cskt〜bukrs"测试时,此行有错误。 我调试了此方法,并在下面的行中引起了错误。

 case_kind_all admin_tab_line-kind admin_tab_line-xtype。
 当别人。
 *所有其他都是错误
 提高type_not_found。
 端盖。

我检查了一下,数据admin_tab_line来自此行。

 *获取管理信息
   系统调用描述管理
     p_name的模式" N"转换为admin_tab_line-xtype crc admin_tab_line-kind。

有人可以告诉我这是什么吗? 并且我检查了当它们也不是错误时admin_tab_line-xtype是'E',并且当值是'X'时有错误。 谢谢。

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

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


有人给我一个用于SQL查询的RFC。

 TYPE-POOLS:abap。
   数据:
         columnName TYPE SO_TEXT,
         fieldDataDescrRef类型参考abap_componentdescr,
         numberFields TYPE i,
         fieldDescr TYPE abap_componentdescr,
         字段名TYPE字符串,
         fieldDescrTab TYPE abap_component_tab,
         rowStructDescr类型参考cl_abap_structdescr,
         rowReference TYPE REF TO数据,
         returnRowString TYPE字符串,
         dataFieldString TYPE字符串,
         数据线类数据,
         fromClauseRow TYPE ZSQL_CLAUSE_ELEMENTS,
         fromClauseString TYPE字符串,
         其中,ClauseRow类型为ZSQL_CLAUSE_ELEMENTS,
         whereClauseString TYPE字符串,
         栏位类型为ZSQL_CLAUSE_ELEMENTS,
         FNAME(600)VALUE'myfile'。

   字段符号:
            TYPE ANY,
           <数据字段> TYPE ANY。
 *使用字段名称创建DataStructure
 *数据类型是从FIELDS输入表的字段名中读取的
   描述表字段行numberFields。

   将字段环入字段行。
     栏位名称= SY-TABIX。
 *名称必须唯一,并且必须以char开头
     CONCATENATE'字符串'字段名INTO字段名。
     CONDENSE字段名称。
     fieldDescr-name =字段名。
 *对于字典查找,我们需要从Open SQL更改列名
 *到字典符号
     columnName = fieldsRow-TEXT。
     用'-'替换大小写来替换columnName中用'〜'开头的情况。
     fieldDescr-type?= cl_abap_typedescr => describe_by_name(columnName)。
     将fieldDescr附加到fieldDescrTab。
   结局。

   rowStructDescr = cl_abap_structdescr => create(fieldDescrTab)。
 *现在我们在内存中创建实际的数据结构
   创建数据rowReference类型的HANDLE rowStructDescr。
 *最后,我们将其分配给select语句使用的字段符号
   ASSIGN rowReference-> *至。
 *结束创建数据结构

 *为了简化调用,我们将字符串从哪里串联起来
 *这样,呼叫者无需检查自动换行
   fromClauseString =''。
   从FROMCLAUSE跳入fromClauseRow。
     CONCATENATE fromClauseString fromClauseRow-TEXT INTO from ClauseString。
   结局。
   whereClauseString =''。
   将WHERECLAUSE放入ClauseRow。
     CONCATENATE whereClauseString whereClauseRow-TEXT到whereClauseString中。
   结局。
 *现在开始实际选择操作
   从(fromClauseString)中选择(FIELDS)INTO 在哪里(whereClauseString)。
 *我们读取当前行的所有字段,将其强制转换为字符串,然后
 *用除法字符将其连接成数据线。
     清除:returnRowString。
     DO numberFields TIMES。
       结构的ASSIGN组件sy-index。
       dataFieldString = <数据字段>。
       CONCATENATE returnRowString'^'数据字段字符串INTO returnRowString。
     ENDDO。
     数据线= returnRowString。
 *最后,数据线被添加到返回表中。
     将数据线插入表数据中。
   ENDSELECT。
 打开DATASET FNAME,以附加默认模式的文本模式。
 将whereClauseString转移到FNAME。
 如果SY-SUBRC <> 0。
   写:" SY-SUBRC:",SY-SUBRC,
       /"系统消息:"。
 万一。
 CLOSE DATASET FNAME。

有时在FIELDS循环的下面一行中发生错误。

 fieldDescr-type?= cl_abap_typedescr => describe_by_name(columnName)。

FIELDS是内部表,其行类型为char(72)。 我尝试了两个测试用例,案例1 FIELDS为'cosp_bak〜objnr',并且还可以。 当我用" cskt〜bukrs"测试时,此行有错误。 我调试了此方法,并在下面的行中引起了错误。

 case_kind_all admin_tab_line-kind admin_tab_line-xtype。
 当别人。
 *所有其他都是错误
 提高type_not_found。
 端盖。

我检查了一下,数据admin_tab_line来自此行。

 *获取管理信息
   系统调用描述管理
     p_name的模式" N"转换为admin_tab_line-xtype crc admin_tab_line-kind。

有人可以告诉我这是什么吗? 并且我检查了当它们也不是错误时admin_tab_line-xtype是'E',并且当值是'X'时有错误。 谢谢。

付费偷看设置
发送
2条回答
CJones
1楼 · 2020-08-15 17:17.采纳回答

SAP字典中根本不存在CSKT-BUKRS。

您必须处理以下异常:

调用方法cl_abap_typedescr => describe_by_name(
       出口
         p_name = columnName
       接收
         p_descr_ref = DATA(p_descr_ref)
       例外情况
         type_not_found = 1)。
 如果sy-subrc <> 0。
   "处理无效的列名
 其他。
   fieldDescr-type?= p_descr_ref。
   ...
 ENDIF。
N-Moskvin
2楼-- · 2020-08-15 17:25

您是对的。 实际上,我的回答部分是基于您的书面解释,其中涉及" cosp_bak〜objnr"和" cskt〜bukrs"。

我编辑了答案的第一部分:

 CSKT-BUKRS根本不在SAP Dictionary中存在。

一周热门 更多>