Хочу сделать функцию добавления записи в модальном режиме и возвратом null или RecordID
Хочу сделать функцию добавления записи и возвратом null или RecordID
function AddRecordByWnd(WindowName) {
var Attributes = GetNewDictionary();
Attributes('RecordID') = GUID_NULL;
var DefaultValues = GetNewDictionary();
var EditWindow = Services.GetNewItemByUSI(WindowName);
SetAttributesByDictionary(EditWindow, Attributes);
SetAttribute(EditWindow, 'DefaultValues', DefaultValues);
EditWindow.Prepare();
ModalResult = EditWindow.ShowModal();
if (ModalResult == wmrOK) {
return EditWindow.Attributes.Values('RecordID');
} else {
return null;
}
}
Все вроде бы работает хорошо, но с одним но.
Вызываю так:
AddRecordByWnd('wnd_Account_Edit')
Появляется карточка, ничего не заполняю, жму OK.
Выдается сообщение, что мол поле не заполнено. Кликаю в сообщении OK.
Карточка закрывается и фугкция возвращает RecordID не существующей записи.
Внимание, вопрос: почему карточка закрывается если она не заполнена корректно, хотя выводится сообщение что она не заполнена?
Нравится
Здравствуйте, Евгений!
После нажатия на кнопку "ОК" в окне о незаполненных обязательных полях, мы попадаем в тело основной функции и ModalResult == wmrOK?
В таком случае, тут нужно делать дополнительную проверку.
По идее как работает это в стандартном режиме, так это окно не закрывается пока не заполниш все или не нажмешь отмена. Не?
Здравствуйте, Евгений.
Дело в том, что после нажатия на кнопку "ОК" в окне предупреждения о том, что заполнены не все поля, в случае с модальным показом окна, карточка закрывается с результатом wrmOK, после чего мы попадаем в тело основной функции.
Передам данную информацию разработчикам для анализа.
В данный момент предлагаю Вам дополнить Вашу логику проверкой того, была ли добавлена запись в датасет либо нет, к примеру:
//----------------------------------------------------------------------------- // scr_Test //----------------------------------------------------------------------------- function Main() { AddRecordByWnd('wnd_AccountEdit'); } function AddRecordByWnd(WindowName) { do { var Attributes = GetNewDictionary(); Attributes('RecordID') = GUID_NULL; var DefaultValues = GetNewDictionary(); var EditWindow = Services.GetNewItemByUSI(WindowName); SetAttributesByDictionary(EditWindow, Attributes); SetAttribute(EditWindow, 'DefaultValues', DefaultValues); EditWindow.Prepare(); var USI = EditWindow.ComponentsByName('dlData').Dataset.USI; var count = checkCount(USI); ModalResult = EditWindow.ShowModal(); } while (checkCount(USI) == count) if (ModalResult == wmrOK) { return EditWindow.Attributes.Values('RecordID'); } else { return null; } } function checkCount(USI) { var Dataset = Services.GetNewItemByUSI(USI); Dataset.Open(); var count = Dataset.RecordsCount; Dataset.Close(); return count; }