API Загрузить файл из папки BIM360 Doc Planning - PullRequest
0 голосов
/ 25 марта 2019

Я пытаюсь загрузить файл из Autodesk BIM360 Doc (https://docs.b360.autodesk.com) с помощью Forge API, чтобы затем файлы могли быть затем архивированы в наше локальное хранилище.

Мне удалось загрузить любые файлы из папки "Файлы проекта" с помощью API управления данными https://forge.autodesk.com/en/docs/data/v2/reference/http/projects-project_id-versions-version_id-GET/,, с помощью которого я могу получить идентификатор хранилища в data.relationships.storage .data.id .

однако с тем же API я не могу получить идентификатор хранилища при запросе файлов в папке "Plan" ,

Так есть ли способ, с помощью Forge API, мы можем загрузить файл из папки Plan? любая помощь приветствуется.

Ответы [ 2 ]

0 голосов
/ 25 марта 2019

На всякий случай, если кто-то столкнется с той же проблемой, я публикую свой код, с помощью которого мне наконец удалось получить информацию о хранилище файлов.Однако, пожалуйста, не стесняйтесь предлагать другие подходы, кроме итерации, для полных деревьев отношений.

internal static ForgeFileInfo getItemVersion(string token, string projectID, string versionID)
    {
        ForgeFileInfo forgeFileInfo = new ForgeFileInfo();

        ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
        versionApi.Configuration.AccessToken = token;
        var version = versionApi.GetVersion(projectID, versionID);
        string fileType = version.data.attributes.extension.type;
        switch (fileType) {
            case "versions:autodesk.bim360:File":
                //File from Project File library or is regual file
                forgeFileInfo.FileName = version.data.attributes.displayName;
                forgeFileInfo.FileLocation = version.data.relationships.storage.meta.link.href;
                forgeFileInfo.StorageId = version.data.relationships.storage.data.id;
                return forgeFileInfo;
            case "versions:autodesk.bim360:Document":
                //File from Plan Library
                var versionRelationship=versionApi.GetVersionRelationshipsRefs(projectID, versionID);

                // the GET Relationship has data node where we can get the related document
                var relationshipData = new DynamicDictionaryItems(versionRelationship.data);
                // let's start iterating the relationship DATA
                foreach (KeyValuePair<string, dynamic> relationshipItem in relationshipData)
                {
                    //Have to loop until we found "derived:autodesk.bim360:FileToDocument"
                    var relationType = relationshipItem.Value.meta.extension.type;
                    var relation = relationshipItem.Value.meta.direction;
                    if ("derived:autodesk.bim360:FileToDocument".Equals(relationType))
                    {
                        if ("to".Equals(relation))
                        {
                            //Go up stream
                            return getItemVersion(token, projectID, relationshipItem.Value.id);
                        }
                    }
                    else if ("derived:autodesk.bim360:CopyDocument".Equals(relationType))
                    {
                        if ("to".Equals(relation))
                        {
                            //Go up stream
                            return getItemVersion(token, projectID, relationshipItem.Value.id);
                        }
                        continue;
                    }               
                }
                break;
        }
        return forgeFileInfo;
    }
0 голосов
/ 25 марта 2019

Элемент, указанный в папке «План», относится к типу items:autodesk.bim360:Document, элемент этого типа не будет иметь атрибут хранилища, отображаемый в его ответах GET-версий /: version_id и GET-элементов /: item_id напрямую.

Чтобы получить физическое местоположение файла, вы должны вместо этого вызвать GET версии /: version_id / Relations / refs , аналогичную тему смотрите здесь: Загрузить документ с помощью Autodesk API

Обновление для скопированного элемента

При доступе к данным взаимосвязи версии скопированного элемента с помощью GET version /:version_id / relations / refs , вы можете увидеть атрибут данных, сообщающий о связи между копируемым элементом и исходным элементом с моим опытом:

"data": [
    {
        "type": "versions",
        "id": "urn:adsk.wipprod:fs.file:vf.34Xvlw1jTcSQ_XkIVh07cg?version=2",
        "meta": {
            "refType": "derived",
            "fromId": "urn:adsk.wipprod:fs.file:vf.34Xvlw1jTcSQ_XkIVh07cg?version=2",
            "fromType": "versions",
            "toId": "urn:adsk.wipprod:fs.file:vf.y3L7YbfAQJWwumMgqjJUxg?version=1",
            "toType": "versions",
            "direction": "to",
            "extension": {
                "type": "derived:autodesk.bim360:CopyDocument",
                "version": "1.0",
                "schema": {
                    "href": "https://developer.api.autodesk.com/schema/v1/versions/derived:autodesk.bim360:CopyDocument-1.0"
                },
                "data": {}
            }
        }
    }
],  

После этого вам необходимо получить доступ к данным отношения версииfromId через вызов GET версии /: version_id / Relations / refs .

В этом случае это {PROJ_ID}/versions/urn:adsk.wipprod:fs.file:vf.34Xvlw1jTcSQ_XkIVh07cg%3Fversion=2/relationships/refs, тогда вы увидите атрибут storage внутри ответа смое расследование.

...