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 等自定义实现。
我想知道:
- 我是否错误地调用了 CI 操作,传递了错误的参数,
没有遵循预期的滚动结构?如果是这样,应该采用哪种方法?
- 我是否必须使用自定义 update/insert 操作
人码?
- (1) 和 (2) ?
附加信息:
- PeopleTools 8.53.02
- 仁科人力资源管理系统 9.20.000
- 附件是我的位置的截图CI。
在 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] 上的描述是空白的。
我在其他帖子中多次看到这个问题,但一直未能解决。也许你们可以在这里阐明一些问题。
我正在尝试使用 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 等自定义实现。
我想知道:
- 我是否错误地调用了 CI 操作,传递了错误的参数, 没有遵循预期的滚动结构?如果是这样,应该采用哪种方法?
- 我是否必须使用自定义 update/insert 操作 人码?
- (1) 和 (2) ?
附加信息:
- PeopleTools 8.53.02
- 仁科人力资源管理系统 9.20.000
- 附件是我的位置的截图CI。
在 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] 上的描述是空白的。