Ниже приведен пример использования операции GetMs для извлечения из контейнера моделирования ограниченного числа объектов. В запросе передается экземпляр открытого контейнера моделирования, шаблон и фильтр для извлечения данных. В ответе приходят извлечённые объекты.
{ "GetMs" : { "tMs" : { "id" : "S111!M!S!C1" }, "tArg" : {
"pattern" : { "obInst" : "true", "items" : "Get", "item" : { "key" : "2804", "metaModel" : { "filter" : "",
"calcChainPattern" : { "modelPattern" : { "transform" : { "transformVariable" : { "slices" : "Get", "transformSlice" :
{ "selection" : "Get" } } } } }, "visualControllerPattern" : { "variableRubricatorKey" : "true",
"chainWorkbookKey" : "true", "freeVariables" : "true" } } } }, "filter" : { "items" : {
"range" : { "count" : "2" } } } } } } } }
{ "GetMsResult" : { "id" : { "id" : "S111!M!S!C1"
}, "meta" : { "obInst" : { "obDesc" : { "@isShortcut" : "0", "i" : "MODELSPACE", "n" : "Контейнер моделирования",
"k" : "1581", "c" : "5121", "p" : "1580", "h" : "0" } }, "dirty" : "0", "items" : { "its" :
{ "it" : [ { "k" : "1627", "id" : "SCEN$TREE", "n" : "Дерево сценариев", "vis" : "1", "type" : "Folder" },
{ "k" : "2564", "id" : "OBJ2564", "n" : "Модель", "vis" : "1", "type" : "Problem" } ] } },
"item" : { "k" : "2804", "id" : "OBJ2804", "n" : "Модель", "vis" : "1", "type" : "MetaModel", "metaModelMd" : { "k" : "2804",
"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"
} } } } } } }
public static MsItem GetMsFilter(MsId ms, ulong mModelKey) { var getMsOp = new GetMs(); getMsOp.tMs = ms; getMsOp.tArg = new GetMsArg() { // Задаем шаблон извлечения данных pattern = new MsMdPattern()
{ items = ListOperation.Get, item = new MsItemPattern() { // Задаём ключ цепочки расчёта key = mModelKey, metaModel = new MsMetaModelPattern() { // Фильтрацию не используем filter = new MsMetaModelFilter() { calculationChain = null,
mmParams = null }, // Задаём шаблон извлечения цепочки расчёта calcChainPattern = new MsCalculationChainPattern() { modelPattern = new MsModelPattern() { transform = new MsFormulaTransformPattern() { transformVariable = new MsFormulaTransformVariablePattern() {
slices = ListOperation.Get, transformSlice = new MsFormulaTransformSlicePattern() { selection = ListOperation.Get } } } } }, visualControllerPattern = new MsMetaModelVisualControllerPattern() { variableRubricatorKey = true, chainWorkbookKey = true,
freeVariables = true } } } }, // Задаём фильтр filter = new MsMdFilter() { // Получаем только 3 объекта items = new ListFilter() {range = new ListRange() { count = 2}} }
}; // Создаем прокси-объект для выполнения операции var somClient = new SomPortTypeClient(); // Задаем параметры выполнения операции var result = somClient.GetMs(getMsOp); MsItems its = result.meta.items; Console.WriteLine("Извлечены объекты:"); foreach (MsItem it in its.its) {Console.WriteLine("".PadRight(3) + it.n);}; Console.Write("Открыта цепочка расчёта из модели '"); MsItem mModel = result.meta.item; Console.WriteLine(mModel.n + "'");
MsFormulaTransformSlices fVars = mModel.metaModelMd.visualController.freeVariables; if (fVars.its.Length != 0) { Console.WriteLine("".PadRight(3) + "Свободные переменные:"); foreach (MsFormulaTransformSlice slice in fVars.its) {Console.WriteLine("".PadRight(6) + slice.n);} } else {Console.WriteLine("".PadRight(3) + "В модели нет свободных переменных");} return mModel; }
См. также: