Функция строк, наборов строк в PeopleCode - PullRequest
0 голосов
/ 26 октября 2018

Я пытаюсь лучше понять, для чего используются строки и наборы строк в 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 Ответ

0 голосов
/ 26 октября 2018
  1. Вы по-прежнему можете использовать наборы строк, строки, записи и поля в автономных системах приложений.Механизмы приложений не имеют данных буфера компонентов, так как они не работают в контексте компонента.Поэтому, чтобы использовать эти элементы, вам необходимо заполнить их, используя встроенные методы, такие как .fill () для набора строк или .selectByKey () для записи.

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

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

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

Если бы в одной из ваших строк уровня 1 было 3 строки, то вы найдете 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;
...