Pergunta

Eu tenho um projeto MIDAS que usa um TDatasetProvider em um dos Remotedatamodules no servidor

Atualmente estou usando os seguintes eventos

  • BeforeAppllyUpdates - para criar um objeto
  • Antes da Updaterecord - para usar o objeto
  • AfterAppllyUpdates - para destorar o objeto

Pergunta:

'AfterAppllyUpdates' sempre será chamado, mesmo que seja um erro de atualização?

Foi útil?

Solução

Se você olhar para o SourCecode:

function TCustomProvider.DoApplyUpdates(const Delta: OleVariant; MaxErrors: Integer;
  out ErrorCount: Integer; var OwnerData: OleVariant): OleVariant;
begin
  SetActiveUpdateException(nil);
  try
    try
      if Assigned(FOnValidate) then
        FOnValidate(Delta);
      DoBeforeApplyUpdates(OwnerData);
      Self.OwnerData := OwnerData;
      try
        Result := InternalApplyUpdates(Delta, MaxErrors, ErrorCount);
      finally
        OwnerData := Self.OwnerData;
        Self.OwnerData := unassigned;
      end;
    except
      on E: Exception do
      begin
        SetActiveUpdateException(E);
        raise;
      end;
    end;
  finally
    try
      DoAfterApplyUpdates(OwnerData);
    finally
      SetActiveUpdateException(nil);
    end;
  end;
end;

Você veja que o DoafterapplyUpdates é chamado no bloco Finalmente. Isso significa que sempre é chamado de considerações de qualquer exceção.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top