ITsCalculationContext.UserData

Синтаксис

UserData: ITsUserData;

UserData: Prognoz.Platform.Interop.Transform.ITsUserData;

Описание

Свойство UserData возвращает пользовательские данные, связанные с методом расчёта.

Комментарии

Пользовательские данные метода будут доступны при использовании метода блоком функции в алгоритме расчёта показателей.

Пример

Ниже приведён пример пользовательского метода, который может использоваться в блоке функций алгоритма расчёта показателей. Метод может выполняться циклично.

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

Public Function CalcFunction(Paramarray arr: array Of Variant): Variant;
Const BREAK_ITERATION = 10; // Возможное условие прерывания выполнения
Var
    pContext: ITsCalculationContext;
    pUserData: ITsUserData;
    CurrentIteration: Integer;
    MaxIteration: Integer = -
1;
Begin
    
// Контекст метода расёчта и пользовательские данные
    pContext := TsCalculation.Current;
    pUserData := pContext.UserData;
    
// Проверяем условия выполнения
    If pUserData.Contains("CURRENT_ITERATION") Then
        CurrentIteration := pUserData.Data(
"CURRENT_ITERATION") As Integer;
        Debug.Write(
"Циклический расчет. ");
        Debug.Write(
"Итерация: " + CurrentIteration.ToString);
        
If pUserData.Contains("MAX_ITERATION") Then
            MaxIteration := pUserData.Data(
"MAX_ITERATION") As Integer;
            Debug.WriteLine(
" из " + MaxIteration.ToString);
        
End If;
        
If CurrentIteration = 1 Then
            Debug.WriteLine(
"Интервал между итерациями: " + (pUserData.Data("ITERATION_INTERVAL") As Integer).ToString + " секунд");
        
End If;
        
If CurrentIteration = BREAK_ITERATION Then
            pUserData.Data(
"BREAK_CYCLE") := True;
            Debug.WriteLine(
"Сработало условие выхода из цикла.");
        
Elseif CurrentIteration = MaxIteration Then
            pUserData.Data(
"BREAK_CYCLE") := True;
            Debug.WriteLine(
"Достигнута максимальная итерация.");
        
Else
            pUserData.Data(
"BREAK_CYCLE") := False;
        
End If;
    
End If;
    
Return Null;
End Function CalcFunction;

Imports Prognoz.Platform.Interop.Transform;

Public Class Program
    
Const BREAK_ITERATION = 10; // Возможное условие прерывания выполнения
    Public Shared Function CalcFunction(Paramarray arr: array Of Object): Object;
    
Var
        TsCalc: TsCalculation = 
New TsCalculationClass();
        pContext: ITsCalculationContext;
        pUserData: ITsUserData;
        CurrentIteration: Integer;
        MaxIteration: Integer = -
1;
    
Begin
        
// Контекст метода расёчта и пользовательские данные
        pContext := TsCalc.Current[Null];
        pUserData := pContext.UserData;
        
// Проверяем условия выполнения
        If pUserData.Contains("CURRENT_ITERATION") Then
            CurrentIteration := pUserData.Data[
"CURRENT_ITERATION"] As Integer;
            System.Diagnostics.Debug.Write(
"Циклический расчет. ");
            System.Diagnostics.Debug.Write(
"Итерация: " + CurrentIteration.ToString());
            
If pUserData.Contains("MAX_ITERATION") Then
                MaxIteration := pUserData.Data[
"MAX_ITERATION"] As Integer;
                System.Diagnostics.Debug.WriteLine(
" из " + MaxIteration.ToString());
            
End If;
            
If CurrentIteration = 1 Then
                System.Diagnostics.Debug.WriteLine(
"Интервал между итерациями: " + (pUserData.Data["ITERATION_INTERVAL"] As Integer).ToString() + " секунд");
            
End If;
            
If CurrentIteration = BREAK_ITERATION Then
                pUserData.Data[
"BREAK_CYCLE"] := True;
                System.Diagnostics.Debug.WriteLine(
"Сработало условие выхода из цикла.");
            
Elseif CurrentIteration = MaxIteration Then
                pUserData.Data[
"BREAK_CYCLE"] := True;
                System.Diagnostics.Debug.WriteLine(
"Достигнута максимальная итерация.");
            
Else
                pUserData.Data[
"BREAK_CYCLE"] := False;
            
End If;
        
End If;
        
Return Null;
    
End Function;
End Class;

При выполнении метод осуществляется проверка наличия и считывание пользовательских данных. В зависимости от значений считанных значений параметров осуществляется продолжение выполнения или завершение метода.

См. также:

ITsCalculationContext