Навігація по проєкту
Навігація ієрархією проєктів ACC/BIM 360 для пошуку та доступу до ресурсів.

Огляд робочого процесу
Автентифікація
3-Legged OAuth
Ієрархія проєкту
Хаби→Проєкти→Кореневі теки→Підтеки→Елементи→Версії
Операції
Перелік
Деталі
Завантаження
Підхід через CLI
Крок 1: Автентифікація
# Login with browser-based OAuth
raps auth login
# Check authentication status
raps auth status
Крок 2: Перелік хабів
# List all available hubs (accounts)
raps hub list
# Output:
# ID | Name | Type
# b.12345678-1234-1234-1234-123456789abc | Acme Corp | BIM 360
# b.87654321-4321-4321-4321-cba987654321 | Beta Inc | ACC
Крок 3: Перелік проєктів
HUB_ID="b.12345678-1234-1234-1234-123456789abc"
# List projects in hub
raps project list "$HUB_ID"
# Get project details
PROJECT_ID="b.project-id"
raps project info "$PROJECT_ID"
Крок 4: Перегляд тек
PROJECT_ID="b.project-id"
# List top-level folders (Plans, Project Files, etc.)
raps folder list "$PROJECT_ID" --top
# Output:
# ID | Name | Type
# urn:adsk.wipprod:fs.folder:abc123 | Plans | folder
# urn:adsk.wipprod:fs.folder:def456 | Project Files | folder
# urn:adsk.wipprod:fs.folder:ghi789 | Photos | folder
# Browse specific folder
FOLDER_ID="urn:adsk.wipprod:fs.folder:abc123"
raps folder list "$PROJECT_ID" "$FOLDER_ID"
Крок 5: Пошук та доступ до елементів
# List items in folder
raps folder list "$PROJECT_ID" "$FOLDER_ID" --output json > items.json
# Get item details
ITEM_ID=$(jq -r '.[0].id' items.json)
raps item info "$PROJECT_ID" "$ITEM_ID"
# List item versions
raps item versions "$PROJECT_ID" "$ITEM_ID"
CI/CD-конвеєр
# .github/workflows/acc-navigation.yml
name: ACC Project Navigator
on:
workflow_dispatch:
inputs:
project_name:
description: 'Project name to search for'
required: true
folder_path:
description: 'Folder path (e.g., "Project Files/Models")'
required: false
jobs:
navigate:
runs-on: ubuntu-latest
steps:
- name: Install RAPS
run: cargo install raps
- name: Authenticate
env:
APS_CLIENT_ID: ${{ secrets.APS_CLIENT_ID }}
APS_CLIENT_SECRET: ${{ secrets.APS_CLIENT_SECRET }}
APS_ACCESS_TOKEN: ${{ secrets.APS_ACCESS_TOKEN }}
APS_REFRESH_TOKEN: ${{ secrets.APS_REFRESH_TOKEN }}
run: |
raps auth login --token "$APS_ACCESS_TOKEN" --refresh-token "$APS_REFRESH_TOKEN" --non-interactive
- name: Find project
env:
APS_CLIENT_ID: ${{ secrets.APS_CLIENT_ID }}
APS_CLIENT_SECRET: ${{ secrets.APS_CLIENT_SECRET }}
run: |
# Find hub
HUB_ID=$(raps hub list --output json | jq -r '.[0].id')
# Find project by name
PROJECT_ID=$(raps project list "$HUB_ID" --output json | \
jq -r '.[] | select(.name | contains("${{ inputs.project_name }}")) | .id' | head -1)
echo "HUB_ID=$HUB_ID" >> $GITHUB_ENV
echo "PROJECT_ID=$PROJECT_ID" >> $GITHUB_ENV
- name: Navigate to folder
env:
APS_CLIENT_ID: ${{ secrets.APS_CLIENT_ID }}
APS_CLIENT_SECRET: ${{ secrets.APS_CLIENT_SECRET }}
run: |
# List top folders
raps folder list "$PROJECT_ID" --top --output json > folders.json
# Navigate path if specified
if [ -n "${{ inputs.folder_path }}" ]; then
IFS='/' read -ra PARTS <<< "${{ inputs.folder_path }}"
CURRENT_FOLDER=""
for part in "${PARTS[@]}"; do
if [ -z "$CURRENT_FOLDER" ]; then
CURRENT_FOLDER=$(cat folders.json | jq -r ".[] | select(.name == \"$part\") | .id")
else
raps folder list "$PROJECT_ID" "$CURRENT_FOLDER" --output json > folders.json
CURRENT_FOLDER=$(cat folders.json | jq -r ".[] | select(.name == \"$part\") | .id")
fi
done
raps folder list "$PROJECT_ID" "$CURRENT_FOLDER" --output json > contents.json
fi
- name: Generate report
run: |
echo "# Project Navigation Report" > report.md
echo "Project: ${{ inputs.project_name }}" >> report.md
echo "" >> report.md
if [ -f contents.json ]; then
echo "## Folder Contents" >> report.md
jq -r '.[] | "- \(.name) (\(.type))"' contents.json >> report.md
else
echo "## Top Folders" >> report.md
jq -r '.[] | "- \(.name)"' folders.json >> report.md
fi
- name: Upload report
uses: actions/upload-artifact@v4
with:
name: navigation-report
path: report.md
Потік конвеєра
Вхідні дані
project_name
folder_path
→
Навігація
Автентифікація
Пошук хабу
Пошук проєкту
Навігація за шляхом
→
Результат
Вміст теки
Звіт
Інтеграція з MCP
Перегляд проєкту
User: "Show me what's in the Main Street project"
КористувачAI-асистентRAPS MCPACC Cloud
Корист.Показати вміст проєкту Main StreetAI
AIaps_hub_list()MCP
AIaps_project_list(hub_id)MCP
AI: Пошук проєкту “Main Street”
AIaps_folder_list(project_id, top=true)MCP
AIСтруктура проєктуКорист.
Відповідь AI:
Структура проєкту Main Street:
- Plans (12 елементів)
- Project Files (45 елементів)
- Models/ (8 файлів)
- Drawings/ (23 файли)
- Specs/ (14 файлів)
- Photos (156 елементів)
- Issues (34 відкриті)
Бажаєте переглянути якусь з цих тек?
Пошук конкретного файлу
User: "Find the latest architectural model in Main Street project"
Відповідь AI:
Знайдено архітектурну модель у проєкті Main Street:
Файл: MainStreet-Architectural.rvt Розташування: Project Files/Models/ Версія: 42 Останні зміни: 14 лютого 2024 р., John Smith Розмір: 156 MB
Бажаєте завантажити або отримати додаткові деталі?
Допоміжні інструменти навігації
Рекурсивний перелік тек
#!/bin/bash
# list-recursive.sh
list_folder() {
local project_id=$1
local folder_id=$2
local prefix=$3
raps folder list "$project_id" "$folder_id" --output json | \
jq -r '.[] | "\(.type)|\(.id)|\(.name)"' | while IFS='|' read type id name; do
echo "${prefix}${name}"
if [ "$type" = "folders" ]; then
list_folder "$project_id" "$id" "${prefix} "
fi
done
}
# Usage
PROJECT_ID="b.project-id"
list_folder "$PROJECT_ID" "" ""
Пошук за назвою
# Search for files matching pattern
PATTERN="*.rvt"
raps folder list "$PROJECT_ID" "$FOLDER_ID" --output json | \
jq -r --arg pattern "$PATTERN" '.[] | select(.name | test($pattern)) | .name'
Отримання повного шляху
# Build full path for an item
get_path() {
local project_id=$1
local item_id=$2
# This would require traversing parent folders
# Implementation depends on item metadata
raps item info "$project_id" "$item_id" --output json | jq -r '.path // .name'
}