Платформа 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": "'https://.../filestorage'+If(IsNullOrEmpty([1]), throw('Нет данных'), ValueOf([1], 0))",
 3  "returnFirstParameterValue": false,
 4  "operands": [
 5   {
 6    "dictionaryId": 1069,
 7    "attributeId": null,
 8    "filter": {
 9     "value": {
10      "$type": "System.Int32[], System.Private.CoreLib",
11      "$values": [
12       1
13      ]
14     },
15     "attributeId": null,
16     "attribute": {
17      "discriminator": "OwnAttributeDefinitionDto",
18      "id": 1
19     },
20     "conditionType": "AttributeInCollection",
21     "discriminator": "ValueConditionalDictionaryCardsFilter",
22     "inversion": false,
23     "conditionId": null,
24     "conditionExpressionId": null
25    },
26    "attribute": {
27     "property": "DownloadLink",
28     "discriminator": "FileLinkTransitiveAttributeDefinitionDto",
29     "id": 20
30    },
31    "discriminator": "EntryExpressionByDictionaryRequest",
32    "id": 1,
33    "allowMultipleValues": false
34   }
35  ],
36  "id": 2,
37  "name": "Выражение",
38  "code": null
39 }

Идентификатор выражения с коллекцией идентификаторов передаётся в операнд действия. Задаётся тело запроса с помощью свойства 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 }

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