Помощь по написанию запросов

Пишу PHP модуль для связи сайта с BPM. Есть какой-нибудь Wysywig редактор для построения SQL запросов? Писать такие запросы вручную это просто утомительно. К тому же не ясно, как проконтролировать скомпилированный запрос и обработанный DataService

{

            "QueryType": 0,
            "Columns": {
                "Items": {
                    "Name": {
                        "OrderDirection": 0,
                        "OrderPosition": 0,
                        "Caption": null,
                        "Expression": {
                            "ExpressionType": 0,
                            "ColumnPath": "Name"
                        }
                    },
                    "OwnerLogin": {
                        "OrderDirection": 0,
                        "OrderPosition": 0,
                        "Caption": null,
                        "Expression": {
                            "ExpressionType": 0,
                            "ColumnPath": "[WSysAccount:Contact:Owner].Login"
                        }
                    }
                }
            },
            "AllColumns": false,
            "IsDistinct": false,
            "RowCount": 1,
            "Filters": {
                "FilterType": 6,
                "ComparisonType": 0,
                "LogicalOperation": 0,
                "IsNull": true,
                "IsEnabled": true,
                "IsNot": false,
                "Items": {
                    "FilterByPhone": {
                        "FilterType": 1,
                        "ComparisonType": 9,
                        "LogicalOperation": 0,
                        "IsNull": true,
                        "IsEnabled": true,
                        "IsNot": false,
                        "LeftExpression": {
                            "ExpressionType": 0,
                            "ColumnPath": "[ContactCommunication:Contact].SearchNumber"
                        },
                        "RightExpression": {
                            "ExpressionType": 2,
                            "ColumnPath": null,
                            "Parameter": {
                                "DataValueType": 1,
                                "Value": "54326672198"
                            }
                        }
                    }
                }
            },
            "RootSchemaName": "Contact",
            "OperationType": 0
}';

Нравится

3 комментария

Андрей, здравствуйте!

Наличие визуального редактора для не предусмотрено. Хочу обратить внимание, что SQL запросы и ESQ запросы - это разные инструменты для получения данных. В отличии от ESQ, SQL запросы не учитывают права пользователя. Таким образом один и тот же запрос, интерпретированный на SQL и ESQ может возвращать разный результат.

Пусть так, а как проконтролировать какой SQL запрос получится из этого запроса? На примитивном запросе с одним условием еще более менее понятно, а вот делаю объединение запроса и привет. Например, хочу эмулировать запрос
SearchNumber in ("54326672198", "54326672197") /* пользователи и через 8ку заносят номера и через +7*/
ну или так SearchNumber="54326672198" or SearchNumber="54326672197"
и всё, не отрабатывает, пробовал и через RightExpressions[] и задавал два Items. В первом случае возвращается всегда error, а во втором случае если искать в первом item "54326672197" находит. если номер во втором item, то соответствий нет.

а уж такие запросы типа select * from dbo where id in (select id from dbo1 where x=y) я понимаю вообще не сделать

Добрый день, Андрей.
Мне кажется, что в Вашем случае значительно лучше подойдут sql view нежели сложные odata запросы. Просто создайте view в базе данных, которая будет Вам возвращать нужную выборку по простому запросу и обращайтесь к ней (view должна быть связана с объектом в конфигурации).
В описанном Вами случае, вьюха будет представлять union таблицы контактов с необходимыми полями и всеми вариантами написания номера. Запрашиваете у вьюхи номер в любом формате - она возвращает нужные данные контакта.
Соответственно, отдельная вьюха под каждую задачу.

Также, ознакомьтесь со статьями
https://academy.terrasoft.ru/documents/technic-sdk/7-9/rabota-s-obektam…
и
https://academy.terrasoft.ru/documents/technic-sdk/7-9/primery-zaprosov…
Чуть более сложные запросы в комбинации со вьюхой позволят построить выборку практически любой сложности.
Опять же, на вьюху можно навесить тригер в БД. Тогда можно вообще кастомные запросы обрабатывать.

Показать все комментарии