PeopleCode中行,行集的功能

时间:2018-10-26 17:26:35

标签: peoplesoft peoplesoft-app-engine peoplecode

我试图更好地了解PeopleCode中使用的行和行集?我已经阅读了PeopleBooks,但仍然感觉不太了解。我希望对这些内容有更多的了解,因为它们与Application Engine程序有关。也许通过一个例子也许会有所帮助。这是我的一些具体问题:

  1. 我了解使用行集,行,记录和字段来访问组件缓冲区数据,但是对于通过Process Scheduler运行的独立Application Engine程序,情况仍然如此吗?

  2. 使用这些对象而不是使用SQL对象/函数(CreateSQLSQLExec等)有什么需求或优势?我经常在AE程序中看到实例化CreateRowset对象并使用带有SQL WHERE子句的.Fill方法,但我不太理解为什么不使用SQL的原因。

    < / li>
  3. 我在PeopleBooks中看到组件滚动中的Row对象是一行,组件滚动与该行有什么关系?我已经看到了对具有不同滚动级别的行的引用,这仅仅是对相关数据进行分组和嵌套的一种方式吗?

  4. 实例化CreateRowset对象之后,此对象在程序中的典型用途是什么?您将如何对行集检索的数据执行逻辑(如果,然后,其他),或将其用于更新数据?

我感谢您可以分享的任何见识。

1 个答案:

答案 0 :(得分:5)

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

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

  3. 这个问题对我来说不太清楚,但我会尽力解释。如果您有一个Page,它将有一个级别0行。然后,它可能具有多个1级行集。在每个目录下,它可能都有一个2级行集。

                Level0
               /      \
         Level1       Level1
         /      \      /     \
     Level2   Level2 Level2  Level2
    

如果您的level1行之一包含3行,那么您将在Rowset中找到与该level1相关联的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;