我正在使用PSJOA库。我有一个Java应用程序,我正在使用CI_PERSONAL_DATA测试每个标准操作。获取,查找和保存一切正常。但不是使用Create,即使我调用该方法时,我得到一个OK响应,没有明显的错误。我正在发送的输入参数(取自CreateKeys)是KEYPROP_EMPLID。
奇怪的是,如果我使用Web服务(通过SoapUI)调用Create方法,则会正确创建新实例。但是,在这种情况下,仅传递主键KEYPROP_EMPLID是不够的,我必须填充更多字段(因为我正在执行更新)。
有人能指出我可能会发生什么吗?是否有一些缺失的数据?也许我误解了创作行为?
感谢。
答案 0 :(得分:0)
调用create时究竟出现了什么问题?这将在PeopleSoft中为具有提供的emplid的人员创建个人数据组件中的新条目。它是可编辑的,因此您可以填写其他信息,但除非您之后调用save(),否则它将不会持续存在。
个人数据组件中是否已存在emplid?如果是这样,你应该调用get()。
在peoplesoft实例中,emplid是否已经存在?如果没有,您应该在使用它之前确保它在系统中。
关于缺少错误行为,我发现java的peoplesoft组件接口API众所周知是不可靠的。您可以通过Application Designer实时测试它们(通过下拉菜单中的“测试组件接口”选项),我常常会对此有所帮助。
最后,在对CI执行方法后,在会话中调用session.checkMessages()通常会生成错误消息,否则将无法显示。
编辑:以下是我们在PeopleSoft HR实例中通常如何调用/使用它的片段:
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();
}