Skip to content

ms3ti/ContactManager

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

📋 ContactManager — OutSystems O11 Detach Demo

⚠️ DISCLAIMER: This repository is a demonstration (DEMO) application. Its purpose is to showcase the quality and structure of the source code exported through the Detach process from the OutSystems O11 platform. It is not intended for production use.


📖 About This Project

ContactManager is a Traditional Web application originally built on OutSystems 11 (O11) and exported via the platform's Detach process. This repository serves as a practical reference illustrating how OutSystems generates organized, modular, and high-quality C#/.NET source code when detaching an application.

The Detach process in OutSystems allows a platform-developed application to be exported as standard .NET source code, giving development teams full ownership of the generated code — without further dependency on an OutSystems license to run the application.


🎯 Goals of This DEMO

  • ✅ Showcase the quality of the exported code generated by the OutSystems O11 platform
  • ✅ Evidence the modular architecture automatically produced by the platform
  • ✅ Demonstrate the completeness of the export: application code + runtime libraries + plugins
  • ✅ Serve as a technical reference for teams evaluating the Detach process
  • ✅ Illustrate full compatibility with the .NET ecosystem (Visual Studio, NuGet, MSBuild)

🏗️ Repository Structure

The repository contains the main application and all OutSystems runtime libraries exported alongside the application code:

ContactManager/
│
├── ContactManager/                              # 🎯 Main application (Traditional Web ASP.NET)
│   └── referencesProxy/                         #    Inter-module references proxy
│
├── Application/                                 # App lifecycle & initialization libraries
│   ├── OutSystems.Application.Core
│   ├── OutSystems.Application.Initialization.ASPNet
│   ├── OutSystems.Application.ManifestGeneration
│   ├── OutSystems.Application.Scheduling
│   ├── OutSystems.Application.Session
│   ├── OutSystems.Application.Session.Abstractions
│   └── OutSystems.Application.Session.Persistent
│
├── DatabaseProviders/                           # Supported database providers
│   ├── iDB2DatabaseProvider                     #   IBM DB2 (iSeries)
│   ├── MySQLDatabaseProvider                    #   MySQL
│   ├── OracleDatabaseProvider                   #   Oracle
│   ├── PostgreSQLDatabaseProvider               #   PostgreSQL
│   └── SQLServerDatabaseProvider                #   SQL Server
│
├── OutSystems.CachingCommon/                    # Platform caching mechanism
├── OutSystems.DebuggerClient/                   # OutSystems debug client
├── OutSystems.HubEdition.DatabaseAbstractionLayer/ # Database abstraction layer
├── OutSystems.Logging/                          # Logging framework
├── OutSystems.Logging.Database/                 # Database-persisted logging
├── OutSystems.ModuleServices/                   # Inter-module services
├── OutSystems.PluginAPI/                        # Plugin extensibility API
├── OutSystems.Plugin.FileBased/                 # File-based storage plugin
├── OutSystems.Plugin.RabbitMQ/                  # RabbitMQ messaging plugin
├── OutSystems.RESTService.Runtime/              # REST API runtime
├── OutSystems.RESTService.Runtime.Abstractions/ # REST runtime abstractions
├── OutSystems.RuntimeCommon/                    # Core runtime shared components
├── OutSystems.RuntimePlatform/                  # Platform runtime core
├── OutSystems.RuntimeSettingsConfiguration/     # Runtime configuration settings
├── OutSystems.Spreadsheet/                      # Spreadsheet manipulation support
├── Plugin.SAP/                                  # SAP integration plugin
├── Plugin.Widgets.Runtime/                      # Custom widget runtime
├── REST.RuntimeAPI/                             # REST services runtime API
├── ThirdParty/                                  # Third-party dependencies
├── Version/                                     # Platform version control
├── WebWidgets/                                  # Web UI components (widgets)
├── WidgetsRuntimeAPI/                           # Widget runtime API
│
├── ContactManager.oml                           # 📦 Original OutSystems source file (OML)
├── ContactManager.sln                           # 📂 Visual Studio 2012+ Solution
├── Directory.Build.props                        # ⚙️  Global MSBuild properties
└── NuGet.config                                 # 📦 NuGet package configuration

🔧 Technology Stack

Technology Detail
Origin Platform OutSystems 11 (O11) — Traditional Web
Primary Language C# — 94.6% of codebase
Web Framework ASP.NET Web Forms
JavaScript 3.8% (widgets & UI interactions)
ASP.NET 1.3% (handlers, config)
IDE Visual Studio 2012+ (Solution Format v12)
Package Manager NuGet
Build System MSBuild with Directory.Build.props

Supported Databases

The exported runtime includes providers for multiple databases, reflecting OutSystems' native flexibility:

Provider Database
DatabaseProvider.SQLServer Microsoft SQL Server (default)
DatabaseProvider.PostgreSQL PostgreSQL
DatabaseProvider.MySQL MySQL
DatabaseProvider.Oracle Oracle Database
DatabaseProvider.iDB2 IBM DB2 / iSeries

🔄 What is the OutSystems Detach Process?

