Функция строк, наборов строк в PeopleCode
Я пытаюсь лучше понять, для чего используются строки и наборы строк в PeopleCode? Я прочитал PeopleBooks и до сих пор не чувствую, что у меня хорошее понимание. Я хочу лучше понять их, так как это относится к программам Application Engine. Возможно, прогулка по примеру может помочь. Вот несколько конкретных вопросов, которые у меня есть:
Я понимаю, что Rowsets, Row, Record и Field используются для доступа к данным буфера компонентов, но так ли это для автономных программ Application Engine, запускаемых через Process Scheduler?
Какая будет необходимость или преимущество в их использовании по сравнению с использованием объектов / функций SQL (
CreateSQL
,SQLExec
, так далее...)? Я часто вижу в программах AE, гдеCreateRowset
объект создается и использует.Fill
метод с предложением SQL WHERE, и я не совсем понимаю, почему вместо него не использовался SQL.В PeopleBooks я видел, что объект Row в компонентной прокрутке - это строка. Как свиток компонентов связан со строкой? Я видел ссылки на строки, имеющие разные уровни прокрутки, это просто способ группировки и вложения связанных данных?
После того, как вы создали
CreateRowset
объект, каковы его типичные применения в программе впоследствии? Как бы вы выполняли логику (If, Then, Else и т. Д.) Для данных, извлекаемых набором строк, или использовали бы их для обновления данных?
Я ценю любую информацию, которой вы можете поделиться.
1 ответ
Вы все еще можете использовать Rowsets, Rows, Records и поля в автономных системах приложений. Механизмы приложений не имеют данных буфера компонентов, так как они не работают в контексте компонента. Поэтому, чтобы использовать эти элементы, вам необходимо заполнить их, используя встроенные методы, такие как.fill() для набора записей или.selectByKey() для записи.
Преимущество использования наборов строк перед SQL состоит в том, что это облегчает CRUD. Есть встроенные методы для выбора, обновления, вставки и удаления. Кроме того, вам не нужно беспокоиться о создании большого количества переменных, если бы было несколько полей, как это было бы с объектом SQL. Другое преимущество заключается в том, что когда вы выполняете заливку, данные считываются в память, где, если вы перебираете SQL, курсор SQL будет открыт дольше. Объекты Recordset, row, record и field также имеют множество других полезных методов, например, позволяющих вам выполнять Edits (проверка) или копировать из одного набора строк \row\record в другой.
Этот вопрос мне немного менее понятен, но я постараюсь объяснить. Если у вас есть страница, она будет иметь строку уровня 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;