ICubeAttachmentManager.EditAttachments

Синтаксис

EditAttachments(Iterator: IMatrixModelIterator): ICubeAttachmentsEdited;

Параметры

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

Описание

Метод EditAttachments открывает список вложений на редактирование.

Пример

Для выполнения примера предполагается наличие в репозитории стандартного куба с идентификатором «STD_CUBE». В кубе настроена привязка фактов для хранения вложений. Справочник, в который сохраняются вложения, в своей структуре имеет дополнительный атрибут с идентификатором «OBJ_KEY». Данный атрибут имеет целый тип данных, также для него выставлен признак ссылки на объект репозитория. В кубе по каким-либо координатам имеются данные или вложения. В репозитории должен быть создан документ с идентификатором «DOC», а в файловой системе должен иметься файл «C:\File.txt».

Добавьте ссылки на системные сборки: Cubes, Dal, Dimensions, Fore, IO, Matrix, Metabase.

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: ICubeAttachmentsEdited;
    At: ICubeAttachmentEdited;
    NameAttributeKey, FileNameAttributeKey, UrlAttributeKey, TimeStampKey, AttachmentKey, ObjKey: Integer;
    FStream: IFileStream;
    Doc: IMetabaseObjectDescriptor;
    Sto: ICubeInstanceStorage;
    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;
    
//Итератор матрицы
    Mat.ValueFlag := Mat.ValueFlag + 10;
    Ite := Mat.CreateIterator;
    Ite.Move(IteratorDirection.First);
    
If Manager.SupportWriteAttachments(Ite) Then
        Ats := Manager.EditAttachments(Ite);
        NameAttributeKey := Ats.Attributes.FindById(
"NAME").Key;
        FileNameAttributeKey := Ats.Attributes.FindById(
"FILE_NAME").Key;
        UrlAttributeKey := Ats.Attributes.FindById(
"URL").Key;
        TimeStampKey := Ats.Attributes.FindById(
"TIMESTAMP").Key;
        AttachmentKey := Ats.Attributes.FindById(
"ATTACHMENT").Key;
        ObjKey := Ats.Attributes.FindById(
"OBJ_KEY").Key;
        
//Создание вложений
        //Файл
        At := Ats.AddNew;
        FStream := 
New FileStream.Create("C:\File.txt", FileOpenMode.Read, FileShare.DenyNone);
        At.Type := CubeAttachmentType.Value;
        At.AttributeValueByKey(AttachmentKey) := FStream;
        At.AttributeValueByKey(FileNameAttributeKey) := 
"File.txt";
        At.AttributeValueByKey(NameAttributeKey) := 
"File.txt";
        At.AttributeValueByKey(TimeStampKey) := DateTime.Now;
        
//Документ репозитория
        At := Ats.AddNew;
        Doc := MB.ItemById(
"DOC");
        At.Type := CubeAttachmentType.Document;
        At.AttributeValueByKey(ObjKey) := Doc.Key;
        At.AttributeValueByKey(FileNameAttributeKey) := (Doc.Bind 
As IDocument).FileName;
        At.AttributeValueByKey(NameAttributeKey) := Doc.Name;
        At.AttributeValueByKey(TimeStampKey) := DateTime.Now;
        
//Ссылка
        At := Ats.AddNew;
        At.Type := CubeAttachmentType.URL;
        At.AttributeValueByKey(UrlAttributeKey) := 
"http://localhost/";
        At.AttributeValueByKey(NameAttributeKey) := 
"localhost";
        At.AttributeValueByKey(TimeStampKey) := DateTime.Now;
        
//Просмотр списка вложений
        For i := 0 To Ats.Count - 1 Do
            At := Ats.Edit(i);
            Debug.WriteLine(
"Key= " + At.Key.ToString +
                
" Name = " + (At As ICubeAttachment).AttributeValueByKey(NameAttributeKey) +
                
" Type = " + (At As ICubeAttachment).Type.ToString);
        
End For;
        
//Сохранение изменений
        Manager.Post(Ite, Ats);
        Sto := Dest.CreateStorage(CubeInstanceStorageOptions.Attachments);
        Sto.AttachmentManager := Manager;
        Sto.SaveMatrix(Mat, Mat.ValueFlag);
    
End If;
End Sub UserProc;

При выполнении примера будет вычислена результирующая матрица куба и получен менеджер для работы с вложениями. Будет создан итератор для навигации по матрице. По первой доступной координате будут созданы три различных вложения. Информация обо всех вложениях, которые имеются по этой координате, будет выведена в консоль среды разработки. После этого все изменения будут сохранены обратно в куб.

См. также:

ICubeAttachmentManager