Workflow Studio \ Fluxo
Scripts são usados em blocos SCRIPT na definição do fluxo. São uma forma muito poderosa e flexível de estender as funções básicas do diagrama de fluxo e permitem a criação de processos de negócio integrados.
É possível fazer diversas atividades através de scripts, entre outras:
A sintaxe padrão do script é Pascal. Todo o código inserido no bloco SCRIPT é interpretado e compilado em tempo de execução ao instanciar o fluxo.
Atenção: Não utilize funções que executem mensagens para o usuário (message dialogs ou input windows, por exemplo). São exemplos de funções que aguardam alguma entrada do usuário e como o fluxo é executado como um serviço este tipo de função irá parar a execução do fluxo.
Todo script, ao ter sua execução finalizada, pode retornar um resultado ao fluxo. Este resultado pode ser utilizado para indicar se o código foi executado com sucesso ou até mesmo para direcionar o fluxo.
O resultado é definido através da variável result.
Por exemplo, para definir o resultado do script como 'sim', deve-se executar:
result := 'sim';
Desta forma o script irá retornar o valor 'sim' ao final da execução e seguir pela transição marcada como 'sim'.
Não é obrigatório que todo script retorne um valor, como em casos de algoritmos muito simples que não requeiram nenhum tratamento especial.
Dica: Em casos de script complexos (que envolvam manipulações de dados ou webservices) sempre usar pelo menos 2 valores para retorno de script. Um para indicar se o código foi executado com sucesso, e outro para indicar se houve falha e redirecionar o fluxo com algum tratamento de erro apropriado.
Clique aqui para visualizar a apostila com os conceitos básicos de programação e linguagem Pascal.
Este bloco é usado quando, ao final da execução dos comandos que estiverem entre o “Try … Finally”, havendo ou não erros que não permitam a continuação da execução de todo o bloco, o sistema irá executar o que estiver entre “Finally … End”.
Nota: Este bloco é obrigatório para a criação de objetos, pois deve certificar-se que o mesmo seja liberado da memória em sua conclusão.
Exemplo
var casa1, casa2: Tcasa; begin try casa1 := TCasa.create; casa2 := nil; if <condicao> then begin casa2 := TCasa.create; end; finally casa1.free; if casa2 <> nil then casa2.free; end; end.
O comando “try…Except…End” serve para tratar erros possíveis e previstos.
Os comandos entre o Try e o Except serão executados se não contiverem erros, caso contrário, o que estiver depois do Except será executado.
Exemplo: Tratar a possibilidade da variável “x” ser ZERO.
var Resultado : integer; try Resultado := 10 div x; except Resultado := 0; end;
O comando “If … Then … Else” especifica a condicional sobre a qual uma declaração será executado.
Sintaxe
If <Expressão1> then <expressão2> else <expressão3>;
Exemplo
var idade:integer; begin idade := pIdade; If (idade < 1) or (idade > 120) then sMensagem := 'Você não está dizendo a verdade.' Else sMensagem := 'Ok!'; end;
O procedimento Case é usado para ramificar um código dependendo do resultado ou valor encontrado neste código.
Sintaxe
Case <expressão> of <valores> else <valor>
Exemplo
var tecla: char; begin tecla := pTexto; Case tecla of 'A': sMensagem := 'Você digitou uma letra'; '0': sMensagem := 'Você digitou um número'; else sMensagem := 'Você digitou um caracter especial'; end; end;
Os procedimentos entre Repeat e until são executados na seqüência enquanto uma condição seja satisfeita.
Sintaxe
Repeat <procedimentos> Until <expressão>;
Exemplo
var a, b : integer; begin b := 1; Repeat a := a + b; sMensagem := IntToStr(a) + IntToStr(b); Until a = 1000; end;
A declaração While controla a execução repetida de uma declaração simples ou composta.
Sintaxe
While <expressão> do <procedimento>.
Exemplo
var a, b : integer; begin b := 1; While a < 1001 Do begin a := a + b; sMensagem := IntToStr(a) + IntToStr(b); end; end;
O bloco “For … Do” é uma declaração que será executada até que a variável de controle seja satisfeita.
Sintaxe
For <variável de controle> := <valor inicial> To ou Downto <valor final> Do <procedimentos>.
Exemplo
var cont, x : integer; begin For cont := 1 To 100 Do begin x := x + cont; sMensagem := IntToStr(x); end; end;
A instrução Goto permite que você salte de onde está no momento para um linha rotulada específica. Um rótulo é definido usando-se a palavra label.
Sintaxe
Goto <rótulo>; Label <rótulo>;
Exemplo
COMANDO “GOTO” NÃO ENCONTRADO
var resp : char; a, b : integer begin b := 1; Label inicio: a := a + b; sMensagem1 := IntToStr(a); sMensagem2 := 'Deseja somar mais um'; resp := sResp; If (resp = 'S' or 's' or 'Y' or 'y') then Goto inicio; end;
Abaixo segue o exemplo de como efetuar uma conexão ADO para acessar uma base de dados Oracle:
“TADOConnection” NÃO ENCONTRADO
var conexao: TADOConnection; begin try conexao := TADOConnection.create(nil); conexao.connectionString := 'Provider=OraOLEDB.Oracle.1;Password=wfs_douglas;User ID=wfs_douglas;Data Source=wfs;'; conexao.loginprompt := false; conexao.connected := true; finally conexao.free; end; end;
Abaixo segue o exemplo de como efetuar uma consulta de banco de dados:
“TADOQueryEx” NÃO ENCONTRADO
var query: TADOQueryEx; begin try query := TADOQueryEx.create(nil); query.connection := conexao; query.setSql( 'select * from wfs_fluxos' ); query.active := true; finally query.free; end; end;
Este tópico descreve e exemplifica o uso de todas as funções utilizadas pelo WFS.
Listagem das funções específicas do WFS.
A função estabelece uma conexão com um sistema cadastrado e que possua uma conexão válida. O parâmetro passado deverá ser exatamente o nome do sistema.
Sintaxe
ConectarDBSistema('RH3');
Exemplo
conexao := ConectarDBSistema('RH3');
Listagem das funções nativas do Delphi e utilizadas no WFS.
A função Abs converte o valor do parâmetro em um valor absoluto, ou seja, um número positivo.
Sintaxe
Abs(Valor);
Exemplo
var Vl : integer; begin Vl := Abs(-15); //Converte valores negativos para positivo sMensagem := IntToStr(Vl); end;
Função utilizada para comparação entre strings. Esta função é case-sensitive.
Sintaxe
AnsiCompareStr(const S1, S2: string): Integer;
Exemplo
var strTexto, strTextoIgual, strTextoDiferente : string; begin strTexto := 'Compara duas strings'; strTextoIgual := 'Compara duas strings'; strTextoDiferente := 'String diferente'; if AnsiCompareStr(strTexto,strTextoIgual) = 0 then sMensagem := 'As strings são iguais' else sMensagem := 'As strings são diferentes'; if AnsiCompareStr(strTexto,strTextoDiferente) = 0 then sMensagem := 'As strings são iguais' else sMensagem := 'As strings são diferentes'; end;
Função utilizada para comparação entre Strings. Esta função NÃO é case-sensitive.
Sintaxe
AnsiCompareText(const S1, S2: string): Integer;
Exemplo
var strTexto, strTextoIgual, strTextoDiferente : string; begin strTexto := 'Compara duas strings'; strTextoIgual := 'Compara duas strings'; strTextoDiferente := 'String diferente'; if AnsiCompareText(strTexto,strTextoIgual) = 0 then sMensagem := 'As strings são iguais' else sMensagem := 'As strings são diferentes'; if AnsiCompareText(strTexto,strTextoDiferente) = 0 then sMensagem := 'As strings são iguais' else sMensagem := 'As strings são diferentes'; end;
Converte todos os caracteres de uma string para minúsculo.
Sintaxe
AnsiLowerCase(const S: string): string;
Exemplo
var X: string; Begin X := sValor; sMensagem := AnsiLowerCase(X); { Label1 ficará tudo em letras minúsculas } end;
Converte todos os caracteres de uma string para maiúsculo.
Sintaxe
AnsiUpperCase(const S: string): string;
Exemplo
var X: String; Begin X := sValor; sMensagem := AnsiUpperCase(X); { Label1 ficará tudo em letras maiúsculas } end;
Insere um registro no final do arquivo.
Sintaxe
Append(var FileHandle: TextFile);
Exemplo
“Não permite o uso do comando readln com 2 parãmetros”
var myFile : TextFile; text : string; begin AssignFile(myFile, 'Test.txt'); ReWrite(myFile); WriteLn(myFile, 'Hello'); WriteLn(myFile, 'World'); CloseFile(myFile); Append(myFile); WriteLn(myFile, 'Final line added'); CloseFile(myFile); Reset(myFile); while not Eof(myFile) do begin ReadLn(myFile, text); sMensagem := text; end; CloseFile(myFile); end;
É uma função matemática que dá o valor em radianos do arco tangente.
Sintaxe
ArcTan(const Number: Extended): Extended;
Exemplo
var float : single; begin float := ArcTan(PI/2); sMensagem := 'ArcTan of PI/2 = '+FloatToStr(float); end;
A função Assigned verifica se a referência não é nula. Ela retorna True se não for nula, e False se for nula.
Utilização de uma referência Nil irá resultar em uma excepção.
As três versões do Assigned permitem a função de trabalhar com ponteiros de dados, referências a objetos e referências método de classe.
Sintaxe
Assigned(PointerName: Pointer ): Boolean; Assigned(ObjectName: TObject ): Boolean; Assigned(MethodName: Method ): Boolean;
Exemplo
var myPtr : PChar; begin if Assigned(myPtr) then sMensagem := 'myPtr is not nil' else sMensagem := 'myPtr is nil'; myPtr := Nil; if Assigned(myPtr) then sMensagem := 'myPtr is still not nil' else sMensagem := 'myPtr is nil'; end;
O procedimento AssignFile atribui um valor a FileHandle para um nome de arquivo, em preparação para a leitura ou escrita para esse arquivo.
Assinatura 1
Toma um tipo de variável arquivo de texto como a alça. O arquivo é tratado como um arquivo de texto quando aberto.
Se o nome do arquivo é uma string vazia, então o acesso aos arquivos é feito para os fluxos de entrada e de saída padrão do console.
Assinatura 2
Toma um tipo de variável arquivo binário como a alça. O arquivo é tratado como um arquivo binário.
Em ambos os casos, quando o arquivo é aberto por Append, Reset ou ReWrite, presume-se a estar no diretório atual.
Sintaxe
AssignFile (var FileHandle: TextFile; const FileName: string); AssignFile (var FileHandle: File; const FileName: string);
Exemplo
var myFile : TextFile; text : string; begin AssignFile(myFile, 'Test.txt'); ReWrite(myFile); WriteLn(myFile, 'Hello'); WriteLn(myFile, 'World'); CloseFile(myFile); Reset(myFile); while not Eof(myFile) do begin ReadLn(myFile, text); sMensagem := text; end; CloseFile(myFile); end;
O procedimento Chdir configura o “drive + caminho” de trabalho para o diretório fornecido. Se o diretório for inválido, retornará o erro ElnOutError e o diretório permanecerá inalterada.
Sintaxe
Chdir(const Directory: string );
Exemplo
var directory : string; begin GetDir(2, directory); sMensagem := 'Default C drive directory = '+directory; Chdir(directory); GetDir(2, directory); sMensagem := 'Default C drive directory = '+directory; Chdir('C:Bad/Path/Value'); GetDir(2, directory); sMensagem := 'Default C drive directory = '+directory; end;
Converte um inteiro em caractere.
Sintaxe
Chr(IntValue: Integer): AnsiChar; Chr(IntValue: Integer): WideChar;
Exemplo
var tab : char; crlf : string; begin tab := Chr(9); crlf := Chr(13)+Chr(10); sMensagem := 'Hello'+tab+'World'; sMensagem := 'Hello'+crlf+'World'; tab := ^I; // I = 9th capital of the alphabet crlf := ^M^J; // M = 13th, J = 10th letters sMensagem := 'Hello'+tab+'World'; sMensagem := 'Hello'+crlf+'World'; end;
Fecha um arquivo aberto.
Sintaxe
CloseFile(var F);
Exemplo
var F: TextFile; begin AssignFile(F, 'C:\TEM\ARQUIVO.TXT'); Reset(F); sMensagem := IntToStr(FileSize(F)); CloseFile(F); { Fecha o arquivo } end;
Compara duas Strings para ver qual é a maior. Leva em consideração o Case-sensitive.
Sintaxe
CompareStr(const FirstString, SecondString: string): Integer;
Exemplo
Compara duas strings para ver qual é a maior. Não levando em consideração o Case-sensitive.
Sintaxe
CompareText(const String1, String2: string): Integer;
Exemplo
Faz a cópia de parte de uma String ou Array.
Sintaxe
Copy(Source: string; StartChar, Count: Integer): string; Copy(Source: array; StartIndex, Count: Integer): array;
Exemplo 1
var Source, Target : string; begin Source := '12345678'; Target := Copy(Source, 3, 4); sMensagem := 'Target : '+Target; end;
Exemplo 2
var i : Integer; Source, Target : array of Integer; begin for i := 1 to 8 do Source[i-1] := i; Target := Copy(Source, 3, 4); for i := 0 to Length(Target) -1 do sMensagem := 'Target['+IntToStr(i)+'] : '+IntToStr(Target[i]); end;
Função matemática para recuperar o Cosseno de um número.
Sintaxe
Cos(const Number: Extended): Extended;
Exemplo
var float : single; begin float := Cos(PI/3); sMensagem := 'Cos(PI/3) = '+FloatToStr(float); end;
Sintaxe
Exemplo
Retorna a data atual.
Sintaxe
Date : TDateTime;
Exemplo
begin sMensagem := 'Yesterday = '+DateToStr(Yesterday); sMensagem := 'Today = '+DateToStr(Date); sMensagem := 'Tomorrow = '+DateToStr(Tomorrow); sMensagem := 'Today''s time = '+TimeToStr(Date); end;
Converte os valores de data e hora TDateTime para uma string.
Sintaxe
DateTimeToStr(DateTime: TDateTime): string; DateTimeToStr(DateTime: TDateTime; const FormatSettings: TFormatSettings): string;
Exemplo
var myDate : TDateTime; begin myDate := StrToDateTime('09/02/2002 12:00'); sMensagem := 'Middle of a day = '+DateTimeToStr(myDate); myDate := StrToDateTime('09/02/2002 00:00'); sMensagem := 'Start of a day = '+DateTimeToStr(myDate); end;
Converte um valor de data TDateTime para uma string.
Sintaxe
DateToStr(Date: TDateTime): string; DateToStr(Date: TDateTime; const FormatSettings: TFormatSettings): string;
Exemplo
var myDate : TDateTime; begin myDate := StrToDate('13/02/2002'); sMensagem := 'myDate = '+DateToStr(myDate); end;
Retorna o índice de um dia da semana.
Sintaxe
DayOfWeek(Date: TDateTime): Integer;
Exemplo
var myDate : TDateTime; day : string; begin myDate := EncodeDate(2002, 12, 31); day := LongDayNames[DayOfWeek(myDate)]; sMensagem := 'Christmas day 2002 is on a '+day; end;
Diminui o valor de uma variável ordinal.
Sintaxe
Dec(var Variable: Ordinal variable); Dec(var Variable: Ordinal variable; Count: Integer );
Exemplo
var Character : char; Number : Integer; Card : TSuit; begin Character := 'B'; sMensagem := 'Character : '+Character; Dec(Character); sMensagem := 'Character-1 : '+Character; Number := 23; sMensagem := 'Number : '+IntToStr(Number); Dec(Number, 5); sMensagem := 'Number-5 : '+IntToStr(Number); Card := Clubs; sMensagem := 'Card starts at Clubs'; Dec(Card); if Card = Hearts then sMensagem := 'Card is now Hearts'; if Card = Clubs then sMensagem := 'Card is now Clubs'; if Card = Diamonds then sMensagem := 'Card is now Diamonds'; if Card = Spades then sMensagem := 'Card is now Spades'; end;
Extrai o ano, mês, dia a partir de um TDateTime.
Sintaxe
DecodeDate(const SourceDate: TDateTime; out Year, Month, Day: Word);
Exemplo
var myDate : TDateTime; myYear, myMonth, myDay : Word; begin myDate := StrToDate('29/12/2000'); DecodeDate(myDate, myYear, myMonth, myDay); sMensagem := 'myDate now = '+DateToStr(myDate); sMensagem := 'myDay = '+IntToStr(myDay); sMensagem := 'myMonth = '+IntToStr(myMonth); sMensagem := 'myYear = '+IntToStr(myYear); end;
Divide um TDateTime em valores de tempo individuais (Hora, minuto, segundo e milissegundos).
Sintaxe
DecodeTime(const SourceDateTime: TDateTime; out Hour, Min, Sec, MSec: Word);
Exemplo
var myDate : TDateTime; myHour, myMin, mySec, myMilli : Word; begin myDate := StrToDateTime('29/12/2000 12:45:12.34'); DecodeTime(myDate, myHour, myMin, mySec, myMilli); sMensagem := 'Time now = '+TimeToStr(myDate); sMensagem := 'Hour = '+IntToStr(myHour); sMensagem := 'Minute = '+IntToStr(myMin); sMensagem := 'Second = '+IntToStr(mySec); sMensagem := 'MilliSec = '+IntToStr(myMilli); end;
Excluir uma seção de caracteres de uma string.
Sintaxe
Delete(var Source: string; StartChar: Integer; Count: Integer);
Exemplo
var Source : string; begin Source := '12345678'; Delete(Source, 3, 4); sMensagem := 'Source now : '+Source; end;
Construir um valor TDateTime passando como parâmetro: ano, mês e dia.
Sintaxe
EncodeDate(const Year, Month, Day: Word ): TDateTime;
Exemplo
var myDate : TDateTime; begin myDate := EncodeDate(2000, 02, 29); LongTimeFormat := 'hh:mm:ss.zzz'; sMensagem := 'Date set to '+DateToStr(myDate); sMensagem := 'Time set to '+TimeToStr(myDate); end;
Criar um valor TDateTime passando como parâmetro: hora, min, segundo e milissegundos.
Sintaxe
EncodeTime(const Hour, Min, Sec, MSec: Word): TDateTime;
Exemplo
var myDate : TDateTime; begin myDate := EncodeTime(12, 34, 56, 789); LongTimeFormat := 'hh:mm:ss.z'; sMensagem := 'Date set to '+DateToStr(myDate); sMensagem := 'Time set to '+TimeToStr(myDate); end;
Retorna um valor lógico se fim de arquivo.
Sintaxe
Eof(var F): Boolean;
Exemplo
var F1, F2: TextFile; Ch: Char; begin AssignFile(F1, 'c:\temp\arquivo.txt'); Reset(F1); AssignFile(F2, 'c:\temp\arquivo.txt'); Rewrite(F2); While not Eof(F1) Do begin Read(F1, Ch); Write(F2, Ch); end; CloseFile(F2); CloseFile(F1); end;
Retorna o expoente de um número.
Sintaxe
Exp(Number: Extended): Extended;
Exemplo
var float : Double; begin float := Ln(2); sMensagem := 'Ln(2) = '+FloatToStr(float); float := Exp(float); sMensagem := 'Exp(Ln(2)) = '+FloatToStr(float); end;
Retorna a posição de um arquivo de texto ou binário.
Sintaxe
FilePos(var FileHandle: File;): LongInt; FilePos(var FileHandle: TextFile;);
Exemplo
var myWord, myWord1, myWord2, myWord3 : Word; myFile : File of Word; begin AssignFile(myFile, 'Test.cus'); ReWrite(myFile); myWord1 := 123; myWord2 := 456; myWord3 := 789; Write(myFile, myWord1, myWord2, myWord3); CloseFile(myFile); FileMode := fmOpenRead; Reset(myFile); while not Eof(myFile) do begin Read(myFile, myWord); sMensagem := 'Record '+ IntToStr(FilePos(myFile))+' = '+ IntToStr(myWord); end; CloseFile(myFile); end;
Retorna a quantidade de registros de um arquivo aberto.
Sintaxe
FileSize(var FileHandle: File;): Integer;
Exemplo
var myWord, myWord1, myWord2, myWord3 : Word; myFile : File of Word; begin AssignFile(myFile, 'Test.cus'); ReWrite(myFile); sMensagem := 'File size = '+IntToStr(FileSize(myFile)); myWord1 := 123; myWord2 := 456; myWord3 := 789; Write(myFile, myWord1, myWord2, myWord3); sMensagem := 'File size now = '+IntToStr(FileSize(myFile)); CloseFile(myFile); end;
Converter um valor de ponto flutuante para uma string.
Sintaxe
FloatToStr(Value: Extended): string; FloatToStr(Value: Extended; const FormatSettings: TFormatSettings): string;
Exemplo
var amount1, amount2, amount3 : Extended; begin amount1 := 1234567890.123456789; amount2 := 1234567890123456.123; amount3 := 1E100; sMensagem := 'Amount1 = '+FloatToStr(amount1); sMensagem := 'Amount2 = '+FloatToStr(amount2); sMensagem := 'Amount3 = '+FloatToStr(amount3); end;
Efetua a formatação de números e texto em uma string.
Sintaxe
Format(Const Formatting: string; Const Data: array of const): string; Format(Const Formatting: string; Const Data: array of const; FormatSettings: TFormatSettings): string;
Exemplo
var text : string; begin sMensagem := Format('%s', ['Hello'])); sMensagem := Format('String = %s', ['Hello'])); sMensagem := Format('Decimal = %d', [-123]); sMensagem := Format('Exponent = %e', [12345.678]); sMensagem := Format('Fixed = %f', [12345.678]); sMensagem := Format('General = %g', [12345.678]); sMensagem := Format('Number = %n', [12345.678]); sMensagem := Format('Money = %m', [12345.678]); sMensagem := Format('Pointer = %p', [addr(text)]); sMensagem := Format('String = %s', ['Hello']); sMensagem := Format('Unsigned decimal = %u', [123]); sMensagem := Format('Hexadecimal = %x', [140]); end;
Transforma uma data em string.
Sintaxe
FormatDateTime(const Formatting: string; DateTime: TDateTime): string; FormatDateTime(const Formatting: string; DateTime: TDateTime; const FormatSettings: TFormatSettings): string;
Exemplo
var myDate : TDateTime; begin myDate := StrToDateTime('10/10/2014'); sMensagem := ' d/m/y = '+ FormatDateTime('d/m/y', myDate); sMensagem := ' dd/mm/yy = '+ FormatDateTime('dd/mm/yy', myDate); sMensagem := ' ddd d of mmm yyyy = '+ FormatDateTime('ddd d of mmm yyyy', myDate); sMensagem := 'dddd d of mmmm yyyy = '+ FormatDateTime('dddd d of mmmm yyyy', myDate); sMensagem := ' ddddd = '+ FormatDateTime('ddddd', myDate); sMensagem := ' dddddd = '+ FormatDateTime('dddddd', myDate); sMensagem := ' c = '+ FormatDateTime('c', myDate); end;
Transforma um número de ponto flutuante em uma string.
Sintaxe
FormatFloat(const Formatting: string; Value: Extended): string; FormatFloat(const Formatting: string; Value: Extended; FormatSettings: TFormatSettings): string;
Exemplo
var float : extended; begin float := 1234.567; sMensagem := '##### : '+FormatFloat('#####', float); sMensagem := '00000 : '+FormatFloat('00000', float); sMensagem := '0 : '+FormatFloat('0' , float); sMensagem := '#,##0 : '+FormatFloat('#,##0', float); sMensagem := ',0 : '+FormatFloat(',0' , float); sMensagem := '0.#### : '+FormatFloat('0.####', float); sMensagem := '0.0000 : '+FormatFloat('0.0000', float); sMensagem := '0.0000000E+00 : '+FormatFloat('0.0000000E+00', float); sMensagem := '0.0000000E-00 : '+FormatFloat('0.0000000E-00', float); sMensagem := '#.#######E-## : '+FormatFloat('#.#######E-##', float); sMensagem := '"Value = "0.0 : '+FormatFloat('"Value = "0.0', float); sMensagem := '0.0 : '+FormatFloat('0.0' , -1234.567); sMensagem := '0.0 "CR";0.0 "DB" : '+ FormatFloat('0.0 "CR";0.0 "DB"', -1234.567); sMensagem := '0.0 "CR";0.0 "DB" : '+ FormatFloat('0.0 "CR";0.0 "DB"', 1234.567); sMensagem := '0.0 : '+FormatFloat('0.0' , 0.0); sMensagem := '0.0;-0.0;"Nothing" : '+ FormatFloat('0.0;-0.0;"Nothing"', 0.0); end;
Retornas a parte fracionária de um número de ponto flutuante.
Sintaxe
Frac(const Number: Extended): Extended;
Exemplo
begin sMensagem := 'Round(12.75) = '+IntToStr(Round(12.75)); sMensagem := 'Trunc(12.75) = '+IntToStr(Trunc(12.75)); sMensagem := ' Int(12.75) = '+FloatToStr(Int(12.75)); sMensagem := ' Frac(12.75) = '+FloatToStr(Frac(12.75)); end;
Sintaxe
Exemplo
Retorna o maior valor de um tipo ou variável.
Sintaxe
High(type or variable): Ordinal type;
Exemplo
var myChar : TChar; myArray : TArray; myEnum : TEnum; myShort : TShort; begin sMensagem := 'High(TChar) = '+IntToStr(Ord(High(TChar))); sMensagem := 'High(myChar) = '+IntToStr(Ord(High(myChar))); sMensagem := 'High(TArray) = '+IntToStr(High(TArray)); sMensagem := 'High(myArray) = '+IntToStr(High(myArray)); sMensagem := 'High(TEnum) = '+IntToStr(Ord(High(TEnum))); sMensagem := 'High(myEnum) = '+IntToStr(Ord(High(myEnum))); sMensagem := 'High(TShort) = '+IntToStr(Ord(High(TShort))); sMensagem := 'High(myShort) = '+IntToStr(Ord(High(myShort))); end;
Incrementa uma variável ordinal.
Sintaxe
Inc(var Variable: Ordinal variable ) ; Inc(var Variable: Ordinal variable; Count: Integer);
Exemplo
var Character : char; Number : Integer; Card : TSuit; begin Character := 'A'; sMensagem := 'Character : '+Character; Inc(Character); sMensagem := 'Character+1 : '+Character; Number := 23; sMensagem := 'Number : '+IntToStr(Number); Inc(Number, 5); sMensagem := 'Number+5 : '+IntToStr(Number); Card := Clubs; sMensagem := 'Card starts at Clubs'; Inc(Card); if Card = Hearts then sMensagem := 'Card is now Hearts'; if Card = Clubs then sMensagem := 'Card is now Clubs'; if Card = Diamonds then sMensagem := 'Card is now Diamonds'; if Card = Spades then sMensagem := 'Card is now Spades'; end;
Incrementa um certo número de meses em uma variável TDateTime.
Sintaxe
IncMonth(const StartDate: TDateTime {; NumberOfMonths : Integer = 1} ): TDateTime;
Exemplo
var myDate : TDateTime; begin myDate := StrToDate('31/01/2000'); sMensagem := 'myDate = '+DateToStr(myDate); myDate := IncMonth(myDate); sMensagem := 'myDate + 1 month = '+DateToStr(myDate); myDate := IncMonth(myDate, 12); sMensagem := 'myDate + 12 months = '+DateToStr(myDate); end;
Exibir uma caixa de diálogo que pede ao usuário para informar um texto.
Sintaxe
InputQuery(const Caption, Prompt: string; var UserValue: string): Boolean;
Exemplo
var value : string; begin repeat if not InputQuery('Test program', 'Please type your name', value) then sMensagem := 'User cancelled the dialog'; until value <> ''; sMensagem := 'Hello '+value; end;
Insira uma string em outra string.
Sintaxe
Insert(const InsertStr: string; var TargetStr: string; Position: Integer);
Exemplo
var Target : string; begin Target := '12345678'; Insert('-+-', Target, 3); sMensagem := 'Target : '+Target; end;
Retorna a parte inteira de um argumento.
Sintaxe
Int(X: Real): Real;
Exemplo
var R: Real; begin R := Int(123.456); { Mostra “123.0” } R := Int(-123.456); { Mostra “-123.0” } end;
Sintaxe
Exemplo
Converter um número inteiro em uma string hexadecimal.
Sintaxe
IntToHex(DecimalValue: Integer; MinimumWidth: Integer): string;
Exemplo
begin sMensagem := '1234 decimal = '+IntToHex(1234, 1); sMensagem := '1234 decimal = '+IntToHex(1234, 8); end;
Converter um número inteiro em uma string.
Sintaxe
IntToStr(Number: Integer): string; IntToStr(BigNumber: Int64): string;
Exemplo
var NormalInteger : Integer; BigInteger : Int64; begin NormalInteger := 2147483647; BigInteger := 9223372036854775807; sMensagem := 'NormalInteger : '+IntToStr(NormalInteger); sMensagem := 'BigInteger : '+IntToStr(BigInteger); sMensagem := 'Calculated number : '+IntToStr(27 * 4); end;
Retorna true se um determinado ano civil é um ano bissexto.
Sintaxe
IsLeapYear(const Year: Word): Boolean;
Exemplo
begin if IsLeapYear(2000) then sMensagem := '2000 was a leap year' else sMensagem := '2000 was not a leap year'; end;
Sintaxe
Exemplo
Retorna o número de elementos de um Array ou string.
Sintaxe
Length(const SourceString: string): Integer; Length(const SourceArray: array): Integer;
Exemplo
var openArray : array of char; fixedArray : array[2..4] of Integer; multiArray : array[2..4, 1..9] of Integer; shortStr : shortstring; longStr : string; i : Integer; begin SetLength(openArray, 17); sMensagem := 'Length of openArray = '+IntToStr(Length(openArray)); sMensagem := 'Length of fixedArray = '+IntToStr(Length(fixedArray)); sMensagem := 'Length of multiArray = '+IntToStr(Length(multiArray)); shortStr := 'ABCDEFGH'; longStr := '12345678901234567890'; sMensagem := 'Length of shortStr = '+IntToStr(Length(shortStr)); sMensagem := 'Length of longStr = '+IntToStr(Length(longStr)); for i := 1 to Length(shortStr) do sMensagem := 'Letter '+IntToStr(i)+' = '+shortStr[i]; end;
Retorna o logaritmo natural de um número.
Sintaxe
Ln(Number: Extended): Extended;
Exemplo
var float : Double; begin float := Ln(2); sMensagem := 'Ln(2) = '+FloatToStr(float); float := Exp(float); sMensagem := 'Exp(Ln(2)) = '+FloatToStr(float); end;
Retorna o menor valor de um tipo ou variável.
Sintaxe
Low(type or variable): Ordinal type;
Exemplo
var myChar : TChar; myArray : TArray; myEnum : TEnum; myShort : TShort; begin sMensagem := 'Low(TChar) = '+IntToStr(Ord(Low(TChar))); sMensagem := 'Low(myChar) = '+IntToStr(Ord(Low(myChar))); sMensagem := 'Low(TArray) = '+IntToStr(Low(TArray)); sMensagem := 'Low(myArray) = '+IntToStr(Low(myArray)); sMensagem := 'High(myArray) = '+IntToStr(High(myArray)); sMensagem := 'Low(TEnum) = '+IntToStr(Ord(Low(TEnum))); sMensagem := 'Low(myEnum) = '+IntToStr(Ord(Low(myEnum))); sMensagem := 'High(myEnum) = '+IntToStr(Ord(High(myEnum))); sMensagem := 'Low(TShort) = '+IntToStr(Ord(Low(TShort))); sMensagem := 'Low(myShort) = '+IntToStr(Ord(Low(myShort))); end;
Coloca todos os caracteres de uma string em minúsculo.
Sintaxe
LowerCase(const MixedString: string ): string;
Exemplo
Sintaxe
Exemplo
Retorna a data e hora corrente;
Sintaxe
Now: TDateTime;
Exemplo
var pTexto: string; begin pTexto := 'A data e hora é ' + DateTimeToStr(Now); { Mostra a hora e data } end;
Testa se um número inteiro tem um valor ímpar.
Sintaxe
Odd(Number: Integer | Int64 ): Boolean;
Exemplo
var i : Integer; begin for i := 1 to 9 do if Odd(i) then sMensagem := IntToStr(i); end;
Fornece o valor ordinal de um número inteiro, character ou enum.
Sintaxe
Ord(Arg: AnsiChar | Char | WideChar | Enumeration | Integer ): Integer; Ord(Arg: Int64 ): Int64;
Exemplo
var A : AnsiChar; C : Char; W : WideChar; E : Boolean; I : Integer; I64 : Int64; begin A := 'A'; C := 'C'; W := 'W'; E := True; I := 22; I64 := 64; sMensagem := 'A = '+IntToStr(Ord(A)); sMensagem := 'C = '+IntToStr(Ord(C)); sMensagem := 'W = '+IntToStr(Ord(W)); sMensagem := 'E = '+IntToStr(Ord(E)); sMensagem := 'I = '+IntToStr(Ord(I)); sMensagem := 'I64 = '+IntToStr(Ord(I64)); end;
Encontre a posição de uma string em outra.
Sintaxe
Pos(const Needle, HayStack: string ): Integer;
Exemplo
Levantar uma exceção.
Sintaxe
Raise Raise Object reference Raise Object reference At Address pointer
Exemplo 1
var fred, jim : string; begin fred := 'Good name'; jim := 'Badname '; try sMensagem := fred+' swapped = '+SwapNames(fred); sMensagem := jim+' swapped = '+SwapNames(jim); except On E : Exception do sMensagem := E.Message; end; end;
var blankPos : Integer; i : Integer; nameLen : Integer; begin Result := ''; blankPos := Pos(' ', name); nameLen := Length(name); if (blankPos > 0) and (blankPos < nameLen) then begin i := blankPos + 1; repeat if name[i] <> ' ' then Result := Copy(name, i, nameLen-i+1) + ' ' + Copy(name, 1, blankPos-1) else Inc(i); until (i > nameLen) or (Length(Result) > 0); end; if Length(Result) = 0 then Raise Exception.CreateFmt('Invalid name : ''%s''', [name]); end;
Exemplo 2
var age : Integer; exc : EBadAge; begin age := 23; if age < 30 then begin exc := EBadAge.CreateFmt('Bad age : %d',[age]); Raise exc; end; end;
Gerar um ponto de flutuação aleatória ou número inteiro.
Sintaxe
Random : Extended; Random (LimitPlusOne: Integer): Integer;
Exemplo
var float : single; int : Integer; i : Integer; begin for i := 1 to 5 do begin float := Random; sMensagem := 'float = '+FloatToStr(float); end; for i := 1 to 5 do begin int := 1 + Random(100); sMensagem := 'int = '+IntToStr(int); end; end;
Leia uma linha completa de dados a partir de um arquivo de texto.
Sintaxe
ReadLn(var Variable1 {,var Variable2...} ); ReadLn(var FileHandle: TextFile; var Variable1 {,var Variable2...} ) ;
Exemplo
var myFile : TextFile; n1, n2, n3 : Integer; begin AssignFile(myFile, 'Test.txt'); ReWrite(myFile); WriteLn(myFile, '1 2 3 4'); // Note that the 4 will be ignored WriteLn(myFile, 5, ' ', 6, ' ', 7); WriteLn(myFile, '8 9'); // Missing numbers will be seen as 0 CloseFile(myFile); Reset(myFile); while not Eof(myFile) do begin ReadLn(myFile, n1, n2, n3); sMensagem := IntToStr(n1)+' '+ IntToStr(n2)+' '+ IntToStr(n3); end; CloseFile(myFile); end;
Abre um arquivo de texto para leitura, ou um arquivo binário para leitura / escrita.
Sintaxe
Reset(var FileHandle: TextFile); Reset(var FileHandle: File {RecordSize);
Exemplo
var myFile : TextFile; text : string; begin AssignFile(myFile, 'Test.txt'); ReWrite(myFile); WriteLn(myFile, 'Hello'); WriteLn(myFile, 'World'); CloseFile(myFile); FileMode := fmOpenRead; Reset(myFile); while not Eof(myFile) do begin ReadLn(myFile, text); sMensagem := text; end; CloseFile(myFile); end;
Abra um arquivo de texto ou binário com acesso de gravação.
Sintaxe
Rewrite(var FileHandle: TextFile); Rewrite(var FileHandle: File {RecordSize );
Exemplo
var myFile : TextFile; text : string; begin AssignFile(myFile, 'Test.txt'); Rewrite(myFile); WriteLn(myFile, 'Hello'); WriteLn(myFile, 'World'); CloseFile(myFile); Reset(myFile); while not Eof(myFile) do begin ReadLn(myFile, text); sMensagem := text; end; CloseFile(myFile); end;
Arredonda um número de ponto flutuante para um inteiro.
Sintaxe
Round(const Number: Extended): Int64;
Exemplo
begin sMensagem := 'Round(12.75) = '+IntToStr(Round(12.75)); sMensagem := 'Trunc(12.75) = '+IntToStr(Trunc(12.75)); sMensagem := 'Int(12.75) = '+FloatToStr(Int(12.75)); sMensagem := 'Frac(12.75) = '+FloatToStr(Frac(12.75)); end;
Sintaxe
Exemplo
Sintaxe
Exemplo
O seno de um número.
Sintaxe
Sin(const Number: Extended): Extended;
Exemplo
var float : single; begin float := Sin(PI/6); sMensagem := 'Sin(PI/6) = '+FloatToStr(float); end;
Retorna um número ao quadrado.
Sintaxe
Sqr(X: Real): (Real);
Exemplo
var S, Temp: String; begin FloatoStr(Sqr(5.0):2:1, Temp); { Retorna 25.0 } S := '5 ao quadrado é ' + Temp; sMensagem := S; end;
Retorna a raiz quadrada de um número.
Sintaxe
Sqrt(Number: Extended): Extended;
Exemplo
var number, squareRoot : Extended; begin number := 225; squareRoot := Sqrt(number); sMensagem := 'Square root of ' + number + ' = ' squareRoot; number := 3.456; squareRoot := Sqrt(number); sMensagem := 'Square root of ' + number + ' = ' squareRoot; number := Infinity; number := Sqrt(number); sMensagem := 'Square root of Infinity = ' + number; end;
Converte uma string de data em um valor TDateTime.
Sintaxe
StrToDate(const Date: string): TDateTime; StrToDate(const Date: string; const FormatSettings: TFormatSettings): TDateTime;
Exemplo
var myDate : TDateTime; begin myDate := StrToDate('15/03/75'); sMensagem := '15/03/75 = '+DateTimeToStr(myDate); myDate := StrToDate('01/01/2075'); sMensagem := '01/01/2075 = '+DateTimeToStr(myDate); end;
Converte uma string de “data + hora” em um valor TDateTime.
Sintaxe
StrToDateTime(const DateTime: string): TDateTime; StrToDateTime(const DateTime: string; const FormatSettings: TFormatSettings): TDateTime;
Exemplo
var myDateTime : TDateTime; begin myDateTime := StrToDateTime('23/02/75 12'); sMensagem := '23/02/75 12 = '+DateTimeToStr(myDateTime); myDateTime := StrToDateTime('23/02/2075 12:34:56'); sMensagem := '23/02/2075 12:34:56 = '+DateTimeToStr(myDateTime); end;
Converter uma string de número em um valor de ponto flutuante.
Sintaxe
StrToFloat(FloatString: string): Extended; StrToFloat(FloatString: string; const FormatSettings: TFormatSettings): Extended;
Exemplo 1
var stringValue : string; floatValue : Extended; begin stringValue := '123.456E+002'; floatValue := StrToFloat(stringValue); sMensagem := stringValue+' = '+FloatToStr(floatValue); end;
Exemplo 2
var A : Extended; begin try A := StrToFloat('10 E 2'); // Middle blanks are not supported except sMensagem := 'Erro de conversão'; end; try A := StrToFloat('$FF'); // Hexadecimal values are not supported except sMensagem := 'Erro de conversão'; end; end;
Converter uma string de número inteiro num valor inteiro.
Sintaxe
StrToInt(IntegerString: string): Integer;
Exemplo
var A, B, C, D, E, F : Integer; begin A := 32; B := StrToInt('100'); C := StrToInt(' -12'); D := StrToInt('$1E'); E := StrToInt('-0x1E'); F := A + B + C + D + E; sMensagem := 'A : '+IntToStr(A); sMensagem := 'B : '+IntToStr(B); sMensagem := 'C : '+IntToStr(C); sMensagem := 'D : '+IntToStr(D); sMensagem := 'E : '+IntToStr(E); sMensagem := 'F : '+IntToStr(F); end;
Converte uma string em um valor inteiro com valor padrão no caso de algum problema na conversão.
Sintaxe
StrToIntDef(const IntegerString: string; Default: Integer): Integer;
Exemplo 1
var A, B, C, D, E, F : Integer; begin A := 32; B := StrToIntDef('100', 0); C := StrToIntDef(' -12', 0); D := StrToIntDef('$1E', 0); E := StrToIntDef('-0x1E', 0); F := A + B + C + D + E; sMensagem := 'A : '+IntToStr(A); sMensagem := 'B : '+IntToStr(B); sMensagem := 'C : '+IntToStr(C); sMensagem := 'D : '+IntToStr(D); sMensagem := 'E : '+IntToStr(E); sMensagem := 'F : '+IntToStr(F); end;
Exemplo 2
var A : Integer; begin A := StrToIntDef('100 ', 55); sMensagem := 'Value = '+IntToStr(A); A := StrToIntDef('$FG' , 66); sMensagem := 'Value = '+IntToStr(A); end;
Converte uma string de hora em um valor TDateTime.
Sintaxe
StrToTime(const Time: string): TDateTime; StrToTime(const Time: string; const FormatSettings: TFormatSettings): TDateTime;
Exemplo
var myTime : TDateTime; begin myTime := StrToTime('3PM'); sMensagem := '3PM = '+TimeToStr(mytime); myTime := StrToTime('15'); sMensagem := '15 = '+TimeToStr(mytime); myTime := StrToTime('15:03'); sMensagem := '15:03 = '+TimeToStr(mytime); myTime := StrToTime('15:03:45'); sMensagem := '15:03:45 = '+TimeToStr(mytime); end;
Retorna a hora atual.
Sintaxe
Time: TDateTime;
Exemplo
var today : TDateTime; begin today := Time; ShowMessage('today has date = '+DateToStr(today)); ShowMessage('today has time = '+TimeToStr(today)); end;
Converte um valor de tempo TDateTime para uma string.
Sintaxe
TimeToStr(Time: TDateTime): string; TimeToStr(Time: TDateTime; const FormatSettings: TFormatSettings): string;
Exemplo
var myTime : TDateTime; begin myTime := StrToTime('15:22:35'); sMensagem := 'myTime = '+TimeToStr(myTime); end;
Remove os espaços em branco iniciais e finais de uma string.
Sintaxe
Trim(const Text: String): String; Trim(const Text: WideString): WideString;
Exemplo
const PaddedString = ' Letters '; begin sMensagem := '[' + TrimLeft(PaddedString) + ']'; sMensagem := '[' + TrimRight(PaddedString) + ']'; sMensagem := '[' + Trim(PaddedString) + ']'; end;
Remove espaços em branco à esquerda de uma string.
Sintaxe
TrimLeft(const Text: String): String; TrimLeft(const Text: WideString): WideString;
Exemplo
const PaddedString = ' Letters '; begin sMensagem := '[' + TrimLeft(PaddedString) + ']'; sMensagem := '[' + TrimRight(PaddedString) + ']'; sMensagem := '[' + Trim(PaddedString) + ']'; end;
Remove espaços em branco finais de uma string.
Sintaxe
TrimRight(const Text: String): String; TrimRight(const Text: WideString): WideString;
Exemplo
const PaddedString = ' Letters '; begin sMensagem := '[' + TrimLeft(PaddedString) + ']'; sMensagem := '[' + TrimRight(PaddedString) + ']'; sMensagem := '[' + Trim(PaddedString) + ']'; end;
Retorna a parte inteira de um número de ponto flutuante.
Sintaxe
Trunc(const Number: Extended): Integer;
Exemplo
begin sMensagem := 'Round(12.75) = '+IntToStr(Round(12.75)); sMensagem := 'Trunc(12.75) = '+IntToStr(Trunc(12.75)); sMensagem := ' Int(12.75) = '+FloatToStr(Int(12.75)); sMensagem := 'Frac(12.75) = '+FloatToStr(Frac(12.75)); end;
Substituir os caracteres minúsculos em maiúsculos em uma string.
Sintaxe
UpperCase(const MixedString: string): string;
Exemplo
Sintaxe
Exemplo
Sintaxe
Exemplo
Sintaxe
Exemplo
Sintaxe
Exemplo
Sintaxe
Exemplo
Gravar dados em um arquivo de texto ou binário.
Sintaxe
Write(Expression1 {options} {, Expression2 {options} ...} ); Write(var FileHandle: TextFile; Expression1 {options} {, Expression2 {options} ...} ); Write(var FileHandle: File; var Value1 {,var Value2 ...} );
Exemplo 1
var myFile : TextFile; text : string; i : Integer; begin AssignFile(myFile, 'Test.txt'); ReWrite(myFile); Write(myFile, 'Hello '); Write(myFile, 'World'); WriteLn(myFile); for i := 2 to 4 do Write(myFile, i/2, ' '); WriteLn(myFile); for i := 2 to 4 do Write(myFile, i/2:5:1); WriteLn(myFile); CloseFile(myFile); Reset(myFile); while not Eof(myFile) do begin ReadLn(myFile, text); sMensagem := text; end; CloseFile(myFile); end;
Exemplo 2
type TCustomer = record name : string[20]; age : Integer; male : Boolean; end; var myFile : File of TCustomer; customer : TCustomer; begin AssignFile(myFile, 'Test.cus'); ReWrite(myFile); customer.name := 'Fred Bloggs'; customer.age := 21; customer.male := true; Write(myFile, customer); customer.name := 'Jane Turner'; customer.age := 45; customer.male := false; Write(myFile, customer); CloseFile(myFile); FileMode := fmOpenRead; Reset(myFile); while not Eof(myFile) do begin Read(myFile, customer); if customer.male then sMensagem := 'Man with name '+customer.name+ ' is '+IntToStr(customer.age) else sMensagem := 'Lady with name '+customer.name+ ' is '+IntToStr(customer.age); end; CloseFile(myFile); end;
Exemplo 3
var myWord, myWord1, myWord2 : Word; myFile : File of Word; begin AssignFile(myFile, 'Test.bin'); ReWrite(myFile); myWord1 := 234; myWord2 := 567; Write(myFile, myWord1, myWord2); CloseFile(myFile); FileMode := fmOpenRead; Reset(myFile); while not Eof(myFile) do begin Read(myFile, myWord); sMensagem := IntToStr(myWord); end; CloseFile(myFile); end;
Escrever uma linha completa de dados para um arquivo de texto.
Sintaxe
WriteLn(Expression1 {options} {, Expression2 {options} ...} ); WriteLn(var FileHandle : TextFile; Expression1 {options} {, Expression2 {options} ...} );
Exemplo
var myFile : TextFile; text : string; begin AssignFile(myFile, 'Test.txt'); ReWrite(myFile); WriteLn(myFile, 'Hello World'); WriteLn(myFile); WriteLn(myFile, '22/7 = ' , 22/7); WriteLn(myFile, '22/7 = ' , 22/7:12:6); CloseFile(myFile); Reset(myFile); while not Eof(myFile) do begin ReadLn(myFile, text); sMensagem := text; end; CloseFile(myFile); end;
Este tópico descreve e exemplifica o uso de classes utilizadas pelo WFS.
Exemplo 1: Testes de envio (SLACK) para uma pessoa especifica passando o nome de outras pessoa no username;
var http: TWHTTP; response: THTTResponse; jsonObject: TJsonObject; token, channel, text, username: String; begin try try // Criando a conexão http := TWHTTP.create(); // Parâmetros necessários para o método GET. token := http.encodeParameter( 'xoxb-179556611860-ZhO1pl49DXlJOmbDp6nKU9jd' ); channel := http.encodeParameter( '@juliano.rafael' ); text := http.encodeParameter( 'Teste de *integração*' ); username := http.encodeParameter( '@juliano.rafael' ); // Precisa de SSL. http.setSSL( true ); response := http.doGet( 'https://slack.com/api/chat.postMessage?token=' + token + '&channel=' + channel + '&text=' + text + '&username=' + username ); jsonObject := response.GetResponseJson(response.GetResponseString()); except showMessage( 'ocorreu erro' ); end; finally http.Free(); response.Free(); end; end;
Exemplo 2: Teste de envio para um canal se passando por um usuário;
var http: TWHTTP; response: THTTResponse; jsonObject: TJsonObject; token, channel, text, username: String; begin try try // Criando a conexão http := TWHTTP.create(); // Parâmetros necessários para o método GET. token := http.encodeParameter( 'xoxb-179556611860-ZhO1pl49DXlJOmbDp6nKU9jd' ); channel := http.encodeParameter( 'channel' ); text := http.encodeParameter( 'Teste de *integração*' ); username := http.encodeParameter( '@juliano.rafael' ); // Precisa de SSL. http.setSSL( true ); response := http.doGet( 'https://slack.com/api/chat.postMessage?token=' + token + '&channel=' + channel + '&text=' + text + '&username=' + username ); // Convertendo o retorno em JsonObject. jsonObject := response.GetResponseJson(response.GetResponseString()); except showMessage( 'ocorreu erro' ); end; finally http.Free(); response.Free(); end; end;
Exemplo 3: Carregando lista de usuários do Slack;
var http: TWHTTP; response: THTTResponse; jsonObject: TJsonObject; jsonPair: TJSonPair; jsonArray: TJsonArray; token, url: String; i: Integer; begin try try // Criando a conexão http := TWHTTP.create(); // Parâmetros necessários para o método GET. token := http.encodeParameter( 'xoxb-179556611860-ZhO1pl49DXlJOmbDp6nKU9jd' ); // Precisa de SSL. http.setSSL( true ); url := 'https://slack.com/api/users.list?token=' + token; response := http.doGet( url ); // Convertendo o retorno em JsonObject. jsonObject := response.GetResponseJson(response.GetResponseString()); jsonPair := response.getByName( jsonObject, 'members' ); jsonArray := jsonPair.jsonValue; for i := 0 to jsonArray.size - 1 do begin showMessage( TJsonObject( jsonArray.get(i) ).get(2).jsonValue.value ); end; except showMessage( 'ocorreu erro' ); end; finally http.Free(); response.Free(); end; end;
Exemplo 4: Inserindo Issue no Jira via basic authentication;
var http: TWHTTP; response: THTTResponse; jsonObject: TJsonObject; url, paramJson: String; begin try try // Criando a conexão http := TWHTTP.create(); // Neste caso necessario autenticação básica http.setBasicAuthentication( true ); http.setUser( 'board-jira@rh3software.com' ); http.setPassWord( 'Rh3@1593576482' ); // Será passado um Json. http.setContentType( 'application/json' ); // Default charset. http.setCharset( 'utf-8' ); // Precisa de SSL. http.setSSL( true ); // Json em forma de string para ser passado como data para o doPost. paramJson := '{ "fields": { "project": { "key": "RH3" }, "summary": "Segundo testes da API.", "description": "Creating of an issue using project keys and issue type names using the REST API", "issuetype": { "name": "Bug" } } }'; // URL url := 'https://rh3software.atlassian.net/rest/api/2/issue'; // Response do doPost response := http.doPost( url, paramJson ); // Convertendo o retorno em JsonObject. jsonObject := response.GetResponseJson(response.GetResponseString()); // Pegando o objeto retornado para mostrar a chave que foi incluída. showMessage( response.getByName( jsonObject, 'key' ).jsonValue.value ); except showMessage( 'ocorreu erro' ); end; finally http.Free(); response.Free(); end; end;
Exemplo 5: Retornando um statuscode >= 400 da api.
var http: TWHTTP; response: THTTResponse; jsonObject: TJsonObject; url, paramJson: String; begin try try // Criando a conexão http := TWHTTP.create(); // Neste caso necessario autenticação básica http.setBasicAuthentication( true ); http.setUser( 'board-jira@rh3software.com' ); http.setPassWord( 'Rh3@1593576482' ); // Será passado um Json. http.setContentType( 'application/json' ); // Default charset. http.setCharset( 'utf-8' ); // Precisa de SSL. http.setSSL( true ); // Json em forma de string para ser passado como data para o doPost. paramJson := '{ "fields": { "project": { "key": "fdsafdas" }, "summary": "REST ye merry gentlemen.", "description": "Creating of an issue using project keys and issue type names using the REST API", "issuetype": { "name": "Bug" } } }'; // URL url := 'https://rh3software.atlassian.net/rest/api/2/issue'; // Response do doPost response := http.doPost( url, paramJson ); // Convertendo o retorno em JsonObject. jsonObject := response.GetResponseJson(response.GetResponseString()); // Pegando o objeto retornado porem o statuscode > 400 if response.getStatusCode() >= 400 then showMessage( TJsonObject( response.getByName( jsonObject, 'errors' ).jsonValue ).get(0).jsonValue.value ); except showMessage( 'ocorreu erro' ); end; finally http.Free(); response.Free(); end; end;