Привет всем, такой вопрос

Как можно заместить родительское сообщение в дизайнере процессов ?



Мне нужно заместить сообщение InvoiceSaved так что бы запускалось только моё сообщение без родительского.



(Это мне нужно для того что бы отключить автонумерацию после сохранения счета)



Изображение удалено.

Нравится

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

Примерно так:

Заместить объект  добавить обработку сообщения InvoiceSaved  Добавить необходимую обработку (скопировать из родительского) и не вызывать родительскую обработку (те оборвать провал к родителю)

Чтобы отключить автонумерацию можно просто удалить системные настройки или что еще проще просто спрятать поле номер. Или вам нужно чтобы нумерация осталась но номер присваивался не автоматом?

Григорий Чех,

Мне нужно в определённых условиях обнулять номер и так что бы он не обновлялся и счетчик не шёл дальше.

Я сделал дочерний процесс который работает в место этого, проблема была в том что после моего процесса начал выполнятся этот (родительский), мне нужно было его как то убрать, мне тут подсказали какой командой это можно сделать:

context.Process.ActivatedEventElements.Remove("InvoiceSaved");

 

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

При создании контрагента с типом "Физ.лицо", автоматически создаётся контакт, который связан с этим контрагентом. Передаются данные о мобильном и рабочем телефонах, но не передаётся номер, указанный как основной на контрагенте. Где это можно изменить? Пересмотрел процессы в системе - не нашёл чего-то похожего, чтобы указать перенос этого поля.

Спасибо.

Нравится

3 комментария
Лучший ответ

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

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

Стандартно типа контрагента «Физ.лицо» нет, его добавили самостоятельно. Значит, и логика тоже самодельная. Можно в первую очередь посмотреть в пакете «Custom». Если там нет, может быть в другом пакете, созданном самостоятельно или партнёром.

Это может быть либо логика во встроенном БП схемы «Контрагент», либо отдельный БП по сигналу добавления контрагента этого типа.

а как вы это делаете? В системе есть синхронизация полей контакта и его средств связи, и там бывает некоторое странное поведение

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

Добрый день! Подскажите, пожалуйста, есть ли возможность изменить количество подгружаемых строк при просмотре данных в графике?

Изображение удалено.

Насколько я понимаю, за это количество (5 строк) отвечает параметр RowCount и функция getRowCount в схеме ChartModule.

Но эта функция (и параметр) находятся в классе, который, насколько я понимаю, я не могу изменить. Если сделать свой класс, наследованный от нужного, и поменять в нем параметр, то мне непонятно, как потом подменять класс отображаемого графика на свой.

Может быть, существует какой-нибудь безболезненный способ изменить значение нужного параметра?

Нравится

13 комментариев
Лучший ответ

Иван Небеддаг,

В общем, создаете Замещающий клиентский модуль, в поле Родительский объект выбираете "Модуль построения графиков", это 

ChartModule, из него просто скопируйте все, Ctrl + A, Ctrl+C и вставьте в ваш замещающий клиентский модуль весь скопированный код, затем найдите метод initGridData, где замените 5 на нужное вам число

Добрый день, можно в объект ChartProperty добавить поле с количеством отображаемых строк для графика и обрабатывать это поле в модуле построения графиков

А если вы создадите замещающий модуль к ChartModule, то он автоматически будет использоваться при построении графиков, но у вас опять же будет фиксированное количество строк для всех графиков

Это же задаётся пользовательскими средствами в настройках списка:

Колодяжный Владислав Эдуардович,

Зверев Александр,

Большое спасибо!

Александр, подскажите пожалуйста, как Вы открыли такие настройки списка? Потому что либо я не там их ищу, либо в версии 7.12.2 что-то другое в этих настройках:

Зверев Александр,

я изначально так же подумал, но для графиков такого нет, только для списка можно установить по умолчанию

В 7.12.0 это настраивается на второй вкладке свойств списка. Сначала открывают на редактирование пунктом меню «Изменить» всю панель итогов, потом на её схематическом изображении выбирают нужный список и открывается уже его редактирование свойств.

Для графиков, в отличие от списков, отдельные строки не подгружаются, поэтому такая настройка смысла не имеет. Если нужно только списочное представление с широкими настройками — используйте список, а не график.

Зверев Александр,

