Revista programar 28

900 visualizações

Publicada em

Publicada em: Tecnologia
0 comentários
1 gostou
Estatísticas
Notas
  • Seja o primeiro a comentar

Sem downloads
Visualizações
Visualizações totais
900
No SlideShare
0
A partir de incorporações
0
Número de incorporações
2
Ações
Compartilhamentos
0
Downloads
24
Comentários
0
Gostaram
1
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

Revista programar 28

  1. 1. EditorialEDITORIAL EQUIPA PROGRAMAR FMI - Fim da Maravilhosa Internet? Coordenadores Aconteceu. O ICANN (Internet Corporation for Assigned Names and António Silva Numbers) distribuiu o último bloco de endereços IPV4 pelos 5 RIRs Fernando Martins (Regional Internet Registries). Ou seja após esses endereços serem atribuídos aos ISP, poderá estar em causa a aceitação de novos clientes por Editor parte dos ISP e não haverá no IPV4 mais lugar a expansão. Ou haverá? O António Silva facto é que a norma IPV6 já está preparada (foi descrito como um standard da Internet num documento publicado em Dezembro de 2008), e já em Design Agosto de 2008, na edição #1 5 da Revista PROGRAMAR, foi publicado um Sérgio Alves (@scorpion_blood) artigo que falava um pouco sobre esta nova norma. Contudo a verdade é que parece não existir uma vontade comercial muito grande para adoptar Redacção esta nova norma, porque é financeiramente desagradável, uma vez que é André Vala, Augusto Manzano, Fernando necessário aos ISP fazerem a actualização do seu hardware de rede, aos Martins, Jorge Paulino, Pedro Silva, Pedro programadores actualizarem as suas aplicações… Veloso, Ricardo Rodrigues, Ricardo Trindade, Sara Silva, Virgílio Esteves No dia 8 de Junho, algumas empresas do sector da Internet e não só disponibilizarão durante 24 horas os seus serviços em IPV6, para o Staff utilizador testar os seus serviços com esta nova norma e para pressionar António Santos, Fábio Domingos, Jorge um pouco os ISP a fazerem a migração. Pode testar a sua ligação neste Paulino, Marco Marques site: http://test-ipv6.com/ Contacto Nos EUA existem já soluções que tentam contornar este problema, sem no revistaprogramar@portugal-a-programar.info entanto ser necessário passar a usar o IPV6. Tecnicamente dois ou mais clientes de um ISP estarão numa rede mais pequena (possivelmente Website ligados pela central mais próxima), e existirá um router, e esse sim terá o http://www.revista-programar.info verdadeiro endereço IP da internet, enquanto os PCs dos clientes têm apenas endereços de redes internas. Na prática dois ou mais clientes ISSN podem ter o mesmo IP ao mesmo tempo (algo idêntico ao que acontece nos 1 647-071 0 hotspots). Mas não será isto simplesmente um remedeio? O ser humano tem tendências para rejeitar mudanças, prolongando até ao limite em que já não pode adiar mais essa mudança. Um estudo mundial recente mostra que uma grande parte dos jovens dos denominados países desenvolvidos está dependente de dispositivos com acesso à Internet, sofrendo sintomas de abstinência comuns quando estão afastados muito tempo desses dispositivos. Traduzindo não podem viver sem a Internet. Mas e se os ISP não derem “o salto” para que a Internet continue a existir como a conhecemos? E se os programadores não adaptarem as suas aplicações a este salto? Poderá isto matar a Internet, pelo facto de o utilizador deixar de confiar nela? António Silva <antonio.silva@revista-programar.info>A revista PROGRAMAR é um projecto voluntário, sem fins lucrativos. Todos os artigos são da responsabilidade dos autores, não podendo a revista ou acomunidade ser responsabilizada por alguma imprecisão ou erro. Para qualquer dúvida ou esclarecimento poderá sempre contactar-nos. 2
  2. 2. Índice INDICE TEMA DE CAPA 6 Business Connectivity Services A PROGRAMAR 17 Lua – Linguagem de Programação (Parte 8) 21 jQuery 1 .5 e AJAX 27 Datagrid em Windows Presentation Foundation 37 Planos de Execução em ORACLE 47 Smarty PHP Template Engine COLUNAS 48 CORE DUMP - O X No Quadrado Certo 50 VISUAL (NOT) BASIC - Entity Framework 4.0: Model-First e Code-First COMUNIDADES 58 AndroidIPC - Inter Process-Communication 62 Automatização de deployments em Windows Azure EVENTOS1 5 Abr. SQL Saturday - Portugal 20111 5 Abr. 6º Encontro Nacional de Estudantes de Informática ENEI’20111 6 Abr. SharePointPT - 1 0ª Reunião da SPUGPT1 6 Abr. 1 9ª Reunião Presencial da Comunidade NetPonto - Lisboa03 Mai. Fim das Inscrições ONI201106 Mai. Microsoft WebCamp Portugal - Lisboa06 Mai. Prova de Qualificação na Internet ONI201109 Mai. CLOUD para DEVELOPERS1 3 Mai. StopNplay Lan Party 201127 Mai. Final Nacional ONI2011Para mais informações/eventos: http://bit.ly/PAP_Eventos 3
  3. 3. NOTICIAS Noticias R e s u l ta d o s s o b re o Pa n o ra m a La n ç a m e n to d o G N O M E 3 . 0 N a c i o n a l Te c n o l ó gi c oO Sapo Developers Blog fez recentemente um inquérito O GNOME 3.0 é o principal marco na história do projetosobre um conjunto de questões sobre o Panorama Nacional GNOME. O lançamento introduz um excitante novoTecnológico. Responderam 421 pessoas sendo a maioria ambiente de trabalho que foi desenhado para utilizadoresdos inquiridos jovens com idades entre os 21 e os 35 anos. comuns e adequado para uma grande quantidade deOs resultado apresentados, revelam que os recursos online modernos dispositivos computacionais. As tecnologias demais influentes são: desenvolvimento do GNOME foram substancialmente melhoradas para o GNOME 3.0. Modernizadas e Portugal a Programar padronizadas, elas irão permitir aos desenvolvedores Aberto até de Madrugada promover melhorias na experiência do utilizador com SAPO Tek menos tempo e esforço. E o GNOME 3.0 vem com as Zwame mesmas aplicações GNOME que os utilizadores conhecem Planet Geek e confiam, muitos dos quais receberam melhorias Pplware significantes. Exame Informática SAPO Developers Blog Mais info Globais: Engadget, Gizmodo, Mashable, ReadWriteWeb,outras.Mais info Le i d a s N o rm a s a b e rta s Wi n d o ws 8 p o d e rá te r Ap p a p ro va d a n a AR Sto reFoi votada no Plenário da Assembleia da República a Lei om a disponibilização da primeira versão do Windows 8das Normas Abertas, uma proposta que já tinha passado na para os RTM’s, começaram a surgir as primeiras imagensespecialidade e prevê a garantia de interoperabilidade e do que será o novo sistema operativo da Microsoft. Estasadopção de normas abertas nos sistemas informáticos do imagens, não oficiais mostram um sistema operativo queEstado. seguirá a continuidade do que o Windows 7 nos trouxe, mas também novidades que farão as delicias de todos osDepois de já ter conseguido gerar consenso, e muitas que o forem usar.vezes unanimidade, na discussão na especialidade, a Lei As últimas imagens que surgiram mostram que o Windowsfoi aprovada com votos a favor do PEV, PCP, BE, CDS e 8 poderá ter uma store incorporada e onde os utilizadoresPS, abstendo-se o PSD. poderão aceder às aplicações que pretenderem. Ainda não existem muitas informações sobre que software esta storeBruno Dias, deputado do PCP, já tinha adiantado que "este conterá e se apenas existirá software gratuito ou se existiráfoi um processo legislativo de enorme abertura e espírito a possibilidade de os utilizadores adquirem aplicações.construtivo de todas as partes. Não houve "ideias fixas" O conceito de store dentro do sistema operativo não éporque as opiniões que foram surgindo contribuíam para novo, mas nos últimos tempos tem ganho uma importanciaaperfeiçoar o texto, e dessa maneira foram tidas em conta". grande, com a disponibilização da Apple Store dentro do Mac OS e até com o Ubuntu Software Center. 4
  4. 4. TEMA DE CAPABusiness Connectivity Services
  5. 5. TEMA DE CAPAB u s i n e s s C o n n e c ti vi ty S e rvi c e sO SharePoint 201 0 é uma plataforma complexa e com umimpressionante conjunto de funcionalidades nativas que lhe Arquitecturapermitem adaptar-se a uma enorme variedade desituações. Uma das novas funcionalidades com mais A tecnologia BCS não se limita a apenas um serviço ou APIpotencial designa-se Business Connectivity Services e este dentro do SharePoint 201 0. É, na realidade, um conjunto deartigo é uma introdução a esta tecnologia e às suas componentes, serviços e ferramentas tal como apresentadopotencialidades. no esquema abaixo.O que são os Business ConnectivityServices e para que servem?Business Connectivity Services (BCS) é o nome datecnologia integrada no SharePoint 201 0 que permite ler eescrever informação em sistemas externos a partir doSharePoint 201 0 e do Office 201 0. Trata-se de umaevolução da tecnologia Business Data Catalog (BDC) Figura 1 - Arquitectura dos Business Connectivity Servicesintroduzida no SharePoint 2007, e sobre a qual foram feitasvárias melhorias, nomeadamente: Business Data Connectivity (BDC) Service • Possibilidade de leitura e escrita sobre a fonte de dadosexterna; O Business Data Connectivity Service é uma das peças • Suporte para cenários de autenticação mais complexos; mais importantes dos BCS. Trata-se do componente que • Suporte para múltiplas fontes de dados; permite, através do seu repositório central de • Integração com aplicações Office; metainformação, guardar as descrições da informação à • Novas e melhores formas de apresentar a informação; qual se pretende aceder bem como do próprio sistema • Ferramentas destinadas à criação e manipulação dos externo onde esta está armazenada.modelos; • Extensibilidade através de assemblies .Net. Metadata StoreO objectivo desta tecnologia é permitir a integração deinformação proveniente de sistemas externos e apresentá- O repositório de metainformação é a base de dadosla em SharePoint e aplicações Office com o mínimo de utilizada pelo Business Data Connectivity Service paraesforço possível e, idealmente, sem ser necessário armazenar as descrições da informação e dos sistemasescrever qualquer linha de código. Há, de facto, um externos onde esta está armazenada. Este repositório nãoconjunto de cenários em que é possível a utilização da contém qualquer informação proveniente dos sistemastecnologia BCS apenas por configuração mas é a sua externos, apenas a metainformação necessária para aextensibilidade que lhe permite adequar-se a praticamente obter.qualquer necessidade de integração. 6
  6. 6. TEMA DE CAPA B u s i n e s s C o n n e c ti vi ty S e rvi c e sConnectors modo offline sejam replicadas assim que o sistema externo fica disponível.Os connectors são as peças que permitem ao BusinessData Connectivity Service ligar-se às fontes de dadosexternas descritas nos modelos armazenados no seu Principais ConceitosMetadata Store. São fornecidos três conectores com oproduto: Uma vez conhecida a arquitectura dos Business • Database Connector – permite a ligação a bases de Connectivity Services, é importante que se perceba emdados SQL Server. que consiste a metainformação que é armazenada na • WCF/Web Services Connector – permite a ligação a Metadata Store pelo Business Data Connectivity Service.serviços WCF ou web services. • .Net Assembly Connector – permite a ligação utilizandoum assembly .Net desenvolvido à medida. Uma vez que se Modelotrata de um assembly desenvolvido à medida, este conectorpermite a ligação a virtualmente qualquer fonte de dados A metainformação utilizada pelo BDC Service eexterna, incluindo até a ligação a múltiplas fontes em armazenada na Metadata Store materializa-se em ficheirossimultâneo. XML que descrevem Modelos, normalmente designadosEste mecanismo de connectors é extensível, sendo ainda por BDC Metadata Models. No SharePoint 2007, estespossível desenvolver conectores à medida, para casos em ficheiros de metainformação eram designados porque os conectores existentes não são suficientes. application definition files. Um modelo contém, de forma declarativa, toda a informação necessária para que os BCS consigam ligar-seBDC Client Runtime a um sistema externo e obter a informação que se encontra armazenado no mesmo.As aplicações cliente que fazem parte do Office 201 0conseguem também expor informação proveniente desistemas externos através dos BCS. Isso é possível porque Lob Systemo Office 201 0 inclui o BDC Client Runtime, um componenteque faz no contexto da aplicação cliente o que o BDC No contexto dos BCS, o Lob System (ou Line-of-BusinessService faz no contexto do System) refere-se ao sistema externo no qual estáservidor SharePoint, ou seja, acede ao repositório de armazenada a informação a que se pretende aceder. Estemetainformação e, através das definições que este contém, sistema pode ser uma base de dados relacional, ouacede à informação propriamente dita. qualquer outro sistema que exponha essa informação através de web services ou serviços WCF.Client Data Cache External Content TypeNo sentido de acelerar o acesso à informação, bem comopara suportar cenários de acesso offline à informação, os O External Content Type (ECT) é o conceito central e maisBCS utilizam uma cache para guardar a informação externa importante dos BCS, uma vez que descreve uma entidadeobtida através dos mesmos. Esta cache é baseada numa de negócio, ou seja, descreve a estrutura e comportamentobase de dados SQL Server 2005 Compact Edition e possui da informação a que se pretende aceder. Exemplos deum mecanismo de sincronização automático que permite ECTs podem ser Cliente, Factura ou Colaborador.que todas as alterações efectuadas sobre a informação em Na definição de um ECT é especificada a estrutura e o 7
  7. 7. TEMA DE CAPAB u s i n e s s C o n n e c ti vi ty S e rvi c e scomportamento da entidade, ou seja: a uma relação entre duas entidades (External Content • Os campos que constituem uma instância da entidade, e Types). No entanto, uma vez que não há garantia que arespectivo tipo de dados. Por exemplo: Nome, Morada ou fonte de dados seja uma base de dados relacional, aPaís. associação requer a existência de métodos que permitam • O mapeamento destes campos para objectos utilizados obter, a partir de uma entidade, elementos da entidadepelas aplicações Office cliente. Por exemplo: o campo relacionada.Nome da entidade corresponde ao campo FullName noOutlook. • Os métodos que devem ser invocados pelos BCS para Exemplo de Modeloler, criar, actualizar e apagar instâncias da entidade. Estesmétodos pode corresponder, por exemplo, a stored Felizmente, na grande maioria dos casos, não precisamosprocedures, queries SQL ou web services. de editar o modelo manualmente já que as ferramentasNo contexto de um Modelo, podem ser definidas várias fornecidas pela Microsoft permitem fazer grande parte daentidades, ou seja, vários External Content Types. configuração de forma visual. No entanto, apenas a título de exemplo, um ficheiro de modelo tem o aspecto apresentado abaixo.MétodosOs métodos são abstracções da API do sistema externo epermitem ao BDC Service saber que stored procedures ouweb services devem ser chamados para manipular ainformação. A definição de um método é feita no contextode uma entidade e baseia-se sempre num dos estereótiposdisponibilizados pelos BCS. Existem cerca de 20estereótipos possíveis, como sejam, Updater (paraactualizar um item), Finder (para listar itens), SpecificFinder(para obter um item específico), Deleter (para apagar umitem) entre outros. Figura 2 - Exemplo parcial de modelo BDCFiltrosOs filtros descrevem os parâmetros que podem ser Apresentar Informação Externapassados para os métodos na definição de cada entidade. Mas toda esta complexidade tem um objectivo – o deExistem 1 8 tipos de filtros que podem ser utilizados nos permitir apresentar e manipular a informação armazenadamétodos e que indicam ao BDC Service que informação em sistemas externos – por isso não faltam váriasdeve ser passada para os mesmos. Exemplos de filtros são alternativas para o fazer.o UserName que permite passar o username do utilizadorem contexto, ou o Limit que define o número máximo deitens a retornar numa chamada. External List A External List é um novo tipo de lista no SharePoint 201 0 que, através da associação a um External Content Type,Associação permite visualizar e manipular a informação desse ECT como se esta estivesse armazenada numa lista deUma associação, designada por association, corresponde SharePoint normal. Na realidade, a informação continua a 8
  8. 8. TEMA DE CAPA B u s i n e s s C o n n e c ti vi ty S e rvi c e sresidir no sistema externo e é lida e manipulada em tempo funcionamento é semelhante ao de uma coluna lookup,real. permitindo ao utilizador seleccionar um dos itens retornados pelo ECT. Figura 4 - External Data Column Uma das vantagens das External Data Columns é a possibilidade de serem utilizadas também pelo Word 201 0, permitindo ao utilizador seleccionar um item exposto através de BCS e utilizando essa informação nos Figura 3 - External List documentos. Tal como para as External Lists, para utilizar um ECT numaA grande vantagem das External Lists é que se parecem e External Data Column este tem que definir, pelo menos, oscomportam exactamente como listas normais e, métodos Finder e SpecificFinder.adicionalmente, o object model do SharePoint trata-ascomo se assim fossem, permitindo aos developers ler eescrever itens como se estes estivessem armazenados no Business Data Web Partspróprio SharePoint.Por outro lado, nem tudo funciona exactamente como nas As Business Data Web Parts são, como o nome indica, umlistas tradicionais. Em particular: conjunto de web parts que conseguem ligar-se a fontes de • Workflows dados externas através de um ECT e apresentar essa • Alertas informação no SharePoint. Estas web parts também já • Pastas (folders) existiam no SharePoint 2007 mas foram melhoradas no • Anexos (attachments) SharePoint 201 0, nomeadamente permitindo fazer cache • Feeds RSS da informação externa para melhorar o desempenho. • Exportação para ExcelPara que um ECT possa ser utilizado numa External Listeste tem que definir, pelo menos, os métodos Finder (listaritens) e SpecificFinder (obter um item específico). Istopermitirá à External List apresentar a lista de itens e ver odetalhe de cada um. Adicionalmente, se o ECT possuirmétodos Updater (actualizar um item), Deleter (eliminar umitem) e Creator (criar um novo item), a External List Figura 5 - Business Data Web Partsdisponibilizará as acções correspondentes. As Business Data Web Parts utilizam XSLT para apresentar a informação, o que lhes dá uma enorme flexibilidade noExternal Data Column que respeita ao seu aspecto gráfico bem como a possibilidade de edição através do SharePoint DesignerA External Data Column já existia no SharePoint 2007 e, 201 0.embora tenha sido ligeiramente melhorada no SharePoint As web parts incluídas neste pacote são:201 0, o seu objectivo é o mesmo – permitir utilizar • Business Data List – permite listar instâncias (itens) deinformação externa numa coluna de uma lista. O uma entidade (ECT). 9
  9. 9. TEMA DE CAPAB u s i n e s s C o n n e c ti vi ty S e rvi c e s • Business Data Item – permite apresentar o detalhe de Administration, acedendo à gestão do Business Datauma instância (item) de uma entidade (ECT). Connectivity Service. A única informação que precisamos • Business Data Item Builder – permite utilizar parâmetros de fornecer é o endereço URL do site onde estas páginasda query string para criar uma instância (item) de uma serão automaticamente criadas e o SharePoint fará o restoentidade (ECT) que pode depois ser utilizada para por nós.alimentar outras web parts, nomeadamente a Business Neste ponto, basta-nos apenas dizer ao Search ServiceData Item web part. que deve indexar uma nova Content Source do tipo Line of • Business Data Related List – permite listar instâncias Business Data e efectuar um Full Crawl. Após a conclusão(itens) de uma entidade (ECT) relacionada. É do crawl a informação externa passa a estar disponívelespecialmente útil para apresentar informação em cenários para ser pesquisada e a informação de cada item seráde Master/Detail. apresentada na respectiva Profile Page. • Business Data Connectivity Filter – permite filtrar ainformação proveniente de um ECT antes que sejaconsumida por outra web part, como a Business Data List User Profilesweb part. • Business Data Actions – apresenta as acções Utilizando os BCS, o SharePoint 201 0 consegue utilizardisponíveis para uma instância (item) de uma entidade fontes de dados externas para complementar a informação(ECT). dos User Profiles. Para isso basta que seja possível mapear User Profiles com itens de um ECT, utilizando um campo de cada lado.Pesquisa Não é possível configurar um ECT como fonte principal para a sincronização de perfis, mas é possível que umaUm dos maiores benefícios oferecidos pelos BCS é a sincronização com Active Directory seja complementadapossibilidade de indexar e realizar pesquisas sobre a com informação proveniente de um ECT.informação externa exposta através dos ECTs como se setratasse de informação armazenada em listas no Integração com Office ClientSharePoint.Para que um ECT seja indexável é necessário que defina, A integração da informação externa nas aplicações dopelo menos, os métodos IDEnumerator e SpecificFinder. O Office 201 0 é outra das novidades do SharePoint 201 0primeiro permitirá ao SharePoint obter os IDs de todos os relacionada com os Business Connectivity Services. Atéitens e o segundo obter o detalhe de cada um. agora, este tipo de funcionalidade só era possível comAdicionalmente, o modelo tem que ter a propriedade desenvolvimentos à medida de razoável complexidade.ShowInSearchUI para que o SharePoint o consiga indexar. Com os BCS é possível apresentar a informação externaMas isto é para que a informação seja indexada. Para que, nas aplicações Office, utilizá-la em cenários offline e, emao realizar uma pesquisa, o utilizador consiga clicar sobre determinados casos, actualizar a informação directamenteum dos resultados e visualizar informação detalhada sobre na fonte de dados externa. Contudo, nem todas aso resultado que seleccionou, precisamos também de aplicações incluídas no Office 201 0 suportam estaconfigurar a Profile Page de cada ECT indexado. integração nativamente. De momento apenas o OutlookUma Profile Page não é mais que uma página em 201 0, o Word 201 0, o Access 201 0, o InfoPath 201 0 e oSharePoint com algumas web parts que recebe o SharePoint Workspace 201 0 conseguem fazê-lo, sendo queidentificador de um item na query string e apresenta cada uma das aplicações utiliza esta tecnologia de formainformação detalhada sobre esse item, incluíndo itens de diferente.ECT relacionados (através de Associations).As Profile Pages são configuradas na Central 10
  10. 10. TEMA DE CAPA B u s i n e s s C o n n e c ti vi ty S e rvi c e sOutlook 201 0 Figura 6 - Informação adicional (não mapeada) do ECTO Outlook 201 0 é uma das aplicações que tira melhor Tal com as restantes aplicações Office, o Outlook tirapartido das funcionalidades cliente dos BCS. Para que seja partido de um mecanismo de cache e sincronização dapossível visualizar a informação exposta através de um informação permitindo ao utilizador trabalhar sobre esta emECT no Outlook 201 0 são necessários dois passos na offline e sincronizando-a automaticamente assim que oconfiguração desse ECT: acesso ao sistema externo fica disponível. 1 . Definir qual o tipo de informação exposto pelo ECT, deentre os tipos de informação manipulados pelo Outlook:Contactos (Contacts), Tarefas (Tasks), Eventos Word 201 0(Appointments) ou Artigos (Posts). Esta configuração podeser feita através do SharePoint Designer ou directamente O Word 201 0 é outras das aplicações Office que temno XML do Modelo. suporte nativo para os BCS. No entanto, os cenários para 2. Mapear os campos do ECT com os campos do Outlook aplicação desta tecnologia são diferentes dos disponíveispara esse tipo de informação. Por exemplo, indicar quais os para Outlook. A utilização dos BCS em Word 201 0 limita-secampos do ECT que correspondem aos campos Last à inserção de informação proveniente de fontes de dadosName, First Name, E-mail Address e outros, no Outlook. externas em documentos através de Quick Parts.Existindo uma External List que exponha a informação do Para quem não conhece, as Quick Parts são uma ECT, passa a ser possível utilizar o botão funcionalidade do Word que permite criar campos para Connect to Outlook disponibilizado pela preenchimento dinâmico da informação no meio do texto de ribbon da lista. Ao pressionar o botão, o um documento. Estes campos podem depois ser SharePoint vai analisar a especificação do preenchidos automaticamente com informação provenienteECT e vai incluí-lo num pacote de instalação Click Once do content type do documento, no SharePoint. Isto incluique é imediatamente instalado no Outlook 201 0 do informação proveniente de uma External Data Columnutilizador como um Add-In. existente na Biblioteca de Documentos em que oUma vez instalado o pacote, a lista aparece na interface do documento está armazenado.Outlook permitindo ao utilizador interagir com a informação O funcionamento é simples:externa como se fossem contactos, tarefas, eventos ou 1 . Numa Biblioteca de Documentos, cria-se uma Externalartigos normais. Caso o ECT defina os métodos Data Column configurando-a para expor a informação denecessários, é ainda possível utilizar o Outlook para um determinado ECT e definindo os campos do ECT queactualizar a informação da fonte de dados externa. Todos são expostos.os campos expostos pelo ECT que não estejam mapeados 2. Cria-se um novo documento nessa biblioteca,em campos do objecto Outlook, são mostrados numa utilizando o botão New da ribbon.secção própria do detalhe desse objecto e podem também 3. Já no Word, através da ribbon Insert, inserimos umaser actualizados. (ou mais) Quick Part, seleccionando a(s) Document Property(s) que corresponde(m) à informação externa que queremos incluir no documento. 11
  11. 11. TEMA DE CAPAB u s i n e s s C o n n e c ti vi ty S e rvi c e s Figura 7 - Quick Parts com informação externa SharePoint Workspace 201 0 4. O Word passa então a permitir que o utilizadorseleccione um item do ECT, utilizando o Entity Data Picker, O SharePoint Workspace 201 0 é a evolução do Groovee popula automaticamente todos os campos relacionados. 2007 e posiciona-se como a ferramenta de acesso offline à informação guardada em SharePoint 201 0, incluindo External Lists. Tal como para os restantes tipos de listas, basta clicar no botão Sync to SharePoint Workspace para que o conteúdo das mesmas seja descarregado para a máquina do utilizador ficando disponível quando este está desligado do servidor. No que respeita aos BCS, o que o SharePoint Workspace faz é descarregar a definição do ECT associado à External List e armazená-la localmente, bem como os forms de inserção, edição e consulta da informação que foram Figura 8 - External Data Picker gerados para essa External List. Tal como as restantes aplicações Office descritas, o SharePoint Workspace utiliza a cache local para garantir a disponibilização da informaçãoAccess 201 0 externa quando o sistema externo não está disponível.O Access 201 0 consegue importar um modelo BusinessData Connectivity (BDC) e apresentar a informação externa Soluções e Ferramentassob a forma de tabelas. No entanto, as tabelas criadas sãoread-only, ou seja, não é possível escrever de volta para a Uma das grandes queixas de quem utilizou o Businessfonte de dados externa. Data Catalog no SharePoint 2007, foi a falta de ferramentas que permitissem uma boa experiência na criação e manipulação da metainformação (modelos). A MicrosoftInfoPath 201 0 ouviu essas queixas e brindou-nos com duas ferramentas fantásticas para utilizar com os Business ConnectivityQuando é criada uma External List, são também gerados Services:forms para inserção, edição e consulta da informação • SharePoint Designer 201 0externa. Por omissão, estes forms são gerados como • Visual Studio 201 0páginas ASP.NET normais mas, utilizando o SharePointDesigner ou a ribbon da External List, é possível criar formsmais inteligentes utilizando InfoPath. Os forms são gerados SharePoint Designer 201 0automaticamente, mas podem depois ser modificadosutilizando o InfoPath. O SharePoint Designer 201 0 é uma ferramenta gratuita eÉ ainda possível arrastar um External Data Picker para um obrigatória para qualquer utilizador avançado ou developerformulário InfoPath e definir uma External List como fonte de SharePoint. Possui um enorme número dede informação, permitindo a leitura e escrita de informação funcionalidades focando-se principalmente na criação deproveniente de fontes de dados externas. soluções sem código, ou seja, soluções de customização 12
  12. 12. TEMA DE CAPA B u s i n e s s C o n n e c ti vi ty S e rvi c e sdo SharePoint sem necessidade de desenvolvimentos àmedida. Figura 1 0 - Editor visual de Modelos BDC no Visual Studio 201 0 Figura 9 - Utilização do SharePoint Designer para gerir ECTs Alguns dos casos de uso possibilitados pelo Visual Studio 201 0 são:No que respeita aos Business Connectivity Services, o • Criar e manipular External Content Types, utilizando oSharePoint Designer 201 0 permite: novo template de projecto Business Data Connectivity • Criar e manipular External Content Types, incluindo Model. Este template inclui um conjunto de designers quealterar configurações, criar novos métodos e mapear ECTs permite a edição visual do Modelo e respectivos ECTs, ecom objectos Office. Na criação de ECTs apenas é possível possibilita ainda o desenvolvimento de soluções utilizandoefectuar ligações a bases de dados SQL Server, Web código .Net para acesso a virtualmente qualquer fonte deServices cujos schemas sejam suportados pelos BCS ou dados externa.assemblies .Net existentes. • Criar componentes reutilizáveis para os BCS utilizando • Criar e configurar External Lists com base em ECTs já os vários pontos de extensibilidade da API dos BCS, comocriados. sejam Code Actions que podem ser utilizadas dentro do • Gerar e editar formulários InfoPath de suporte às Outlook, External Data Parts para utilização em task panesExternal Lists. declarativas no Outlook, actividades para workflows e • Utilizar informação externa em workflows. outros. • Criar web part pages e profile pages • Criar Add-Ins para aplicações Office com suporte paraEstas funcionalidades permitem a utilização dos BCS sem BCS, utilizando o object model dos BCS.qualquer desenvolvimento à medida e adaptam-se às • Criar workflows à medida que tiram partido denecessidades mais simples e comuns. informação em External Lists ou utilizam o object model dos BCS.Visual Studio 201 0 Tipos de Solução por FerramentaCom o Visual Studio 201 0 podemos criar soluções maiscomplexas para casos em que as funcionalidades do A tabela na página seguinte ajuda a seleccionar aSharePoint Designer 201 0 não são suficientes. ferramenta ideal para cada necessidade.Adicionalmente, com o Visual Studio 201 0 podemos criarcomponentes reutilizáveis que depois poderão serincorporados em soluções através do SharePoint Designer. 13
  13. 13. TEMA DE CAPAB u s i n e s s C o n n e c ti vi ty S e rvi c e s dados adicional para a sincronização de perfis do SharePoint. • Necessidade de sincronizar contactos que estão armazenados num sistema de negócio ou ERP. Utilizando os BCS é possível definir um ECT que expõe esses contactos através de uma External List e ligá-la ao Outlook onde serão geridos como contactos normais. Este cenário permite ainda que os utilizadores tenham acesso aos contactos mesmo quando estão fora do escritório, em modo offline.Casos de Uso • Necessidade de apresentar informação proveniente de fontes de dados distintas. Utilizando o conector paraUma das perguntas mais frequentes relacionadas com a assemblies .Net e desenvolvendo um ECT com o Visualutilização de Business Connectivity Services é quais os Studio 201 0, podemos construir cenários de acesso acasos de uso desta tecnologia ou, de outra maneira, múltiplas fontes de dados com agregação dos mesmosquando devo utilizar os BCS. numa única entidade.Alguns dos casos de uso mais comuns para a utilização deBCS são: • Necessidade de indexar e pesquisar informação residente num sistema de negócio ou ERP. Os BCS • Necessidade de apresentar informação de uma base de permitem ao serviço de pesquisa do SharePoint indexardados SQL Server. Utilizando BCS é possível apresentar e, conteúdos expostos através de ECTs e pesquisá-los comocaso seja necessário, modificar a informação utilizando se a informação estive armazenada no SharePoint.External Lists sem ser preciso desenvolver uma única linha Há muitos outros cenários onde os BCS podem ser úteis,de código à medida. É um back-office instantâneo. por vezes apenas como um dos componentes da solução. • Necessidade de complementar os User Profiles dosutilizadores do domínio com informação proveniente do Funcionalidades por Versão do SharePointsistema de gestão de Recursos Humanos ou ERP. Talcomo já foi falado, os BCS permitem responder a este A infraestrutura utilizada pelos Business Connectivityrequisito permitindo configurar um ECT como fonte de Services está disponível em todas as versões do 14
  14. 14. TEMA DE CAPA B u s i n e s s C o n n e c ti vi ty S e rvi c e sSharePoint, incluíndo o SharePoint Foundation 201 0. Noentanto, nem tudo vem incluído na versão gratuita. A tabela Connecting to a .NET Framework Source Using Businessabaixo ajuda a clarificar quais as funcionalidades que estão Connectivity Services in Office 201 0incluídas em cada uma das versões do SharePoint 201 0. Visual How To sobre como desenvolver um ECT usando Visual Studio 201 0 para obter dados de uma fonte externa.O suporte para Business Connectivity Services em http://msdn.microsoft.com/en-aplicações Office requer o Microsoft Office 201 0 us/library/ff394331 (office.1 4).aspxProfessional Plus, ou superior. Microsoft Business Connectivity Services Secção do SDK do SharePoint 201 0 dedicada aosLinks Úteis Business Connectivity Services.Aqui ficam alguns links úteis para quem está agora a http://msdn.microsoft.com/en-us/library/ee556826.aspxcomeçar e quer saber mais sobre Business ConnectivityServices. Business Connectivity Services Resource Center Resource Center dedicado aos Business ConnectivityMicrosoft Business Connectivity Services Team Blog Services, no TechNet.O blog official da equipa que desenvolveu os BCS, com http://technet.microsoft.com/en-imensos artigos com vários níveis de complexidade. us/sharepoint/ee51 8675.aspxObrigatório para todos os interessados nesta tecnologia.http://blogs.msdn.com/b/bcs/ Business Connectivity Services: Technical Articles Artigos técnicos da MSDN relacionados com BusinessBCS Team Channel Connectivity Services.O canal no YouTube onde alguns vídeos foram publicados http://msdn.microsoft.com/en-us/library/gg481 768.aspxpela equipa de produto.http://www.youtube.com/user/MOSSBCSTeam Link para o artigo: http://tinyurl.com/RPED28-04 AUTOR Escrito por André Vala Licenciado e Mestre em Engenharia Informática e de Computadores pelo Instituto Superior Técnico, é actualmente consultor sénior na |create|it| e co-fundador da Comunidade Portuguesa de SharePoint . Autor do blog http://blogit.create.pt/blogs/andrevala, trabalha com SharePoint desde 2006, altura em que surgiu a primeira versão beta do SharePoint 2007. Tem participado em vários projectos nacionais e internacionais sobre SharePoint, e participa frequentemente como orador em eventos da Microsoft relacionados com o mesmo tema. 15
  15. 15. A PROGRAMARLua – Linguagem de Programação (Parte 8)jQuery 1.5 e AjaxDatagrid em Windows Presentation FoundationPlanos de Execução em ORACLESmarty PHP Template Engine
  16. 16. A PROGRAMARLu a – Li n gu a ge m d e Pro gra m a ç ã o ( Pa rte 8 )Este artigo trata o uso de operações de aleatoriedade e a valor estabelecido junto a parâmetro “n” e pode ainda sermanipulação de cadeias (operações de detecção de usada com os parâmetros “n” e “m” para gerar valorestamanho de cadeias – revisão, repetição de caracteres, inteiros entre “n” e “m”.separação de cadeias, busca e substituição de caracteres, O programa seguinte efectua a acção de geração deconversão em modo ASCII). valores aleatórios da forma mais simples possível. -- inicio do programa ALEAT01ERRATA math.randomseed(0)Por falha pessoal no artigo anterior (Parte 7) ficou indicadoapós a conclusão que esta parte trataria do tema: arquivo. local function SORTEIO()No entanto, este assunto fora apresentado na sexta parte N = math.random()desta série de artigos. return N endALEATORIEDADE for I = 1, 5 do X = SORTEIO()É sabido que aleatoriedade é a característica do que é print(X)indeterminado ou incerto. Uma das possibilidades endoperativas de uma linguagem de programação é acapacidade de “gerar” valores numéricos aleatórios. O -- fim do programa ALEAT01termo: gerar é grafado entre aspas devido a característicaque os computadores possuem de fazer este trabalho de Em seguida escreva o código de programa em um editor deuma forma considerada não real, ou seja, por meio de uma texto, gravando-o com o nome aleat01 .lua e execute-o comacção considerada pseudo-aleatória. a linha de comando lua 5.1 aleat01 .lua.Para esta acção em linguagem Lua há as funções de A função math.randomseed() necessita ser usada a frentegeração de números aleatórios: math.randomseed() e da função math.random() para que math.random() consigamath.rendom(). gerar os valores aleatórios.Os valores gerados por estas funções são valores pseudo- Ao executar o programa várias vezes os valoresaleatórios, e necessitam ser usados com alguma cautela, apresentados como saída sempre serão:tanto que há no manual de referência da linguagem Lua aadvertência: Nenhuma garantia pode ser dada para suas 0.0011 597033600879propriedades estatísticas. 0.23557237464522A função math.randomseed(n) faz uso do valor “n” como 0.6481 521 04251 23parâmetro de semente para a geração de valores 0.074373607593005aleatórios. 0.270241 401 40996A função math.random([n[,m]]) pode ser usada de trêsformas diferentes: usada sem parâmetros o que fará a Os valores se repetem pelo fato de estar sendo utilizado ogeração de valores entre 0 e 1 , pode ser usada apenas valor de semente “0” (zero). Se o valor de semente forcom o parâmetro “n” para gerar valores inteiros entre 1 e o mudado para 1 , 2, 3 ou outro valor qualquer serão 17
  17. 17. A PROGRAMARLu a – Li n gu a ge m d e Pro gra m a ç ã o ( Pa rte 8 )conseguidos valores diferentes. No entanto para um Observe que uso da função os.time() como valor sementemesmo valor de semente para mais de uma execução ter- permite um comportamento de aleatoriedade maisse-á a apresentação dos mesmos valores. Uma forma de convincente.mudar um pouco este comportamento é fazer uso da Agora imagine que se queira sortear valores numéricosfunção os.time() como valor de semente. A função os.time() entre 1 e 5. Assim sendo, observe o código seguinte:retorna o valor do tempo corrente. Assim sendo, observe ocódigo de programa seguinte: -- inicio do programa ALEAT03 -- inicio do programa ALEAT02 math.randomseed(os.time()) math.randomseed(os.time()) local function SORTEIO() N = math.random(1,5) local function SORTEIO() return N N = math.random() end return N end for I = 1, 5 do X = SORTEIO() for I = 1, 5 do print(X) X = SORTEIO() end print(X) end -- fim do programa ALEAT03 -- fim do programa ALEAT02 Em seguida escreva o código de programa em um editor deEm seguida escreva o código de programa em um editor de texto, gravando-o com o nome aleat03.lua e execute-o comtexto, gravando-o com o nome aleat02.lua e execute-o com a linha de comando lua 5.1 aleat03.lua.a linha de comando lua 5.1 aleat02.lua. Execute o programa algumas vezes. Note que o primeiroAo se executar o programa várias vezes notar-se-á que os valor é sempre o mesmo em toda a execução, somente osresultados apresentados são levemente diferentes. Por demais valores são apresentados diferentemente. Este éexemplo, a seguir apresenta-se os valores de saída de um comportamento operativo da linguagem Lua que geraduas execuções sequenciais do programa: dúvidas nos iniciantes no uso desta linguagem. Não se preocupe em seguida será mostrado como contornar este0.85509811 700797 tipo de ocorrência.0.76201 66631 061 7 Observe que para gerar valores entre 1 e 5 fora usado: N =0.21 799371 31 8705 math.random(1 ,5).0.1 767021 6986602 O próximo programa mostra como contornar o problema de0.249671 9260231 3 repetição do primeiro valor da sequência sorteada. -- inicio do programa ALEAT040.85558641 31 59580.402081 36234626 math.randomseed(os.time())0.943876461 07364 math.random()0.84850611 89611 50.82357249671 926 local function SORTEIO() 18
  18. 18. A PROGRAMAR Lu a – Li n gu a ge m d e Pro gra m a ç ã o ( Pa rte 8 ) Nas operações de manipulação de cadeias há ainda a N = math.random(1,5) possibilidade de separar partes de uma cadeia. Para este return N efeito faz-se uso da função string.sub(texto, início, [fim]), end onde texto é a indicação da cadeia que será separada, início é a indicação da posição de separação inicial que for I = 1, 5 do pode ser positiva ou negativa e fim - indicação opcional da X = SORTEIO() posição final de separação. print(X) Em seguida escreva o código de programa em um editor de end texto, gravando-o com o nome cadeia02.lua e execute-o com a linha de comando lua 5.1 cadeia02.lua. -- fim do programa ALEAT04 -- inicio do programa CADEIA02Em seguida escreva o código de programa em um editor detexto, gravando-o com o nome aleat04.lua e execute-o com X = "COMPUTADOR"a linha de comando lua 5.1 aleat04.lua.Execute o programa algumas vezes e note a diferença print(string.sub(X))nesta versão. Observe o uso da função math.random() logo print(string.sub(X, 1))após o uso da função math.randomseed(os.time()). Este print(string.sub(X, 1, 3))pequeno ajuste faz o acerto desejado. print(string.sub(X, 4, 5)) print(string.sub(X, 6, 7)) print(string.sub(X, 8))MAIS MANIPULAÇÃO DE CADEIAS print(string.sub(X, -5))No sexto artigo desta série fora apresentada uma forma de -- fim do programa CADEIA02detecção da quantidade de caracteres de uma cadeia como uso do operador # por meio da instrução de código Após a execução serão apresentados os textosprint(#"Linguagem Lua") que mostra como resultado o valor COMPUTADOR, COM, PU, TA, DOR e TADOR.1 3. Outro factor de manipulação de cadeias de caracteres é aEsta mesma acção pode ser efectuada por meio da função realização de operações de substituição de caracteres destring.len(texto) como apresentado no quinto artigo desta uma cadeia. Para tanto, use a função de substituiçãosérie, onde texto é a indicação da cadeia que terá contada string.gsub(texto, busca, troca, vezes), onde texto é aa quantidade de caracteres. cadeia de texto definida, busca é o carácter a serEm seguida escreva o código de programa em um editor de localizado, troca é o carácter que será substituído e vezestexto, gravando-o com o nome cadeia01 .lua e execute-o indica o número máximo de substituições a seremcom a linha de comando lua 5.1 cadeia01 .lua. efectuadas, sendo este último argumento opcional. Em seguida escreva o código de programa em um editor de -- inicio do programa CADEIA01 texto, gravando-o com o nome cadeia03.lua e execute-o com a linha de comando lua 5.1 cadeia03.lua. X = "Linguagem Lua" -- inicio do programa CADEIA03 print(string.len(X)) X = "A BOLA AZUL APARECEU" print(string.gsub(X,"A","4")) -- fim do programa CADEIA01 print(string.gsub(X,"A","X",2)) -- fim do programa CADEIA03 19
  19. 19. A PROGRAMARLu a – Li n gu a ge m d e Pro gra m a ç ã o ( Pa rte 8 )Observe que após a execução, o programa mostra além datroca realizada o número de trocas realizadas. print(string.byte(X, -5))Outra acção para manipulação de cadeias é a funçãostring.rep(texto, vezes), onde texto é a cadeia a ser -- fim do programa CADEIA05repetida e vezes é a definição do número de repetições.Em seguida escreva o código de programa em um editor de O programa apresenta os valores:texto, gravando-o com o nome cadeia04.lua e execute-o - 65com a linha de comando lua 5.1 cadeia04.lua. - 65 66 67 - 68 69 -- inicio do programa CADEIA04 - 65 66 67 68 69 70 - 66 X = "OBA " A acção inversa é conseguida com o uso da função print(string.rep(X,2)) string.char(código1 , código2, …, códigoN), onde cada argumento usado é um valor ASCII. -- fim do programa CADEIA04 Em seguida escreva o código de programa em um editor de texto, gravando-o com o nome cadeia06.lua e execute-oOutro efeito com cadeias é a obtenção do código ASCII dos com a linha de comando lua 5.1 cadeia06.lua.caracteres que formam a cadeia com a funçãostring.byte(texto, início, [fim]), onde texto é a indicação da -- inicio do programa CADEIA06cadeia que terá seus caracteres convertidos em formatoASCII, início é a indicação da posição de separação inicial print(string.char(65))que pode ser positiva ou negativa e fim - indicação opcional print(string.char(65, 66, 67))da posição final de separação.Em seguida escreva o código de programa em um editor de -- fim do programa CADEIA06texto, gravando-o com o nome cadeia05.lua e execute-ocom a linha de comando lua 5.1 cadeia05.lua. CONCLUSÃO -- inicio do programa CADEIA05 Neste artigo o enfoque foi o uso dos recursos de geração X = "ABCDEF" de valores aleatórios e alguns detalhes sobre a print(string.byte(X, 1)) manipulação de cadeias. print(string.byte(X, 1, 3)) No próximo artigo a ênfase será dada a criação e uso de print(string.byte(X, 4, 5)) módulos em linguagem Lua. print(string.byte(X, 1, 6)) Link para o artigo: http://tinyurl.com/RPED28-06 AUTOR Escrito por Augusto Manzano Natural da Cidade de São Paulo, tem experiência em ensino e desenvolvimento de programação de software desde 1 986. É professor da rede federal de ensino no Brasil, no Instituto Federal de Educação, Ciência e Tecnologia. É também autor, possuindo na sua carreira várias obras publicadas na área da computação. 20
  20. 20. A PROGRAMARj Qu e ry 1 . 5 e AJ AXO objectivo deste artigo é expor a funcionalidade de AJAX também iremos rever mais à frente) que aceitam umaque o jQuery inclui, ao detalhe, e é também falar sobre as função como parâmetro que é chamada quando o pedidonovas funcionalidades introduzidas pela versão 1 .5 da terminar a sua execução, ou mesmo que estes callbacksframework, neste caso, os Deferreds. sejam assignados após o pedido AJAX ter sido executado,Nesta nova versão toda a funcionalidade de AJAX foi estas são chamadas de qualquer modo, esta é uma dasredesenhada, pelo que iremos entrar no tema das novas novidades deste interface de Promises, permite assignarfuncionalidades através da sua utilização no próprio AJAX e callbacks à posteriori, o que não era possível nas versõesdepois expandindo a outras alterações também com anteriores às 1 .5.relevância. Podemos ver aqui o exemplo de como assignar estes callbacks, e verificar que mesmo após o pedido serComeçando pelo princípio, o método mais simples de completamente executado, assignando novos callbacks,efectuar um pedido AJAX em jQuery é utilizando a função estes executam de qualquer modo:jQuery.get: /*Assignar handlers imediatamente após var ajaxObj = $.get(ajax/mypage.aspx, executar o pedido e function(data) { guardar numa var o objecto jqXHR*/ $(#ajaxDiv).html(data); var xhrObj = $.get("ajax.aspx", function() alert(callback called!); { }); alert("sucesso!"); })Este é o método mais simplificado, especificamos .success(function() { alert("novamenteunicamente que url irá retornar os dados, e a função de sucesso"); })callback retorna-nos os dados e aí poderemos adicionar .error(function() { alert("erro"); })qualquer lógica necessária. .complete(function() { alert("pedidoOs dados que retornam do nosso pedido podem ser texto, completo"); });JSON, XML ou JavaScript, e a função infere o tipo, poisneste caso não o estamos a especificar. Além da variável //alguma lógica adicional (...)data, poderíamos especificar outras duas variáveis nafunção de callback, a segunda seria o textStatus do XHR /*adicionar outro callback de complexão aqui,(XMLHttpRequest) e a terceira seria o mesmo que o e verificar que é executado mesmo que oajaxObj irá conter, um jqXHR (que passou a ser um jqXHR pedido já tenha sido completamente efectuadoa partir da versão 1 .5, anteriormente era um XHR nativo). anteriormente, devido às funcionalidades dasNeste exemplo caso retornássemos HTML seria adicionado Promises*/ao DOM como innerHTML do objecto com o id ajaxDiv e xhrObj.complete(function(){ alert("completomostraria um alert, depois do pedido retornar com sucesso. novamente"); });O objecto jqXHR implementa o interface de Promises (queiremos descortinar mais à frente na funcionalidadeDeferreds do jQuery 1 .5) e inclui toda a sua funcionalidade, Em versões anteriores do jQuery, no caso de utilizarmospelo que inclui os métodos error() success() e complete() esta função get(), se existisse um erro não conseguiríamospara acordar com os callbacks da função $.ajax (que assignar um callback a não ser através da função global 21
  21. 21. A PROGRAMARj Qu e ry 1 . 5 e AJ AXajaxError(), ou seja, não conseguiríamos ter um error Também existe a possibilidade de enviar parâmetros, comohandling local e objectivo, a não utilizando uma função mais o segundo parâmetro,à semelhança do get().genérica com a ajax(). Existe também a função post() que funciona do mesmoUma ressalva, os pedido efectuados com a função get() exacto modo que a get() mas ao invés de enviar os dadosque não sejam pedidos JSONP ou Script, não permitem por HTTP GET, envia precisamente por HTTP POST.cross-domain, como é usual.Se quisermos efectuar outro tipo de pedidos com a função Caso o nosso objectivo seja exclusivamente obter JSON,get() : existe uma função específica para tal, a getJSON(), que tem algumas especificidades, tais como no caso de especificarmos adicionar ao url o texto callback=? O pedido //fazer apenas o request e ignorar resultado passa a ser tratado com um pedido JSONP, e não JSON, o $.get("ajax.aspx"); que permite pedidos cross domain sem qualquer problema. //passar parâmetros simples e ignorar O segundo parâmetro pode ser utilizado para enviar resultados parâmetros, como nas outras funções. $.get("ajax.aspx", { tipo: "noticias", quantas: "10" } ); $.getJSON(outputjson.json, function(data) { //passar arrays e ignorar resultados $(.result).html(<p> + data.foo + </p> $.get("ajax.aspx", { valores[]: ["10", + <p> + data.baz[1] + </p>); "20"]} ); }); //combinar parâmetros com callback //estrutura de JSON esperada: $.get("ajax.aspx", { param1: "teste" }, { function(data) { "foo": "The quick brown fox jumps over the alert("callback executado!"); lazy dog.", }); "bar": "ABCDEFG", //receber um JSON já parsed "baz": [52, 97] $.get("ajax.aspx", { param1: "teste" }, } function(data) { alert(data.prop1); // valor da variável Passando à função mais completa e talvez a mais utilizada, data: { "prop1": "valor1" } a função ajax(), podemos definir o url, e imensos settings, }); vou passar aqui pelos mais importantes:Outra das funcões para efectuar pedidos AJAX é a load(): async: permite definir se o pedido é ou não executado assíncronamente; //carrega o resultado no/s objecto do DOM beforeSend(jqXHR, settings): este callback é executado especificado/s pelo selector imediatamente antes do pedido ser executado, e caso $(#ajaxDiv).load(ajax.aspx, function() { retornemos false, o pedido não é executado; alert(HTML carregado); complete(jqXHR, textStatus): este callback é executado }); quando o pedido foi completamente executado, a partir da //carrega o resultado no/s objecto do DOM versão 1 .5 podemos passar aqui um array de funções que especificado/s pelo selector, mas apenas o serão todas executadas; que faz match com o selector passado ao lado data: permite passar parâmetros no formato querystring do url (valor1 =X&valor2=y...); $(#ajaxDiv).load(ajax.aspx #mainContent); dataType: permite definir exactamente que tipo de dados iremos receber, json, script, text, html, jsonp, xml (podemos 22
  22. 22. A PROGRAMAR j Qu e ry 1 . 5 e AJ AXpassar múltiplos valores, por exemplo “jsonp xml”, para persista qualquer cache*/efectuar um pedido jsonp e converter para XML); $.ajax({error(jqXHR, textStatus, error): callback em caso de erro; url: "teste.html",statusCode: definir um callback conforme o HTTP error cache: false,code: success: function(html){ $.ajax({ $("#resultado").append(html); statusCode: {404: function() { } alert(page not found); }); } }); /*efectuar um pedido que ao estando o seu resultado a ser utilizado de imediato para assignar à  variável html, devemos especificasuccess(data, textStatus, jqXHR): callback executado que não pode ser assíncrono, pois casoquando o pedido é retornado com sucesso; contrário poderíamos tentar usar a variáveltype: tipo de pedido “GET” ou “POST”; html e esta não iria ter o valor esperado.*/url: URL do pedido. var html = $.ajax({ url: "page.aspx",Podemos utilizar a função ajaxSetup() para definir estes async: falsesettings globalmente na nossa aplicação, sendo que depois }).responseText;podemos fazer override em cada caso aos settings que sealteram, centralizando tudo o que são settings transversais. /*o mesmo caso que o anterior, mas aquiExemplos: enviamos parâmetros e temos um callback de sucesso, e o o dataType é especificado. //obter um script via AJAX (GET) Ao utilizar o global a false, estamos a dizer $.ajax({ explicitamente que os eventos globais de ajax type: "GET", não vão ser disparados, logo os seus url: "my.js", callbacks não vão executar, isto caso estejam dataType: "script" definidos via ajaxStart() e ajaxStop()*/ }); var bodyContent = $.ajax({ url: "script.aspx", //fazer o pedido por POST, enviando global: false, parámetros e com callback type: "POST", $.ajax({ data: ({id : this.getAttribute(id)}), type: "POST", dataType: "html", url: "ajax.aspx", async:false, data: "nome=Ricardo&location=Lisboa", success: function(msg){ success: function(msg){ alert(msg); alert("Dados enviados: " + msg); } } } }); ).responseText; /*pedir a última versão de uma página, especificando que não queremos que o browser 23
  23. 23. A PROGRAMARj Qu e ry 1 . 5 e AJ AXCom esta especificação extensa do AJAX, vamos passar às Como podemos ver, deste modo podemos organizar onovas funcionalidades do jQuery 1 .5, começando pelos já código de maneira diferente, até podemos criar umamencionados Deferreds (Promises interface). abstracção à função de ajax no contexto da nossaEsta funcionalidade tem como objectivo fazer com que uma aplicação e ter funções para atribuição de callbacks, quetarefa e a lógica executada após esta estar completa sejam são executados numa metodologia FIFO (First in first out).desacoplados, quer isto dizer que podemos assignar Não temos de definir callbacks de complexidade extremamúltiplos callbacks para o resultado de uma tarefa e pelo facto de apenas podermos definir um e até podemosmesmo após esta estar completa podemos continuar a começar a usar esta funcionalidade de um modoadicioná-los e estes são executados do mesmo modo. Esta inteligente, para por exemplo, executar determinado códigotarefa pode ser assíncrona ou não, nada obriga que o seja. caso algumas funções ajax tenham sido executadas comVisto que o AJAX do jQuery 1 .5 foi redesenhado para incluir sucesso, isto de uma forma extremamente simples,os Deferreds, podemos usufruir deles directamente: utilizando a função $.then(): // este pedido é assíncrono por omissão function doAjax() { var req = $.get(foo.htm) return $.get(ajax.aspx); .success(function(response) { } //em caso de sucesso }) function doMoreAjax() { .error(function() { return $.get(ajax2.aspx); //em caso de erro } }); $.when( doAjax(), doMoreAjax() ) //isto até pode ser executado antes do get .then(function(){ acima console.log(Executado quando ambos algumaFuncao(); os pedidos estão completos!); }) /*definir algo mais a ser executado em caso .fail(function(){ de sucesso, que pode ou não já ter ocorrido, console.log(Executado quando um ou mas com os deferreds realmente não interessa, mais pedidos falharam!); é executado de qualquer forma*/ }); req.success(function(response) { /*tomar alguma acção com a resposta isto vai ser executado quando o sucesso ocorrer, Este código funciona porque o AJAX agora retorna uma ou caso este já tenha ocorrido, é disparado promise() que é utilizada para monitorizar o pedido de imediato, caso os outros callbacks de assíncrono, esta promise() é um objecto apenas de leitura sucesso já tenham sido executados que existe no resultado da tarefa. Os deferreds verificam a */ existência da função promise() para determinar se um }) objecto é observable ou não, que é o que lhe permite funcionar como deferred. A função when() aguarda pela execução das funções AJAX passadas por parâmetro eDeste modo podemos ver que já não estamos limitados a quando estas são executadas os métodos then() e fail() sãodefinir apenas um callback para error, sucesso e executados, conforme o estado da tarefa. Importante referircomplexão, podemos definir quantos quisermos, e mais novamente que os callbacks são executados pela ordemimportante, quando quisermos! cujo são assignados a cada método. 24
  24. 24. A PROGRAMAR j Qu e ry 1 . 5 e AJ AXUma nota importante: os deferreds aceitam ou funções ou código “típico”:arrays de funções, que nos permite definir conjuntos de Podemos ver aqui a utilização dos deferreds num blococomportamentos na nossa aplicação e passá-los simples, e a sua explicação é muito simples:genericamente, ao invés de passarmos apenas uma funçãoisolada. function getData(){Podemos verificar o estado de um deferred através das return $.get(/echo/html/);suas funções isRejected() e isResolved(). }No caso do AJAX o que obtemos é um acesso a uma partedo deferred, visto que se tivessemos acesso completo function showDiv() {poderíamos controlar quando os callbacks são executados var dfd = $.Deferred();através da função resolve() e poderíamos invocá-los antesdos pedidos realmente serem executados, o que iria $(#foo).fadeIn( 1000, dfd.resolve );quebrar a lógica, logo temos apenas acesso a uma parte dodeferred, à promise(), que é apenas de leitura, como já foi return dfd.promise();referido. }Em termos de métodos, os que utilizámos até agora foram $.when( getData(), showDiv() )o then(), success() e fail(), também falámos do complete() .then(function(result) {no caso de AJAX, mas existem mais métodos que podemos console.log(A animação e o pedidoutilizar, especialmente no caso de estarmos a lidar com AJAX foram executados);AJAX. O método escolhido depende exclusivamente do });estado ao qual queremos fazer bind.Para todos os deferreds existem os seguintes métodos:- then(doneCallbacks, failedCallbacks); Na função showDiv estamos a criar um objecto deferred- done(doneCallbacks); novo, e retornamos a promise(). Este deferred como o- fail(failCallbacks); código o mostro é resolvido assim que o fadeIn terminar, pois o dfd.resolve foi definido como callback deste fadeIn.Os deferreds de AJAX têm 3 métodos adicionais que se O getData, retorna um objecto compatível com deferredpodem especificar, 2 dos quais invocam um dos acima (não exactamente igual, visto que é um AJAX e como já foiespecificados. Estes métodos específicos existem referido o AJAX não é um deferred “simples”), e como oexclusivamente para não quebrar a compatibilidade com os objecto retornado pelo getData, tem o método promise, énomes dos callbacks para AJAX que existiam nas versões tratado com deferred e o when() aguarda que ambosanteriores de jQuery: estejam no estado resolved, após estarem, executa o- success(doneCallbacks); -> maps to done() callback passado no método then() e escreve na consola.- error(failCallbacks); -> maps to fail() Neste artigo podemos observar todo o potencial do AJAX, aExiste também o método complete() que é invocado após a sua evolução nesta nova versão 1 .5 e também a grandefunção AJAX ser executada, retorne ou não erro. Ao nova funcionalidade que são os deferreds.contrário do success e do error o complete é um alias para O jQuery está em constante evolução, esta é uma daso done, que é resolvido assim que o pedido AJAX termina, novas features da versão 1 .5, como foi demonstrado, temindependentemente do seu resultado. um potencial enorme e uma abrangência e influência- complete(completeCallbacks); grandes, visto que até afectou áreas core da framework. Stay tuned!Um exemplo de utilização de deferreds num bloco de 25
  25. 25. A PROGRAMARj Qu e ry 1 . 5 e AJ AX Link para o artigo: http://tinyurl.com/RPED28-08 AUTOR Escrito por Ricardo Rodrigues É técnico Nível III em Informática/Gestão pela Fundação Escola Profissional de Setúbal, tendo ingressado após na FCT da Universidade Nova de Lisboa. Posteriormente frequentou vários cursos da Microsoft em diversas áreas como Windows Forms,ASP.NET, Securing .NET Applications, WCF, WWF, Web Services e COM+ tendo obtido as certificações MCP .NET 2.0, MCAD .NET 1 .1 , MCSD .NET 1 .1 , MCPD Windows, Web e Distributed Applications e MCPD - Enterprise Applications Developer. (MCP Profile) Contribui activamente em comunidades como StackOverflow e também possui um blog/twitter como temática relacionada: Blog / @ricmrodrigues 26
  26. 26. A PROGRAMARDatagrid em Windows Presentation FoundationNeste artigo pretendo apresentar a Datagrid em Windows MinColumnWidth; ColumnHeaderHeight; permitem definir aPresentation Foundation (WPF) na .Net Framework 4.0. largura, largura máxima, largura mínima e a altura doVou começar por uma breve apresentação teórica e em cabeçalho da coluna.seguida irei apresentar vários exemplos. De salientar que • RowHeight; MinRowHeight: permitem definir anão terei em conta Design Patterns. altura e altura mínima da linha. • GridLinesVisibility: permite definir a visibilidadeA DataGrid é um controlo que permite apresentar dados, das linhas que delimitam as linhas e colunas. Caso sejamrepresentando cada linha um item de uma lista de objectos visíveis as propriedades HorizontalGridLinesBrush edo mesmo tipo e as colunas representam as várias VerticalGridLinesBrush permitem definir aparência dascaracterísticas do objecto. Ou seja, se na instância da linhas.datagrid apresento uma lista de empregados, cada linha • SelectionMode; SelectionUnit permitem definir orepresenta um empregado e cada coluna representa uma modo de selecção dos itens, ou seja, se é possívelpropriedade do empregado. seleccionar mais de que um item e se é permitido seleccionar linha(s) completa(s) ou célula(s).A classe DataGrid está incluída no namespace • AutoGenerateColumns: permite gerarSystem.Windows.Controls e é um selector que permite automáticas as colunas da datagrid. Para a geraçãoseleccionar mais do que um item ao mesmo tempo e tem automática é considerada todas as propriedades do tipo depor base a classe ItemsControl, que é um Controlo e que objecto em causa, ou no caso de se estar a usar umimplementa a interface IAddChild. A seguinte imagem dataTable a geração é baseada nas colunas da dataTable.mostra-nos esta hierarquia de classes. • Columns: permite obter a colecção de colunas. • CellStyle: permite definir o estilo da célula. • ColumnHeaderStyle: permite definir o estilo do cabeçalho da coluna. • CanUserAddRows: permite que o utilizadoVejamos agora algumas propriedades, métodos e eventos adicione novos itens.relevantes da DataGrid. • CanUserDeleteRows: permite que o utilizado apague itens. • CanUserReorderColumns permite que oAs propriedades mais relevantes são: utilizador organize as colunas. • Name: permite definir o nome. • CanUserResizeColumns: permite que o utilizador • Foreground: permite definir a cor da letra. redimensione as colunas. • Background: permite definir a cor de fundo. • CanUserResizeRows: permite que o utilizador • AlternatingRowBackground; AlternationIndex: redimensione as linhas.permitem definir a cor de fundo de cada linha, de forma • CanUserSortColumns: permite que o utilizadoralternada. ordene os itens ao fazer duplo clique no cabeçalho da • Width; Height; MaxHeight; MinWidth; MaxWidth; coluna.MinHeight: permitem definir a largura, altura e seus valores • CurrentColumn: permite obter a coluna actual.mínimos e máximo. ActualHeight; ActualWidth permitem • CurrentCell: permite obter a célula actual.obter qual é o valor actual da altura e da largura. • CurrentItem: permite saber o item actual. • ColumnWidth; MaxColumnWidth; • SelectedCells: permite saber quais as células 27

×