This guide will walk you through creating your first UI Metadata Framework form. You’ll build a simple calculator that adds two numbers, and see how UIMF automatically generates metadata for your frontend.
Let’s create a simple form that adds two numbers. Create a new C# file called AddNumbers.cs:
AddNumbers.cs
using UiMetadataFramework.Basic.Server;using UiMetadataFramework.Core.Binding;using MediatR;[Form(Label = "Add 2 numbers", SubmitButtonLabel = "Submit", PostOnLoad = false)]public class AddNumbers : Form<AddNumbers.Request, AddNumbers.Response>{ public class Response : FormResponse { [OutputField(Label = "Result of your calculation")] public long Result { get; set; } } public class Request : IRequest<Response> { [InputField(Label = "First number")] public int Number1 { get; set; } [InputField(Label = "Second number")] public int Number2 { get; set; } } protected override Response Handle(Request message) { return new Response { Result = message.Number1 + message.Number2 }; }}
Notice how the form is self-contained. The Request class defines inputs, the Response class defines outputs, and the Handle method implements the business logic.
public class Request : IRequest<Response>{ [InputField(Label = "First number")] public int Number1 { get; set; } [InputField(Label = "Second number")] public int Number2 { get; set; }}
The Request class defines your form’s inputs. Each property decorated with [InputField] becomes an input field in the UI.
To generate metadata for your form, you need to register it with the MetadataBinder and FormRegister:
using UiMetadataFramework.Basic;using UiMetadataFramework.Basic.Server;using UiMetadataFramework.Core.Binding;// Create metadata bindervar binder = new MetadataBinder(new DefaultDependencyInjectionContainer());// Register the Basic component librarybinder.RegisterAssembly(typeof(UiMetadataFramework.Basic.Server.FormResponse).Assembly);// Create form register and register your formvar formRegister = new FormRegister(binder);formRegister.RegisterForm(typeof(AddNumbers));// Get the metadatavar formInfo = formRegister.GetFormInfo(typeof(AddNumbers));var metadata = formInfo.Metadata;
import { FormMetadata } from 'uimf-core';// Fetch metadata from your APIconst response = await fetch('/api/metadata/AddNumbers');const metadataJson = await response.json();// Create FormMetadata instanceconst formMetadata = new FormMetadata(metadataJson);// The client renders the form based on this metadata// Input fields are created from formMetadata.inputFields// Output fields are created from formMetadata.outputFields