PeopleSoft 组件接口:Create 方法不会保留新对象
PeopleSoft Component Interfaces: Create Method Doesn't Persist The New Object
我正在使用 PSJOA 库。我有一个 Java 应用程序,我正在使用 CI_PERSONAL_DATA 测试每个标准操作。使用 Get、Find 和 Save 一切正常。但不是使用 Create,即使当我调用该方法时,我得到一个 OK 响应,没有明显的错误。我发送的输入参数(取自 CreateKeys)是 KEYPROP_EMPLID。
奇怪的是,如果我改为使用 Web 服务(通过 SoapUI)调用 Create 方法,则会正确创建新实例。但是,在这种情况下,仅传递主键 KEYPROP_EMPLID 是不够的,我必须填写更多字段(因为我正在执行更新)。
有人可以告诉我可能发生了什么吗?是否有一些缺失的数据?也许我误解了创作行为?
谢谢。
调用 create 时到底出了什么问题?这将在 PeopleSoft 的个人数据组件中为提供 emplid 的人创建一个新条目。它将是可编辑的,因此您可以填写其他信息,但它不会保留 until/unless 您之后调用 save()。
emplid 是否已经存在于个人数据组件中?如果是这样,您应该改为调用 get()。
emplid 是否已存在于 peoplesoft 实例中?如果没有,您应该在使用前确保它在系统中。
关于缺少错误行为,我发现 java 的 peoplesoft 组件接口 API 是出了名的不可靠。您可以通过 Application Designer(通过下拉菜单中的 "Test Component Interface" 选项)实时测试它们,我经常发现这很有用。
最后,在 CI 上执行方法后在您的会话上调用 session.checkMessages() 通常会生成错误消息,否则这些消息将不会显示。
编辑:这是我们在 PeopleSoft HR 实例中通常如何 call/use 的片段:
ICiPersonalData wh = (ICiPersonalData)ses.getComponent("CI_PERSONAL_DATA");
if (wh == null) throw new UpdateException("Failed to get component");
wh.setInteractiveMode(true);
wh.setGetHistoryItems(true);
wh.setEditHistoryItems(true);
wh.setKeypropEmplid(emplid);
if (!existsInHR(emplid)) { // Direct database check
LOG.debug("Creating a new HR person.");
if ( ! wh.create() )
LOG.warn("wh.create returned false for emplid ="+emplid);
ses.checkMessages(); // will throw exception if errors exist
wh.setPropDerivedEmp("Y");
rs.put("NEW","Y");
setKeyPersonalData(wh, emplid, rs); // Sets name, etc.
} else {
if (!wh.get())
LOG.warn("wh.get returned false for emplid ="+emplid);
ses.checkMessages();
}
我正在使用 PSJOA 库。我有一个 Java 应用程序,我正在使用 CI_PERSONAL_DATA 测试每个标准操作。使用 Get、Find 和 Save 一切正常。但不是使用 Create,即使当我调用该方法时,我得到一个 OK 响应,没有明显的错误。我发送的输入参数(取自 CreateKeys)是 KEYPROP_EMPLID。
奇怪的是,如果我改为使用 Web 服务(通过 SoapUI)调用 Create 方法,则会正确创建新实例。但是,在这种情况下,仅传递主键 KEYPROP_EMPLID 是不够的,我必须填写更多字段(因为我正在执行更新)。
有人可以告诉我可能发生了什么吗?是否有一些缺失的数据?也许我误解了创作行为?
谢谢。
调用 create 时到底出了什么问题?这将在 PeopleSoft 的个人数据组件中为提供 emplid 的人创建一个新条目。它将是可编辑的,因此您可以填写其他信息,但它不会保留 until/unless 您之后调用 save()。
emplid 是否已经存在于个人数据组件中?如果是这样,您应该改为调用 get()。
emplid 是否已存在于 peoplesoft 实例中?如果没有,您应该在使用前确保它在系统中。
关于缺少错误行为,我发现 java 的 peoplesoft 组件接口 API 是出了名的不可靠。您可以通过 Application Designer(通过下拉菜单中的 "Test Component Interface" 选项)实时测试它们,我经常发现这很有用。
最后,在 CI 上执行方法后在您的会话上调用 session.checkMessages() 通常会生成错误消息,否则这些消息将不会显示。
编辑:这是我们在 PeopleSoft HR 实例中通常如何 call/use 的片段:
ICiPersonalData wh = (ICiPersonalData)ses.getComponent("CI_PERSONAL_DATA");
if (wh == null) throw new UpdateException("Failed to get component");
wh.setInteractiveMode(true);
wh.setGetHistoryItems(true);
wh.setEditHistoryItems(true);
wh.setKeypropEmplid(emplid);
if (!existsInHR(emplid)) { // Direct database check
LOG.debug("Creating a new HR person.");
if ( ! wh.create() )
LOG.warn("wh.create returned false for emplid ="+emplid);
ses.checkMessages(); // will throw exception if errors exist
wh.setPropDerivedEmp("Y");
rs.put("NEW","Y");
setKeyPersonalData(wh, emplid, rs); // Sets name, etc.
} else {
if (!wh.get())
LOG.warn("wh.get returned false for emplid ="+emplid);
ses.checkMessages();
}