{{:bk_cab_rh3software.png?200|}} \\ **Workflow Studio \ Fluxo** \\ =======Linguagem de Script======= ---- ### 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: * Ler dados da definição do fluxo; * Ler/alterar variáveis do fluxo; * Ler/gravar dados num banco de dados; * Acessar webservices; * Criar/alterar arquivos no sistema de diretórios; * Enviar emails. ### 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. ### ======Resultado do script====== ---- ### 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. ### ======Linguagem de programação Pascal====== ---- {{:manual_usuario:studio:fluxo:designer:apostilapascal.pdf | Clique aqui}} para visualizar a apostila com os conceitos básicos de programação e linguagem Pascal. ======Principais comandos====== ---- =====Try ... Finally ... End===== ---- ### 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 then begin casa2 := TCasa.create; end; finally casa1.free; if casa2 <> nil then casa2.free; end; end. =====Try ... Except ... 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; =====If ... Then ... Else===== ---- ### O comando "If ... Then ... Else" especifica a condicional sobre a qual uma declaração será executado. ### //Sintaxe// If then else ; //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; =====Case ... of ===== ---- ### O procedimento Case é usado para ramificar um código dependendo do resultado ou valor encontrado neste código. ### //Sintaxe// Case of else //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; =====Repeat ... Until===== ---- ### Os procedimentos entre Repeat e until são executados na seqüência enquanto uma condição seja satisfeita. ### //Sintaxe// Repeat Until ; //Exemplo// var a, b : integer; begin b := 1; Repeat a := a + b; sMensagem := IntToStr(a) + IntToStr(b); Until a = 1000; end; =====While .. Do===== ---- A declaração While controla a execução repetida de uma declaração simples ou composta. //Sintaxe// While do . //Exemplo// var a, b : integer; begin b := 1; While a < 1001 Do begin a := a + b; sMensagem := IntToStr(a) + IntToStr(b); end; end; =====For .. Do===== ---- ### O bloco "For ... Do" é uma declaração que será executada até que a variável de controle seja satisfeita. ### //Sintaxe// For := To ou Downto Do . //Exemplo// var cont, x : integer; begin For cont := 1 To 100 Do begin x := x + cont; sMensagem := IntToStr(x); end; end; =====Goto / Label===== ---- ### 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 ; Label ; //Exemplo// FIXME 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; =====Efetuando uma conexão ADO===== ---- ### Abaixo segue o exemplo de como efetuar uma conexão ADO para acessar uma base de dados Oracle: ### FIXME "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; * **conexao:** Variável que guardará a conexão e que deverá ser usada para configurar os componentes de acesso a banco de dados(TADOQueryEx); * **connectionString:** Propriedade da variável de conexão responsável por configurar o exato acesso a um usuário de banco de dados; * //Password//: Senha do usuário de banco de dados; * //ID//: Login do usuário de banco de dados; * //wfs//: Alias que informa qual o banco de dados a ser usado. * **loginprompt:** Fica definido como "false" para que não seja exibida uma tela de confirmação para o usuário sempre que a conexão for efetuada; * **connected:** Passando o valor "True" efetua a conexão. "False" finaliza uma conexão aberta. =====Consulta ao banco de dados===== ---- Abaixo segue o exemplo de como efetuar uma consulta de banco de dados: FIXME "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; * **query:** Variável de acesso ao banco de dados; * **connection:** Propriedade responsável para apontar para uma conexão existente a um usuário de banco de dados; * **setSql:** Propriedade onde será informado o comando SQL para acessar as informações do banco; * **active:** O valor "True" executa a consulta. O valor "False" finaliza a consulta. ======Biblioteca de funções====== ---- Este tópico descreve e exemplifica o uso de todas as funções utilizadas pelo WFS. =====Funções específicas===== ---- Listagem das funções específicas do WFS. ====ConectarDBSistema==== ---- ### A função estabelece uma conexão com um [[manual_usuario:studio:studio_objetivo_sistemas | 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'); =====Funções nativas===== ---- Listagem das funções nativas do Delphi e utilizadas no WFS. ====Abs==== ---- ### 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; ====AnsiCompareStr==== ---- 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; ====AnsiCompareText==== ---- 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; ====AnsiLowerCase ==== ---- 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; ====AnsiUpperCase ==== ---- 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; ====Append==== ---- Insere um registro no final do arquivo. //Sintaxe// Append(var FileHandle: TextFile); //Exemplo// FIXME "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; ====ArcTan==== ---- É 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; ====Assigned==== ---- ### 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; ====AssignFile==== ---- ### 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// FIXME 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; ====Chdir==== ---- 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// FIXME 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; ====Chr==== ---- Converte um inteiro em caractere. //Sintaxe// Chr(IntValue: Integer): AnsiChar; Chr(IntValue: Integer): WideChar; //Exemplo// FIXME 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; ====CloseFile==== ---- 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; ====CompareStr==== ---- Compara duas Strings para ver qual é a maior. Leva em consideração o Case-sensitive. //Sintaxe// CompareStr(const FirstString, SecondString: string): Integer; //Exemplo// FIXME ====CompareText==== ---- 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// FIXME ====Copy==== ---- 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; ====Cos==== ---- 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; ====CreateOleObject==== ---- FIXME //Sintaxe// //Exemplo// ====Date==== ---- 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; ====DateTimeToStr==== ---- 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; ====DateToStr==== ---- 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; ====DayOfWeek==== ---- Retorna o índice de um dia da semana. * 1 = Sunday; * 2 = Monday; * 3 = Tuesday; * 4 = Wednesday; * 5 = Thursday; * 6 = Friday; * 7 = Saturday. //Sintaxe// DayOfWeek(Date: TDateTime): Integer; //Exemplo// FIXME var myDate : TDateTime; day : string; begin myDate := EncodeDate(2002, 12, 31); day := LongDayNames[DayOfWeek(myDate)]; sMensagem := 'Christmas day 2002 is on a '+day; end; ====Dec==== ---- Diminui o valor de uma variável ordinal. //Sintaxe// Dec(var Variable: Ordinal variable); Dec(var Variable: Ordinal variable; Count: Integer ); //Exemplo// FIXME 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; ====DecodeDate==== ---- 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; ====DecodeTime==== ---- ### 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; ====Delete==== ---- 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; ====EncodeDate==== ---- 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; ====EncodeTime==== ---- 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; ====EOF==== ---- Retorna um valor lógico se fim de arquivo. FIXME //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; ====Exp==== ---- 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; ====FilePos==== ---- Retorna a posição de um arquivo de texto ou binário. //Sintaxe// FilePos(var FileHandle: File;): LongInt; FilePos(var FileHandle: TextFile;); FIXME //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; ====FileSize==== ---- Retorna a quantidade de registros de um arquivo aberto. //Sintaxe// FileSize(var FileHandle: File;): Integer; FIXME //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; ====FloatToStr==== ---- 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; ====Format==== ---- 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; FIXME //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; ====FormatDateTime==== ---- 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; ====FormatFloat==== ---- 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; ====Frac==== ---- 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; ====GetActiveOleObject==== ---- FIXME //Sintaxe// //Exemplo// ====High==== ---- 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; ====Inc==== ---- Incrementa uma variável ordinal. //Sintaxe// Inc(var Variable: Ordinal variable ) ; Inc(var Variable: Ordinal variable; Count: Integer); FIXME //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; ====IncMonth==== ---- Incrementa um certo número de meses em uma variável TDateTime. //Sintaxe// IncMonth(const StartDate: TDateTime {; NumberOfMonths : Integer = 1} ): TDateTime; FIXME //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; ====InputQuery==== ---- 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; ====Insert==== ---- 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; ====Int==== ---- 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; ====Interpret (*)==== ---- FIXME //Sintaxe// //Exemplo// ====IntToHex==== ---- 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; ====IntToStr==== ---- 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; ====IsLeapYear==== ---- 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; ====IsValidIdent==== ---- FIXME //Sintaxe// //Exemplo// ====Length==== ---- Retorna o número de elementos de um Array ou string. //Sintaxe// Length(const SourceString: string): Integer; Length(const SourceArray: array): Integer; FIXME //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; ====Ln==== ---- 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; ====Low==== ---- 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; ====LowerCase==== ---- Coloca todos os caracteres de uma string em minúsculo. FIXME //Sintaxe// LowerCase(const MixedString: string ): string; //Exemplo// ====Machine (*)==== ---- FIXME //Sintaxe// //Exemplo// ====Now==== ---- 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; ====Odd==== ---- 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; ====Ord==== ---- 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; ====Pos==== ---- Encontre a posição de uma string em outra. //Sintaxe// Pos(const Needle, HayStack: string ): Integer; FIXME //Exemplo// ====Raise==== ---- Levantar uma exceção. //Sintaxe// Raise Raise Object reference Raise Object reference At Address pointer FIXME //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; ====Random==== ---- Gerar um ponto de flutuação aleatória ou número inteiro. //Sintaxe// Random : Extended; Random (LimitPlusOne: Integer): Integer; FIXME //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; ====ReadLn==== ---- 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...} ) ; FIXME //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; ====Reset==== ---- 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); FIXME //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; ====Rewrite==== ---- Abra um arquivo de texto ou binário com acesso de gravação. //Sintaxe// Rewrite(var FileHandle: TextFile); Rewrite(var FileHandle: File {RecordSize ); FIXME //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; ====Round==== ---- 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; ====Scripter (*)==== ---- FIXME //Sintaxe// //Exemplo// ====SetOf (*)==== ---- FIXME //Sintaxe// //Exemplo// ====Sin==== ---- 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; ====Sqr==== ---- Retorna um número ao quadrado. //Sintaxe// Sqr(X: Real): (Real); FIXME //Exemplo// var S, Temp: String; begin FloatoStr(Sqr(5.0):2:1, Temp); { Retorna 25.0 } S := '5 ao quadrado é ' + Temp; sMensagem := S; end; ====Sqrt==== ---- Retorna a raiz quadrada de um número. //Sintaxe// Sqrt(Number: Extended): Extended; FIXME //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; ====StrToDate==== ---- 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; ====StrToDateTime==== ---- 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; ====StrToFloat==== ---- 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; ====StrToInt==== ---- 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; ====StrToIntDef==== ---- ### 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; ====StrToTime==== ---- 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; ====Time==== ---- 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; ====TimeToStr==== ---- 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; ====Trim==== ---- 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; ====TrimLeft==== ---- 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; ====TrimRight==== ---- 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; ====Trunc==== ---- 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; ====UpperCase==== ---- Substituir os caracteres minúsculos em maiúsculos em uma string. //Sintaxe// UpperCase(const MixedString: string): string; FIXME //Exemplo// ====VarArrayCreate==== ---- FIXME //Sintaxe// //Exemplo// ====VarArrayHighBound==== ---- FIXME //Sintaxe// //Exemplo// ====VarArrayLowBound==== ---- FIXME //Sintaxe// //Exemplo// ====VarIsNull==== ---- FIXME //Sintaxe// //Exemplo// ====VarToStr==== ---- FIXME //Sintaxe// //Exemplo// ====Write==== ---- 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; ====WriteLn==== ---- 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; ======Biblioteca de Classes====== ---- Este tópico descreve e exemplifica o uso de classes utilizadas pelo WFS. =====HTTP/REST via script===== ---- **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;