29.01.2018, 20:03 | #1 |
Участник
|
Сохранение записи на клиенте с игнором заполнения обязательных полей
Коллеги, приветствую.
Есть необходимость программно сохранить карточку в момент первичного открытия формы на создание, игнорируя требования заполнить обязательные поля. Это нужно чтобы создать необходимые связи и сразу отобразить их в сабгридах этой карточки. Я вижу следующий сценарий: - снимаем все требования по полям (setRequiredLevel("none")) - сохраняем, создаём связи и проч. - возвращаем требования по обязательности полей обратно. Это правильный сценарий? Или у кого-то есть более элегантное решение для Dynamics 365 (on-premise)? Спасибо |
|
29.01.2018, 20:17 | #2 |
Moderator
|
Я бы заменил код кнопки создания. Будет быстрее работать и не будет непонятной для пользователя перезагрузки.
__________________
http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия. MS Certified Dirty Magic Professional |
|
30.01.2018, 00:58 | #3 |
Участник
|
А можно немножко подробнее про ваш сценарий из кнопки? И в какой момент моего сценария предполагается непонятная перезагрузка? Тут ещё дело в том, что вероятнее всего, новая запись будет создаваться с кнопки сабгрида, а не риббона.
|
|
30.01.2018, 13:26 | #4 |
Moderator
|
Суть предложения: берем RibbonWorkbench и заменяем (делаем customize command) на всех риббонах-командбарах для кнопки "Создать". В своей команде делаем запрос на создание, после чего открываем полученный ID стандартным образом. Судя по SDK можно поменять эту команду для сабгрида.
__________________
http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия. MS Certified Dirty Magic Professional |
|
30.01.2018, 13:33 | #5 |
Moderator
|
Как бы работал сценарий, если бы функционал был реализован в обработчике открытия формы. Сначала бы загрузилась лента и форма для чтения. Потом сработал бы ваш обработчик и вызвал бы сохранение еще непрогруженной формы. Сохранение (если нет ошибок) вызвало бы Refresh формы и повторный рендеринг сабгридов. Это, как минимум дольше, и, если система тормозит, будет выглядеть для пользователя как глюки.
p.s. Единственный нюанс: рекомендую предусмотреть защиту от повторного нажатия. Пример есть в SDK https://msdn.microsoft.com/en-us/lib...or=-2147217396
__________________
http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия. MS Certified Dirty Magic Professional |
|
|
За это сообщение автора поблагодарили: Roman08 (1), magicandy (1). |
31.01.2018, 10:28 | #6 |
Участник
|
Спасибо. Ваш способ действительно проще и эффективнее.
|
|
31.01.2018, 15:28 | #7 |
Moderator
|
Пожалуйста. Он вряд ли проще (если делать в соответствии с примером), но точно эффективнее Ну и он независим от формы, что тоже плюс, если их будет несколько.
Придумал еще один вариант. Вы можете сделать форму быстрого создания. Если такая есть, при создании из сабгрида будет вызываться именно она. На ней не может быть своих гридов, зато могут быть бизнес-правила, которые сделают "лишние" поля не обязательными
__________________
http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия. MS Certified Dirty Magic Professional |
|
31.01.2018, 15:45 | #8 |
Kostya Afendikov
|
Т.е. ваш процесс подразумевает, что пользователь совершает операцию Создания, а у него уже есть связанные объекты и он их должен сразу же менять/сохранять?
Я бы не хотел менять работу стандартных кнопок для одного случая, а сделал бы по вашему варианту, немного изменив: 1. Пользователь жмет создать - заполняет одно Название/Имя (можно только его и показывать при создании) 2. Сохраняет запись и вы синхронно создаете все нужные дочерние записи и показываете полную форму Мне кажется это будет проще и без лишних ковыряний в стандартных кнопках, которые, к тому же, имеет свойство меняться с обновлениями и будет лишняя головная боль при поддержке. Какие мысли на этот счет? Последний раз редактировалось Bondonello; 31.01.2018 в 15:47. |
|
|
За это сообщение автора поблагодарили: magicandy (1). |
31.01.2018, 16:20 | #9 |
Консультант-джедай
|
А у меня такой вопрос по процессу: вот создали вы таким образом запись, подтянули связанные записи. Дальше пользователю надо заполнить обязательные поля... Что если он не сможет или не захочет этого делать? Что дальше? Запись будет висеть в таком полузаполненном состоянии? Или пользователь должен будет удалить ее?
__________________
Крокодил, крокожу и буду крокодить. Человек человеку - волк , а зомби зомби - зомби. Экстремал и буду экстремать! Блога |
|
31.01.2018, 17:01 | #10 |
Kostya Afendikov
|
|
|
31.01.2018, 19:16 | #11 |
Участник
|
Коллеги, всем большое спасибо. Натолкнули на правильный ход мыслей и вариантов решения.
По процессу подразумевается, что пользователь будет заполнять карточку, в том числе обязательные поля, исходя из информации в "подцепленных" записях. А записи эти также могут относиться к разным сущностям. Пожалуй, самым оптимальным тут было бы разработать кастомный контрол-шпаргалку с отображением нужных записей на карточке, а не лепить связи авансом. |
|
31.01.2018, 19:39 | #12 |
Kostya Afendikov
|
Цитата:
|
|
01.02.2018, 13:29 | #13 |
Moderator
|
В системе есть редкие объекты, которые создаются сразу и да, их нужно удалять, если пользователь передумал что-то делать. Не вижу тут каких-то принципиальных идейных противоречий.
Если подходит вариант с ProcessFlow, или формой быстрого создания, тогда я предпочел бы его. Если нужно сделать именно то что написано в сабже - я бы сделал как написал.
__________________
http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия. MS Certified Dirty Magic Professional |
|
|
|