BeforeConstruction(Components: ISQLComponents);
Components. Набор отдельных частей запроса, которые могут быть модифицированы.
Метод BeforeConstruction вызывается перед формированием запроса на извлечение данных куба.
Метод должен быть переопределён в пользовательском классе. Используя параметр Components, можно получить отдельные части запроса и модифицировать их при необходимости.
Указанный класс является обработчиком формирования запроса на извлечение данных куба. Данный класс необходимо сохранить в модуль и назначить в качестве обработчика источнику данных куба с помощью метода IStandardCubeDataset.SetCallback.
Public Class SQLCallback: Object, ISQLCallback
Sub BeforeConstruction(Components: ISQLComponents);
Var
i: Integer;
Select_, From_, Where, GroupBy, Aggregation, OrderBy: String;
Begin
Debug.WriteLine("Select_: " + Components.Select_);
Debug.WriteLine("From_: " + Components.From_);
Debug.WriteLine("Where: " + Components.Where);
Debug.WriteLine("GroupBy: " + Components.GroupBy);
Debug.WriteLine("Aggregation: " + Components.Aggregation);
Debug.WriteLine("OrderBy: " + Components.OrderBy);
Debug.WriteLine("SubQuery: " + Components.SubQuery.ToString);
Debug.WriteLine("ConditionCount: " + Components.ConditionCount.ToString);
For i := 0 To Components.ConditionCount - 1 Do
Debug.WriteLine("Condition " + i.ToString + " : " + Components.Condition(i).Condition);
End For;
Debug.WriteLine("TableAlias: " + Components.TableAlias);
//---Изменяемые части запроса
//Select_ := Components.Select_;
//...
//Модификация Select_
//...
//Components.Select_ := Select_;
//From_ := Components.From_;
//...
//Модификация From_
//...
//Components.From_ := From_;
//Where := Components.Where;
//...
//Модификация Where
//...
//Components.Where := Where;
//GroupBy := Components.GroupBy;
//...
//Модификация GroupBy
//...
//Components.GroupBy := GroupBy;
//Aggregation := Components.Aggregation;
//...
//Модификация Aggregation
//...
//Components.Aggregation := Aggregation;
//OrderBy := Components.OrderBy;
//...
//Модификация OrderBy
//...
//Components.OrderBy := OrderBy;
End Sub BeforeConstruction;
Sub AfterConstruction(Var SQL: String);
Begin
//При необходимости модификация окончательного текста запроса в переменной SQL
Debug.WriteLine("AFTER: " + SQL);
End Sub AfterConstruction;
End Class SQLCallback;
При выполнении куба сначала будет запущена процедура BeforeConstruction, при её выполнении в консоль среды разработки будут выведены все части формируемого запроса. При необходимости можно раскомментировать какой-либо блок и изменить часть запроса. Полностью сформированный запрос будет выведен при выполнении метода AfterConstruction.
См. также: