01. DADOS GERAIS

Produto:

Linha de Produto:

Segmento:

Módulo:Controle de acesso
Função:Access
Ticket:
Requisito/Story/Issue (informe o requisito relacionado) :
  1. DLOGPORTOS-19077


02. SITUAÇÃO/REQUISITO

Para atendimento da demanda de integração para o controle de acesso foi desenvolvido um componente para acesso aos dados biométricos cadastrados no ecossistema TOTVS Logística Recintos Aduaneiros. Este componente será responsável por fornecer a lista de biometrias devidamente cadastradas na base de dados e ainda não sincronizadas com a aplicação cliente, mediante autorização para consumo da API.

03. SOLUÇÃO

A implementação da interface depende dos seguintes elementos do framework de desenvolvimento:


São métodos expostos pela implementação da interface ICATRACABase:

  • function SetErrorLogFile(const AFilename: string): ICATRACABase;
  • function SetLogFile(const AFilename: string): ICATRACABase;
  • function TreatRequest(const AConnection: IDBFullConfigConnection; const ARequest: TWebRequest; const AResponse: TWebResponse): THTTPCode;

Não há propriedades expostas pela interface ICATRACABase.

Para utilização da implementação da interface ICATRACABase em aplicações Delphi, segue o exemplo de uso deste componente.


Execução da ação de login:

procedure TComponentDebugger.SendToAccessControlClick(Sender: TObject);
var
  Request: TWebRequest;
  Response: TWebResponse;
  Return: THTTPCode;
  ResponseJSON: TJSONObject;

const
  INTERNAL_PATH = '/tlra/accesscontrol/v1/access/{personId}/{deviceId}/{accessMode}/{accessDirection}';
  BASE_URL = 'http://localhost/api';

  procedure SetAccessDataInINI;
  var
    URL : string;
    Path: string;
  begin
    Path := INTERNAL_PATH.Replace('{personId}', edtPersonIdAccess.Text, [rfReplaceAll])
                         .Replace('{deviceId}', edtDeviceIdAccess.Text, [rfReplaceAll])
                         .Replace('{accessMode}', cbxAccessMode.ItemIndex.Succ.ToString, [rfReplaceAll])
                         .Replace('{accessDirection}', cbxAccessDirection.ItemIndex.ToString, [rfReplaceAll]);
    URL := BASE_URL.Concat([Path]);
    TIniReader.Instance.OpenFile(FBasePath + BIOMETRIES_INI_FILE)
                       .Section['Extra Headers']
                       .WriteString('Url', URL)
                       .Root
                       .Section['CGI']
                       .WriteString('Logical Path', Path)
                       .WriteString('Physical Path', Path)
                       .UpdateFile;
  end;

  procedure Prepare;
  begin
    SetAccessDataInINI;
    sedtResponse.Lines.Clear;
    Request := TWinCGIRequest.Create(FBasePath + BIOMETRIES_INI_FILE, FBasePath + CONTENT_FILE, FBasePath + OUTPUT_FILE);
    Response := TCGIResponse.Create(Request);
  end;
begin
  Prepare;
  Return := TCATRACAFactory.Instance.GetObject(ACCESS_CONTROL_CLASS_KEY).SetLogFile(FLogFile)
                                                                        .SetErrorLogFile(FErrorLogFile)
                                                                        .TreatRequest(FConnection
                                                                                    , Request
                                                                                    , Response);
  ResponseJSON := Response.Content.ToJSON;
  sedtResponse.Text := ResponseJSON.PrettyFormat(2);
  AccessID := ResponseJSON.TryReadNode('id', EmptyStr);
  ResponseJSON.Free;
  Request.Free;
  Response.Free;

  case AccessID.IsEmpty of
    True : btnEndAccess.Enabled := False;
    False:
    begin
      btnEndAccess.Enabled := True;
      Seconds := 20;
      btnEndAccess.Caption := 'Finish [%d]'.Format([Seconds]);
      tmrFinishAccess.Enabled := True;
    end;
  end;

  case Return.IsOkResult of
    True : Application.MessageBox(PWideChar(RESPONSE_MESSAGE.Format([Return.Code, Return.Message])), 'Informação', MB_OK or MB_ICONINFORMATION);
    False: Application.MessageBox(PWideChar(RESPONSE_MESSAGE.Format([Return.Code, Return.Message])), 'Erro', MB_OK or MB_ICONERROR);
  end;
end;

Resultado esperado:

Os demais métodos retornam uma mensagem 204No content -, não possuindo retorno visível.


04. DEMAIS INFORMAÇÕES

Outras ações/ações relacionadas 

Por ser dependente do framework de desenvolvimento, os caminhos para os arquivos arquivos desta dependência devem estar presentes no projeto ao ser utilizado.

05. ASSUNTOS RELACIONADOS