临时存储器

临时存储类 IccTempStoreIccTempStoreId 允许您将数据存储在临时存储队列中。

您可以执行以下操作:
  • 从临时存储器队列中 读取项 (readItem 方法)

    IccTempStore readItem从临时存储队列中读取指定的项目。 它返回对包含信息的 IccBuf 对象的引用。

  • 将新项写入 到临时存储器队列的末尾 (writeItem 方法)

    编写项 也称为 添加项。 这里讲的是写以前没有写过的项。 可以使用 rewriteItem 方法来编写已存在的项,这称为 更新项

    IccTempStore writeItem在队列末尾添加新项目,从指定的缓冲区中获取数据。 如果成功完成此操作,那么将返回添加的记录的项号。

  • 更新临时存储器队列中的项 (rewriteItem 方法)

    更新项也称为 重写 项。 IccTempStore rewriteItem用于更新临时存储队列中的指定项目。

  • 读取临时存储队列中的下一个项目readNextItem 方法)
  • 删除 所有临时数据 (empty 方法)

    不能删除临时存储器队列中的个别项。 要删除与 IccTempStore相关的所有临时数据,请使用 IccTempStore empty 方法

IccTempStore用于表示临时存储队列。 IccTempStoreId用于按名称识别队列。 对象 IccTempStoreId 初始化后,即可用其替代队列名称进行识别,此举还具备通过C++编译器进行额外错误检测的优势。

IccTempStore中的可用方法 IccDataQueue中的方法类似。 有关更多信息,请参阅 瞬时数据

临时存储器示例

我们提供了一份示例程序,演示了如何使用 IccTempStoreIccTempStoreId。 可以在 C++ 样本程序(作为文件 ICC$TMP) 中找到此程序及其期望的输出。 此处提供了样本,没有终端 IO 请求。

图 1 显示了前三行,其中包括基础类的头文件,为应用程序设置操作环境的标准 main 函数以及标准库。

图 1。 包含基础类,标准 main 函数和标准库的头文件的代码
#include "icceh.hpp"
#include "iccmain.hpp"
#include <stdlib.h>

图 2 为样本程序定义了一些缓冲区。

图 2。 定义缓冲区的代码
const char* bufferItems[] =
{
"Hello World - item 1",
"Hello World - item 2",
"Hello World - item 3"
};

在图3中IccUserControl 运行方法包含此示例的用户代码。

图 3。 用户代码
void IccUserControl::run()
{

图4中的片段首先创建一个标识对象 IccTempStoreId ,其中包含字段“ICCSTORE”。 然后创建 IccTempStore ,表示临时存储队列“ICCSTORE”,并清空其中的记录。

图 4: 用于创建临时存储器队列的代码
 short itemNum = 1;
IccTempStoreId id("ICCSTORE");
IccTempStore store( id );
IccBuf buffer( 50 );
store.empty();

图 5中,此循环将三个数据项写入临时存储器对象。 数据通过为此目的创建的 IccBuf 对象传递。

图 5。 将数据写入临时存储器队列的循环
 for (short j=1 ; j <= 3 ; j++)
{
buffer = bufferItems[j-1];
store.writeItem( buffer );
}

图 6 中的此代码段将项读回,修改项并将其重写到临时存储器队列。 首先,使用 readItem 方法从临时存储器对象读取缓冲区。 使用 IccBuf 类的 insert 方法更改缓冲区对象中的数据,然后 rewriteItem 方法覆盖缓冲区。 循环继续读取下一个缓冲区项。

图 6。 从临时存储器队列读取数据的代码
 buffer = store.readItem( itemNum );
while ( store.condition() == IccCondition::NORMAL )
{
buffer.insert( 9, "Modified " );
store.rewriteItem( itemNum, buffer );
itemNum++;
buffer = store.readItem( itemNum );
}

图 7中,此循环再次读取临时存储器队列项以显示它们已更新。

图 7。 正在读取更新的记录
 itemNum = 1;
buffer = store.readItem( itemNum );
while ( store.condition() == IccCondition::NORMAL )
{
term->sendLine( " - record #%d = [%s]", itemNum,
(const char*)buffer );
buffer = store.readNextItem();
}

图 8 显示了 run的结束,这会将控制权返回给 CICS®。

图 8。 运行结束
 return;
}