в графиках можно выбрать в меню "показать данные", и тогда вместо графика появляется список, в котором как раз и хотелось бы поменять эту настройку. Но я уже понял, что в пользовательском интерфейсе её нельзя изменить, к моему сожалению.

Колодяжный Владислав Эдуардович,

Насколько я понял, оба варианта, предложенных Вами сводятся в том числе к изменению ChartModule. Возможно, у меня возникают трудности из-за того, что я не до конца разобрался с классами, объявленными с помощью extJs. Для меня загвоздкой является именно то, что в ChartModule создается класс (Ext.define("Terrasoft.configuration.ChartViewModel"...), в котором уже есть параметр и функция. И я понимаю, как создать этот класс целиком в замещающей схеме, но не понимаю, как можно изменить в нем только одну функцию или один параметр. Потому что копипастить стандартный класс - не лучшая идея, он может меняться от версии к версии.

Иван Небеддаг,

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

Вместо графика используйте список, там поменять можно. Для элемента-графика функциональность в режиме списка является вспомогательной, там таких настроек не предусмотрено. 

Литвинко Павел,

Я прошу прощение за занудство, но подскажите, пожалуйста (в общих чертах), как мне заместить один метод в замещающей схеме, если основная схема имеет вид:

define("ChartModule", [...],

    function(...) {

        Ext.define("Terrasoft.configuration.ChartViewModel", {

            extend: "Terrasoft.BaseViewModel",

            alternateClassName: "Terrasoft.ChartViewModel",

            ...

            getRowCount: function() {

                return this.get("RowCount");

            },

            ...

        });

        return Terrasoft.ChartModule;

    });

Иван Небеддаг,

В общем, создаете Замещающий клиентский модуль, в поле Родительский объект выбираете "Модуль построения графиков", это 

ChartModule, из него просто скопируйте все, Ctrl + A, Ctrl+C и вставьте в ваш замещающий клиентский модуль весь скопированный код, затем найдите метод initGridData, где замените 5 на нужное вам число

Литвинко Павел,

Я как раз про это выше писал:

Иван Небеддаг пишет:

И я понимаю, как создать этот класс целиком в замещающей схеме, но не понимаю, как можно изменить в нем только одну функцию или один параметр. Потому что копипастить стандартный класс - не лучшая идея, он может меняться от версии к версии.

Спасибо всем за помощь! Буду тогда копать в сторону создания класса, унаследованного от нужного, и добавления его в аналитику.

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

Добрый день!

На схему редактирования "Заказ" добавил поле "Скидка", значение которого, равномерными частями в зависимости от кол-ва строк заказов, проставляется в соответствующее поле "Сумма скидки" на детали "Продукт в заказе" всего перечня заказов процессом.

Изображение удалено.



Как можно вызвать ре-калькуляцию полей "Итого", "Скидка, %". В коробке данная функция выполняется при смене фокуса поля после редактирования

Нравится

9 комментариев
Лучший ответ

Ну четко определитесь по какому событию вы хотите пересчитывать все.

Например такой вариант

1) при смене скидки (вверху) по подписке посылаете в деталь сообщение скидка поменялась.  (Подписаться в атрибуте карточки на смену скидки и создать подписку на событие смена скидки в детали и карточке)

2)Получив в детали событие скидка поменялась делите суммарную скидку на количество продуктов (строк) -это если я правильно понял ваш алгоритм. Пересчитываете зависимые поля в детали ("Итого", "Скидка, %").

Если не понятно как какой то пункт сделать пишите вопросы.

 

Ну четко определитесь по какому событию вы хотите пересчитывать все.

Например такой вариант

1) при смене скидки (вверху) по подписке посылаете в деталь сообщение скидка поменялась.  (Подписаться в атрибуте карточки на смену скидки и создать подписку на событие смена скидки в детали и карточке)

2)Получив в детали событие скидка поменялась делите суммарную скидку на количество продуктов (строк) -это если я правильно понял ваш алгоритм. Пересчитываете зависимые поля в детали ("Итого", "Скидка, %").

Если не понятно как какой то пункт сделать пишите вопросы.

 

Григорий Чех пишет:

Если не понятно как какой то пункт сделать

Спасибо за ваш ответ. Действительно не совсем понятно...

