IRdsBatchCallback.CheckExecute

Синтаксис Fore

CheckExecute(CheckType: Integer): Boolean;

Синтаксис Fore.NET

CheckExecute(CheckType: Integer): Boolean;

Параметры

CheckType - тип конфликта, который необходимо проверить.

Описание

Метод CheckExecute реализует событие, возникающее при выполнении метода Execute, в случае возникновения конфликтов.

Комментарии

Данное событие произойдет, если во время выполнения возникают какие-либо разногласия, которые необходимо разрешить. Если пользовательская функция возвращает значение True, то конфликт считается разрешенным. Если функция возвращает значение False, то выполнение прекращается.

Пример Fore

Для выполнения примера предполагается наличие репозитория НСИ с идентификатором «RDS». В данном репозитории создан справочник НСИ с идентификатором «Country». Для справочника включено отслеживание ссылок на элементы.

Sub UserProc;
Var
    MB: IMetabase;
    Dict: IRdsDictionary;
    DictInst: IRdsDictionaryInstance;
    DictBatch: IRdsDictionaryBatch;
    DelBatch: IRdsDictionaryBatchDelete;
    BatchFilters: IRdsDictionaryFilterConditions;
    Filter: IRdsDictionaryFilterCondition;
    Attr: IRdsAttribute;
Begin
    MB := MetabaseClass.Active;
    Dict := MB.ItemByIdNamespace("Country", MB.GetObjectKeyById("RDS")).Bind As IRdsDictionary;
    DictInst := Dict.Open(NullAs IRdsDictionaryInstance;
    DictBatch := DictInst.CreateBatch(RdsDictionaryBatchType.Delete);
    DelBatch := DictBatch As IRdsDictionaryBatchDelete;
    BatchFilters := DelBatch.Filter;
    Attr := Dict.Attributes.FindById("ACTUAL");
    Filter := BatchFilters.Add(Attr);
    Filter.Value := False;
    DelBatch.Callback := New MyCallback.Create;
    DelBatch.Execute;
End Sub UserProc;

Class MyCallback: Object, IRdsBatchCallback
    Function OnError(Element: Integer; ErrorType: integer; Error: IException): RdsBatchCallbackContinue;
    Begin
        Debug.WriteLine("Ошибка!");
        Debug.WriteLine("    элемент: " + Element.ToString);
        Debug.WriteLine("    тип ошибки: " + ErrorType.ToString);
        Debug.WriteLine("    текст ошибки: " + Error.Message);
        Return RdsBatchCallbackContinue.Continue_;
    End function OnError;

    Function CheckExecute(CheckType: Integer): Boolean;
    Begin
        If CheckType = RdsCheckExecuteDeleteBatch.DeleteDepends Then
            Return False;
        End If;
    End Function CheckExecute;
End Class MyCallback;

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

Пример Fore.NET

Указанная процедура является точкой входа для какой-либо .NET-сборки. Для выполнения примера предполагается наличие репозитория НСИ с идентификатором «RDS». В данном репозитории создан справочник НСИ с идентификатором «Country». Для справочника включено отслеживание ссылок на элементы.

Public Shared Sub Main(Params: StartParams);
Var
    MB: IMetabase;
    Dict: IRdsDictionary;
    DictInst: IRdsDictionaryInstance;
    DictBatch: IRdsDictionaryBatch;
    DelBatch: IRdsDictionaryBatchDelete;
    BatchFilters: IRdsDictionaryFilterConditions;
    Filter: IRdsDictionaryFilterCondition;
    Attr: IRdsAttribute;
Begin
    MB := Params.Metabase;
    Dict := MB.ItemByIdNamespace["Country", MB.GetObjectKeyById("RDS")].Bind() As IRdsDictionary;
    DictInst := Dict.Open(NullAs IRdsDictionaryInstance;
    DictBatch := DictInst.CreateBatch(RdsDictionaryBatchType.rdbtDelete);
    DelBatch := DictBatch As IRdsDictionaryBatchDelete;
    BatchFilters := DelBatch.Filter;
    Attr := Dict.Attributes.FindById("ACTUAL");
    Filter := BatchFilters.Add(Attr);
    Filter.Value := False;
    DelBatch.Callback := New MyCallback();
    DelBatch.Execute();
End Sub;

Class MyCallback: IRdsBatchCallback
    Public Function OnError(Element: uinteger; ErrorType: integer; Error: Prognoz.Platform.Interop.ForeSystem.Exception): RdsBatchCallbackContinue;
    Begin
        Return RdsBatchCallbackContinue.rbacacoContinue;
    End Function OnError;

    Public Function CheckExecute(CheckType: Integer): Boolean;
    Begin
        If CheckType = (RdsCheckExecuteDeleteBatch.rcedbDeleteDepends As integer) Then
            Return False;
        Else
            Return True;
        End If;
    End Function CheckExecute;
End Class MyCallback;

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

См. также:

IRdsBatchCallback