行中的行,PeopleCode中的行集

Nic*_*ick 2 peoplesoft peoplesoft-app-engine peoplecode

我想更好地了解PeopleCode中使用的行和行集是什么?我通过PeopleBooks阅读,但仍然觉得我没有很好的理解.我希望更多地了解这些与Application Engine程序有关的内容.也许走一个例子可能有所帮助.以下是我的一些具体问题:

  1. 我知道Rowsets,Row,Record和Field用于访问组件缓冲区数据,但是通过Process Scheduler运行的独立Application Engine程序仍然如此吗?

  2. 会是什么需要或优势,使用这些,而不是使用SQL对象/功能(CreateSQL,SQLExec,等...)?我经常在AE程序中看到CreateRowset对象被实例化并使用.Fill带有SQL WHERE子句的方法,我不太明白为什么不使用SQL.

  3. 我在PeopleBooks中看到组件滚动中的Row对象是一行,组件滚动如何与行相关?我已经看到对具有不同滚动级别的行的引用,这只是一种分组和嵌套相关数据的方式吗?

  4. 在实例化CreateRowset对象之后,之后程序中它的典型用途是什么?您将如何对行集检索的数据执行逻辑(If,Then,Else等),还是使用它来更新数据?

我感谢您分享的任何见解.

Dar*_*s99 6

  1. 您仍然可以在独立应用程序引擎中使用行集,行,记录和字段.应用程序引擎没有组件缓冲区数据,因为它们未在组件的上下文中运行.因此,要使用这些项,您需要使用内置方法(如行集上的.fill()或记录上的.selectByKey())填充它们.

  2. 使用行集而不是SQL的优点是它使CRUD更容易.有内置的选择,更新,插入和删除方法.此外,如果有多个字段,就像使用SQL对象一样,您不必担心会产生大量变量.另一个优点是,当您执行填充时,数据将被读入内存,如果您循环使用SQL,则SQL游标将打开更长时间.行集,行,记录和字段对象还有许多其他有用的方法,例如允许您执行命令(验证)或从一个rowset\row\record复制到另一个.

  3. 这个问题对我来说不太清楚,但我会试着解释一下.如果你有一个Page,它将有一个0级.然后它可以有多个1级行集.在每个下面它可以有2级行集.

                Level0
               /      \
         Level1       Level1
         /      \      /     \
     Level2   Level2 Level2  Level2
    
    Run Code Online (Sandbox Code Playgroud)

如果您的一个level1行有3行,那么您会在与该level1关联的Rowset中找到3行.不确定我是否解释了这个以回答您的需求,请澄清我是否可以提供更多信息

  1. 通常在我创建行集后,我会遍历它.访问每一行的记录,用它做一些处理.在下面的示例中,我查看所有锁定的帐户并使用LOCKED为其描述添加前缀,然后更新数据库.

.

Local boolean &updateResult;
local integer &i;   
local record &lockedAccount;
Local rowset &lockedAccounts;

&lockedAccounts = CreateRowset(RECORD.PSOPRDEFN);
&lockedAccounts.fill("WHERE acctlock = 1");

for &i = 1 to &lockedAccounts.ActiveRowCount
    &lockedAccount = &lockedAccounts(&i).PSOPRDEFN;
   if left(&lockedAccount.OPRDEFNDESCR.value,6) <> "LOCKED" then
      &lockedAccount.OPRDEFNDESCR.value = "LOCKED " | &lockedAccount.OPRDEFNDESCR.value;
      &updateResult = &lockedAccount.update();
      if not &updateResult then
           /* Error handle failed update */
      end-if;
   end-if;
End-for;
Run Code Online (Sandbox Code Playgroud)