Здравствуйте!
Подскажите, пожалуйста, как можно реализовать следующий функционал. Хочу при сохранении записи делать проверку и при определенных условиях не давать сохранять запись и выводить сообщение. Так вот для этого я в событие "Перед сохранением" моего объекта написал скрипт с моей проверкой и возвращал в нем false если не хотел сохранять запись. Но запись все равно сохраняется. Подскажите, пожалуйста что можно сделать чтобы это заработало и как еще вывести в MessagePanel сообщение о причинах при которых эта запись не сохраняется(аналог указан на картинке). Спасибо!
Нравится
Может вру, но вот в тройке я возвращаю true, чтобы запись не сохранялась, может и в BPM 5.х также!?
А на счет MessagePanel почитайте тут
Здравствуйте, Павел!
Можно добавить проверки в обработчик нажатия кнопки "ОК" и устанавливать булевский параметр в false, если проверка не прошла. А после Вашего скрипта ставить условный поток, который будет идти дальше в зависимости от параметра.
Можно повесить проверку на нажатие кнопки ОК.
В нижнем блоке:
Page.BaseMessagePanel.AddMessage(Warning, MyTextOfMessage, MessageType.Warning); return true;
Добрый день, возникла похожая задача, но связанная с удалением.
Попытка отредактировать событие на стандартной кнопке удалить, не получилось, в любом случае происходит удаление. Пришлось создать свою кнопку, и скрыть стандартную.
Вот процесс который НЕ работает на стандартной кнопке, но работает на моей добавленной.
Вопрос: как это реализовать через стандартную кнопку?
ScriptTask2:
var AccountAddressCLADR = UserConnection.EntitySchemaManager.GetInstanceByName("AccountAddressCLADR"); var entity = AccountAddressCLADR.CreateEntity(UserConnection); var contactId = Page.DataSource.ActiveRowPrimaryColumnValue; if(contactId == Guid.Empty ){ Page.ThrowEvent("SaveContactNeeded"); return true; } IsCanDelete = true; if (entity.FetchFromDB(contactId)) { IsCanDelete = !entity.GetTypedColumnValue<Boolean>("ByDefault"); } return true;
ScriptTask1:
string warningMessageId = "SomeMessageId"; string errorMessage = "Нельзя удалить адрес с установленным признаком <По умолчанию>"; MessagePanel messagePanel = ControlUtilities.FindControl( Page.AspPage.Controls[0], "BaseMessagePanel", true) as MessagePanel; if (messagePanel != null) { messagePanel.Remove(warningMessageId); messagePanel.AddMessage(warningMessageId, Warning, errorMessage, MessageType.Warning); } return true;
На стандартную кнопку навешивается js-обработчик, см. в функции ScriptRegisterClientScriptExecute, унаследованной из BaseGridPage.
public virtual bool ScriptRegisterClientScriptExecute(ProcessExecutingContext context) { string formatString = "{0}.on('click', function(el) {{ {1} }}, this)"; string script = GetRegisterQuestionScript(); if (!string.IsNullOrEmpty(script)) { Page.AddScript(string.Format(formatString, Page.DeleteButton.ClientID, script)); } ...
Чтобы его отключить, можно в функции GetRegisterQuestionScript в своей странице написать вначале
return string.Empty;
вместо логики.