Реализация переноса контактов по задаче в новую задачу при выполнения действия [Копировать]
Привет всем!
возможно часто возникал вопрос, как сделать так, что при копировании задачи, все контакты данной задачи так же переносились?
Для этого необходимо добавить соответствующую логику в конфигурацию:
Для элемента ScheduleControl (сервис Tasks\General\SchedulerArea\wnd_SchedulerArea) добавить код в событие OnCopyEvent.
Встав в ячейку Value (со сначением ScheduleControlOnCopyEvent) для указанного события сделайте двойной клик, после чего Вы перейдете в сервис Tasks\General\SchedulerArea\scr_SchedulerArea.
В данном сервисе найдите объявление функции function CopyEvent(Event).
Между
Dataset.Post();
и
RefreshDataset(SchedulerArea.EventsDataset);
Вставьте код:
if ((Dataset.Values('AuthorID') != Dataset.Values('OwnerID')) && (Result == mrYes)) {
var SourceDataset = GetSingleItemByCode('ds_ContactInTask');
ApplyDatasetFilter(SourceDataset, 'TaskID', SourceRecordID, true);
var SourceParentItemIDFieldName = 'TaskID';
var DestinationDataset = Services.GetNewItemByUSI('ds_ContactInTask');
var DestinationParentItemIDFieldName = 'TaskID';
var DestinationItemID = Dataset.ValAsGUID('ID');
SourceDataset.Open();
if (IsDatasetEmpty(SourceDataset)) {
SourceDataset.Close();
return;
}
var ExcludedFieldsList = GetNewDictionary();
ExcludedFieldsList('ID') = true;
ExcludedFieldsList(SourceParentItemIDFieldName) = true;
SourceDataset.GotoFirst();
DestinationDataset.EnableEvents();
while (!SourceDataset.IsEOF) {
DestinationDataset.Append();
CopyRowDataEx(SourceDataset, DestinationDataset, ExcludedFieldsList);
DestinationDataset('ID') = Connector.GenGUID();
DestinationDataset(DestinationParentItemIDFieldName) = DestinationItemID;
DestinationDataset.Post();
SourceDataset.GotoNext();
}
DestinationDataset.DisableEvents();
DestinationDataset.Close();
SourceDataset.Close();
}
Сохранить сервис и проверять!
Приятной работы!
С уважением,
Белецкий Арсений
Группа компаний Terrasoft
Нравится