т.е. помимо процесса, на схему страницы "Заказы" добавить метод обработки изменения значения поля "Скидка", результатом которого будет  отправка адресного сообщения, которое, в свою очередь, получит метод обработки схемы редактирования детали "продукт в заказе"

я правильно понял?

Если у вас расчет скидки в "Продукт в заказе" идет в процессе то по изменению поля скидка можно вызывать процесс передавая ему нужные параметры.

Добрый день!

У меня такой же вопрос. Сумму в деталь передать получилось с помощью сообщения. Но как в цикле пройти по строкам детали и изменить значения полей, не используя ESQ, не понимаю? И можно ли таким способом изменить данные детали?

Возможно, обойдётся и без цикла на клиенте. Обновить значения в таблице детали в базе серверной логикой: элементом БП, скриптом с ESQ или Update, а затем обновить деталь, как делают тут.

Спасибо, Александр, за ответ. Т.е. на клиенте использовать механизмы детали не получится? Хотелось бы чтобы автоматически запускались связанные события по цепочке после редактирования/сохранения детали, точно так же когда пользователь работает с данными детали в интерфейсе приложения.

Если речь о событиях на уровне БП,то изменение записи через ESQ их тоже запускает. Если хотите, можно попробовать и в JS на клиенте, поищите деталь с аналогичной логикой обновления извне и посмотрите логику.

Да, в JS на клиенте интересовала логика. Так и придется сделать. Надеялся, что кто то уже такое проделывал, чтобы не изобретать самому велосипед.

Если интересует именно результат в базе, то можно пересчитать и на сервере, а деталь в конце обновить.

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

Добрый день!

Создал в разделе итогов Список, в параметрах отображения вывожу одну строку.

После сохранения списка выводится одна строка, но с возможностью показать весть список через ссылку "Показать больше"

Список создал для менеджеров, что у них на дашбордах отображалась ТОЛЬКО одна запись на текущий момент. Но по текущей логике менеджер может нажать "Показать больше" и взять в работу другой элемент списка (например, список по лидам)

Можно убрать ссылку Показать больше из списка? Насколько я помню, в более старых версиях данной ссылки не было

Заранее благодарю!

Нравится

1 комментарий

Эта логика реализована в схеме ChartModule:

/**
 * Loads data into grid with pageble options.
 * @protected
 */
loadMore: function() {
	this.loadGridData();
},

 И ниже:

}, {
"name": chartId + "_loadMore",
"itemType": Terrasoft.ViewItemType.BUTTON,
"caption": {"bindTo": "Resources.Strings.LoadMoreButtonCaption"},
"click": {"bindTo": "loadMore"},
"controlConfig": {
"style": Terrasoft.controls.ButtonEnums.style.TRANSPARENT,
"imageConfig":  {"bindTo": "Resources.Images.LoadMoreIcon"}
},
"classes": {"wrapperClass": ["load-more-button-class"]},
"visible": {"bindTo": "CanLoadMoreData"}
}]

Можно попробовать либо модифицировать функцию, либо поменять условие видимости, чтобы всегда было false. Либо вообще удалить механизм целиком.

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

Добрый день!

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

Нравится

4 комментария
Лучший ответ

нет, точнее так:

1. Если запускаете из пользовательского интерфейса - там только на запуск, нельзя отследить окончание выполнения.

2. Если есть преднастроенные страницы (кастомные), то можно в них последовательно включать и выключать маску.

3. Никто не помешает пользователю нажать рефреш :)

нет, точнее так:

1. Если запускаете из пользовательского интерфейса - там только на запуск, нельзя отследить окончание выполнения.

2. Если есть преднастроенные страницы (кастомные), то можно в них последовательно включать и выключать маску.

3. Никто не помешает пользователю нажать рефреш :)

Дмитрий Степанов,

Дмитрий, добрый день!

Спасибо за предложенные варианты.

Мне не совсем они подходят, возможно я не совсем точно описал кейс.

Кейс состоит в том, что:

последовательно выполняются три подпроцесса:

1) Первый заканчивается

преднастроенной страницей, далее идет переход во 2-й подпроцесс

2) Второй подпроцесс без страниц, и он выполняется достаточно долго(порядка 10 сек). В это время отображается единое окно и пользователь может быть сбит с толку.

3) После выполнения 2-го процесса запускается 3-й процесс с преднастроенной страницей. 



