IMetabaseObjectDescriptor.Cache

Синтаксис

Cache: IMetabaseObjectCache;

Cache: Prognoz.Platform.Interop.Metabase.IMetabaseObjectCache;

Описание

Свойство Cache возвращает коллекцию записей кэша объекта репозитория.

Комментарии

Кэш объекта содержит экземпляры объекта, открытого с определенными значениями параметров. При открытии объекта с какими-либо параметрами осуществляется проверка наличия в кэше записи, соответствующей данным параметрам. Если запись будет найдена, то будет извлечена и открыта кэшированная версия объекта. Если запись для указанных параметров отсутствует, то объект будет открыт. При этом будут открыты все объекты, от которых зависит объект. Кэширование экземпляра объекта поддерживают регламентные отчеты.

Кэш объекта хранится в базе репозитория.

Пример

Для выполнения примера предполагается наличие формы, расположенной на ней кнопки с наименованием «Button1», компонента ReportBox и компонента UiReport с наименованием «UiReport1». Компонент «UiReport1» является источником данных для компонента ReportBox. В репозитории имеется регламентный отчет с идентификатором «Report_1».

Добавьте ссылки на системные сборки: Metabase, Ui.

Sub Button1OnClick(Sender: Object; Args: IMouseEventArgs);
Var
    MB: IMetabase;
    MDesc: IMetabaseObjectDescriptor;
    Cache: IMetabaseObjectCache;
    CacheItem: IMetabaseObjectCacheItem;
    Params: IMetabaseObjectParamValues;
    Param: IMetabaseObjectParamValue;
    OldDate: DateTime;
Begin
    MB := MetabaseClass.Active;
    MDesc := MB.ItemById("Report_1");
    Cache := MDesc.Cache;
    OldDate := DateTime.AddMonths(DateTime.Now, -1);
    Debug.WriteLine("Содержимое кэша объекта: " + MDesc.Id);
    Debug.Indent;
    For Each CacheItem In Cache Do
        Debug.WriteLine("Запись в кэше от: " + CacheItem.Timestamp.ToString);
        Params := CacheItem.ParamValues;
        If Params.Count <> 0 Then
            Debug.WriteLine("Параметры объекта:");
            For Each Param In Params Do
                Debug.WriteLine("Параметр: " + Param.Name + "(" + Param.Id + ") = " + Param.Value);
            End For;
        End If;
        //Удаление старых записей из кэша объекта
        If CacheItem.Timestamp < OldDate Then
            CacheItem.Flush;
        End If;
    End For;
    Debug.WriteLine("Записи в кэше, имеющие дату создания ранее " + OldDate.ToString + " были удалены.");
    If Cache.Count <> 0 Then
        UiReport1.Instance := Cache.Item(Cache.Count - 1).Open;
    Else
        UiReport1.Instance := MDesc.Open(Null);
    End If;
    Debug.Unindent;
End Sub Button1OnClick;
Imports Prognoz.Platform.Interop.Ui;
 
Private Sub button1_Click(sender: System.Object; e: System.EventArgs);
Var
    MB: IMetabase;
    MDesc: IMetabaseObjectDescriptor;
    Cache: IMetabaseObjectCache;
    CacheItem: IMetabaseObjectCacheItem;
    ParamVal: IMetabaseObjectParamValues;
    Param: IMetabaseObjectParamValue;
    Now, OldDate: DateTime;
Begin
    MB := Self.Metabase;
    MDesc := MB.ItemById[
"Report_1"];
    Cache := MDesc.Cache;
    Now := DateTime.Now;
    OldDate := Now.AddMonths(-
1);
    System.Diagnostics.Debug.WriteLine(
"Содержимое кэша объекта: " + MDesc.Id);
    System.Diagnostics.Debug.Indent();
    
For Each CacheItem In Cache Do
        System.Diagnostics.Debug.WriteLine(
"Запись в кэше от: " + CacheItem.Timestamp.ToString());
        ParamVal := CacheItem.ParamValues;
        
If ParamVal.Count <> 0 Then
            System.Diagnostics.Debug.WriteLine(
"Параметры объекта:");
            
For Each Param In ParamVal Do
                System.Diagnostics.Debug.WriteLine(
"Параметр: " + Param.Name + "(" + Param.Id + ") = " + Param.Value);
            
End For;
        
End If;
        
//Удаление старых записей из кэша объекта
        If CacheItem.Timestamp < OldDate Then
            CacheItem.Flush();
        
End If;
    
End For;
    System.Diagnostics.Debug.WriteLine(
"Записи в кэше, имеющие дату создания ранее " + OldDate.ToString() + " были удалены.");
    
If Cache.Count <> 0 Then
        uiReportNet1.MetabaseObjectUi.Instance := Cache.Item[Cache.Count - 
1].Open();
    
Else
        uiReportNet1.MetabaseObjectUi.Instance := MDesc.Open(
Null);
    
End If;
    System.Diagnostics.Debug.Unindent();
End Sub;

После выполнения примера в консоль среды разработки будет выведена информация о записях в кэше объекта. Для каждой записи будут выведены дата и время создания, а также список значений параметров, с которыми в тот момент открывался регламентный отчет. Записи, созданные более месяца назад, будут удалены. Если после удаления в кэше объекта останутся записи, то экземпляр объекта, хранящийся в последней оставшейся записи, будет загружен в компонент «UiReport1». Если в кэше будут удалены все записи, то в компонент «UiReport1» будет загружен отчет, открытый из репозитория.

См. также:

IMetabaseObjectDescriptor