2

我在其他帖子中多次看到这个问题,但还没有解决它。也许你们可以在这里有所启发。

我正在尝试使用Java 对象适配器库 (psjoa.jar)对组件接口“LOCATION”执行更新,但在尝试保存记录时遇到以下错误:

"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"

如果记录存在,则不会出现错误,但不会更新位置。我能够通过网络/在线应用程序创建和更新位置,但不能从 CI 执行相同的操作。

这很可能是由表的“生效日期”行为引起的。Application Designer 显示 Location 组件在 Scroll Level 0 和 Scroll Level 1 有一个 LOCATION_TBL 表。下面是我传递给 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" 
}

例如,我在几个地方读到了有效日期组件可能需要使用 PeopleCode 和/或 SQL 的自定义实现。

我想知道:

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

附加信息:

  • PeopleTools 8.53.02
  • PeopleSoft 人力资源管理系统 9.20.000
  • 附件是我的位置 CI 的屏幕截图。

在此处输入图像描述

4

2 回答 2

2

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

如果您将新的 0 级添加到有效日期记录,那么它将自动添加具有当前日期的“虚拟”级别 1 有效日期记录 - 就像它在 Web 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
  • 选择第二行 (LOCATION_TBL [2])
  • 设置描述
  • 保存 CI

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

于 2016-03-19T03:38:15.880 回答
1

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

于 2016-03-18T14:36:28.870 回答