远程服务查询失败

2020-08-15 18:20发布

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

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


我使用" cds import"来导入以下edmx,它是SuccessFactors用户实体:

https://api2.successfactors.eu/odata/ v2/User/$ metadata

硬拷贝: sf-user.txt

我的service.js实现:

 module.exports =异步srv => {
  const ext =等待cds.connect.to('PLTUserManagement')
  srv.on('READ','User',req => {
  console.log('已读')
  返回ext.tx(req).run(req.query)
  })
 } 

在测试服务时,我收到CDS的错误500和远程服务的400的错误:

http://127.0.0.1:4004/userbrowser/User

 <错误xmlns =" http://docs.oasis-open.org/odata/ns/metadata">
  500 
 请求失败,状态码为400 
  

我逐步执行了请求,并根据生成的CSN找到了cd组成的完整URL。

/User?$ select = userId,addressLine1,addressLine2,addressLine3,benchStrength,bonusBudgetAmount,bonusTarget,businessPhone,businessSegment,cellPhone,公民身份,城市,compensationBonusEligible,compensationEligible,compensationReadOnly,compensationSalaryEligibleReligable,CompensationR,  ,criticalTalentComments,custom01,custom02,custom03,custom04,custom05,custom06,custom07,custom08,custom09,custom10,custom11,custom12,custom13,custom14,custom15,dateBirth,dateOfCurrentPosition,dateOfPosition,defaultFullName,defaultLocale,department,division,email,empId 员工类别,种族,传真,最终职位代码,最终职位家庭,最终职位角色,名字,未来领导者,性别,雇用日期,家庭电话,影响减值,影响减值,职位注释,职位代码,职位家庭,职位级别,职位角色,姓氏修改,  ,level,localCurrencyCode,位置,lumpsum2Target,lumpsumTarget,已婚,米 atrix1Label,matrix2Label,矩阵管理的,优点有效日期,优点目标,mi,少数族裔,国籍,newToPosition,昵称,目标,onboardingId,origHireDate,密码,payGrade,性能,潜在,促销金额,提成比例,原因保留,重新定位,重新定位 工资,salaryBudgetExtra2Percentage,salaryBudgetExtraPercentage,salaryBudgetFinalSalaryPercentage,salaryBudgetLumpsumPercentage,salaryBudgetMeritPercentage,salaryBudgetPromotionPercentage,salaryBudgetTotalRaisePercentage,salaryLocal,salaryProrating,称呼,sciLastModified,seatingChart,serviceDate,SSN,状态,状态,stockBudgetOptionAmount,stockBudgetOther1Amount,stockBudgetOther2Amount,stockBudgetOther3Amount,stockBudgetStockAmount,stockBudgetUnitAmount,后缀,sysCostOfSource,  sysSource,sysStartingSalary,timeZone,标题,totalTeamTeam,用户名,退伍军人禁用,退伍军人奖章,退伍军人保护,退伍军人分离,邮政编码,customManager_userId,customReports_userId,directReports_userId,hr_userId,hrRepor  ts_userId,manager_userId,matrixManager_userId,matrixReports_userId,proxy_userId,secondManager_userId,secondReports_userId,userPermissionsNav_userId&$ orderby = userId%20asc&$ top = 1000 

通过Postman执行相同的路径会呈现相同的错误代码,但会在返回的错误中提供更多信息:

 <?xml版本=" 1.0"编码=" utf-8"?>
 
   COE_PROPERTY_NOT_FOUND 
   [COE0021]无效的属性名称:User/customManager_userId。 请在管理中心> OData API数据字典或实体元数据中检查属性名称。 确保没有删除该字段的数据模型更改,请执行刷新元数据以确保缓存未损坏。
 
 

我猜潜在的问题是来自API业务中心的EDMX文件与SuccessFactors API的当前OData实现不一致。

让我感到困惑的是,在我的实现中,我要求将传入的查询转发到远程服务。 该查询似乎是'/User'而不是'/User?$ select = ...'。 CDS为什么要这样做,我如何"修复"它?

我更改了实现,以获取没有$ select的整个实体:

 module.exports =异步srv => {
  const ext =等待cds.connect.to('SF_User')
  srv.on('READ','User',async req => {
  console.log('已读')
  const result =等待ext.tx(req).get('/User')
  返回结果
  })
 } 

然后这会导致另一个错误,我不知道该如何解决...

 <错误xmlns =" http://docs.oasis-open.org/odata/ns/metadata">
  null 
 <消息>在实体集合的序列化期间发生错误。 使用以下密钥在实体序列化期间发生错误:userId:SFADMIN。 该实体包含" delegatorOfAutoDelegateConfigNav"的数据,该数据不属于"用户"类型的结构或导航属性。
 
 
sf-user.txt (51.7 kB)

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

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


我使用" cds import"来导入以下edmx,它是SuccessFactors用户实体:

https://api2.successfactors.eu/odata/ v2/User/$ metadata

硬拷贝: sf-user.txt

我的service.js实现:

 module.exports =异步srv => {
  const ext =等待cds.connect.to('PLTUserManagement')
  srv.on('READ','User',req => {
  console.log('已读')
  返回ext.tx(req).run(req.query)
  })
 } 

在测试服务时,我收到CDS的错误500和远程服务的400的错误:

http://127.0.0.1:4004/userbrowser/User

 <错误xmlns =" http://docs.oasis-open.org/odata/ns/metadata">
  500 
 请求失败,状态码为400 
  

我逐步执行了请求,并根据生成的CSN找到了cd组成的完整URL。

/User?$ select = userId,addressLine1,addressLine2,addressLine3,benchStrength,bonusBudgetAmount,bonusTarget,businessPhone,businessSegment,cellPhone,公民身份,城市,compensationBonusEligible,compensationEligible,compensationReadOnly,compensationSalaryEligibleReligable,CompensationR,  ,criticalTalentComments,custom01,custom02,custom03,custom04,custom05,custom06,custom07,custom08,custom09,custom10,custom11,custom12,custom13,custom14,custom15,dateBirth,dateOfCurrentPosition,dateOfPosition,defaultFullName,defaultLocale,department,division,email,empId 员工类别,种族,传真,最终职位代码,最终职位家庭,最终职位角色,名字,未来领导者,性别,雇用日期,家庭电话,影响减值,影响减值,职位注释,职位代码,职位家庭,职位级别,职位角色,姓氏修改,  ,level,localCurrencyCode,位置,lumpsum2Target,lumpsumTarget,已婚,米 atrix1Label,matrix2Label,矩阵管理的,优点有效日期,优点目标,mi,少数族裔,国籍,newToPosition,昵称,目标,onboardingId,origHireDate,密码,payGrade,性能,潜在,促销金额,提成比例,原因保留,重新定位,重新定位 工资,salaryBudgetExtra2Percentage,salaryBudgetExtraPercentage,salaryBudgetFinalSalaryPercentage,salaryBudgetLumpsumPercentage,salaryBudgetMeritPercentage,salaryBudgetPromotionPercentage,salaryBudgetTotalRaisePercentage,salaryLocal,salaryProrating,称呼,sciLastModified,seatingChart,serviceDate,SSN,状态,状态,stockBudgetOptionAmount,stockBudgetOther1Amount,stockBudgetOther2Amount,stockBudgetOther3Amount,stockBudgetStockAmount,stockBudgetUnitAmount,后缀,sysCostOfSource,  sysSource,sysStartingSalary,timeZone,标题,totalTeamTeam,用户名,退伍军人禁用,退伍军人奖章,退伍军人保护,退伍军人分离,邮政编码,customManager_userId,customReports_userId,directReports_userId,hr_userId,hrRepor  ts_userId,manager_userId,matrixManager_userId,matrixReports_userId,proxy_userId,secondManager_userId,secondReports_userId,userPermissionsNav_userId&$ orderby = userId%20asc&$ top = 1000 

通过Postman执行相同的路径会呈现相同的错误代码,但会在返回的错误中提供更多信息:

 <?xml版本=" 1.0"编码=" utf-8"?>
 
   COE_PROPERTY_NOT_FOUND 
   [COE0021]无效的属性名称:User/customManager_userId。 请在管理中心> OData API数据字典或实体元数据中检查属性名称。 确保没有删除该字段的数据模型更改,请执行刷新元数据以确保缓存未损坏。
 
 

我猜潜在的问题是来自API业务中心的EDMX文件与SuccessFactors API的当前OData实现不一致。

让我感到困惑的是,在我的实现中,我要求将传入的查询转发到远程服务。 该查询似乎是'/User'而不是'/User?$ select = ...'。 CDS为什么要这样做,我如何"修复"它?

我更改了实现,以获取没有$ select的整个实体:

 module.exports =异步srv => {
  const ext =等待cds.connect.to('SF_User')
  srv.on('READ','User',async req => {
  console.log('已读')
  const result =等待ext.tx(req).get('/User')
  返回结果
  })
 } 

然后这会导致另一个错误,我不知道该如何解决...

 <错误xmlns =" http://docs.oasis-open.org/odata/ns/metadata">
  null 
 <消息>在实体集合的序列化期间发生错误。 使用以下密钥在实体序列化期间发生错误:userId:SFADMIN。 该实体包含" delegatorOfAutoDelegateConfigNav"的数据,该数据不属于"用户"类型的结构或导航属性。
 
 
sf-user.txt (51.7 kB)
付费偷看设置
发送
4条回答
空代码
1楼 · 2020-08-15 19:08.采纳回答

Hi Pieter

cds框架尚不支持外部服务中的复杂查询。 因此,您已经可以通过自定义处理程序自行构造查询。 不要直接通过原始服务调用传递查询。

干杯!

hengyuye
2楼-- · 2020-08-15 18:55

嗨,Pieter,

如果在这里还有任何未解决的问题,请告诉我吗? 我们已经与您讨论了OData日期时间转换。 node.js运行时将尽快通知您。 我们可以关闭BCP票吗?

最诚挚的问候,

Olena

95年老男孩
3楼-- · 2020-08-15 18:59

嗨Olena,

存在属性错误的问题(请参见上文:以'_userid'结尾的任何内容),该属性来自于实体在导入其EDMX之后的关联。 直到我从CSN手动删除所有关联之后,查询才成功,因为不再对不存在的属性进行$ select选择。

最诚挚的问候,

Pieter

zhangjiyang1323
4楼-- · 2020-08-15 19:01

谢谢,我现在才意识到您正在测试我的v2 cds代理服务。

从服务中我确实可以看到v2中的纪元与V4中的ISO标准的差异。

IMO,如果cds支持使用v2外部服务,则应将日期格式从epoch转换为ISO,就像v2代理正在处理反向转换一样。

一周热门 更多>