Здравствуйте!
Подскажите, пожалуйста, как можно реализовать следующий функционал. Хочу при сохранении записи делать проверку и при определенных условиях не давать сохранять запись и выводить сообщение. Так вот для этого я в событие "Перед сохранением" моего объекта написал скрипт с моей проверкой и возвращал в нем false если не хотел сохранять запись. Но запись все равно сохраняется. Подскажите, пожалуйста что можно сделать чтобы это заработало и как еще вывести в MessagePanel сообщение о причинах при которых эта запись не сохраняется(аналог указан на картинке). Спасибо!
Нравится
Может вру, но вот в тройке я возвращаю true, чтобы запись не сохранялась, может и в BPM 5.х также!?
А на счет MessagePanel почитайте тут
Здравствуйте, Павел!
Можно добавить проверки в обработчик нажатия кнопки "ОК" и устанавливать булевский параметр в false, если проверка не прошла. А после Вашего скрипта ставить условный поток, который будет идти дальше в зависимости от параметра.
Можно повесить проверку на нажатие кнопки ОК.

В нижнем блоке:
[csharp]
Page.BaseMessagePanel.AddMessage(Warning, MyTextOfMessage, MessageType.Warning);
return true;
[/csharp]
Добрый день, возникла похожая задача, но связанная с удалением.
Попытка отредактировать событие на стандартной кнопке удалить, не получилось, в любом случае происходит удаление. Пришлось создать свою кнопку, и скрыть стандартную.
Вот процесс который НЕ работает на стандартной кнопке, но работает на моей добавленной.

Вопрос: как это реализовать через стандартную кнопку?
ScriptTask2:
[csharp]
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("ByDefault");
}
return true;
[/csharp]
ScriptTask1:
[csharp]
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;
[/csharp]
На стандартную кнопку навешивается js-обработчик, см. в функции ScriptRegisterClientScriptExecute, унаследованной из BaseGridPage.
[csharp]
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));
}
...
[/csharp]
Чтобы его отключить, можно в функции GetRegisterQuestionScript в своей странице написать вначале [csharp]
return string.Empty;
[/csharp]вместо логики.