ICubeAttachmentManager.ReadAttachments

Синтаксис

ReadAttachments(Iterator: IMatrixModelIterator): ICubeAttachments;

ReadAttachments(Iterator: Prognoz.Platform.Interop.ForeSystem.IMatrixModelIterator): Prognoz.Platform.Interop.Cubes.ICubeAttachments;

Параметры

Iterator. Итератор матрицы с вложениями.

Описание

Метод ReadAttachments возвращает коллекцию вложений, сохранённых в кубе.

Комментарии

Метод возвращает те значения, которые имеются по текущей позиции итератора. Полученные вложения будут доступны только на чтение. Для редактирования вложений используйте метод EditAttachments.

Пример

Для выполнения примера предполагается наличие в репозитории стандартного куба с идентификатором «STD_CUBE». В кубе настроена привязка фактов для хранения вложений. По каким-либо координатам куба сохранены вложения.

Добавьте ссылки на системные сборки: Cubes, Dal, Dimensions, Matrix, Metabase. В Fore.NET также добавьте ссылку на сборку ForeSystem.

Sub UserProc;
Var
    MB: IMetabase;
    CubeInst: ICubeInstance;
    Dest: ICubeInstanceDestination;
    Sels: IDimSelectionSet;
    Sel: IDimSelection;
    Exec: ICubeInstanceDestinationExecutor;
    Mat: IMatrix;
    MatEx: IMatrixEx;
    Ite: IMatrixIterator;
    ExecResult: ICubeExecuteResult;
    Manager: ICubeAttachmentManager;
    Ats: ICubeAttachments;
    At: ICubeAttachment;
    NameAttributeKey: Integer;
    i: integer;
Begin
    MB := MetabaseClass.Active;
    CubeInst := MB.ItemById(
"STD_CUBE").Open(NullAs ICubeInstance;
    Dest := CubeInst.Destinations.DefaultDestination;
    
//Отметка куба
    Sels := Dest.CreateDimSelectionSet;
    
For Each Sel In Sels Do
        Sel.SelectAll;
    
End For;
    Exec := Dest.CreateExecutor;
    Exec.IncludeAttachments := 
True;
    Exec.PrepareExecute(Sels);
    Exec.PerformExecute;
    Mat := Exec.Matrix;
    
//Результирующая матрица куба
    MatEx := Mat As IMatrixEx;
    
If MatEx.AttachmentValueIndex < 0 Then
        Debug.WriteLine(
"AttachmentValueIndex <0. Aborted ");
        
Return;
    
End If;
    ExecResult := CubeClass.ExecuteResult(Mat);
    
//Менеджер для работы с вложениями куба
    Manager := ExecResult.CreateAttachmentManager;
    
//Итератор матрицы
    Ite := Mat.CreateIterator;
    Ite.Move(IteratorDirection.First);
    
While Ite.Valid Do
        
//Вложения по текущей координате
        Ats := Manager.ReadAttachments(Ite);
        
If Ats <> Null Then
            Debug.WriteLine(
"Имеется вложение. Количество = " + Ats.Count.ToString);
            NameAttributeKey := Ats.Attributes.FindById(
"Name").Key;
            
For i := 0 To Ats.Count - 1 Do
                At := Ats.Item(i);
                Debug.WriteLine(
"Key= " + At.Key.ToString + " Name = " + At.AttributeValueByKey(NameAttributeKey) + " Type = " + At.Type.ToString);
            
End For;
        
Else
            Debug.WriteLine(
"Нет вложений");
        
End If;
        Debug.WriteLine(
"  ");
        Ite.Move(IteratorDirection.Next);
    
End While;
End Sub UserProc;

Imports Prognoz.Platform.Interop.Cubes;
Imports Prognoz.Platform.Interop.Dal;
Imports Prognoz.Platform.Interop.Dimensions;
Imports Prognoz.Platform.Interop.ForeSystem;
Imports Prognoz.Platform.Interop.Matrix;
Imports Prognoz.Platform.Interop.Metabase;

Public Shared Sub Main(Params: StartParams);
Var
    MB: IMetabase;
    CubeInst: ICubeInstance;
    Dest: ICubeInstanceDestination;
    Sels: IDimSelectionSet;
    Sel: IDimSelection;
    Exec: ICubeInstanceDestinationExecutor;
    Mat: IMatrix;
    MatEx: IMatrixEx;
    CubeCls: CubeClassClass = 
New CubeClassClass();
    Ite: IMatrixIterator;
    ExecResult: ICubeExecuteResult;
    Manager: ICubeAttachmentManager;
    Ats: ICubeAttachments;
    At: ICubeAttachment;
    NameAttributeKey: UInteger;
    i: integer;
Begin
    MB := Params.Metabase;
    CubeInst := MB.ItemById[
"STD_CUBE"].Open(NullAs ICubeInstance;
    Dest := CubeInst.Destinations.DefaultDestination;
    
//Отметка куба
    Sels := Dest.CreateDimSelectionSet();
    
For Each Sel In Sels Do
        Sel.SelectAll();
    
End For;
    Exec := Dest.CreateExecutor();
    Exec.IncludeAttachments := 
True;
    Exec.PrepareExecute(Sels);
    Exec.PerformExecute(
False);
    Mat := Exec.Matrix;
    
//Результирующая матрица куба
    MatEx := Mat As IMatrixEx;
    
If MatEx.AttachmentValueIndex < 0 Then
        System.Diagnostics.Debug.WriteLine(
"AttachmentValueIndex <0. Aborted ");
        
Return;
    
End If;
    ExecResult := CubeCls.ExecuteResult[Mat];
    
//Менеджер для работы с вложениями куба
    Manager := ExecResult.CreateAttachmentManager();
    
//Итератор матрицы
    Ite := Mat.CreateIterator();
    Ite.Move(IteratorDirection.itdFirst);
    
While Ite.Valid Do
        
//Вложения по текущей координате
        Ats := Manager.ReadAttachments(Ite);
        
If Ats <> Null Then
            System.Diagnostics.Debug.WriteLine(
"Имеются вложение. Количество = " + Ats.Count.ToString());
            NameAttributeKey := Ats.Attributes.FindById(
"Name").Key;
            
For i := 0 To Ats.Count - 1 Do
                At := Ats.Item[i];
                System.Diagnostics.Debug.WriteLine(
"Key= " + At.Key.ToString() +
                    
" Name = " + At.AttributeValueByKey[NameAttributeKey] + " Type = " + At.Type.ToString());
            
End For;
        
Else
            System.Diagnostics.Debug.WriteLine(
"Нет вложений");
        
End If;
        System.Diagnostics.Debug.WriteLine(
"  ");
        Ite.Move(IteratorDirection.itdNext);
    
End While;
End Sub;

При выполнении примера будет вычислена результирующая матрица куба и получен менеджер для работы с вложениями. Будет создан итератор и осуществлён обход всех координат матрицы. Если по координате хранятся вложения, то информация о них (ключ, наименование и тип) будет выведены в консоль среды разработки.

См. также:

ICubeAttachmentManager