点击此处---> 群内免费提供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'时有错误。 谢谢。
SAP字典中根本不存在CSKT-BUKRS。
您必须处理以下异常:
您是对的。 实际上,我的回答部分是基于您的书面解释,其中涉及" cosp_bak〜objnr"和" cskt〜bukrs"。
我编辑了答案的第一部分:
一周热门 更多>