IRIS / Chronicles 中 Item ID padded 填充

padded 我们可以简单的理解为占位符,用高级语言的理解就是当我们给出一个字符串,上面只有 3 个字符的时候,如果我们希望整个输出位 7 个字符,那么我们需要怎么做呢?

通常的做法是在 3 个字符的前面或者后面用空格填充。

填充位置

IRIS / Chronicles 的空格填充位置为前面。

假设我们的字符串为:ABC123,但是我们希望使用 Padded ﴾7﴿ 来格式数据的话,那么返回的结果就是 ’ ABC123` ,在给出的字符串前面添加了一个空格。

特殊情况处理结果

需要注意的是,当使用了 Padded 这个方法后,你的输出字符串前面总会有一个空格。

用上面的例子来做说明,ABC1234,我们给出的字符串已经是 7 位了,我们还是 Padded ﴾7﴿ 来进行处理的话,我们会得到结果 ’ ABC123`。

在这个输出结果中 字符 A 前面还是有一个空格,那么总的输出位置为 8 个字符了。

为什么会这样,这是因为 EPIC 说是为了历史数据和排序需要。

对比下我们在 Java 中,我们总是想 Trim 掉空格,但是 IRIS 却在这里加空格,是不是有点反人类?并且还仅仅为了查询排序的问题。

External 和 Internal .1

我们知道 EPIC 会使用 Item ID .1 来存储唯一标识符,等于我们关系数据库中的主键数据。

在这里,有个问题,EPIC 为了解决历史遗留问题,所以对 Item ID .1 中的这个数据都会使用 Padded 数据,就是存在这个数据里面的内容都会自动在前面添加空格。

那么当这个字段对外引用的时候如果不做处理,那么这个字段前面也会有空格,为了避免这个麻烦,ECPIC 就独创了一个 External 的定义,这个 External 只针对 Item ID .1 的这个内容。

如果你的数据库中这个字段有空格的话,那么 External 引用的时候 EPIC 就帮你把这个空格个删除掉了,所以对外引用的时候,所有的 .1 数据都是没有空格的。

External ID

External ID 字面的理解为外部 ID,通常这个 ID 与我们用的 .1 ID 没有太大关系。

主要目的是为了保持数据之间的关联性,你可以定义一个另外一个 Item 来存储数据,这个数据用来在标识当前的记录,那么当 我们的 Item ID .1 和其他数据进行关联的时候,哪怕你修改 External ID 也不会破坏这个关联性。

这个主要的目的应该是提供快速查找服务,所以 EPIC 要求这个字段是要索引的。

注意这个 External ID 不要和 .1 中的 External 搞混了。

$$getidin 和 $$getidout 和 $$geti

正是因为有上面 3 个数据内容,所以我们会定义几个函数来进行处理。

按照 EPIC 的说法,不要自己添加空格,因为你不知道你的系统中会添加几个空格,所以需要使用 $$geti 这个函数。

$$getidin(unpaddedID,INI) 这个函数的意思就是从数据库中返回添加好空格的 .1 值。

$$getidout(internalID,INI) 这个函数就意思就是把已经添加好的空格从返回值中删除。

$$geti(INI,internalID,externalIDItem,ln),记得我们上面说的 External ID 吗?针对每一个记录来说,External ID 可能都不会一样,这个和我们说的 Item ID .1 的值是不一样的,这个函数就是为了获取上面的值。