Arquivo de setembro, 2014

SAP – Built-in Data Types – Abap Dictionary

Publicado: 18 de setembro de 2014 em Abap

O Dicionário de dados ABAP permite que você defina tipos de dados e estruturas complexas que serão visíveis globalmente em um sistema SAP, entretanto o Dicionário ABAP possui alguns tipos de dados embutidos no sistema que são utilizados pelo próprio ambiente SAP.

Os tipos de dados de tabelas de banco de dados são um subconjunto de todos os tipos possíveis, ou seja, são chamadas de estruturas planas, sendo assim, os elementos de dados no Dicionário ABAP descrevem os campos individuais. Eles são as menores unidades indivisíveis de tipos complexos e são usados ​​para especificar os tipos de colunas no banco de dados. Atente-se que as classes e Interfaces não fazem parte do Dicionário ABAP, mas residem na biblioteca de classes (Class Library).

Tipos de dados Embutidos

Tipos de dados Built-in

Tipos de dados Built-in

Os elementos de dados do Dicionário ABAP podem ser herdados e manipulados de um modo bem simples, você pode utilizar campos unitários ou tabelas inteiras, e se você conhece o tipo de dados no qual quer trabalhar basta utilizar uma referencia ao campo e pronto. Visto que alguns tipos podem possuir uma formatação pré-definida, isto se deve ao fato de que todos os tipos de dados no Dicionário ABAP baseiam-se em elementos de dados, então todos eles contêm os atributos semânticos correspondentes, veja a tabela abaixo no qual os campos serão herdados em nosso programa de exemplo:

SFLIGHT - Elementos de Dados

SFLIGHT – Elementos de Dados

Independente de você manipular ou não algum tipo de dado no banco de dados, uma vez que os elementos de dados são globais podemos herda-los e utiliza-los de qualquer modo, mesmo não fazendo muito sentido utilizar elementos de dados definidos em uma tabela transparente e não manipular seus dados, podemos ver que isto é totalmente possível. O modo como se utiliza elementos de dados no Dicionário ABAP é muito similar a instrução %TYPE encontrada no banco de Oracle, onde utiliza-se [NOME DA TABELA].[NOME DO CAMPO]%TYPE para obter o tipo de campo declarado em uma tabela sem se preocupar com sua definição.

Data Types ABAP Dictionary: http://help.sap.com/saphelp_46c/helpdata/en/cf/21f2e5446011d189700000e8322d00/content.htm

Abap Dictionary Types

Abap Dictionary Types

Exemplo:

Neste exemplo utilizamos os elementos de dados do Dicionário ABAP de um modo muito similar a instrução %TYPE do banco de dados Oracle, no qual nos permite herdar campos de tabelas transparentes que utilizam tipos built-in do Dicionário ABAP sem nos preocupar com sua real definição de dados.

Abap

*&---------------------------------------------------------------------*
*& Report  ZABAPDIC
*&
*&---------------------------------------------------------------------*
*& Desenvolvimento Aberto
*& Tipos do Dicionario Abap
*&---------------------------------------------------------------------*

REPORT  ZABAPDIC.

* Utiliza dados globais contidos na tabela SFLIGHT
* Os Tipos utilizados pertencem ao Dicionário de Dados Abap

DATA float TYPE sflight-PRICE.    " CURR 15,2
DATA char  TYPE SFLIGHT-CARRID.   " Char 3
DATA int   TYPE SFLIGHT-SEATSMAX. " INT4 10
DATA date  TYPE SFLIGHT-FLDATE.   " DATS

* Alimenta dados
float  = '10000.66'.
char   = '1A2'.
int    = '10000.66'.
date   = '20140918'.

* Imprime resultados
WRITE : / 'Tipos de Dados Globais do Dicionário Abap', /,
        / 'Numero flutuante ', float,
        / 'Caracteres ', char,
        / 'Numero inteiro ', int,
        / 'Data ', date.

SAP – Data Objects – Abap

Publicado: 17 de setembro de 2014 em Abap

Apesar do nome Data Objects não ter haver com a clássica programação orientada a objeto, os objetos de dados também fazem parte do ABAP OO, permitindo criar ou referenciar objetos de dados dentro de Objetos Abap, parece confuso não é? Mas é que o conceito de Data Objects antecede o conceito de Objetos Abap.

Os objetos de dados contêm os dados com os quais os programas ABAP trabalham em tempo de execução. Eles não são persistentes, mas apenas existem enquanto durar o programa. Antes que você possa processar dados persistentes, tais como dados de uma tabela de banco de dados ou de um arquivo sequencial, você deve primeiro lê-los em objetos de dados. Por outro lado, se você quiser manter o conteúdo de um objeto de dados para além do final do programa, você deve salvá-lo de uma forma persistente.

Nos já vimos vários objetos de dados ao longo dos posts na categoria Abap, agora vamos ver como utiliza-los de uma forma diferente, utilizando tipos de dados e tipos de Objeto de dados simultaneamente e fazendo interação complexas entre eles.

Dinamic Data Objects

Dinamic Data Objects

 

Objetos de Dados

  • Literais – são objetos de texto, que não são criados através da declaração DATA.
  • Text Symbols – são ponteiros de textos criados através de literais, exemplo: ‘textoliteral'(###).
  • Variables – são variáveis declaradas através das instruções: DATA, CLASS-DATA, STATICS, PARAMETERS, SELECT-OPTIONSRANGES.
  • Anonymous Data Objects – são objetos de dados declarados dinamicamente, utilizando a instrução CREATE DATA, que podem ser endereçados através de referencias.
  • System-Defined Data Objects – são objetos de dados do sistema, que não precisam ser declarados e pois já existem em tempo de execução, exemplo: sy-subrc ou a referencia me-> dentro de métodos de classes.
  • Interface Work Areas – são nomes especiais de objetos de dados que são utilizados para passar dados entre telas e programas Abap, porem estes são obsoletos e existem apenas a nível de compatibilidade.

 

Exemplo:

Neste exemplo utilizamos tipos de dados e objetos de dados, que são criados estaticamente e dinamicamente e utilizados através de referencias entre os vários Data Objects existentes no programa.

Abap

*&---------------------------------------------------------------------*
*& Report  ZOBJETODADOS
*&
*&---------------------------------------------------------------------*
*& Desenvolvimento Aberto
*& Objeto de dados
*&---------------------------------------------------------------------*

REPORT  ZOBJETODADOS.

* Para entender este exemplo
* primeiro você precisa saber como funciona
* os campos de símbolo em ABAP

TYPES:
  BEGIN OF estrutura,
    coluna1 TYPE c LENGTH 6,
    coluna2 TYPE c LENGTH 6,
  END OF estrutura.

DATA: referencia1 TYPE REF TO data,
      referencia2 TYPE REF TO data.

* declara campos de simbolo (ponteiros)
FIELD-SYMBOLS: <simbolo1> TYPE estrutura,
               <simbolo2> TYPE c.

* Cria uma variável de dados dinamicamente
CREATE DATA referencia1 TYPE estrutura.

* aponta referencia ao simbolo
ASSIGN referencia1->* TO <simbolo1>.

* Alimenta dados no simbolo
<simbolo1>-coluna1 = 'Dados1'.
<simbolo1>-coluna2 = 'Dados2'.

* Lembre-se referenciando o ponteiro você também
* faz referencia a variável ou vice-versa
referencia2 = referencia1.

ASSIGN referencia2->* TO <simbolo2> CASTING.
WRITE : / 'Imprime valores do Simbolo 2:',
        / <simbolo2>, /.

* O simbolo1 faz referencia ao objeto de dados dinâmico (referencia1)
* deste modo é possível recuperar sua referencia.
GET REFERENCE OF <simbolo1>-coluna2 INTO referencia2.

ASSIGN referencia2->* TO <simbolo2>.
WRITE : / 'Re-imprime valores do Simbolo 2:',
        / <simbolo2>.

 

SAP – Field Symbols – Abap

Publicado: 10 de setembro de 2014 em Abap

Os Field Symbols são espaços reservados na memoria ou nomes simbólicos para outros campos. Eles não reservam um espaço físico para  os símbolos declarados, mas apontam para o seu conteúdo. Um Field Symbol pode apontar para qualquer objeto de dados.

Sempre que você endereçar um Field Symbol em um programa, você está endereçando o campo que é atribuído ao Field Symbol, deste modo não há mais diferença se você faz referência ao símbolo ou ao próprio campo. Campos de símbolo são similares aos ponteiros de referencia em C, que utilizam o caractere * (asterisco).

Abap - Field Symbol

Abap – Field Symbol

Exemplo:

Neste exemplo criamos uma linha de dados contendo duas colunas, a primeira coluna possui o conteúdo “dados”, após criarmos o campo de símbolo, o endereçamos a linha de dados,  o utilizamos como um ponteiro para igualar o valor contido na primeira coluna para a coluna vazia e exibimos novamente a linha de dados, assim podemos ver que ao manipular o ponteiro do campo de símbolo também estamos manipulando a linha de dados.

Abap

*&---------------------------------------------------------------------*
*& Report  ZFIELDSYMBOL
*&
*&---------------------------------------------------------------------*
*& Desenvolvimento Aberto
*& Field Symbols
*&---------------------------------------------------------------------*

REPORT  ZFIELDSYMBOL.

* Declara objeto de dados
DATA: BEGIN OF linha,
        inicio(5) TYPE c VALUE 'DADOS',
        fim(5) TYPE c ,
      END OF linha.

* imprime valor da linha
WRITE : / 'Conteudo da linha:'.
WRITE : / 'Inicio: ', linha-INICIO, ' Fim: ', linha-FIM.

* Cria simbolo
FIELD-SYMBOLS <f> LIKE linha.

* Cria ponteiros de referencia
ASSIGN linha TO <f>.

* Move referencia
* Veja que ao mover os pointeiros
* Movemos o conteudo da variavel
* Isto porque um Field Symbol funciona como um Placeholder
MOVE <f>-INICIO TO <f>-FIM.

* re-imprime valor da linha
skip 1.
WRITE: / 'Field Simbolo (Pointer) reorganizado:'.
WRITE : / 'Inicio: ', linha-INICIO, ' Fim: ', linha-FIM.

 

A Microsoft mudou como empresa e está se tornando mais aberta e decidiu contribuir e firmar parcerias com as comunidades de código aberto e promover a interoperabilidade para tornar mais fácil e se tornar menos onerosa para os clientes que pretendem desenvolver e gerenciar ambientes de TI mistos. A Microsoft pretende participar ativamente do processo de definição de padrões e prestar apoio aos padrões já estabelecidos, em seus produtos emergentes.

A parceria se estende deste linguagens de programação como Java, Python e Ruby, programação para web como PHP e Drupal, tecnologia de servidores como Apache e Node.JS, servidores de banco de dados como MongoDB e até com o sistema operacional Linux, como a aliança firmada com a distribuição SUSE.

Suse/Microsoft: https://www.moreinterop.com/

Os membros mais céticos da comunidade Open Source ainda veem a entrada da Microsoft na comunidade com desconfiança devido a sua tradição de “parcerias” que resultaram em melhorias ou vários novos produtos muito rentáveis para seu casting e podemos citar alguns itens do seu tradicional histórico na qual mais recebeu do que contribuiu, como a parceria com a Sybase que resultou no Microsoft SQL Server, o Visual J++ e J# (Java .NET) que não foi endossado ou aprovado pela Sun Microsystems, a parceria com a SAP que ainda rende bons frutos adaptando o Windows Server e o MSSQL a nível empresarial para suportar sistemas críticos de grande porte que cujo o know-how adquirido ainda rendeu o extinto Solomon e seu atual ERP chamado Dynamics, entre inúmeras outras parcerias.

Microsoft Openness: http://www.microsoft.com/en-us/openness/default.aspx

 

Python Tools for Visual Studio

 O Python Tools for Visual Studio é um plugin de código aberto gratuito que transforma o Visual Studio em uma IDE Python.  O PTVs suporta CPython, IronPython, edição, navegação, Intellisense, misturado Python com  C++, suporta depuração, acesso remoto ao sistema operacional Linux e MacOS  para depuração, profiling, IPython, Django e computação em nuvem com bibliotecas do cliente para Windows, Linux e MacOS. O Python Tools for Visual Studio foi projetado, desenvolvido pela Microsoft e pela sua comunidade de código aberto.

PyTools: http://pytools.codeplex.com/

1 – Para instalar baixe o plugin pelo VS ou pelo site da Codeplex, abra o arquivo de instalação como administrador:

Licença Apache

Licença Apache

2 – Clique em instalar para iniciar a instalação:

Instalando

Instalando

3 – Clique em Finish quando a instalação tiver sido concluida:

Concluir

Concluir

4 – Nós presumimos que você já tenha a instalação do Python no seu computador, caso ainda não tenha acesse o link abaixo e instale a versão adequada para seu proposito, caso queira utilizar a tecnologia Google Cloud com Python, somente a versão 2.7.8 é suportada:

Python: https://www.python.org/download

Abra o Visual Studio e crie um novo Projeto do Tipo Python  e escolha um projeto do tipo, Python Application:

Projeto Python

Projeto Python

5 – Digite o código abaixo e compile o programa:

Python - Tkinter - Hello World

Python – Tkinter – Hello World

Pronto, você já pode utilizar a tecnologia Python da IDE Microsoft Visual Studio, para instruções completas de todos os recursos da ferramenta e utilize a documentação oficial:

Documentação: http://pytools.codeplex.com/documentation

Exemplo:

Neste exemplo compilamos um simples programa criado no sistema operacional Linux com a interface visual nativa do Python chamada Tkinter.

Python

#!/usr/bin/env python
# -*- coding: latin-1 -*-
# Desenvolvimento Aberto
# visual.py

# importa modulo
from Tkinter import *

# Cria formulario
formulario = Tk()

# Cria um variavel de Texto.

texto = "Desenvolvimento Aberto\n\n" + \
         "Hello World\nTkinter!!!!" + \
         "\n\nVisual Studio"

# Cria um novo label
rotulo = Label(formulario, text = texto)

# Retira espaço desocupado na janela
rotulo.pack(padx=20, pady=20)

# Roda o loop principal do tcl
mainloop()

 

Como de costume sempre ressaltamos que Ruby é uma linguagem diferenciada por ser puramente orientada a objeto, isto significa que ao contrario de muitas linguagens de programação mais tradicionais, números inteiros e números flutuantes em Ruby não são tipos primitivos e sim objetos, assim acontece também com os objetos Strings. Por este motivo o Ruby possui uma simplificada e poderosa sintaxe cheia de recursos tornando muito fácil manipular objetos do tipo string, integer e float.

Strings

Um objeto String mantém e manipula uma sequência arbitrária de bytes, normalmente representando caracteres.

String: http://www.ruby-doc.org/core-2.1.2/String.html

Integers

Esta classe é a base para as duas classes concretas que sustentam números inteiros, Bignum e Fixnum.

Integer: http://www.ruby-doc.org/core-2.1.2/Integer.html

Floats

Objetos flutuantes representam números reais inexatos utilizando precisão de dupla representação de ponto flutuante da arquitetura nativa.

Float: http://www.ruby-doc.org/core-1.9.3/Float.html

Ruby - Strings - Integers - Floats

Ruby – Strings – Integers – Floats

Exemplo:

Neste exemplo manipulamos objetos literais, inteiros e flutuantes através das classes da linguagem de programação Ruby.

Ruby

#!/usr/bin/env ruby
# Desenvolvimento Aberto
# Variaveis.rb

# Inteiros
2.times() {puts "Contagem Regressiva"}

puts "\nContando..."
5.downto(1) {|x| puts x}
puts "Booommm!!!"

# Flutuantes
puts "\nFlutuantes"
float = 5.to_f

puts "Numero flutuante: " + String(float) + " Adicionando 4.3: Total= " + String(float + 4.3)

# Strings
puts "\nObjetos Strings\n"
puts "desenvolvimento".capitalize + " " + "aberto".capitalize
puts "desenvolvimento".upcase
puts "ABERTO".downcase