Dictionary: IMetabaseObjectDescriptor;
Dictionary: Prognoz.Platform.Interop.Metabase.IMetabaseObjectDescriptor;
Свойство Dictionary возвращает справочник НСИ, элементы которого зависят от объекта репозитория.
Для определения объекта репозитория, от которого зависит элемент справочника НСИ, используйте свойство IMbElementDependent.Object.
Для выполнения примера предполагается наличие справочников НСИ с идентификаторами «DICT» и «DICT1».
Добавьте ссылки на системные сборки Metabase, Rds.
Sub UserProc;
Var
MB: IMetabase;
Obj, Dictionary, Dict: IMetabaseObjectDescriptor;
RdsDictIns: IRdsDictionaryInstance;
Elements: IRdsDictionaryElements;
Depends: IMbElementDependents;
Depend: IMbElementDependent;
Template, Value: IMbElementDependentTemplate;
ElemKeys: Array[2] Of Integer;
ObjKey, DictKey, ElemKey: Integer;
ElemDependDB: IMbElementDependentsDatabase;
i: Integer;
Begin
MB := MetabaseClass.Active;
Obj := MB.ItemById("DICT1");
Dictionary := MB.ItemById("DICT");
RdsDictIns := Dictionary.Open(Null) As IRdsDictionaryInstance;
Elements := RdsDictIns.Elements;
// Настройки объекта:
Obj := Obj.EditDescriptor;
Obj.ElementDependenciesTrackingType := MbElementDependenciesTrackingType.Dependecies;
Obj.ElementDependents;
Obj.SaveDescriptor;
/// Настройки:
DictKey := Dictionary.Key;
ObjKey := Obj.Key;
// Шаблон:
Template := New MbElementDependentTemplateClass.CreateByDictionary(DictKey);
Template.DictionaryKey := Dictionary.Key;
ElemKeys[0] := Elements.Element(1);
ElemKeys[1] := Elements.Element(2);
//Указываем ключи элементов
Template.ElementKeys := ElemKeys;
// Коллекция зависимостей:
ElemDependDB := Mb.ElementDependentsDatabase;
Depends := ElemDependDB.Select_(Template);
Value := New MbElementDependentTemplateClass.Create(ObjKey, DictKey, ElemKey);
Depends.Add(Value);
Depends.Modified := True;
ElemDependDB.Update(Depends);
// Вывод информации:
Debug.WriteLine("Параметры текущего репозитория: " + ElemDependDB.Metabase.Name);
If ElemDependDB.Active = True Then
Debug.WriteLine("Для объектов репозитория доступно сохранение зависимостей");
Else
Debug.WriteLine("Для объектов репозитория не доступно сохранение зависимостей");
End If;
Debug.WriteLine("Настроены зависимости для объектов:");
For i := 0 To Depends.Count - 1 Do
Depend := Depends.Item(i);
Dict := Depend.Dictionary;
Debug.WriteLine(" " + Dict.Name + ", идентификатор: " + Dict.Id);
Obj := Depend.Object;
Debug.WriteLine(" " + Obj.Name + ", идентификатор: " + Obj.Id);
End For;
Debug.WriteLine("Количество ключей элементов справочника НСИ: "
+ Template.ElementKeysCount.ToString);
End Sub UserProc;
В результате выполнения примера в окно консоли будет выведена информация:
параметры текущего репозитория;
доступно ли сохранение зависимостей;
список объектов с настроенными зависимостями.
Необходимые требования и результат выполнения примера Fore.NET совпадают с примером Fore.
Imports Prognoz.Platform.Interop.Metabase;
Imports Prognoz.Platform.Interop.Rds;
Public Shared Sub Main(Params: StartParams);
Var
MB: IMetabase;
Obj, Dictionary, Dict: IMetabaseObjectDescriptor;
RdsDictIns: IRdsDictionaryInstance;
Elements: IRdsDictionaryElements;
Depends: IMbElementDependents;
Depend: IMbElementDependent;
Template, Value: MbElementDependentTemplateClass;
DependTemplClassT, DependTemplClassV: MbElementDependentTemplateClassClass = New MbElementDependentTemplateClassClass();
ElemKeys: Array[2] Of uinteger;
ObjKey, DictKey, ElemKey: uinteger;
ElemDependDB: IMbElementDependentsDatabase;
i: Integer;
Begin
MB := Params.Metabase;
Obj := MB.ItemById["DICT1"];
Dictionary := MB.ItemById["DICT"];
RdsDictIns := Dictionary.Open(Null) As IRdsDictionaryInstance;
Elements := RdsDictIns.Elements;
// Настройки объекта:
Obj := Obj.EditDescriptor();
Obj.ElementDependenciesTrackingType := MbElementDependenciesTrackingType.mbeledeptratypDependecies;
Obj.ElementDependents;
Obj.SaveDescriptor();
/// Настройки:
DictKey := Dictionary.Key;
ObjKey := Obj.Key;
// Шаблон:
DependTemplClassT.CreateByDictionary(DictKey);
Template := DependTemplClassT As MbElementDependentTemplateClass;
Template.DictionaryKey := Dictionary.Key;
ElemKeys[0] := Elements.Element[1];
ElemKeys[1] := Elements.Element[2];
//Указываем ключи элементов
Template.ElementKeys := ElemKeys;
// Коллекция зависимостей:
ElemDependDB := Mb.ElementDependentsDatabase;
Depends := ElemDependDB.@Select(Template);
DependTemplClassV.Create(ObjKey, DictKey, ElemKey);
Value := DependTemplClassV As MbElementDependentTemplateClass;
Depends.Add(Value);
Depends.Modified := True;
ElemDependDB.Update(Depends);
// Вывод информации:
System.Diagnostics.Debug.WriteLine("Параметры текущего репозитория: " + ElemDependDB.Metabase.Name);
If ElemDependDB.Active = True Then
System.Diagnostics.Debug.WriteLine("Для объектов репозитория доступно сохранение зависимостей");
Else
System.Diagnostics.Debug.WriteLine("Для объектов репозитория не доступно сохранение зависимостей");
End If;
System.Diagnostics.Debug.WriteLine("Настроены зависимости для объектов:");
For i := 0 To Depends.Count - 1 Do
Depend := Depends.Item[i];
Dict := Depend.Dictionary;
System.Diagnostics.Debug.WriteLine(" " + Dict.Name + ", идентификатор: " + Dict.Id);
Obj := Depend.Object;
System.Diagnostics.Debug.WriteLine(" " + Obj.Name + ", идентификатор: " + Obj.Id);
End For;
System.Diagnostics.Debug.WriteLine("Количество ключей элементов справочника НСИ: "
+ Template.ElementKeysCount.ToString());
End Sub;
См. также: