Infor SyteLine4 min readNetray Engineering Team

How to Write IDO Extension Classes in SyteLine

IDO extension classes are the primary mechanism for adding custom server-side business logic to SyteLine. Written in C# using the .NET Framework, these classes extend the Intelligent Data Object layer to implement custom validations, calculations, and data transformations. This guide covers the complete development workflow from setting up your Visual Studio project to deploying compiled extension assemblies into the SyteLine runtime environment.

Setting Up the IDO Extension Development Environment

To develop IDO extension classes, you need Visual Studio 2017 or later with the .NET Framework 4.6.2 or higher targeting pack installed. Create a new Class Library project and add references to the core SyteLine IDO assemblies: Mongoose.IDO.dll, Mongoose.IDO.DataAccess.dll, and Mongoose.Core.dll. These assemblies are located in the SyteLine server's bin directory, typically at C:\Program Files\Infor\SyteLine\bin. Configure the project to output a DLL with a naming convention that matches your organization's prefix, such as CompanyName.SyteLine.Extensions.dll. Set the build output path to the SyteLine IDOExtensionClasses folder for automatic loading.

  • Create a C# Class Library project in Visual Studio targeting .NET Framework 4.6.2 or later to match the SyteLine runtime requirements
  • Add assembly references to Mongoose.IDO.dll, Mongoose.IDO.DataAccess.dll, and Mongoose.Core.dll from the SyteLine server bin directory
  • Inherit your extension class from IDOExtensionClass and apply the IDOExtensionClassAssembly attribute with your target IDO name
  • Configure the post-build event to copy the compiled DLL to the SyteLine IDOExtensionClasses folder at C:\Program Files\Infor\SyteLine\IDOExtensionClasses

Implementing Custom Methods and Event Handlers

IDO extension classes support several method types for injecting custom logic into the SyteLine data pipeline. Use the IDOMethod attribute to create callable methods that can be invoked from form scripts or workflows. Implement SetPropertyValue and GetPropertyValue overrides to add validation logic when users modify field values. The PreInsert, PreUpdate, and PreDelete event handlers allow you to enforce business rules before database operations execute. For complex calculations, use the LoadCollection method override to modify result sets after data retrieval from the database.

  • Decorate custom methods with [IDOMethod(MethodFlags.None, "MethodName")] to expose them as callable operations from the SyteLine client
  • Override SetPropertyValue to validate field-level changes, returning an ErrorMessage object with severity Warning or Error to block invalid entries
  • Implement PreInsert and PreUpdate handlers to enforce cross-field validation rules before records are committed to the database
  • Use the Context object properties like Context.Commands and Context.GetConfigParm to access SyteLine session data and configuration parameters

Testing and Deploying IDO Extension Classes

Testing IDO extensions requires a structured approach since they execute within the SyteLine server process. Start by writing unit tests using a mocking framework like Moq to simulate the IDO runtime context and validate your business logic in isolation. For integration testing, deploy the compiled DLL to a development SyteLine instance and exercise the code through the client interface. Use the SyteLine Event Log and the IDO Runtime trace logging to diagnose issues. When deploying to production, always create a backup of the existing extension DLL, recycle the SyteLine application pool in IIS to load the new assembly, and verify functionality through smoke testing.

  • Write unit tests using MSTest or NUnit with Moq to mock IDO context objects and validate business logic before deployment
  • Deploy the compiled DLL to the IDOExtensionClasses folder and recycle the SyteLine IIS application pool to force assembly reloading
  • Enable IDO trace logging by setting the TraceLevel configuration parameter to Verbose for detailed server-side debugging output
  • Maintain version control of extension class source code in Git with branch-per-feature workflow to track changes across SyteLine upgrade cycles

Frequently Asked Questions

What programming language are SyteLine IDO extensions written in?

SyteLine IDO extension classes are written in C# using the .NET Framework 4.6.2 or later. The extensions compile into DLL assemblies that are loaded by the SyteLine IDO runtime. While VB.NET is technically supported since both compile to IL, approximately 95% of SyteLine extension development uses C# due to better tooling support and community resources. Each extension class inherits from the IDOExtensionClass base class.

How do IDO extensions survive SyteLine upgrades?

IDO extension classes are stored separately from core SyteLine code in the IDOExtensionClasses directory, so they are preserved during standard upgrades. However, if Infor changes the underlying IDO schema or base class signatures, extensions may need recompilation. Best practice is to maintain extension source code in version control and test against the new SyteLine version in a sandbox environment before upgrading production. Approximately 15-25% of custom extensions require minor modifications during major version upgrades.

Can IDO extension classes access external systems?

Yes, IDO extension classes can make HTTP calls, connect to external databases via ADO.NET, and consume web services since they run as standard .NET code within the SyteLine server process. However, external calls should be wrapped in try-catch blocks with timeout settings of 30 seconds or less to prevent blocking the IDO pipeline. For high-volume integrations, consider using asynchronous patterns or SyteLine's built-in ION connector framework for better reliability and monitoring.

Key Takeaways

  • 1Setting Up the IDO Extension Development Environment: To develop IDO extension classes, you need Visual Studio 2017 or later with the .NET Framework 4.6.2 or higher targeting pack installed. Create a new Class Library project and add references to the core SyteLine IDO assemblies: Mongoose.IDO.dll, Mongoose.IDO.DataAccess.dll, and Mongoose.Core.dll.
  • 2Implementing Custom Methods and Event Handlers: IDO extension classes support several method types for injecting custom logic into the SyteLine data pipeline. Use the IDOMethod attribute to create callable methods that can be invoked from form scripts or workflows.
  • 3Testing and Deploying IDO Extension Classes: Testing IDO extensions requires a structured approach since they execute within the SyteLine server process. Start by writing unit tests using a mocking framework like Moq to simulate the IDO runtime context and validate your business logic in isolation.

Looking for experienced SyteLine IDO developers? Netray provides expert .NET development services for SyteLine extension classes, custom IDOs, and server-side business logic.