Вопрос в том, чтобы как-то залочить экран пользователя, чтобы перед поднятием страницы в 3-м процессе он во время временного окна никуда не перешел из единого окна.

Подозреваю, что полностью оградить от действий пользователя никак не получится, ведь он всегда сможет открыть второй браузер или анонимное окно. Разве что банить на несколько минут.

В описанном примере можно попробовать так: одновременно с запуском длительного фонового процесса показать ещё одну преднастроенную страницу без всяких элементов управления, но с поясняющей надписью или картинкой, а логику её закрытия реализовать путём отправки из процесса сообщения по Websocket.

 

Зверев Александр,

Александр, спасибо за идею. Похоже на самый реалистичный вариант.

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

Всем доброго времени суток. Версия 7.12.

Появилась идея вывести на детали с реестом дополнение к стандартному фильтру (стандартный вообще не подходит для использующегося варианта фильтрации, не в этом суть) - текстовое поле.

Для этого в схеме соответствующей детали добавил виртуальную текстовую колонку по стандартной схеме через атрибуты:

"UsrValue":{
				"dataValueType": Terrasoft.DataValueType.TEXT,
				"type": Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN,
			},

И далее в diff добавляем текстовое поле стандартным образом.

На детали выглядит это следующим образом:

Изображение удалено.

Вместо поля - пустое место, а в консоли - ошибка: "Невозможно найти колонку по конфигурации". 

Насколько я понимаю, ошибка возникает из-за того, что diff грузится быстрее, чем attributes и не срабатывает bindTo в свойствах.

В итоге сделал через всплывающие мини-карточки, но вообще можно ли как-то обойти эту ошибку?

 

Нравится

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

Привидите diff

Похожее делается на детали «Хронология» (схема TimelineSchema), там тоже в шапке есть текстовое поле поиска. Там блок фильтров реализован в отдельной TimelineFiltersSchema, виртуальная колонка SearchText добавляется точно так же, как у Вас. Посмотрите, как дальше с ней работают, может, что-то пропустили.

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

Добрый день!

Никто не сталкивался с задачей, что нужно настроить доступ к отдельным записям справочника? (например есть справочник "Специальность" и часть записей в нём нужно скрыть от пользователей определённой функц. роли)

Нравится

3 комментария
Лучший ответ

А такая же настройка доступа к объекту по записям не работает?



Второй вариант - фильтрация содержимого справочника (по некоторому признаку в справочнике) непосредственно на странице. Но это будет работать только для заполнения, то есть, в фильтрах и аналитике эти значения будут доступны всем

А такая же настройка доступа к объекту по записям не работает?



Второй вариант - фильтрация содержимого справочника (по некоторому признаку в справочнике) непосредственно на странице. Но это будет работать только для заполнения, то есть, в фильтрах и аналитике эти значения будут доступны всем

Да, для объекта справочника можно так же включить администрирование по записям, как и для другой таблицы. При этом автоматически в базе должна создаться таблица Sys...Right. Поскольку справочник не зарегистрирован как раздел, добавить в неё записи можно через базу. Либо попробовать через БП, при помощи блока «Изменить права доступа».

Спасибо за комментарии, решил путём администрирования по записям, а для каждой записи справочника добавил определяющее справочное поле. После этого бизнес-процессом изменил права, согласно значениям справочного поля. Для новых значений также бизнес процессом раздаются права.

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

Добрый день! 



Возникла проблема с обработкой ответа в массиве, при вызове веб-сервиса через стандартный элемент в бизнес-процессе.



В настройках раздела "Веб-сервисы" есть деталь "Методы сервиса", при настройке обработки ответа, есть поле "Является массивом", при его активации, в бизнес-процессе возможность записать данный ответ в параметр БП для дальнейшей обработки представляет возможным только с типом данных "Коллекция значений с атрибутами", и соответственно разобрать это можно только с помощью "Задания-сценарий"



Пример настройки ответа:

 

Изображение удалено.





Вопрос, как разобрать обработанный ответ?



Как я понял, нужно обращаться к ICompositeObjectList, но совсем не понятно, как это работает...



Пример ответа (Для каждого контакта поля в выборке id, name, phone):

Изображение удалено.

 



 

Нравится

7 комментариев

Вам нужен пример, как эти данные в коде обработать?

Если бы результат всегда возвращал одну запись в массиве, парсинг  можно было бы организовать при настройке параметров. Плюс у Вас ещё и элементы массива тоже, по сути, являются записями с 4 полями. Можно ещё попробовать считать всё внутри квадратных скобок в одну большую текстовую переменную, а потом разбирать программно в скрипте, наполняя массив или список объектов с полями. В 7.13 обещают изменения в движке веб-сервисов, возможно, стоит чуть подождать и он сможет и такое автоматически разобрать, как минимум, до массива строк.

Литвинко Павел,

Да. А если ещё конкретнее, то пример, как разобрать массив уже "обработанный" стандартными возможностями обработки ответа (первый скрин).



Попытки посмотреть, что возвращает данная обработка не увенчались успехом



По скольку в академии этот вопрос "опущен", но такая необходимость возникает. Сейчас в стандартном поле "Ответ сервиса" непонятный html документ вываливается, даже без данного массива, но HTTP ответ 200

Зверев Александр,

если бы одну, то проблем бы конечно было меньше, но интересует выборка большого кол-ва данных



да, тоже такого варианта придерживаюсь "Можно ещё попробовать считать всё внутри квадратных скобок в одну большую текстовую переменную, а потом разбирать программно в скрипте"



Но, сейчас в ответе сервиса html документ без данного ответа но с кодом 200, и также интересно, что же все таки возвращает эта настройка обработки ответа, та, что на первом скрине

Посмотреть, что вообще пришло в ответ, можно в Fiddler (если сайт поднят локально). Может, что-то изменилось и во входящих параметрах и возвращаемый массив стал пустым?

Зверев Александр,

Действительно, пересобрал сейчас - заработало, видимо что-то пропустил)

То есть Fiddler должен вернуть обработанный ответ? 



Плясать от ответа сервиса(как на втором скрине) - в принципе не самое худшее, но для чего тогда сделали "Является массивом", при том, что ответ сервера пересобирается в таком случае в неведомый интерфейс IObjectList который можно записать в параметр "Коллекция значений" и уже исходя из него что-то делать...

https://academy.terrasoft.ru/api/netcoreapi/7.12.0/Terrasoft.Common~Ter…

 

Fiddler позволяет посмотреть, какие запросы и ответы ходили по HTTP.

В 7.13 эту коллекцию можно будет обработать в интерфейсе, там доработали возможность для ответов-массивов. Документация должна появиться после релиза. В 7.12, где эта галочка впервые появилась, — только кодом, но готовых примеров тоже нет. Также, сомневаюсь, что любая автоматизация сумеет разобрать строку на 4 поля по разделителям вроде «Phone: » (разве что делать элементами-формулами), так что перебирать в скрипте всё равно потребуется.

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

var accountUpdate = new Update(UserConnection, "Account")

                        .Set("IndustryId", Column.Parameter(IndustryIdParameter))

                        .Where("Id").IsEqual(Column.Const(AccountIdParameter)).Execute()

Если есть такой запрос и значение параметра IndustryIdParameter равно null, то выдаст ошибку так как в базу пойдет запрос не со значением null, a c Guid.Empty.

Каким образом можно решить эту задачу?

И ещё интересует возможно ли использование в этой конструкции сложных условий в Where, речь идет о запросе вида:

update Account

set

    IndustryId = @P4

where CountryId = @P1

    and (IndustryId = @P2

        or IndustryId = @P3)

Нравится

15 комментариев
Лучший ответ

Лучше использовать конструкцию .OpenBlock() пример ниже:

 

Select select = (Select)new Select(UserConnection)
	.Column("Id")
	.Column("AccountAId")
	.Column("AccountBId")
	.From("Relationship")
	.Where()
		.OpenBlock()
			.OpenBlock("AccountAId").IsEqual(Column.Parameter(accountId))
				.And("AccountBId").IsEqual(Column.Parameter(searchParentId))
			.CloseBlock()
		.Or()
			.OpenBlock("AccountAId").IsEqual(Column.Parameter(searchParentId))
				.And("AccountBId").IsEqual(Column.Parameter(accountId))
		.CloseBlock()
		.And()
			.OpenBlock("RelationTypeId").IsEqual(Column.Parameter(relationTypeId))
				.Or("ReverseRelationTypeId").IsEqual(Column.Parameter(relationTypeId))
			.CloseBlock();
		.CloseBlock();

 

