Публикация

Возможность добавления нескольких контактов в напоминания.

Добрый день, уважаемые пользователи интернет сообщества Террасофт!

Предлагаю ко вниманию реализацию возможности выбора нескольких контактов при добавлении новой записи на деталь "Напоминания".

Для этого Вам необходимо изменить свойство SelectWindowUSI на wnd_MultiSelectData для окна wnd_RemindingEdit, и привести функции function btnOKOnClick(Control) в скриптах scr_RemindingEdit и scr_MultiSelectData к следующему виду:

scr_RemindingEdit:

function btnOKOnClick(Control) {
         if (!CheckData(Self, BaseDBEdit, dlData)) {
                   return false;
         }
         var RemindTime = edtRemindTime.DataField.Value;
         var Description = edtDescription.DataField.Value;
         var ContactValue = Self.Attributes('Contacts');
         ContactValue = ContactValue.CommaText.split(',');
         var Count = ContactValue.length - 1;
         while(Count >= 0)
         {
         if (ContactValue == null) {
                   ShowWarnings();
                   return false;
         }
        System.BeginProcessing();
         if (RemindingEdit.IsGroup == true) {
                   AddRemindsForGroup();
         } else {
                   var Dataset = dlData.Dataset;
                   Dataset.Append();
                   if ((Dataset.State == dstInsert) || (Dataset.State == dstEdit)) {
                           
                            var AdminUnit = Services.GetNewItemByUSI('ds_AdminUnit');
                            ApplyDatasetFilter(AdminUnit, 'ID', ContactValue[Count], true);
                            AdminUnit.Open();                      
                            var ContactID = AdminUnit('UserContactID');
                            AdminUnit.Close();                      
                            dlData.Dataset.Values('ContactID') = ContactID;
                            dlData.Dataset.Values('Description') = Description;
                            dlData.Dataset.Values('RemindTime') = RemindTime;
                            dlData.Dataset.Post();
                            Count = Count - 1;
                           
                   }                
         }
         System.EndProcessing();
         }                
         Self.Close();
}

scr_MultiSelectData:

function btnOkOnClick(Control) {  
         var Contacts = ReturnSelectedValue(Self);        
         System.ProcessMessages();
         if (Self.IsModal) {
                   Self.ModalResult = wmrOK;
         } else {
                   var Control = Self.Attributes('NotifyObject');
                   if (Control != null) {
                            var Window = Control.ParentWindow;
                            if (Window != null) {                                      
                                      SetAttribute(Self, 'NotifyObject', Window);
                                      SetAttribute(Window, 'Contacts', Contacts);
                            }
                   }
                   SendNotify(Self, MSG_OK);
                   Self.Close();
         }
}

А также функцию function ReturnSelectedValue(Window) в этом же скрипте:

function ReturnSelectedValue(Window) {
         grdTarget.SelectAllRows();          
         MultiSelectData.KeyValues = grdTarget.SelectedIDs.CreateCopy();
         MultiSelectData.DisplayFieldValues = grdTarget.SelectedIDs.CreateCopy();
         MultiSelectData.DisplayFieldValues.Clear();
         MultiSelectData.TargetDataset.GotoFirst();
         var Value;
         while (!MultiSelectData.TargetDataset.IsEOF) {
                   Value = MultiSelectData.TargetDataset.
                            Values(MultiSelectData.DisplayFieldName);
                   if (!IsEmptyValue(Value)) {
                            MultiSelectData.DisplayFieldValues.Add(Value);
                   }
                   MultiSelectData.TargetDataset.GotoNext();                          
         }
         if (MultiSelectData.DisplayFieldValues.Count == 0) {
                   MultiSelectData.KeyValues.Clear();
         }
         SetAttribute(Window, 'KeyValues', MultiSelectData.KeyValues);
         SetAttribute(Window, 'DisplayFieldValues',
                   MultiSelectData.DisplayFieldValues);
         
         return MultiSelectData.KeyValues;  
}

Во вложении демонстрация работы (разархивировать и открыть браузером).

Хорошего дня!

Нравится

Поделиться

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