【问题标题】:PeopleSoft ExceltoCI - not saving zerosPeopleSoft ExceltoCI - 不保存零
【发布时间】:2013-06-25 13:06:56
【问题描述】:
我正在尝试使用提供的 ExceltoCI 实用程序将一些数据加载到自定义表 PeopleSoft 中。我有一个单键 -EMPLID 的记录;我们预计每位员工只有一行,没有生效日期或类似的东西。除了 EMPLID,我还有大约 9 个数字字段。上传过程似乎正常工作 - 每行数据的状态为绿色 OK,但对于某些数据行,当我在线或在我的 SQL 工具中检查时,数据不存在。当电子表格的数据输入选项卡中的所有 9 个数字字段都设置为 0 时,会发生这种情况。所有其他行加载正常。我能够在线输入包含全零的数据。我注意到,如果我将其中一个数字字段的默认值设置为 1,则所有内容都会通过该实用程序加载(但如果我将其设置为 0,则不会加载)。
提前致谢!
【问题讨论】:
标签:
excel
interface
components
peoplesoft
【解决方案1】:
这就是我最终要做的事情:在其中一个数字字段中,我在 RowInit 事件中放置了一些 PeopleCode:
如果没有(MARKET_PAY.MARKET_LOW) 那么
MARKET_PAY.MARKET_LOW = 1;
MARKET_PAY.MARKET_LOW = 0;
结束如果;
它完成了我所追求的,但感觉就像一个杂物 - 如果有人能提供更优雅或“适当”的解决方案,我将不胜感激。
【解决方案2】:
出于历史目的,PeopleSoft 以一种特殊的方式处理空值。空数值存储为零,空文本值存储为单个空格 (" ")。空日期/时间/日期时间和长字符字段是实际的数据库空值。
您正在描述一个包含关键字段和仅数字字段的同级表。但是,从技术上讲,PeopleTools 会将其视为子表,当所有非关键字段为“null”时,不会插入子表。当所有值都为零时,您的 kludge 会处理物理插入行的要求,但我可以想到您可以做的另外两件事:
如果您不经常使用 Excel-to-CI(即,它只是用于初始或不频繁的数据加载),您可以编写一个简单的语句,将一个全零行每个 EMPLID 尚未出现在表中。 (如果在实时使用中不需要该表,例如,您可以将此 INSERT 设置为数据库作业以在夜间运行。)
-
如果可行,范围相对有限,并且从工作量或性能的角度来看不会令人望而却步,您可以将涉及此表的任何联接更改为外部联接,将潜在的 NULL 值合并为零。
还有第三种选择:将字段添加到您知道将始终具有值的记录。例如,您可以添加最后修改的时间戳/用户对。但是,这是一种数据模型设计选择,只有在添加的字段是您真正需要跟踪的内容时才有意义。换句话说,它与您当前的解决方案一样笨拙,但可以为数据的上下文增加一些价值。
【解决方案3】:
在 exceltoci 字段中输入 ,0。它将加载并保存。是 excel 电子表格和幕后的 vba 代码导致了这种情况。