if (IndustryIdParameter != Guid.Empty) {
  var accountUpdate = new Update(UserConnection, "Account")
   .Set("IndustryId", Column.Parameter(IndustryIdParameter))
   .Where("Id").IsEqual(Column.Const(AccountIdParameter)).Execute()
}

А для конструкции получается просто

 

var accountUpdate = new Update(UserConnection, "Account")
   .Set("IndustryId", Column.Parameter(IndustryIdParameter))
   .Where("CountryId").IsEqual(Column.Parameter(CountryParameter))
   .And("IndustryId").IsEqual(Column.Parameter(IndustryIdParameter1))
   .Or("IndustryId").IsEqual(Column.Parameter(IndustryIdParameter2));

 

new Update(UserConnection, "ActivityCorrespondence")
.Set("ActivityId", Column.Const(null))
.Where("ActivityId").IsEqual(Column.Parameter(activityId))
.Execute(dbExecutor);

 

Литвинко Павел,

Ага, а если нужно проверить 5 параметров, то в пору делать switch с перебором всех возможных комбинаций. 

Лучше использовать конструкцию .OpenBlock() пример ниже:

 

Select select = (Select)new Select(UserConnection)
	.Column("Id")
	.Column("AccountAId")
	.Column("AccountBId")
	.From("Relationship")
	.Where()
		.OpenBlock()
			.OpenBlock("AccountAId").IsEqual(Column.Parameter(accountId))
				.And("AccountBId").IsEqual(Column.Parameter(searchParentId))
			.CloseBlock()
		.Or()
			.OpenBlock("AccountAId").IsEqual(Column.Parameter(searchParentId))
				.And("AccountBId").IsEqual(Column.Parameter(accountId))
		.CloseBlock()
		.And()
			.OpenBlock("RelationTypeId").IsEqual(Column.Parameter(relationTypeId))
				.Or("ReverseRelationTypeId").IsEqual(Column.Parameter(relationTypeId))
			.CloseBlock();
		.CloseBlock();

 

Литвинко Павел,

В том то и дело, что такой способ мне известен, но перебирать нужно 3 разные комбинации и в итоге, вместо кода на один абзац, получается аж на страницу!

Интересует возможность прямо в Update запилить эту проверку.

Зверев Александр,

Саша, такой вариант понятен. Но мне нужно сразу преобразовать пустой параметр в null, чтобы вместо нескольких практически аналогичных запросов использовать один.

К тому же, для наглядности приведен достаточно тривиальный пример. В реальности таких полей с пустым значением может быть несколько в разных комбинациях.

 

Алла, что не так в написании в нужном месте одного и того же текста «Column.Const(null)»? Если не знаешь, будет там null или значение, можно написать в С# в месте формирования Update блок if(){}else{} и проверять значение переменной. Update можно формировать по частям, дописывая к нему строки от начала к концу. И запускать, когда готов.

Алла Савельева,

Тогда делайте через тернарный оператор "?" и получите то же условие но в одну строку

Литвинко Павел,

Пожалуйста, расскажите подробнее на моем примере.

Алла Савельева,

Примерно так:

var accountUpdate = new Update(UserConnection, "Account")
.Set("IndustryId", Column.Const(IndustryIdParameter != Guid.Empty ? IndustryIdParameter.ToString() : null))
.Where("Id").IsEqual(Column.Const(AccountIdParameter)).Execute()

 

Алла, примерно:

 .Set("IndustryId", ((IndustryIdParameter!=Guid.Empty)?Column.Parameter(IndustryIdParameter):Column.Const(null)))

 

А еще лучше будет расширить метод Set, чтобы сразу проверять на Guid.Empty

 

public static Update Set(this Update update, string column, Guid value)
        {
            return value == Guid.Empty
                ? update.Set(column, Column.Parameter(null))
                : update.Set(column, Column.Parameter(value));
        }

И весь вызов станет еще компактнее

 

.Set("IndustryId", YourGuid);

 

Литвинко Павел,

Тернарный оператор ! 

Григорий Чех пишет:

Литвинко Павел,

Тернарный оператор ! 

 Точно! Поправил, спасибо)

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