IMsProblem.Convert

Fore Syntax

Convert(format: MsModelFormat);

Fore.NET Syntax

Convert(format: Prognoz.Platform.Interop.Ms.MsModelFormat);

Parameters

format. Required metamodel format.

Description

The Convert method transforms the metamodel calculated by a problem into an internal one without use of objects, and vice versa.

Comments

By default, problems created in the desktop application use a metamodel that is a separate repository object, and problems created in the web application use internal metamodels that are not separate repository objects.

Fore Example

Executing the example requires that the repository contains a modeling container with the MS identifier containing a model with the MODEL_LINEARREGR identifier.

Add links to the Metabase, Ms system assemblies.

Sub UserProc;
Var
    mb: IMetabase;
    Ms: IMetabaseObjectDescriptor;
    CreateInfo: IMetabaseObjectCreateInfo;
    Problem: IMsProblem;
    Model: IMsModel;
    MetaModel: IMsMetaModel;
    CalcChain: IMsCalculationChainEntries;
Begin
    // Get repository
    Mb := MetabaseClass.Active;
    // Get modeling container
    Ms := mb.ItemById("MS");
    // Create a modeling problem
    CreateInfo := Mb.CreateCreateInfo;
    CreateInfo.ClassId := MetabaseObjectClass.KE_CLASS_MSPROBLEM;
    CreateInfo.Parent := Ms;
    CreateInfo.Permanent := True;
    CreateInfo.Id := Mb.GenerateId("PROBLEM_META", Ms.Key);
    CreateInfo.Name := "Problem with internal metamodel";
    Problem := Mb.CreateObject(CreateInfo).Edit As IMsProblem;
    // Transform problem
    Problem.Convert(MsModelFormat.WithoutObject);
    // Create an internal metamodel
    MetaModel := Problem.CreateMetaModel;
    // Get metamodel calculation chain
    CalcChain := MetaModel.CalculationChain;
    // Get model
    Model := mb.ItemByIdNamespace("MODEL_LINEARREGR", Ms.Key).Edit As IMsModel;
    // Add obtained model to calculation chain
    CalcChain.AddModel(Model);
    // Save changes
    (Problem As IMetabaseObject).Save;
End Sub UserProc;

After executing the example a problem that contains internal metamodel is created in the modeling container.

Fore.NET Example

The requirements and result of the Fore.NET example execution match with those in the Fore example.

Imports Prognoz.Platform.Interop.Ms;

Public Shared Sub Main(Params: StartParams);
Var
    mb: IMetabase;
    Ms: IMetabaseObjectDescriptor;
    CreateInfo: IMetabaseObjectCreateInfo;
    Problem: IMsProblem;
    Model: IMsModel;
    MetaModel: IMsMetaModel;
    CalcChain: IMsCalculationChainEntries;
Begin
    // Get repository
    Mb := Params.Metabase;
    // Get modeling container
    Ms := mb.ItemById["MS"];
    // Create a modeling problem
    CreateInfo := Mb.CreateCreateInfo();
    CreateInfo.ClassId := MetabaseObjectClass.KE_CLASS_MSPROBLEM As integer;
    CreateInfo.Parent := Ms;
    CreateInfo.Permanent := True;
    CreateInfo.Id := Mb.GenerateId("PROBLEM_META", Ms.Key);
    CreateInfo.Name := "Problem with internal metamodel";
    Problem := Mb.CreateObject(CreateInfo).Edit() As IMsProblem;
    // Transform problem
    Problem.Convert(MsModelFormat.msmfWithoutObject);
    // Create an internal metamodel
    MetaModel := Problem.CreateMetaModel();
    // Get metamodel calculation chain
    CalcChain := MetaModel.CalculationChain;
    // Get model
    Model := mb.ItemByIdNamespace["MODEL_LINEARREGR", Ms.Key].Edit() As IMsModel;
    // Add obtained model to calculation chain
    CalcChain.AddModel(Model);
    // Save changes
    (Problem As IMetabaseObject).Save();
End Sub;

See also:

IMsProblem