Нужно по нажатию кнопки на карточке проекта добавить файл на деталь файлов.
Вызывается фукнкция AddObject(ft_Import, NameValues, 1, null) в скрипте Wnd_OpoportunityEditScript (скрипт привязан к карточке проекта)
там кусок
try {
var FilesCount = CopyDataset.PageRecordsCount;
var FileID = CopyDataset.Values('ID');
var FilesTable = Services.GetNewItemByUSI('tbl_Files');
if ((FilesCount > 0) && !GetIsRecordIDAccessAllowedByTable(FilesTable, FileID, 'CanWrite')) {
var Message = FormatStr("Файл '%1' уже добавлен для текущей записи, "+
"но у Вас нет права изменения данного файла.\nПродолжить добавление нового файла?",
ShortFileName);
if (ShowConfirmationDialog(Message) != mrYes) {
CopyDataset.Close();
continue;
} else {
var FileOperation = foAdd;
}
} else {
var FileOperation = GetFileOperation(FilesCount, ObjectType, ShortFileName);
}
switch (FileOperation) {
case (foAdd):
if (ObjectType == ft_RMS) {
//добавить файл считалки
AddFileRecord(Dataset, ObjectType, OldFileID, ShortFileName, FileNameStr, Revision, AddedFileIDsArray);
var FileDescription = GetDatasetFieldValueByID('ds_Files', AddedFileIDsArray, 'Description');
//добавить эксель файл без окна добавления
AddFileRecordSilently(Dataset, ObjectType, OldFileID, ShortExcelName, ExcelFileNameStr, Revision, AddedFileIDsArray, FileDescription);
NoAddedFiles = false;
//удалить оба файла из папки %temp%
DeleteFile(FileNameStr);
DeleteFile(ExcelFileNameStr);
} else {
IsImportCanceled = AddFileRecord(Dataset, ObjectType, OldFileID, ShortFileName, FileNameStr, Revision, AddedFileIDsArray);
NoAddedFiles = false;
}
break;
case (foUpdate):
var FoundFileId = CopyDataset.Values('ID');
var UpdateResult = UpdateFileData(Dataset, FoundFileId,FileNameStr);
if (UpdateResult) {
ShowInformationDialog(FileAddedMessage);
}
NoAddedFiles = false;
break;
case (foNone):
IsImportCanceled = true;
break;
}
} finally {
CopyDataset.Close();
}
В ней вызывается function AddFileRecord()
Она выглядит так:
function AddFileRecord(Dataset, ObjectType, OldFileID, ShortFileName,
LongFileName, Revision, AddedFileIDsArray) {
var ID = Connector.GenGUID();
var IsImportCanceled = false;
try {
Dataset.Append();
Dataset.Values('ID') = ID;
Dataset.Values('ItemTypeID') = ObjectType;
Dataset.Values('Link') = ShortFileName;
Dataset.Values('Revision') = Revision;
if (ObjectType == ft_File || ObjectType == ft_RMS || ObjectType == ft_Import) {
var Result = SaveFileToDataset(LongFileName, Dataset, 'FileData');
if (!Result) {
return ;
}
}
var FilePosted = Dataset.Post();
if ((FilePosted) && (ObjectType == ft_File || ObjectType == ft_RMS || ObjectType == ft_Import)) {
CopyFileAccessDetailData(OldFileID, ID);
}
if (FilePosted) {
// Открываем окно для ввода описания
var Attributes = GetNewDictionary();
Attributes('RecordID') = ID;
strong>Attributes('NotifyObject') = Self;strong>
Attributes('ShowModal') = true;
var DefaultValues = GetNewDictionary();
var EditWindow = ShowEditWindowEx('wnd_FilesDetailEdit',
Attributes, DefaultValues, false, true);
if (EditWindow.ModalResult != wmrOK) {
Dataset.Delete();
FilePosted = false;
IsImportCanceled = true;
}
}
} finally {
Dataset.Close();
}
if (FilePosted) {
InsertFilesLink(ID);
AddedFileIDsArray.push(ID);
// Отправляем уведомление о дабавлении файла
// для файлов в проекте
if (FilesDetailGridArea.TableUSI == 'tbl_FileInOpportunity') {
var OpportunityID = GetAttribute(Self, 'ParentItemID');
var Today = new Date(System.Now())
SendMailByFileInOpportunity(OpportunityID, LongFileName,
Connector.CurrentUser.ContactID, Connector.CurrentUser.ContactName, Today.getVarDate(),
Connector.CurrentUser.ContactID, Connector.CurrentUser.ContactName, Today.getVarDate(), 1)
}
}
return IsImportCanceled;
}
Вот в этом месте Attributes('NotifyObject') = Self; возникает ошибка, так как объект Self не определен (тк в скрипт попали в середине). Как проверить, определен ли он, или вообще по-другому решить эту задачу?
Спасибо.