Ниже приведен пример использования операции GetMs для открытия метамодели. В запросе передаются: экземпляр открытого контейнера моделирования и шаблон для открытия метамодели. В ответе приходит открытая метамодель.
{
"Envelope" :
{
"Body" :
{
"GetMs" :
{
"tMs" :
{
"id" : "S123!M!S!C1"
},
"tArg" :
{
"pattern" :
{
"obInst" : "true",
"scenarios" : "None",
"item" :
{
"key" : "2803",
"problem" :
{
"metamodel" :
{
"calculationChain" : "Get",
"calcChainPattern" :
{
"metaModelPattern" :
{
"calculationChain" : "Get",
"calcChainPattern" :
{
"modelPattern" :
{
"generatedName" : "true"
}
}
},
"modelPattern" :
{
"generatedName" : "true"
}
},
"visualControllerPattern" :
{
"variableRubricatorKey" : "true",
"chainWorkbookKey" : "true",
"freeVariables" : "true" } } } } } } } } } }
{
"Envelope" :
{
"Body" :
{
"GetMsResult" :
{
"id" :
{
"id" : "S123!M!S!C1"
},
"meta" :
{
"obInst" :
{
"obDesc" :
{
"@isShortcut" : "0",
"i" : "MODELSPACE",
"n" : "Контейнер моделирования",
"k" : "1581",
"c" : "5121",
"p" : "1580",
"h" : "0"
}
},
"dirty" : "0",
"item" :
{
"k" : "2803",
"id" : "TEMP_MODEL",
"n" : "TEMP_MODEL",
"vis" : "1",
"type" : "Problem",
"problemMd" :
{
"metamodel" :
{
"k" : "2804",
"calculationChain" :
{
"its" :
{
"Item" :
{
"k" : "3716",
"id" : "OBJ3716",
"n" : "MyOutputVavable[t] = GreyForecast(MyOutputVavable[t])",
"vis" : "1",
"type" : "Model",
"excluded" : "0",
"model" :
{
"generatedName" : "MyOutputVavable[t] = GreyForecast(MyOutputVavable[t])"
}
}
}
},
"visualController" :
{
"variableRubricatorKey" : "2805",
"chainWorkbookKey" : "2837",
"freeVariables" :
{
"its" :
{
"Item" :
{
"k" : "0",
"id" : "261",
"n" : "MyInputVavable",
"vis" : "1",
"variableKey" : "2839",
"stubKey" : "2805",
"selections" :
{
"its" :
{
"Item" :
{
"id" :
{
"id" : "2818"
},
"variant" : "261"
}
}
},
"aggregator" : "None",
"parametrizedDimensions" :
{
"its" :
{
"Item" :
{
"dimension" : "0",
"parameter" : "0"
}
}
},
"unitInfo" :
{
"unit" : "4294967295",
"measure" : "4294967295",
"baseUnit" : "4294967295",
"unitsDimensionKey" : "0"
},
"level" : "None"
}
} } } } } } } } } } }
Функция GetMsCalcChain открывает метамодель указанной модели. Входные параметры:
ms. Экземпляр открытого контейнера моделирования;
modelKey. Ключ модели, содержащей метамодель.
В результате выполнения функция возвращает открытую метамодель. Информация о метамодели выводится в окно консоли.
public static MsMetaModel GetMsCalcChain(MsId ms, ulong modelKey)
{
var getMsOp = new GetMs();
// Задаем параметры выполнения операции
getMsOp.tMs = ms;
getMsOp.tArg = new GetMsArg()
{ // Задаем общий шаблон извлечения данных
pattern = new MsMdPattern()
{
scenarios = ListOperation.None,
item = new MsItemPattern()
{ // Задаем ключ открываемой модели
key = modelKey,
// Задаем шаблон извлечения данных модели
problem = new MsProblemPattern()
{ // Задаем шаблон извлечения данных метамодели
metamodel = new MsMetaModelPattern()
{ // Задаем шаблон извлечения данных цепочки расчёта
calculationChain = ListOperation.Get,
calcChainPattern = new MsCalculationChainPattern()
{
metaModelPattern = new MsMetaModelPattern()
{ // Задаем шаблон извлечения данных цепочки расчёта
calculationChain = ListOperation.Get,
calcChainPattern = new MsCalculationChainPattern()
{
modelPattern = new MsModelPattern() { generatedName = true}
}
},
modelPattern = new MsModelPattern(){ generatedName = true}
},
// Задаем шаблон извлечения данных для визуального построения метамодели
visualControllerPattern = new MsMetaModelVisualControllerPattern()
{
variableRubricatorKey = true,
chainWorkbookKey = true,
freeVariables = true
} } } } } }; // Создаем прокси-объект для выполнения операции var somClient = new SomPortTypeClient(); // Открываем модель GetMsResult getMsResult = somClient.GetMs(getMsOp);
MsMetaModel mModel = getMsResult.meta.item.problemMd.metamodel;
// Получаем цепочку расчёта
MsCalculationChainEntries calcChain = mModel.calculationChain;
// Выводим данные о цепочке в окно консоли
Console.WriteLine("Цепочка расчёта: ");
foreach (MsCalculationChainEntry calcEl in calcChain.its)
{
switch(calcEl.type)
{
case MsCalculationChainType.Model:
Console.WriteLine("".PadRight(2) + "модель: " + calcEl.model.generatedName);
break;
case MsCalculationChainType.MetaModel:
Console.WriteLine("".PadRight(2) + "метамодель с ключом: " + calcEl.metaModel.k);
break;
};
Console.WriteLine("".PadRight(4) + "элемент исключён из расчёта: " + calcEl.excluded);
Console.WriteLine("".PadRight(4) + "ключ родительского элемента: " + calcEl.parentKey);
}
return mModel;
}
См. также:
SOAP