Недавно пользователи попросили добавить функцию копировать файлы вместе с карточкой библиотеки (по объективным причинам это необходимо).
В службе поддержки порекомендовали использовать пример копирование договора, чему я и последовал.
В скрипте scr_DocumentUtils, на примере функции CopyOfferingInItemDetail, создал свою:
/* Функция копирование детали файлы: */
function CopyFilesInItemDetail(SourceFileInItemDatasetCode, //источник
DestinationFileInItemDatasetCode, //назначение
SourceParentItemIDFieldName,
DestinationParentItemIDFieldName, SourceItemID, DestinationItemID) {
var SourceItemName = GetItemNameByParentItemIDFieldName(
SourceParentItemIDFieldName);
var DestinationItemName = GetItemNameByParentItemIDFieldName(
DestinationParentItemIDFieldName);
if (SourceItemName == DestinationItemName) {
var Message = FormatStr(CopyItemDetailConfirmation, "Файлы");
} else {
var Message = FormatStr(CopyItemDetailFromItemToItem, "Файлы",
SourceItemName, DestinationItemName);
}
var SourceDataset = GetSingleItemByCode(SourceFileInItemDatasetCode,
'FileDetailSource'); //источник
SourceDataset.FetchRecordsCount = -1;
var DestinationDataset = GetSingleItemByCode(
DestinationFileInItemDatasetCode, 'FileDetailDestination'); //назначение
DestinationDataset.FetchRecordsCount = -1;
SourceDataset.DisableEvents();
DestinationDataset.DisableEvents();
try {
ApplyDatasetFilter(SourceDataset, SourceParentItemIDFieldName, SourceItemID,
true);
EnableDatasetFields(SourceDataset, true);
EnableDatasetFields(DestinationDataset, true);
SourceDataset.Open();
if (IsDatasetEmpty(SourceDataset)) {
SourceDataset.Close();
return;
}
if (ShowConfirmationDialog(Message) != wmrYes) {
SourceDataset.Close();
return;
}
CopyTreeDetail(SourceDataset, DestinationDataset,
SourceParentItemIDFieldName, DestinationParentItemIDFieldName,
DestinationItemID);
} finally {
SourceDataset.EnableEvents();
DestinationDataset.EnableEvents();
}
}
/* Функция копирование детали файлы END */
function CopyFilesInItemDetail(SourceFileInItemDatasetCode, //источник
DestinationFileInItemDatasetCode, //назначение
SourceParentItemIDFieldName,
DestinationParentItemIDFieldName, SourceItemID, DestinationItemID) {
var SourceItemName = GetItemNameByParentItemIDFieldName(
SourceParentItemIDFieldName);
var DestinationItemName = GetItemNameByParentItemIDFieldName(
DestinationParentItemIDFieldName);
if (SourceItemName == DestinationItemName) {
var Message = FormatStr(CopyItemDetailConfirmation, "Файлы");
} else {
var Message = FormatStr(CopyItemDetailFromItemToItem, "Файлы",
SourceItemName, DestinationItemName);
}
var SourceDataset = GetSingleItemByCode(SourceFileInItemDatasetCode,
'FileDetailSource'); //источник
SourceDataset.FetchRecordsCount = -1;
var DestinationDataset = GetSingleItemByCode(
DestinationFileInItemDatasetCode, 'FileDetailDestination'); //назначение
DestinationDataset.FetchRecordsCount = -1;
SourceDataset.DisableEvents();
DestinationDataset.DisableEvents();
try {
ApplyDatasetFilter(SourceDataset, SourceParentItemIDFieldName, SourceItemID,
true);
EnableDatasetFields(SourceDataset, true);
EnableDatasetFields(DestinationDataset, true);
SourceDataset.Open();
if (IsDatasetEmpty(SourceDataset)) {
SourceDataset.Close();
return;
}
if (ShowConfirmationDialog(Message) != wmrYes) {
SourceDataset.Close();
return;
}
CopyTreeDetail(SourceDataset, DestinationDataset,
SourceParentItemIDFieldName, DestinationParentItemIDFieldName,
DestinationItemID);
} finally {
SourceDataset.EnableEvents();
DestinationDataset.EnableEvents();
}
}
/* Функция копирование детали файлы END */
Затем, для wnd_LibraryEditScript подключил scr_DocumentUtils и прописал:
/* Функция копирование детали файлы: */
function ProcessCopyFilesDetail(Dataset) {
var IsCopy = Self.Attributes('IsCopy');
if (!IsCopy) {
return;
}
var SourceFileInItemDatasetCode = 'ds_FileInLibrary';
var DestinationFileInItemDatasetCode = 'ds_FileInLibrary';
var SourceParentItemIDFieldName = 'LibraryID';
var DestinationParentItemIDFieldName = 'LibraryID';
var SourceItemID = Self.Attributes('SourceRecordID');
var DestinationItemID = Dataset.Values('ID');
CopyFilesInItemDetail(SourceFileInItemDatasetCode,
DestinationFileInItemDatasetCode, SourceParentItemIDFieldName,
DestinationParentItemIDFieldName, SourceItemID, DestinationItemID);
}
/* Функция копирование детали файлы END */
function ProcessCopyFilesDetail(Dataset) {
var IsCopy = Self.Attributes('IsCopy');
if (!IsCopy) {
return;
}
var SourceFileInItemDatasetCode = 'ds_FileInLibrary';
var DestinationFileInItemDatasetCode = 'ds_FileInLibrary';
var SourceParentItemIDFieldName = 'LibraryID';
var DestinationParentItemIDFieldName = 'LibraryID';
var SourceItemID = Self.Attributes('SourceRecordID');
var DestinationItemID = Dataset.Values('ID');
CopyFilesInItemDetail(SourceFileInItemDatasetCode,
DestinationFileInItemDatasetCode, SourceParentItemIDFieldName,
DestinationParentItemIDFieldName, SourceItemID, DestinationItemID);
}
/* Функция копирование детали файлы END */
Но возникает ошибка, с которой не могу справиться:
"Необработанное исключение (требуется объект)"
и дебаггер выбрасывает на строчку SourceParentID = SourceParentIDDataField.Value;
в скрипте scr_DB.
Может кто поможет решить проблему?
Нравится
1 комментарий
Показать все комментарии
Войдите или зарегистрируйтесь, что бы комментировать