Платформа 3V/Формы/Действия/Выполнение пользовательского действия/Скачивание архива

Материал из 3v-wiki
Перейти к навигации Перейти к поиску

В справочнике файл, хранимый в соответствующем атрибуте, имеет следующий вид:

 1 {
 2   "$type": "FileLinkDto[]",
 3   "$values": [
 4 	{
 5 		"fileId": "b94bd200-ab38-4584-b8ac-0d247c83dd91",
 6 		"fileName": "наименование.jpg",
 7 		"downloadLink": "/api/file/b94bd200-ab38-4584-b8ac-0d247c83dd91",
 8 		"signs": [],
 9 		"uploadDate": "2021-12-20T08:08:05.447Z"
10 	}
11   ]
12 }

Для того, чтобы обратиться к значениям внутри атрибута следует использовать следующую структуру:

1 {
2    "attribute": {
3      "property": "FileId",
4      "discriminator": "FileLinkTransitiveAttributeDefinitionDto",
5      "id": 20
6    }              
7 }

, где property может быть

property
fileId GUID файла
fileName Наименование файла
downloadLink Ссылка для скачивания
signs Подписи файла(нельзя вытянуть с помощью FileLinkTransitiveAttributeDefinitionDto)
uploadDate Дата загрузки

Для того, чтобы скачать архив файлов, которые хранятся в элементах справочника, требуется настроить выражение, в котором следует вычислить коллекцию идентификаторов файлов. В операндах следует вычислить идентификаторы файлов в помощью FileLinkTransitiveAttributeDefinitionDto и создать одну коллекцию с помощью функции Flatten() в выражении:

 1 {
 2  "expression": "Flatten([1])",
 3  "returnFirstParameterValue": false,
 4  "operands": [
 5   {
 6    "dictionaryId": 1069,
 7    "attributeId": null,
 8    "attribute": {
 9     "property": "FileId",
10     "discriminator": "FileLinkTransitiveAttributeDefinitionDto",
11     "id": 20
12    },
13    "discriminator": "EntryExpressionByDictionaryRequest",
14    "id": 1,
15    "allowMultipleValues": true
16   }
17  ],
18  "id": 1,
19  "name": "Выражение",
20  "code": null
21 }

Идентификатор выражения с коллекцией идентификаторов файлов передаётся в параметр действия, который используется для передачи в тело запроса. Задаётся тело запроса с помощью свойства bodyTemplate. URL функции имеет следующий вид - https://.../filestorage/api/File/GetFilesAsArchive

 1 {
 2  "serviceUrl": "https://.../filestorage/api/File/GetFilesAsArchive",
 3  "serviceUrlExpressionId": null,
 4  "parameters": [
 5   {
 6    "isBodyParameter": true,
 7    "name": "Parameter1",
 8    "expressionId": 1,
 9    "value": null,
10    "hasMultipleValues": true,
11    "dataType": "String"
12   }
13  ],
14  "isAsync": false,
15  "httpMethod": "Post",
16  "bodyTemplateExpressionId": null,
17  "bodyTemplate": "{  'fileIds': {{Parameter1}} }",
18  "discriminator": "BusinessLogicApiAction",
19  "comment": null,
20  "enableExpressionId": null,
21  "id": 1,
22  "name": "Архив",
23  "code": null
24 }

Пример настройки можно увидеть здесь