Ниже приведен пример использования операции OpenAlg для открытия блока расчёта и получения его метаданных. В запросе передается моникёр объекта, являющегося блоком расчёта в репозитории. В ответе приходит моникёр открытого экземпляра и запрошенные метаданные.
В примере C# используется функция FindObjectById, код которой приведен в примере «Получение описания объекта по его идентификатору».
{
"OpenAlg" :
{
"tOb" :
{
"id" : "S1!M!231308"
},
"tArg" :
{
"args" :
{
"openForEdit" : "true"
},
"metaGet" :
{
"obInst" : "true",
"calcBlock" :
{
"dest" :
{
"stub" : "true",
"linksOperation" : "Get"
}
}
}
}
}
}
{
"OpenAlgResult" :
{
"id" :
{
"id" : "S1!M!S!C2"
},
"meta" :
{
"obInst" :
{
"obDesc" :
{
"@ds" : "",
"@isShortcut" : "0",
"@isLink" : "0",
"@ver" : "5",
"@hf" : "0",
"i" : "CALC_BLOCK",
"n" : "Блок расчёта",
"k" : "231308",
"c" : "1709825",
"p" : "231226",
"h" : "0",
"hasPrv" : "0",
"ic" : "0",
"trackElementDependents" : "0",
"isPermanent" : "1",
"isTemp" : "0"
}
},
"dirty" : "0",
"calcObject" :
{
"k" : "231308",
"id" : "CALC_BLOCK",
"n" : "Блок расчёта",
"vis" : "1",
"type" : "CalcBlock",
"calcBlock" :
{
"dest" :
{
"k" : "231304",
"id" : "OBJ231297",
"n" : "Куб-приёмник",
"vis" : "1",
"desc" :
{
"@ds" : "",
"@isShortcut" : "0",
"@isLink" : "0",
"@ver" : "2",
"@hf" : "0",
"i" : "OBJ231297",
"n" : "Куб-приёмник",
"k" : "231304",
"c" : "1281",
"p" : "231293",
"h" : "0",
"hasPrv" : "0",
"ic" : "0",
"trackElementDependents" : "0"
},
"hasCalendar" : "1",
"useCalendarAsStubDimension" : "0",
"links" :
{
"its" :
{
"it" :
[
{
"k" : "1",
"left" :
{
"dimId" : "FACTS",
"attrId" : "KEY",
"ignoreNulls" : "0"
},
"right" :
{
"dimId" : "INDICATORS",
"attrId" : "KEY",
"ignoreNulls" : "1"
}
}
]
}
},
"enabledRdsLinkButton" : "0"
}
}
}
},
"readOnly" : "0"
}
}
public static OpenAlgResult OpenAlgWithMetadata(MbId mb, string algId)
{
var somClient = new SomPortTypeClient(); //Прокси-объект для выполнения операций
//Параметры выполнения операции
var tOpen = new OpenAlg()
{
tArg = new OpenAlgArg()
{
args = new AlgOpenArgs()
{
openForEdit = true
},
metaGet = new AlgMdPattern()
{
calcBlock = new AlgCalcBlockPattern()
{
dest = new AlgCalcBlockDestPattern()
{
stub = true,
linksOperation = ListOperation.Get
}
},
}
},
//Формирование моникёра объекта
tOb = new OdId() { id = mb.id + "!" + FindObjectById(mb, algId).k }
};
//Открытие с запросом метаданных
var result = somClient.OpenAlg(tOpen);
return result;
}
См. также: