This is a sample console connector that demonstrates how to use the Autodesk Data Exchange SDK without the UI component. It serves as a reference implementation for developers building their own Data Exchange integrations and provides a comprehensive example of SDK capabilities through a professional command-line interface.
Perfect for:
- Service-based integrations
- Custom UI development
- Learning Data Exchange SDK patterns
- Automated workflow testing
- Headless data processing
- π Quick Start - Get up and running quickly
- π» Usage Examples - See the console connector in action
- π Command Reference - Complete command documentation
- π Migration Guide - SDK 6.2.0-beta Upgrade Guide
- ποΈ Architecture - Understand the codebase structure
- π§ Extending the Application - Add custom functionality
- β Exchange Management - Create, update, and retrieve exchanges
- β Multi-Format Geometry Processing - BREP, IFC, Mesh, and Primitive geometries
- β Parameter Operations - Add, modify, and delete instance/type parameters
- β Version Control - Exchange synchronization and versioning
- β Data Export - Download exchanges as STEP or OBJ files
- β Folder Management - Set and manage working directories
- π Professional Console Interface - Clean, categorized output messages
- π Comprehensive Workflow Testing - Complete end-to-end validation
- π» Command-Based Architecture - Extensible command pattern
- π§ Error Handling - Robust error management and user feedback
- π Built-in Help System - Detailed command documentation
-
Autodesk Platform Services App
- Register an app
- Select Data Management and Data Exchange APIs
- Note your Client ID, Client Secret, and Auth Callback
-
Development Environment
- Visual Studio 2019 or later
- .NET Framework 4.8
- Basic knowledge of C#
-
Access Requirements
- Autodesk Construction Cloud (ACC) access
- Valid Autodesk account with appropriate permissions
git clone https://github.com/your-repo/aps-dataexchange-console.git
cd aps-dataexchange-console
Follow the Data Exchange .NET SDK installation guide:
Option A: Visual Studio
- Open
ConsoleConnector.sln
- Build the solution (packages restore automatically)
Option B: Command Line
# Run from project root
BuildSolution.bat
Update src/ConsoleConnector/App.config
with your app credentials:
<appSettings>
<add key="APS_CLIENT_ID" value="your_client_id" />
<add key="APS_CLIENT_SECRET" value="your_client_secret" />
<add key="APS_CALLBACK_URL" value="your_callback_url" />
</appSettings>
- Build and run the console application
- Complete OAuth authentication in the browser
- Start using commands in the console interface
# Get help
>> help
# Set working folder (using folder URL)
>> SetFolder [FolderUrl]
# OR set working folder (using individual parameters)
>> SetFolder [HubId] [Region] [ProjectUrn] [FolderUrn]
# Create a new exchange
>> CreateExchange [ExchangeTitle]
# Add BREP geometry
>> AddBrep [ExchangeTitle]
# Add instance parameters
>> AddInstanceParameter [ExchangeTitle] [ElementId] [ParameterName] [ParameterSchema] [ParameterValue] [ParameterValueDataType]
# Sync changes
>> SyncExchange [ExchangeTitle]
# Download exchange
>> GetExchange [ExchangeId] [CollectionId] [HubId] [ExchangeFileFormat]
# Run comprehensive end-to-end test
>> WorkFlowTest
This command executes a complete workflow that:
- Creates a new exchange
- Adds multiple geometry types (BREP, IFC, Mesh, Primitives)
- Adds instance and type parameters
- Syncs to Version 1
- Deletes some parameters
- Adds more geometries and parameters
- Syncs to Version 2
- Downloads the final exchange
Command | Description | Example |
---|---|---|
help |
Display all commands | help |
help [command] |
Get command details | help CreateExchange |
CreateExchange |
Create new exchange | CreateExchange [ExchangeTitle] |
AddBrep |
Add BREP geometry | AddBrep [ExchangeTitle] |
AddIFC |
Add IFC geometry | AddIFC [ExchangeTitle] |
AddMesh |
Add mesh geometry | AddMesh [ExchangeTitle] |
AddPrimitive |
Add primitives | AddPrimitive [ExchangeTitle] [PrimitiveGeometry] |
AddInstanceParameter |
Add instance parameter | AddInstanceParameter [ExchangeTitle] [ElementId] [ParameterName] [ParameterSchema] [ParameterValue] [ParameterValueDataType] |
AddTypeParameter |
Add type parameter | AddTypeParameter [ExchangeTitle] [ElementId] [ParameterName] [ParameterSchema] [ParameterValue] [ParameterValueDataType] |
DeleteInstanceParam |
Remove instance parameter | DeleteInstanceParam [ExchangeTitle] [ElementId] [ParameterName] |
DeleteTypeParam |
Remove type parameter | DeleteTypeParam [ExchangeTitle] [ElementId] [ParameterName] |
SyncExchange |
Sync exchange | SyncExchange [ExchangeTitle] |
GetExchange |
Download exchange | GetExchange [ExchangeId] [CollectionId] [HubId] [ExchangeFileFormat] |
SetFolder |
Set working folder | SetFolder [FolderUrl] or SetFolder [HubId] [Region] [ProjectUrn] [FolderUrn] |
WorkFlowTest |
Run complete test | WorkFlowTest |
Exit |
Close application | Exit |
ConsoleConnector/
βββ Commands/ # Command implementations
β βββ CreateExchangeCommand.cs
β βββ CreateBrepCommand.cs
β βββ WorkFlowTestCommand.cs
β βββ ...
βββ Helper/ # Utility classes
β βββ ConsoleAppHelper.cs
β βββ GeometryHelper.cs
β βββ ParameterHelper.cs
βββ Interfaces/ # Abstractions
βββ Assets/ # Sample geometry files
- Command Pattern: Each operation is implemented as a separate command class
- Helper Classes: Reusable utilities for geometry, parameters, and console operations
- Interface Abstractions: Clean separation of concerns
- Asset Management: Sample files for testing and demonstration
- Create a new command class inheriting from
Command
- Implement required methods (
Execute
,Clone
,ValidateOptions
) - Register the command in
ConsoleAppHelper
public class MyCustomCommand : Command
{
public override async Task<bool> Execute()
{
Console.WriteLine("[CUSTOM] Executing my command");
// Implementation here
return true;
}
public override Command Clone()
{
return new MyCustomCommand(this);
}
}
- Create option class in
Commands/Options/
- Add to command's
Options
list - Use
GetOption<T>()
to access values
This section documents the migration from previous SDK versions to Autodesk Data Exchange SDK 6.2.0-beta.
This upgrade includes significant improvements and API enhancements:
- SDK Version: Upgraded to
Autodesk.DataExchange 6.2.0-beta
- Enhanced API Methods: Improved method signatures and functionality
- Dependency Updates: Updated Microsoft.Extensions packages and testing frameworks
- New Utilities: Added MoreLinq utilities for improved data processing
Package | Previous Version | New Version | Impact |
---|---|---|---|
Autodesk.DataExchange |
< 6.2.0 | 6.2.0-beta |
Major - Core SDK upgrade |
MSTest.TestFramework |
< 3.9.3 | 3.9.3 |
Testing framework improvements |
Microsoft.Extensions.* |
Various | 6.0.0 |
Dependency injection and configuration |
MoreLinq.Source.MoreEnumerable.Batch |
- | 1.0.2 |
New - Enhanced LINQ operations |
Before:
await Client.GenerateViewableAsync(displayName, exchangeId, collectionId, fileUrn);
After:
await Client.GenerateViewableAsync(exchangeId, collectionId);
Migration Action: Remove displayName
and fileUrn
parameters from GenerateViewableAsync
calls.
- All async methods now return improved
IResponse<T>
types - Better error handling and status checking
- Enhanced logging capabilities through updated
ILogger
interface
- Enhanced support for ACC (Autodesk Construction Cloud) projects
- Improved project type detection and handling
- Better regional hosting support
Update your packages.config
or project file:
<package id="Autodesk.DataExchange" version="6.2.0-beta" targetFramework="net48" />
<package id="MoreLinq.Source.MoreEnumerable.Batch" version="1.0.2" targetFramework="net48" />
<package id="MSTest.TestFramework" version="3.9.3" targetFramework="net48" />
Search and replace the following patterns in your code:
// OLD: GenerateViewableAsync with 4 parameters
await Client.GenerateViewableAsync(displayName, exchangeId, collectionId, fileUrn);
// NEW: GenerateViewableAsync with 2 parameters
await Client.GenerateViewableAsync(exchangeId, collectionId);
For projects using MSTest, update test attributes and methods to use the latest MSTest 3.9.3 features.
Take advantage of new utilities:
// Use MoreLinq for enhanced batch processing
using MoreLinq;
// Batch process elements efficiently
var batches = elements.Batch(50); // Process in batches of 50
- Improved exchange creation with better project type detection
- Enhanced synchronization capabilities
- Better error handling and retry mechanisms
- Optimized geometry processing
- Improved batch operations with MoreLinq
- Enhanced memory management
- Enhanced logging capabilities
- Improved error messages and stack traces
- Better debugging experience
After migration, run the comprehensive workflow test:
>> WorkFlowTest
This command validates:
- β Exchange creation and management
- β Geometry processing (BREP, IFC, Mesh, Primitives)
- β Parameter operations
- β Synchronization workflows
- β File download capabilities
- Batch Processing: Use the new MoreLinq utilities for processing large datasets
- Async/Await: Ensure all async methods are properly awaited
- Memory Management: The new SDK includes improved memory handling
- Connection Pooling: Enhanced HTTP client configuration for better performance
Error: ArgumentException: Too many parameters
Solution: Remove displayName
and fileUrn
parameters from the method call.
Error: Assembly binding conflicts Solution: Clean and rebuild solution, ensure all packages are updated consistently.
Error: Authentication failures after upgrade
Solution: Verify your App.config
credentials are correct and your app has proper Data Exchange API permissions.
- Breaking Changes: See above migration steps
- New Features: Explore the enhanced API documentation
- Performance: Review the optimization guidelines
- Issues: Report SDK-specific issues through official channels
Migration Checklist:
- Updated all package references to 6.2.0-beta
- Fixed
GenerateViewableAsync
method calls - Updated test framework (if applicable)
- Tested core workflows with
WorkFlowTest
- Verified authentication and permissions
- Reviewed and updated error handling
This is a sample project for reference purposes. While direct contributions may not be accepted, you're encouraged to:
- Fork the repository for your own modifications
- Report issues or suggestions
- Share improvements with the community
This sample code is part of the Autodesk Data Exchange .NET SDK (Software Development Kit) beta. It is subject to the license covering the Autodesk Data Exchange .NET SDK (Software Development Kit) beta.
Dhiraj Lotake - Autodesk
For SDK-related questions and support:
This sample demonstrates the power and flexibility of the Autodesk Data Exchange SDK for building custom integrations and automating design data workflows.