The Detach (also referred to as Take Ownership) is a feature of OutSystems that allows customers to extract the fully generated source code of their applications. Once detached:

  • The application runs as a pure .NET application, independent of the OutSystems platform
  • The source code is fully readable, compilable, and maintainable by any .NET developer
  • Teams can extend, refactor, or migrate the code to any target architecture
  • The OutSystems runtime libraries (included in this repo) are required to compile and run the application after detach

This process is particularly useful for companies that want to exit the OutSystems platform while preserving their business logic and data, or for teams that want full control over deployment pipelines.


🧩 Key Components Explained

Application Core (ContactManager/)

The main ASP.NET Web Forms project generated by OutSystems. It contains all screens, actions, data models, and integrations defined in the OutSystems IDE (Service Studio). The referencesProxy sub-project handles dependencies between OutSystems modules.

Runtime Platform (OutSystems.RuntimePlatform/)

The heart of the OutSystems runtime. This library provides the execution engine that powers screens, actions, timers, and all platform abstractions at runtime.

Database Abstraction Layer (OutSystems.HubEdition.DatabaseAbstractionLayer/)

A provider-agnostic data access layer that allows the application to work with multiple database engines by swapping the active DatabaseProvider.

Module Services (OutSystems.ModuleServices/)

Handles inter-module communication, a foundational concept in OutSystems architectures where functionality is distributed across multiple modules.

Plugins

  • OutSystems.Plugin.FileBased — Provides file-based session and cache storage
  • OutSystems.Plugin.RabbitMQ — Enables asynchronous messaging via RabbitMQ
  • Plugin.SAP — Integration connector for SAP systems
  • Plugin.Widgets.Runtime — Powers custom UI widgets defined in the platform

REST Services

  • OutSystems.RESTService.Runtime + Abstractions — Expose and consume REST APIs as defined in Service Studio
  • REST.RuntimeAPI — Runtime API layer for RESTful communication

Web Widgets (WebWidgets/, WidgetsRuntimeAPI/)

UI component libraries that power the Traditional Web application's frontend, including inputs, grids, and other visual components generated by the platform.


🚀 Building the Solution

Prerequisites

Steps

# Clone the repository
git clone https://github.com/ms3ti/ContactManager.git
cd ContactManager

# Restore NuGet packages
dotnet restore ContactManager.sln

# Build the solution
dotnet build ContactManager.sln --configuration Release

Note: This is a demonstration export. Full runtime execution requires proper OutSystems runtime configuration, database setup, and IIS hosting as per standard OutSystems detach documentation.


📦 Solution Overview

The ContactManager.sln (Visual Studio Solution Format v12) includes 30 projects, covering:

  • 1 main web application project
  • 1 references proxy project
  • 5 database provider projects
  • 6 application lifecycle projects
  • 17 OutSystems runtime and plugin library projects

🔗 References


👤 Author

Edson Marques@edsoncms



🇧🇷 Informações em Português

Sobre este Repositório

O ContactManager é uma aplicação Traditional Web desenvolvida no OutSystems 11 (O11) e exportada através do processo de Detach da plataforma. Este repositório tem como único objetivo demonstrar a qualidade e a completude do código gerado pelo OutSystems ao realizar o detach de uma aplicação.

⚠️ Este projeto é apenas uma DEMO. Não é uma aplicação pronta para produção.

O que é o processo de Detach?

O Detach (também chamado de Take Ownership) é um recurso do OutSystems que permite ao cliente extrair o código-fonte completo das suas aplicações. Após o detach:

  • A aplicação passa a rodar como uma aplicação .NET pura, independente da plataforma OutSystems
  • O código é totalmente legível, compilável e manutenível por qualquer desenvolvedor .NET
  • As bibliotecas de runtime do OutSystems (incluídas neste repositório) são necessárias para compilar e executar a aplicação após o detach

Estrutura Geral

O repositório contém 30 projetos na solution do Visual Studio, incluindo:

  • A aplicação principal em ASP.NET Web Forms (Traditional Web)
  • Provedores de banco de dados para SQL Server, PostgreSQL, MySQL, Oracle e IBM DB2
  • Bibliotecas de runtime do OutSystems (logging, cache, sessão, módulos, plugins)
  • Plugins de integração (RabbitMQ, SAP, FileBased)
  • Componentes de UI (WebWidgets, WidgetsRuntimeAPI)
  • O arquivo OML original do OutSystems (ContactManager.oml)

Tecnologias

  • C# — 94,6% do código
  • JavaScript — 3,8%
  • ASP.NET — 1,3%
  • Plataforma de origem: OutSystems O11 Traditional Web
  • Build: Visual Studio / MSBuild / NuGet

Objetivo da DEMO

Este repositório foi criado para mostrar a desenvolvedores, arquitetos e gestores de tecnologia que o OutSystems não é uma caixa-preta — a plataforma gera código .NET estruturado, modular e de alta qualidade, que pode ser extraído e evoluído de forma independente.


Repositório mantido por Edson Marques

About

Aplicação em processo de Detach da plataforma OutSystems O11

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors