Spec Lens is a .NET solution for working with JDE objects and specifications through the native JDE C APIs. This repository is open source, so anyone interested is welcome to contribute.
The repo includes a reusable client library, test harnesses, and a desktop UI. The packaged application is distributed through releases today; in the future, it could be installed and updated via an installer or a similar deployment method.
Disclaimer: This project is not affiliated with, endorsed by, or sponsored by Oracle or JD Edwards.
Disclaimer: This project is in early development and bugs and missing features are expected. Any bugs, enhancments, missing features can be reported through the Issues tab.
- Releases are created from Git tags in the format
v*(example:v0.1.0orv0.1.0-prototype.1). - The tag value (without
v) is used as the release version for both app and library artifacts. - Tags containing
-are published as prereleases.
- Open the Releases page and pick a tag.
- Download
SpecLens-win-x64.zip. - Optionally verify integrity with
SpecLens-win-x64.sha256. - Extract the zip and run
Spec Lens.exe.
- Open the same release tag and download
JdeClient.Core-package.zip. - Extract it. The zip contains:
JdeClient.Core.<version>.nupkgJdeClient.Core.<version>.snupkg
- Add the extracted folder as a package source and install:
dotnet nuget add source "C:\path\to\extracted\JdeClient.Core" --name SpecLensLocal
dotnet add package JdeClient.Core --version <version> --source "C:\path\to\extracted\JdeClient.Core"- Object catalog search (F9860)
- Table and View Spec and Data browsing
- Business function event rules browsing (NER and C business function source/header)
- Object/spec location selection (Local or path code/Object Librarian override)
- Custom viewport grid components (prioritizing speed over UI)
- Grid Sorting, Sequencing, and Column Freezing
- Dark/Light theme support
- Custom Syntax Highlighting for ER
- Optional C source syntax highlighting toggle
- OMW solution/project export to
.par(JdeClient.Core)
- Deeper cross-object event-rules navigation
- Run Business Functions
- ER Search
- DD Search
- UDC Search
- Expanded Theme Customization
- Expanded Syntax Highlighting Customization
- Grid Export (Current Grid vs Query) into multiple formats.
- Improved Tab Sequence Navigation
- Customizable Hot Keys
- and Much more
- Windows 64-bit (win-x64)
- JDE Fat Client installed and logged in
- activConsole.exe running
- The Windows .exe is currently ~75 MB. This is expected because the app is published as self-contained.
- Avalonia runs on .NET, and a self-contained publish bundles the .NET runtime and required framework libraries directly into the executable so users don’t need to install .NET separately.
- As a result, most of the 75 MB (roughly 65–85%) is the bundled .NET runtime/framework, not the application code itself.
- AI_USE_POLICY
- AGENTS
- Testing Best Practices
- Testing Examples
- Logging
- Repository Setup
- JDE API Workflows
- JdeClient.Core README
dotnet build SpecLens.sln
dotnet run --project SpecLens.Avalonia/SpecLens.Avalonia.csproj
dotnet run --project JdeClient.TestConsole/JdeClient.TestConsole.csproj- Programmatic usage is available via
JdeClient.ExportProjectToParAsync(seeJdeClient.Core/README.md). - Use
JdeClient.TestConsoleoption16to test exporting an OMW project to a.parfile.
Spec Lens has separate logs for the desktop app and the JDE client debug output. Both are disabled by default and can be enabled from the Settings window. See docs/LOGGING.md for how to enable logging, where files are written, and what to share.
Unit tests do not require a JDE runtime:
dotnet test JdeClient.Core.UnitTests/JdeClient.Core.UnitTests.csprojCoverage (TUnit):
New-Item -ItemType Directory -Force TestResults\coverage | Out-Null
dotnet test JdeClient.Core.UnitTests/JdeClient.Core.UnitTests.csproj -c Release -- --results-directory $PWD\TestResults --coverage --coverage-output $PWD\TestResults\coverage\coverage.cobertura.xml --coverage-output-format cobertura --report-trx --report-trx-filename JdeClient.Core.UnitTests.trxCoverage output (Cobertura XML) is written to TestResults/coverage/coverage.cobertura.xml at the repo root.
Create readable html report from the Cobertura XML
reportgenerator -reports:"TestResults\coverage\coverage.cobertura.xml" -targetdir:"TestResults\coverage-report" -reporttypes:"HtmlInline;TextSummary"Open the html report
Start-Process "TestResults\coverage-report\index.html"We use ReportGenerator's Risk Hotspots view (CRAP + Cyclomatic Complexity) to guide improvements.
- Cyclomatic Complexity (CC): target ≤ 15 for new/modified methods; review/refactor when > 20.
- CRAP score: target ≤ 30 for new/modified methods; review/refactor when > 50.
- When touching an existing hotspot, add tests or refactor to reduce CC/CRAP where practical.
Integration tests require the JDE runtime and are manual-only (not run in CI workflows):
dotnet test JdeClient.Core.IntegrationTests/JdeClient.Core.IntegrationTests.csproj- JdeClient.Core: core library that wraps JDE native APIs
- JdeClient.TestConsole: interactive console harness
- SpecLens.Avalonia: desktop UI
- JdeClient.Core.UnitTests: unit tests
- JdeClient.Core.IntegrationTests: integration tests that require JDE runtime
- JdeClient.Core.XmlEngineTestConsole: XML engine test harness
- ViewportGrid.Core and ViewportGrid.Data: custom grid components
See SECURITY.md for reporting guidance. This project does not store secrets or connect directly to databases. All queries and data access run through the JDE C APIs. Maintainers: see docs/REPOSITORY_SETUP.md for required GitHub security settings.
See CONTRIBUTING.md for workflow and requirements.
Licensed under the GNU GPLv3. See LICENSE.