CheckExecute(CheckType: Integer): Boolean;
CheckExecute(CheckType: Integer): Boolean;
CheckType - тип конфликта, который необходимо проверить.
Метод CheckExecute реализует событие, возникающее при выполнении метода Execute, в случае возникновения конфликтов.
Данное событие произойдет, если во время выполнения возникают какие-либо разногласия, которые необходимо разрешить. Если пользовательская функция возвращает значение True, то конфликт считается разрешенным. Если функция возвращает значение False, то выполнение прекращается.
Для выполнения примера предполагается наличие репозитория НСИ с идентификатором «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(Null) As 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;
При выполнении примера будет создан пакет для удаления элементов с обработчиком исключительных ситуаций и разрешения конфликтов. Пакет будет выполнен. Все ошибки, возникшие во время выполнения будут выведены в окно консоли. При возникновении конфликта, связанного с удалением объектов, от которых зависят объекты репозитория, выполнение пакета будет отменено.
Указанная процедура является точкой входа для какой-либо .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(Null) As 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;
При выполнении примера будет создан пакет для удаления элементов с обработчиком исключительных ситуаций и разрешения конфликтов. Пакет будет выполнен. При возникновении ошибок выполнение будет продолжено. При возникновении конфликта, связанного с удалением объектов, от которых зависят объекты репозитория, выполнение пакета будет отменено.
См. также: