PeopleSoft Effective-Dated CI: 指定键不存在行 (Java)

PeopleSoft Effective-Dated CI: No rows exist for the specified keys (Java)

我在其他帖子中多次看到这个问题,但一直未能解决。也许你们可以在这里阐明一些问题。

我正在尝试使用 Java 对象适配器库(psjoa.jar) 但我在尝试保存 new 记录时遇到以下错误:

"No rows exist for the specified keys. {LOCATION} (91,50), Failed to execute PSBusComp request , The highlighted field is required. You must enter a value for it before proceeding.{LOCATION.LOCATION_TBL(1).DESCR} (15,54), Error saving Component Interface. {LOCATION} (91,37), Failed to execute PSBusComp request"

如果记录存在,不会出现错误,但不会更新位置。我能够通过 web/online 应用程序创建和更新位置,但无法通过 CI.

执行相同操作

这很可能是由 table 的生效日期行为引起的。应用程序设计器显示 Location 组件在滚动级别 0 和滚动级别 1 有一个 LOCATION_TBL table。下面是我传递给 psjoa.jar 的 "invokeMethod(sName, args)" 操作的参数:

// level 0
SETID: "SHARE",
LOCATION :"T00001", 

// level 1
LOCATION_TBL: {    
   SETID: "SHARE", 
   LOCATION :"T00001", 
   DESCR: "My Test", 
   DESCR_AC: "TEST", 
   EFFDT: |2016-03-16|, 
   EFF_STATUS: "A" 
}

我在一些地方读到 Effective-dated 组件可能需要使用 PeopleCode and/or SQL 等自定义实现。

我想知道:

  1. 我是否错误地调用了 CI 操作,传递了错误的参数, 没有遵循预期的滚动结构?如果是这样,应该采用哪种方法?
  2. 我是否必须使用自定义 update/insert 操作 人码?
  3. (1) 和 (2) ?

附加信息:

在 App 设计工具中使用组件接口测试器。您必须登录 3 层。使用该工具,您可以模拟您的程序正在做什么,并可能从测试人员那里获得反馈。

需要查看您的 Java 代码才能确定,但​​有一种可能性:

如果您将新的 0 级记录添加到有效日期记录,那么它会自动添加具有当前日期的 "dummy" 1 级有效日期记录 - 与在网络上完全一样 UI .如果您然后添加另一个 1 级记录,那么您将在滚动中有 2 行,但只有对第二行的引用。如果您随后在第二行设置字段并尝试保存它,您可能会遇到您所看到的那种错误(第 1 行缺少必填字段)。

换句话说,当添加新的 0 级时,以下操作可能会失败(对伪代码表示歉意,但手头没有已配置的 Java/PS 环境...):

ci.create()         // create new L0 record - also adds L1 record
l0 = ci.getRow(0)   // get the L0 record
l1 = l0.addRow()    // add new L1 record - you now have 2 - l1 points to row 2
l1.EFFDT = ...      // this sets fields on row 2
l1.EFF_STATUS = ...
l1.DESCR = 
ci.save()           // missing values on row 1 cause errors

而更有可能成功的方法是

ci.create()         // create new L0 record - also adds L1 record
l0 = ci.getRow(0)   // get the Lo record
l1 = l0.getRow(0)   // don't add a new row - just get the dummy one
l1.EFFDT = ...      // set the fields on row 1
l1.EFF_STATUS = ...
l1.DESCR = 
ci.save()           // cross your fingers...

您可以通过以下方式准确生成您在此处看到的消息:

  • 在 CI 测试器中打开 CI(适用于 2 层 - 工具 8.54 - 未尝试 3 层)
  • 创建新的 SETID/LOCATION
  • 右键单击 LOCATION_TBL > InsertItem - 索引 1
  • Select第二行(LOCATION_TBL[2])
  • 设置描述
  • 保存CI

您收到的正是您的信息 - LOCATION_TBL [1] 上的描述是空白的。