Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
[This content is no longer valid. For the latest information on "M", "Quadrant", SQL Server Modeling Services, and the Repository, see the Model Citizen blog.]
This tutorial is an introduction to refinement in Microsoft code name “M”. After reading this tutorial, you should know how to extend existing “M” types for your applications.
What is Refinement?
Refinement is when you take an existing simple or derived type and add additional constraints on it. Refinement may be done to create a new derived type, or it may be done within the context of a single collection.
Refining Derived Types
In this section, you will refine a sample derived type. You can also use the Visual Studio extensions for “M”.
To code the refined derived types
Open the “Intellipad” editor by clicking Start -> All Programs -> Microsoft Oslo SDK -> Tools -> Intellipad. The editor window appears.
Add the following code fragment, which is the smallest possible “M” program, because every “M” statement must be contained inside a module.
module Southwind { }Add the following code fragment inside the braces of the module statement. This adds a type that is refined in step 4.
type Employee{ Name : Text; ID : Integer32; }After the
Employeetype declaration, add the following code fragment. This refinesEmployeeso that there is a new type,MyEmployee, that has more specific type requirements forNameandID.type MyEmployee = Employee where value.Name in Text && value.ID in Number;After the
MyEmployeetype declaration, add the following the code fragment. This further refines the type so that allMyEmployee2instances must have anIDgreater than 20.type MyEmployee2 : MyEmployee where value.ID > 20;
Refining Intrinsic Types
In this section, you will refine the intrinsic type Number to create a new derived type, PositiveNumber, that only accepts non-negative numbers.
To code the refined intrinsic type
After the
MyEmployee2type declaration, add the following code fragment.type PositiveNumber : Number where value >= 0
Complete Code
Here is the complete code after finishing this tutorial.
module Southwind
{
type Employee
{
Name : Text;
ID : Integer32;
}
type MyEmployee : Employee where value.Name in Text && value.ID in Number;
type MyEmployee2 : MyEmployee where value.ID > 20;
type PositiveNumber : Number where value >= 0;
}