Unlock;
Метод Unlock отключает блокировку.
Включение блокировки происходит автоматически при получении объекта типа ILock. Для снятия блокировки вызовите метод Unlock и обнулите соответствующую переменную.
Для выполнения примера предполагается наличие в репозитории куба с идентификатором STD_CUBE. Для куба включена возможность кэширования данных.
Добавьте ссылки на системные сборки: Cubes, Dimensions, Matrix, Metabase.
Sub UserProc;
Var
MB: IMetabase;
MDesc, CacheDesc: IMetabaseObjectDescriptor;
Cache: ICubeCacheSaver;
CubeInst: ICubeInstance;
Dest: ICubeInstanceDestination;
Sels: IDimSelectionSet;
Sel: IDimSelection;
Matr: IMatrix;
Lock: ILock;
Begin
MB := MetabaseClass.Active;
MDesc := MB.ItemById("STD_CUBE");
CacheDesc := GetCache(MDesc);
If CacheDesc <> Null Then
Cache := CacheDesc.Edit As ICubeCacheSaver;
CubeInst := MDesc.Open(Null) As ICubeInstance;
Dest := CubeInst.Destinations.DefaultDestination;
Sels := Dest.CreateDimSelectionSet;
For Each Sel In Sels Do
Sel.SelectAll;
End For;
//Получение кэшированной матрицы с данными
Matr := Cache.GetGlobalCache(Dest.Key, Null, Sels);
If Matr <> Null Then
Lock := Cache.GetGlobalWriteLock(Dest.Key, Null, Sels);
//...
//Дальнейшая работа с матрицей данных
//...
//Сохранение обновленной матрицы в кэш
Cache.SaveCache(Dest.Key, Null, Sels, Matr);
Lock.Unlock;
Lock := Null;
End If;
End If;
End Sub UserProc;
Function GetCache(MObj: IMetabaseObjectDescriptor): IMetabaseObjectDescriptor;
Var
Desc: IMetabaseObjectDescriptor;
Begin
For Each Desc In MObj.Children Do
If Desc.ClassId = MetabaseObjectClass.KE_CLASS_CUBE_CACHE_SAVER Then
Return Desc;
End If;
End For;
Return Null;
End Function GetCache;
При выполнении примера для указанных параметров куба будет получена матрица кэшированных данных. Для изменения данных осуществляется их блокировка. После обновления данных в кэше блокировка будет снята.
См. также: