К текущей (актуальной) версии файла вы можете обратиться непосредственно через ДП.
Если в настройках ДП включен признак Мультифайл, в один ДП можно вложить сразу несколько файлов. С такими ДП нужно работать как с коллекцией. Если признак Мультифайл не включен, с ДП нужно работать как с единичным объектом.
Работа с ДП "Файл" как с единичным объектом: Обращение к файлу, вложенному в ДП без признака "Мультифайл". |
Работа с ДП "Файл" как с коллекцией: Обращение к файлу, вложенному в ДП с признаком "Мультифайл". |
Для обращения к файлам, вложенным в текущую задачу, используется коллекция Связи файлов с задачами, а для обращения к файлам, вложенным в ДП в текущей задаче — Связи файлов с ДП.
Работая с этими коллекциями, вы можете выбирать как сам элемент, так и его свойство FileInfo, которое содержит полную информацию о файле.
Отбор файлов, вложенных в задачу (два варианта). |
Отбор по объектам "Связи файлов с задачами" и "Связи файлов с ДП" дает корректные результаты только в контексте текущей задачи. |
---|
Смарт-выражение, использующее отбор из объектов "Связи файлов с задачами" или "Связи файлов с ДП", может возвращать как один, так и несколько файлов (список). Кроме того, если смарт-выражение должно вернуть несколько файлов, можно использовать объединение. Например, чтобы вложить в письмо все файлы, вложенные в задачу, и файл, вложенный в ДП в этой задаче, можно использовать такое-смарт-выражение:
В письмо вкладываются файлы из задачи и файл из ДП.
Добавление файлов к уже вложенным
Если в значении ДП уже есть вложеные файлы и необходимо не заменить значения, а добавить файлы к уже имеющимся, используется перечисление id файлов через запятую в следующем формате: '+id_файла1, id_файла2, id_файла3'
Пример:
В ДП "Файл" вкладываются файлы без очищения старого значения.
Версии файла
Обращаться можно не только к текущей версии, но и к любой предыдущей версии файла. Самый простой вариант получить ссылку на определенную версию файла — сформировать строку типа FileID.VersionID.
Пример обращения к первой версии файла, вложенного в ДП.
Версии файла могут быть скрытыми (служебными). Такие версии не отображаются в истории версий в пользовательском интерфейсе, но к ним можно обратиться, например, через смарт-выражение. Скрытые версии создаются с помощью смарт-действия "Скопировать версию файла" с включенным флажком "Системная копия". Кроме того, скрытые версии могут создаваться при акцепте подписи, в момент сохранения "цифрового снимка" задачи. Создание таких скрытых копий определяется флажком "Создавать системные копии вложенных файлов при акцепте подписи" в настройках категории, ДП "Файл" или колонки "Файл" в ДП "Таблица". |
---|
Вложение файлов из других задач
Объекты "Связи файлов с задачами" и "Связи файлов с ДП" можно использовать напрямую только в контексте текущей задачи. Чтобы обратиться к файлам, вложенным в другую задачу, можно использовать конструкцию смарт-выражения как на скриншоте ниже. Исходная задача имеет ID=123456. Смарт-пакет с действием "Вложить файл" запускается из целевой задачи.
Пример копирования всех вложенных файлов из одной задачи в другую.
Способ, описанный выше, можно использовать только чтобы обратиться сразу ко всем файлам, вложенным в исходную задачу. Если нужно выбрать один из вложенных файлов или файл, вложенный в ДП, следует использовать SQL-запрос.
Обращение к файлам через SQL-запрос
Для обращения к файлам, в том числе из других задач, можно использовать запросы к БД.
Если "Первая Форма" использует собственное файловое хранилище (Диск), то данные о файлах содержаться в таблице FileStorageFiles, а связи с задачами и ДП — в таблицах FileStorageFileToTasksLinks и FileStorageFileToExtParamLinks. Версии файлов хранятся в таблице FileStorageFileVersions. Файловые провайдеры перечислены в таблице FileProviders.
/* Базовые мета-данные файлов (без версий) с атрибутом удален ли файл IsDeleted */
SELECT TOP 3 FileId, Name, IsDeleted, *
FROM FileStorageFiles
/* Мета-данные версий файлов с указанием id провайдера и ключа файла */
SELECT TOP 3 FileId, VersionId, FileProviderId, FileProviderKey, *
FROM FileStorageFileVersions
/* Список файловых провайдеров */
SELECT TOP 3 * FROM FileProviders
/* Связь файлов с задачами (без версионирования) */
SELECT TOP 3 *
FROM FileStorageFileToTaskLinks
/* Связь версий файлов с ДП и ДП "Таблица" */
SELECT TOP 3 FileId, VersionId, ExtParamId, TableColumnID, TableRowID, *
FROM FileStorageFileToExtParamLinks
/* Контент файлов (отдельная БД) */
SELECT TOP 3 * FROM [TaskFilesDB].dbo.UploadFiles
Пример запроса TSQL для выбора последней версии файла 1.docx из задачи с ID=123456:
SELECT CAST(FileStorageFiles.FileId AS varchar(MAX)) + '.' + CAST(FileStorageFiles.LatestVersionId AS varchar(MAX)) AS Expr1
FROM FileStorageFiles
JOIN FileStorageFileToTaskLinks ON FileStorageFiles.FileId = FileStorageFileToTaskLinks.FileId
WHERE (FileStorageFileToTaskLinks.IsDeleted = 0) AND (FileStorageFileToTaskLinks.TaskId = 123456) AND (FileStorageFiles.Name = '1.docx')
Пример запроса TSQL для выбора последней версии файла из ДП с ID=99 в задаче с ID=123456:
SELECT CAST(FileStorageFiles.FileId AS varchar(MAX)) + '.' + CAST(FileStorageFiles.LatestVersionId AS varchar(MAX)) AS expr1
FROM FileStorageFiles
INNER JOIN FileStorageFileToExtParamLinks ON FileStorageFiles.FileId = FileStorageFileToExtParamLinks.FileId
WHERE (FileStorageFileToExtParamLinks.TaskId = 123456) AND (FileStorageFileToExtParamLinks.ExtParamId = 99)