Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feature/predefined id unique check 92 #118

Merged
merged 14 commits into from
Oct 18, 2024
16 changes: 15 additions & 1 deletion docs/ПредопределенныеЗначения.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,21 @@
## Описание подсистемы

По стандартам разработки поиск ссылочных объектов в программном коде по наименованию, коду, гуиду и т.д. не рекомендуется. Для возможности получения ссылок из программного кода предлагается использовать элементы плана видов характеристик. Чтобы избежать необходимости реструктуризации при добавлении новых элементов в ПВХ, формирование иерархии и элементов делается программно и обновляется в пользовательском режиме. Получение элементов стандартизируется через общий модуль с возможностью кэширования.
При коментировании или удалении из кода предопределенных элементов и последующем перезаполнении, элемент будет помечен на удаление, включая все его подчиненные элементы.
При коментировании или удалении из кода предопределенных элементов и последующем перезаполнении, элемент будет помечен на удаление, включая все его подчиненные элементы.

## Первоначальное заполнение

Для того чтобы автоматизировать процесс первоначального заполнения предопределенных элементов, необходимо добавить в расширение общий модуль **ПодсистемыКонфигурацииПереопределяемый**.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

...необходимо модифицировать/добавить в расширение общий модуль....
Если кто-то работает без расширений

В процедуре ``ПриДобавленииПодсистем`` прописать вызов процедуры библиотеки ``пбп_ОбновлениеИнформационнойБазыПБП.ПриДобавленииПодсистем``. Затем выполнить первый запуск - будет выполнен обработчик первоначального заполнения предопределенных элементов.

```1C (BSL)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Чтобы подсветка синтаксиса работала нужно написать просто ```bsl

&После("ПриДобавленииПодсистем")
Процедура пбп_ПриДобавленииПодсистем(МодулиПодсистем)

пбп_ОбновлениеИнформационнойБазыПБП.ПриДобавленииПодсистем(МодулиПодсистем);

КонецПроцедуры
```

## Добавление новых элементов

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,20 @@
КонецЕсли;
КонецЕсли;

ДополнительныеСвойства.Вставить("ЭтоНовый", ЭтоНовый());

КонецПроцедуры

Процедура ПриЗаписи(Отказ)

Если ОбменДанными.Загрузка Тогда
Возврат;
КонецЕсли;

Если Не пбп_ОбщегоНазначенияСлужебныйКлиентСервер.СвойствоСтруктуры(ДополнительныеСвойства, "ЭтоНовый", Ложь) Тогда
пбп_ОбщегоНазначенияСервер.ОбработатьСуществующийПредопределенныйЭлемент(ЭтотОбъект);
КонецЕсли;

КонецПроцедуры

#КонецОбласти // ОбработчикиСобытий
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,9 @@
</Button>
</ChildItems>
</AutoCommandBar>
<Events>
<Event name="NotificationProcessing">ОбработкаОповещения</Event>
</Events>
<ChildItems>
<UsualGroup name="СписокКомпоновщикНастроекПользовательскиеНастройки" id="1">
<Title>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,19 +20,23 @@

#Область ОбработчикиСобытийФормы

&НаКлиенте
Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)

Если ИмяСобытия = "ОбновитьСписокПредопределенных" Тогда
Элементы.Список.Обновить();
КонецЕсли;
Comment on lines +26 to +28
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛠️ Refactor suggestion

Consider adding error handling for the list update

While updating the list with Элементы.Список.Обновить();, it's advisable to include error handling to manage potential exceptions that may occur during the update process. This ensures robustness and improves user experience in case of unexpected issues.

Apply this diff to add basic error handling:

Если ИмяСобытия = "ОбновитьСписокПредопределенных" Тогда
+   Попытка
        Элементы.Список.Обновить();
+   Исключение
+       // Обработка ошибки обновления списка
+       Предупреждение("Ошибка обновления списка предопределенных значений.");
+   КонецПопытки;
КонецЕсли;
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
Если ИмяСобытия = "ОбновитьСписокПредопределенных" Тогда
Элементы.Список.Обновить();
КонецЕсли;
Если ИмяСобытия = "ОбновитьСписокПредопределенных" Тогда
Попытка
Элементы.Список.Обновить();
Исключение
// Обработка ошибки обновления списка
Предупреждение("Ошибка обновления списка предопределенных значений.");
КонецПопытки;
КонецЕсли;


КонецПроцедуры

#КонецОбласти

#Область ОбработчикиКомандФормы

&НаСервереБезКонтекста
Процедура ЗаполнитьПредопределенныеНаСервере()
пбп_ПредопределенныеЗначения.ИнициализироватьПредопределенныеЗначения(Справочники.пбп_ИнтеграционныеПотоки);
КонецПроцедуры

&НаКлиенте
Процедура ЗаполнитьПредопределенные(Команда)

ЗаполнитьПредопределенныеНаСервере();
пбп_ПредопределенныеЗначенияКлиент.СоздатьОбновитьПредопределенныеЗначения(ЭтотОбъект);

Элементы.Список.Обновить();

Comment on lines +39 to 42
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codebase verification

Incomplete refactoring detected: Old server-side method still referenced.

The method ЗаполнитьПредопределенныеНаСервере is still present in Module.bsl, indicating that the refactoring to client-side processing may be incomplete. Additionally, there are multiple implementations of СоздатьОбновитьПредопределенныеЗначения, which could lead to maintenance challenges.

  • Ensure that all references to ЗаполнитьПредопределенныеНаСервере are removed or appropriately replaced.
  • Review the implementations of СоздатьОбновитьПредопределенныеЗначения to consolidate and prevent redundancy.
🔗 Analysis chain

Verify the completeness and security of the client-side implementation.

The change from server-side to client-side processing of predefined values is a significant alteration. While this can improve performance by reducing server calls, it's crucial to ensure that all scenarios are properly handled and that there are no security implications.

Please address the following points:

  1. Confirm that пбп_ПредопределенныеЗначенияКлиент.СоздатьОбновитьПредопределенныеЗначения(ЭтотОбъект) covers all use cases previously handled by ЗаполнитьПредопределенныеНаСервере().
  2. Verify that moving this logic to the client side doesn't introduce any security vulnerabilities.
  3. Ensure that any side effects or additional logic that might have been present in the server-side method are accounted for in the new implementation.
  4. Consider adding error handling to manage potential failures during the client-side operation.

To assist in verifying the changes, you can run the following script to check for any remaining references to the old server-side method and to locate the implementation of the new client-side method:

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Check for references to old method and locate new method implementation

# Search for any remaining references to ЗаполнитьПредопределенныеНаСервере
echo "Checking for references to ЗаполнитьПредопределенныеНаСервере:"
rg --type bsl "ЗаполнитьПредопределенныеНаСервере"

# Locate the implementation of СоздатьОбновитьПредопределенныеЗначения
echo "Locating implementation of СоздатьОбновитьПредопределенныеЗначения:"
rg --type bsl "Процедура СоздатьОбновитьПредопределенныеЗначения"

Length of output: 695


Script:

#!/bin/bash
# Description: Check for references to ЗаполнитьПредопределенныеНаСервере and locate implementation of СоздатьОбновитьПредопределенныеЗначения in .bsl files

# Search for any remaining references to ЗаполнитьПредопределенныеНаСервере in .bsl files
echo "Checking for references to ЗаполнитьПредопределенныеНаСервере in .bsl files:"
rg --glob '*.bsl' "ЗаполнитьПредопределенныеНаСервере"

# Locate the implementation of СоздатьОбновитьПредопределенныеЗначения in .bsl files
echo "Locating implementation of СоздатьОбновитьПредопределенныеЗначения in .bsl files:"
rg --glob '*.bsl' "Процедура СоздатьОбновитьПредопределенныеЗначения"

Length of output: 1138

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда

#Область ОбработчикиСобытий

Процедура ПередЗаписью(Отказ)

Если ОбменДанными.Загрузка Тогда
Возврат;
КонецЕсли;

ДополнительныеСвойства.Вставить("ЭтоНовый", ЭтоНовый());

КонецПроцедуры

Процедура ПриЗаписи(Отказ)

Если ОбменДанными.Загрузка Тогда
Возврат;
КонецЕсли;

Если Не пбп_ОбщегоНазначенияСлужебныйКлиентСервер.СвойствоСтруктуры(ДополнительныеСвойства, "ЭтоНовый", Ложь) Тогда
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛠️ Refactor suggestion

Suggestion: Use 'СуществуетСвойство' method for clarity

For better readability and to directly check the existence of the "ЭтоНовый" property, consider using the СуществуетСвойство method of the ДополнительныеСвойства structure:

Если Не ДополнительныеСвойства.СуществуетСвойство("ЭтоНовый") Тогда

This makes the code more intuitive and eliminates the need for the external utility function.

Apply this diff to implement the suggestion:

-	Если Не пбп_ОбщегоНазначенияСлужебныйКлиентСервер.СвойствоСтруктуры(ДополнительныеСвойства, "ЭтоНовый", Ложь) Тогда
+	Если Не ДополнительныеСвойства.СуществуетСвойство("ЭтоНовый") Тогда

пбп_ОбщегоНазначенияСервер.ОбработатьСуществующийПредопределенныйЭлемент(ЭтотОбъект);
КонецЕсли;

КонецПроцедуры

#КонецОбласти

#КонецЕсли
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,9 @@
</Button>
</ChildItems>
</AutoCommandBar>
<Events>
<Event name="NotificationProcessing">ОбработкаОповещения</Event>
</Events>
<ChildItems>
<UsualGroup name="СписокКомпоновщикНастроекПользовательскиеНастройки" id="1">
<Title>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,19 +20,23 @@

#Область ОбработчикиСобытийФормы

&НаКлиенте
Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)

Если ИмяСобытия = "ОбновитьСписокПредопределенных" Тогда
Элементы.Список.Обновить();
КонецЕсли;

КонецПроцедуры
Comment on lines +24 to +30
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛠️ Refactor suggestion

Use constants for event names to improve maintainability

In the procedure ОбработкаОповещения, the event name "ОбновитьСписокПредопределенных" is hard-coded as a string literal. To enhance code maintainability and reduce the risk of typos, consider defining a constant for the event name.

You can define the event name as a constant at the module level:

Перем ИмяСобытияОбновитьСписокПредопределенных;

&НаКлиенте
Процедура ПриОткрытии()
    ИмяСобытияОбновитьСписокПредопределенных = "ОбновитьСписокПредопределенных";
КонецПроцедуры

&НаКлиенте
Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)
    Если ИмяСобытия = ИмяСобытияОбновитьСписокПредопределенных Тогда
        Элементы.Список.Обновить();
    КонецЕсли;
КонецПроцедуры

This approach improves readability and makes it easier to manage event names throughout the codebase.


#КонецОбласти

#Область ОбработчикиКомандФормы

&НаСервереБезКонтекста
Процедура ЗаполнитьПредопределенныеНаСервере()
пбп_ПредопределенныеЗначения.ИнициализироватьПредопределенныеЗначения(Справочники.пбп_ИнтегрируемыеСистемы);
КонецПроцедуры

&НаКлиенте
Процедура ЗаполнитьПредопределенные(Команда)

ЗаполнитьПредопределенныеНаСервере();
пбп_ПредопределенныеЗначенияКлиент.СоздатьОбновитьПредопределенныеЗначения(ЭтотОбъект);

Элементы.Список.Обновить();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -114,6 +114,20 @@
ИмяОбъекта = Неопределено;
КонецЕсли;

ДополнительныеСвойства.Вставить("ЭтоНовый", ЭтоНовый());

КонецПроцедуры

Процедура ПриЗаписи(Отказ)

Если ОбменДанными.Загрузка Тогда
Возврат;
КонецЕсли;

Если Не пбп_ОбщегоНазначенияСлужебныйКлиентСервер.СвойствоСтруктуры(ДополнительныеСвойства, "ЭтоНовый", Ложь) Тогда
пбп_ОбщегоНазначенияСервер.ОбработатьСуществующийПредопределенныйЭлемент(ЭтотОбъект);
КонецЕсли;

КонецПроцедуры

#КонецОбласти // ОбработчикиСобытий
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,9 @@
</Button>
</ChildItems>
</AutoCommandBar>
<Events>
<Event name="NotificationProcessing">ОбработкаОповещения</Event>
</Events>
<ChildItems>
<UsualGroup name="СписокКомпоновщикНастроекПользовательскиеНастройки" id="1">
<Title>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,19 +20,23 @@

#Область ОбработчикиСобытийФормы

&НаКлиенте
Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)

Если ИмяСобытия = "ОбновитьСписокПредопределенных" Тогда
Элементы.Список.Обновить();
КонецЕсли;

КонецПроцедуры

#КонецОбласти

#Область ОбработчикиКомандФормы

&НаСервереБезКонтекста
Процедура ЗаполнитьПредопределенныеНаСервере()
пбп_ПредопределенныеЗначения.ИнициализироватьПредопределенныеЗначения(Справочники.пбп_НастройкиИнтеграции);
КонецПроцедуры

&НаКлиенте
Процедура ЗаполнитьПредопределенные(Команда)

ЗаполнитьПредопределенныеНаСервере();
пбп_ПредопределенныеЗначенияКлиент.СоздатьОбновитьПредопределенныеЗначения(ЭтотОбъект);

Элементы.Список.Обновить();

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@

#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда

#Область ОбработчикиСобытий

Процедура ПередЗаписью(Отказ)

Если ОбменДанными.Загрузка Тогда
Возврат;
КонецЕсли;

ДополнительныеСвойства.Вставить("ЭтоНовый", ЭтоНовый());

КонецПроцедуры

Процедура ПриЗаписи(Отказ)

Если ОбменДанными.Загрузка Тогда
Возврат;
КонецЕсли;

Если Не пбп_ОбщегоНазначенияСлужебныйКлиентСервер.СвойствоСтруктуры(ДополнительныеСвойства, "ЭтоНовый", Ложь) Тогда
пбп_ОбщегоНазначенияСервер.ОбработатьСуществующийПредопределенныйЭлемент(ЭтотОбъект);
КонецЕсли;

КонецПроцедуры

#КонецОбласти

#КонецЕсли
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,9 @@
</Button>
</ChildItems>
</AutoCommandBar>
<Events>
<Event name="NotificationProcessing">ОбработкаОповещения</Event>
</Events>
<ChildItems>
<UsualGroup name="СписокКомпоновщикНастроекПользовательскиеНастройки" id="1">
<Title>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,19 +20,23 @@

#Область ОбработчикиСобытийФормы

&НаКлиенте
Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)

Если ИмяСобытия = "ОбновитьСписокПредопределенных" Тогда
Элементы.Список.Обновить();
КонецЕсли;

КонецПроцедуры

#КонецОбласти

#Область ОбработчикиКомандФормы

&НаСервереБезКонтекста
Процедура ЗаполнитьПредопределенныеНаСервере()
пбп_ПредопределенныеЗначения.ИнициализироватьПредопределенныеЗначения(Справочники.пбп_ТипСоответствияОбъектовИБ);
КонецПроцедуры

&НаКлиенте
Процедура ЗаполнитьПредопределенные(Команда)

ЗаполнитьПредопределенныеНаСервере();
пбп_ПредопределенныеЗначенияКлиент.СоздатьОбновитьПредопределенныеЗначения(ЭтотОбъект);

Элементы.Список.Обновить();

Expand Down
Original file line number Diff line number Diff line change
@@ -1 +1,30 @@


#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда

#Область ОбработчикиСобытий

Процедура ПередЗаписью(Отказ)

Если ОбменДанными.Загрузка Тогда
Возврат;
КонецЕсли;

ДополнительныеСвойства.Вставить("ЭтоНовый", ЭтоНовый());

КонецПроцедуры

Процедура ПриЗаписи(Отказ)

Если ОбменДанными.Загрузка Тогда
Возврат;
КонецЕсли;

Если Не пбп_ОбщегоНазначенияСлужебныйКлиентСервер.СвойствоСтруктуры(ДополнительныеСвойства, "ЭтоНовый", Ложь) Тогда
пбп_ОбщегоНазначенияСервер.ОбработатьСуществующийПредопределенныйЭлемент(ЭтотОбъект);
КонецЕсли;

КонецПроцедуры

#КонецОбласти

#КонецЕсли
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
</ChildItems>
</AutoCommandBar>
<Events>
<Event name="NotificationProcessing">ОбработкаОповещения</Event>
<Event name="OnCreateAtServer">ПриСозданииНаСервере</Event>
</Events>
<ChildItems>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,27 +8,26 @@

КонецПроцедуры

&НаКлиенте
Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)

Если ИмяСобытия = "ОбновитьСписокПредопределенных" Тогда
Элементы.Список.Обновить();
КонецЕсли;

КонецПроцедуры

#КонецОбласти

#Область ОбработчикиКомандФормы

&НаСервереБезКонтекста
Процедура ЗаполнитьПредопределенныеНаСервере()
пбп_ПредопределенныеЗначения.ИнициализироватьПредопределенныеЗначения(
ПланыВидовХарактеристик.пбп_ПредопределенныеЗначения);
КонецПроцедуры

&НаКлиенте
Процедура ЗаполнитьПредопределенные(Команда)

ЗаполнитьПредопределенныеНаСервере();
пбп_ПредопределенныеЗначенияКлиент.СоздатьОбновитьПредопределенныеЗначения(ЭтотОбъект);

Элементы.Список.Обновить();

КонецПроцедуры

#КонецОбласти

#Область СлужебныеПроцедурыИФункции
КонецПроцедуры

#КонецОбласти
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
<?xml version="1.0" encoding="UTF-8"?>
<MetaDataObject xmlns="http://v8.1c.ru/8.3/MDClasses" xmlns:app="http://v8.1c.ru/8.2/managed-application/core" xmlns:cfg="http://v8.1c.ru/8.1/data/enterprise/current-config" xmlns:cmi="http://v8.1c.ru/8.2/managed-application/cmi" xmlns:ent="http://v8.1c.ru/8.1/data/enterprise" xmlns:lf="http://v8.1c.ru/8.2/managed-application/logform" xmlns:style="http://v8.1c.ru/8.1/data/ui/style" xmlns:sys="http://v8.1c.ru/8.1/data/ui/fonts/system" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:v8ui="http://v8.1c.ru/8.1/data/ui" xmlns:web="http://v8.1c.ru/8.1/data/ui/colors/web" xmlns:win="http://v8.1c.ru/8.1/data/ui/colors/windows" xmlns:xen="http://v8.1c.ru/8.3/xcf/enums" xmlns:xpr="http://v8.1c.ru/8.3/xcf/predef" xmlns:xr="http://v8.1c.ru/8.3/xcf/readable" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.16">
<CommonForm uuid="166e97da-eea9-43e5-a47a-ee07fab3fd9c">
<Properties>
<Name>пбп_ФормаРазрешенияКонфликтовПредопределенныхЭлементов</Name>
<Synonym>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Разрешение конфликтов предопределенных элементов</v8:content>
</v8:item>
</Synonym>
<Comment/>
<FormType>Managed</FormType>
<IncludeHelpInContents>true</IncludeHelpInContents>
<UsePurposes>
<v8:Value xsi:type="app:ApplicationUsePurpose">PlatformApplication</v8:Value>
<v8:Value xsi:type="app:ApplicationUsePurpose">MobilePlatformApplication</v8:Value>
</UsePurposes>
<UseStandardCommands>false</UseStandardCommands>
<ExtendedPresentation/>
<Explanation/>
</Properties>
Comment on lines +4 to +22
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codebase verification

Issues Identified in Form Definitions:

  1. Empty Elements:
    The Comment, ExtendedPresentation, and Explanation elements are empty in the following forms:

    • src/cf/CommonForms/пбп_ФормаРазрешенияКонфликтовПредопределенныхЭлементов.xml
    • src/cf/CommonForms/пбп_ФормаВыбораПоля.xml
      Consider populating these fields with relevant information to enhance documentation and maintainability.
  2. Disabled Standard Commands:
    The UseStandardCommands property is set to false in the above forms. Please provide justification for disabling standard commands, as this might impact user experience.

🔗 Analysis chain

Properties are well-defined, but consider the following points:

  1. The form name "пбп_ФормаРазрешенияКонфликтовПредопределенныхЭлементов" uses a prefix "пбп_". Ensure this naming convention is consistent with other forms in the project.

  2. Some elements are empty (Comment, ExtendedPresentation, Explanation). Consider adding useful information to these fields to improve documentation and maintainability.

  3. Standard commands are disabled (UseStandardCommands is false). Please provide justification for this decision, as it might affect user experience.

Overall, the properties are appropriately set for a common form. The inclusion of help in contents and support for both platform and mobile applications is noteworthy.

To verify the naming convention consistency, run the following script:

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Check for consistency in form naming conventions

# Test: Search for other form definitions with the "пбп_" prefix
echo "Forms with 'пбп_' prefix:"
rg --type xml '<Name>пбп_.*</Name>' src/cf/CommonForms

Length of output: 351


Script:

#!/bin/bash
# Description: Check for empty Comment, ExtendedPresentation, or Explanation elements

echo "Forms with empty Comment, ExtendedPresentation, or Explanation elements:"
rg --type xml '<(Comment|ExtendedPresentation|Explanation)/>' src/cf/CommonForms

Length of output: 718


Script:

#!/bin/bash
# Description: Check forms with UseStandardCommands set to false

echo "Forms with UseStandardCommands set to false:"
rg --type xml '<UseStandardCommands>false</UseStandardCommands>' src/cf/CommonForms

Length of output: 409

</CommonForm>
</MetaDataObject>
Loading
Loading