Функция строк, наборов строк в PeopleCode

Я пытаюсь лучше понять, для чего используются строки и наборы строк в PeopleCode? Я прочитал PeopleBooks и до сих пор не чувствую, что у меня хорошее понимание. Я хочу лучше понять их, так как это относится к программам Application Engine. Возможно, прогулка по примеру может помочь. Вот несколько конкретных вопросов, которые у меня есть:

  1. Я понимаю, что Rowsets, Row, Record и Field используются для доступа к данным буфера компонентов, но так ли это для автономных программ Application Engine, запускаемых через Process Scheduler?

  2. Какая будет необходимость или преимущество в их использовании по сравнению с использованием объектов / функций SQL (CreateSQL, SQLExec, так далее...)? Я часто вижу в программах AE, где CreateRowset объект создается и использует .Fill метод с предложением SQL WHERE, и я не совсем понимаю, почему вместо него не использовался SQL.

  3. В PeopleBooks я видел, что объект Row в компонентной прокрутке - это строка. Как свиток компонентов связан со строкой? Я видел ссылки на строки, имеющие разные уровни прокрутки, это просто способ группировки и вложения связанных данных?

  4. После того, как вы создали CreateRowset объект, каковы его типичные применения в программе впоследствии? Как бы вы выполняли логику (If, Then, Else и т. Д.) Для данных, извлекаемых набором строк, или использовали бы их для обновления данных?

Я ценю любую информацию, которой вы можете поделиться.

1 ответ

  1. Вы все еще можете использовать Rowsets, Rows, Records и поля в автономных системах приложений. Механизмы приложений не имеют данных буфера компонентов, так как они не работают в контексте компонента. Поэтому, чтобы использовать эти элементы, вам необходимо заполнить их, используя встроенные методы, такие как.fill() для набора записей или.selectByKey() для записи.

  2. Преимущество использования наборов строк перед SQL состоит в том, что это облегчает CRUD. Есть встроенные методы для выбора, обновления, вставки и удаления. Кроме того, вам не нужно беспокоиться о создании большого количества переменных, если бы было несколько полей, как это было бы с объектом SQL. Другое преимущество заключается в том, что когда вы выполняете заливку, данные считываются в память, где, если вы перебираете SQL, курсор SQL будет открыт дольше. Объекты Recordset, row, record и field также имеют множество других полезных методов, например, позволяющих вам выполнять Edits (проверка) или копировать из одного набора строк \row\record в другой.

  3. Этот вопрос мне немного менее понятен, но я постараюсь объяснить. Если у вас есть страница, она будет иметь строку уровня 0. Тогда он может иметь несколько наборов строк уровня 1. Под каждым из них может быть набор строк 2-го уровня.

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

Если одна из ваших строк уровня 1 имеет 3 строки, то вы найдете 3 строки в наборе записей, связанных с этим уровнем 1. Не уверен, что я объяснил это, чтобы ответить, что вам нужно, пожалуйста, уточните, если я могу предоставить больше информации

  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;
Другие вопросы по тегам