Публикация
Возможность добавления нескольких контактов в напоминания.
13 августа 2012 18:03
Добрый день, уважаемые пользователи интернет сообщества Террасофт!
Предлагаю ко вниманию реализацию возможности выбора нескольких контактов при добавлении новой записи на деталь "Напоминания".
Для этого Вам необходимо изменить свойство 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();
}
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();
}
}
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;
}
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;
}
Во вложении демонстрация работы (разархивировать и открыть браузером).
Хорошего дня!
Показать все комментарии
Войдите или зарегистрируйтесь, что бы комментировать