执行数据库查询时出错:调用XSJSLIB函数进行创建操作的xsodata

2020-09-02 08:16发布

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

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


大家好,

我已将UI5应用程序从HANA 1.0 SP06导入到HANA 2.0 SP02中,以查看该应用程序是否可以与HANA 2.0 SP02很好地配合使用。 在应用程序中,我们使用带有自定义出口的XSODATA调用将值插入表中。 在HANA 2.0 SP02中测试应用程序时,XSODATA调用抛出以下错误

----------------------------

sap-ui-core.js:88 2019-01-28 12:17:14发生以下问题:HTTP请求失败400,错误请求,{"错误":{"代码":"","消息" :{" lang":" zh-cn"," value":"数据库访问异常"}," innererror":{" errordetail":{" DETAILS":" dberror(Connection.prepareStatement):259-无效的表名 :在架构XXX中找不到表/视图#NEW_vsegmentType140012385857792:第1行第70行(在pos 69)-createSegmentUsing@/XXX/xsjslib/segmentc/SegmentCreate.xsjslib:32 \

--------------------------

下面是XSJSLIB函数

函数createSegmentUsing(param)

{试试{var sql,pstmt,userName = $ .session.getUsername();

//做一些操作

pstmt = param.connection.prepareStatement('update"'+ param.afterTableName +'" SET'+'EXT_SGMT_ID =" XXX"。" XXX odata.txt .db :: SEQ_SGMT_EXT"。NEXTVAL,CREATED_ON = CURRENT_UTCTIMESTAMP,CREATED_BY = ?, CHANGED_ON = CURRENT_UTCTIMESTAMP,CHANGED_BY = ?, DELETE_FLAG =?');

pstmt.setString(1,userName);

pstmt.setString(2,userName);

pstmt.setString(3,'N');

pstmt.executeUpdate();

pstmt.close();

sql ='INSERT INTO" SMA"。" sma.db :: SGMT.TBL_USR_SEGMENT" SELECT * FROM" SMA"。"'+ param.afterTableName +'"';

pstmt = param.connection.prepareStatement(sql);

pstmt.executeUpdate();

pstmt.close(); }

catch(e){返回{HTTP_STATUS_CODE:e.code,ERROR_MESSAGE:'数据库访问异常',DETAILS:e.message +"-" + e.stack}; }

--------------------------------------------------- ------------

从日志中说,找不到作为PARAM.AFTERTABLENAME的一部分创建的临时表。

此错误与HANA 2.0 SP02有关吗? XSODATA出口处理方面有什么变化吗?

odata.txt (1.8 kB)

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

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


大家好,

我已将UI5应用程序从HANA 1.0 SP06导入到HANA 2.0 SP02中,以查看该应用程序是否可以与HANA 2.0 SP02很好地配合使用。 在应用程序中,我们使用带有自定义出口的XSODATA调用将值插入表中。 在HANA 2.0 SP02中测试应用程序时,XSODATA调用抛出以下错误

----------------------------

sap-ui-core.js:88 2019-01-28 12:17:14发生以下问题:HTTP请求失败400,错误请求,{"错误":{"代码":"","消息" :{" lang":" zh-cn"," value":"数据库访问异常"}," innererror":{" errordetail":{" DETAILS":" dberror(Connection.prepareStatement):259-无效的表名 :在架构XXX中找不到表/视图#NEW_vsegmentType140012385857792:第1行第70行(在pos 69)-createSegmentUsing@/XXX/xsjslib/segmentc/SegmentCreate.xsjslib:32 \

--------------------------

下面是XSJSLIB函数

函数createSegmentUsing(param)

{试试{var sql,pstmt,userName = $ .session.getUsername();

//做一些操作

pstmt = param.connection.prepareStatement('update"'+ param.afterTableName +'" SET'+'EXT_SGMT_ID =" XXX"。" XXX odata.txt .db :: SEQ_SGMT_EXT"。NEXTVAL,CREATED_ON = CURRENT_UTCTIMESTAMP,CREATED_BY = ?, CHANGED_ON = CURRENT_UTCTIMESTAMP,CHANGED_BY = ?, DELETE_FLAG =?');

pstmt.setString(1,userName);

pstmt.setString(2,userName);

pstmt.setString(3,'N');

pstmt.executeUpdate();

pstmt.close();

sql ='INSERT INTO" SMA"。" sma.db :: SGMT.TBL_USR_SEGMENT" SELECT * FROM" SMA"。"'+ param.afterTableName +'"';

pstmt = param.connection.prepareStatement(sql);

pstmt.executeUpdate();

pstmt.close(); }

catch(e){返回{HTTP_STATUS_CODE:e.code,ERROR_MESSAGE:'数据库访问异常',DETAILS:e.message +"-" + e.stack}; }

--------------------------------------------------- ------------

从日志中说,找不到作为PARAM.AFTERTABLENAME的一部分创建的临时表。

此错误与HANA 2.0 SP02有关吗? XSODATA出口处理方面有什么变化吗?

odata.txt (1.8 kB)
付费偷看设置
发送
3条回答
Nir深蓝
1楼-- · 2020-09-02 08:39

这是退出之前还是之后的替代? 这是一个创建操作吗? 不同的出口类型确实使用不同的接口。 例如,afterTableName用于CREATE和UPDATE,而beforeTableName用于UPDATE和DELETE。

https://help.sap.com/查看器/4505d0bdaf4948449b7f7379d24d0f0d/2.0.03/zh-CN/03735142bfd647c2a016fcd9359f3348.html

问题是,从根本上说,在迁移到HANA 2.0甚至迁移到XSA时,退出工作的方式没有改变。

Tong__Ming
2楼-- · 2020-09-02 08:54

嗨,我很难遵循随机替换的代码。 原始代码中的引号是否未转义?

槿木_熙
3楼-- · 2020-09-02 08:55

嗨,托马斯,

消息:"不支持功能:易失性表的更新语句:第1行第8行(在pos 7)" 

这是使用自定义退出以按顺序更新PK的结果(实际上,我认为使用自定义退出进行PK生成完全是hack,但是@ sap/xsodata根本无法处理IDENTITY列并创建损坏的语句 )。

xsodata:

将"销售"作为"销售"创建事件(在" test:jsutils.xsjslib :: createSalesEntry"之前); 

jsutils.xsjslib:

 ... 
let after = param.afterTableName; 让pStmt = param.connection.prepareStatement('update"'+ after +'"设置ID = SALES_ID.NEXTVAL'); pStmt.executeUpdate(); pStmt.close();
...

Hana 1 XS引擎内部的Neo上使用了完全相同的自定义出口。

该功能不受支持的消息来自我认为的HDB引擎,该消息曾经在Neo中起作用。 您对此有何看法?

最好的问候,亚历克斯

更新:已解决。 在CF上,我使用了列表,在Neo上使用了行表。 可变列表不允许插入/更新。 切换到行表使其生效����

一周热门 更多>