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();
}