Criação de uma aplicação Web ASP.NET MVC5 usando Code First

Tamanho: px
Começar a partir da página:

Download "Criação de uma aplicação Web ASP.NET MVC5 usando Code First"

Transcrição

1 Criação de uma aplicação Web ASP.NET MVC5 usando Code First ASP.NET MVC é um framework para desenvolvimento de aplicações web que usa os padrões MVC (Model View Controller) e Convention over Configuration. O padrão MVC aplicado a aplicações web conduz a uma separação de responsabilidades. Esta separação explícita de responsabilidades adiciona uma pequena quantidade de complexidade extra ao projeto de uma aplicação, mas os benefícios compensam o esforço extra. Modelos: são classes que representam o domínio. Os objetos do domínio encapsulam os dados armazenados numa base de dados assim como o código usado para manipular esses dados e para aplicar lógica de negócio específica do domínio. Incluem a camada de acesso a dados (Data Access Layer DAL) podendo usar uma ferramenta como Entity Framework. Vistas: são templates para gerar dinamicamente HTML. Controladores: classes que respondem às interacções do utilizador, acedem ao Modelo e decidem que Vista usar. Em Asp.Net estas classes têm o sufixo Controller. O framework ASP-NET MVC usa convenções sobre configurações (Convention over Configuration), o que permite fazer assunções baseadas nos nomes dos diretórios. O uso de convenções reduz a quantidade de código que é necessário escrever, e também facilita a compreensão do projeto por outros desenvolvedores. Construção de uma aplicação ASP.NET MVC 5 usando Visual Studio 2015 File > New > Project > Visual C#, Web >.Net Framework 4.6, ASP.NET Web Application (.NET Framework) Name: MvcApplication1 ASP.NET 4.6 Templates: MVC contém o princípio de uma aplicação Web MVC, incluindo funções de gestão de contas. Authentication: Individual User Accounts É possível correr a aplicação logo após ser criada. 1. Controladores Os controladores respondem aos pedidos HTTP e retornam informação para o browser. Recebem os dados de entrada, muitas vezes efetuam mudanças no modelo e fornecem dados para a vista. São responsáveis pelo fluxo da aplicação.

2 Nos frameworks Web tradicionais um URL era mapeado num ficheiro do disco do servidor web. Por exemplo um pedido feito com o URL /Produtos.aspx ou /Produtos.php é processado pelos ficheiros Produtos.aspx ou Produtos.php. Em MVC o mecanismo de routing mapeia um URL num método de uma classe Controller. O mecanismo de routing decide que classe Controller instanciar, que método de ação invocar, e fornece os argumentos necessários a esse método. O método de ação do controlador decide que vista usar e a vista gera o HTML. Asp.Net MVC implementa a variante Front Controller do padrão MVC. 1. Models > Adicionar classe Models > botão direito do rato: Add > Class > Name: Livro.cs Add Colocar propriedades dentro da classe Livro, que representam um livro na base de dados. namespace MvcApplication1.Models public class Livro public int LivroId get; set; public string Titulo get; set; 2. Criar subclasse de DbContext Entity Framework (EF) cria automaticamente a base de dados. A API de acesso a dados que foi desenvolvida para o Code First baseia-se na classe DbContext. Para o EF coordenar as funcionalidades de gerir os acessos à base de dados, para um dado modelo de dados, temos de criar uma classe derivada da classe DbContext. Nesta classe especificámos que entidades estão incluídas no nosso modelo de dados. Também se podem configurar certos comportamentos do Entity Framework. Criar uma pasta DAL. Dentro desta pasta criar a classe BibliotecaDbContext derivada de DbContext, que representa o contexto da base de dados, e trata de retribuir (select), guardar (insert), atualizar (update), e apagar (delete) instâncias da classe Livro na base de dados. MvcApplication1 > botão direito do rato: Add > New Folder > DAL DAL > botão direito do rato: Add > Class > Name: BibliotecaDbContext.cs Add Acrescentar using System.Data.Entity; para referenciar DbContext e DbSet. Acrescentar using MvcApplication1.Models; para referenciar a classe Livro.

3 using System.Data.Entity; using WebApplication1.Models; namespace WebApplication1.DAL public class BibliotecaDbContext : DbContext public BibliotecaDbContext() : base("defaultconnection") public DbSet<Livro> Livros get; set; Este código cria uma propriedade para cada entity set. No EF, um entity set tipicamente corresponde a uma tabela da base de dados, e uma entidade corresponde a uma linha da tabela. Por omissão Entity Framework usa a defaultconnectionfactory definida na secção de configuração do Entity Framework no Web.config, que aponta para o mssqllocaldb ou para o.\sqlexpress. Para usar uma dada base de dados colocámos um construtor na subclasse de DbContext especificando a connectionstring ou o nome da connectionstring. Podemos passar a connectionstring ao construtor de DbContext: public BibliotecaDbContext() : base(@="data Source=...") Ou passar o nome da connectionstring colocada no Web.config da aplicação: public BibliotecaDbContext() : base("defaultconnection") Se não se passa qualquer argumento ao construtor de DbContext, Entity Framework procurará uma connectionstring com o nome da classe DbContext criada (BibliotecaDbContext), no Web.config da aplicação. Se o Entity Framework não encontra a connectionstring no ficheiro Web.config, assume que "BibliotecaDbContext" é o nome da base de dados no servidor local Sql Express ou numa instância LocalDb, dependendo da connection factory configurada. O ficheiro Web.config criado automaticamente para esta aplicação, tem definida uma Connection String ("DefaultConnection") para a gestão de utilizadores. Assim usando a mesma connectionstring evitámos criar uma segunda base de dados. 3. Build 4. Scaffolding para criar Controladores e Vistas Scaffolding é usado por muitas tecnologias de software para significar geração rápida de um esquema do software que depois se pode editar. O template que gera este esquema inicial do código é usado como um andaime (scaffold) a partir do qual se constrói um programa mais poderoso.

4 Controllers > botão direito do rato: Add > Controller > Scaffolding options: Model class: Data context class: Controller name: Add MVC 5 controller with views, using Entity Framework Livro (MvcApplication1.Models) BibliotecaDbContext (MvcApplication1.DAL) LivrosController 5. Executar a aplicação (Start without Debugging = Ctrl+F5) Na barra de endereços do browser acrescentar /Livros localhost:xxxx/livros A base de dados é criada pelo Entity Framework. Testar o CRUD (Create, Read, Update, Delete) da aplicação. 6. Inspecionar a base de dados criada automaticamente Mudar da janela Solution Explorer para a janela Server Explorer. Expandir a base de dados DefaultConnection (MvcApplication1) debaixo de Data Connections. Expandir Tables para ver a tabela que foi criada. Na tabela > Show Table Data 2. Vistas A primeira impressão que um utilizador tem de uma Aplicação Web depende da vista e toda a interação com a aplicação é realizada através de vistas. Os controladores e os modelos são muito importantes mas esse trabalho não é visível. A vista é responsável por construir a interface com o utilizador (UI). Recebe o modelo (a informação que o controlador necessita de mostrar) e a vista transforma esse modelo num formato próprio para ser apresentado ao utilizador. As vistas não são diretamente acessíveis pelo browser. Uma vista é sempre invocada pelo controlador que lhe fornece os dados. Convenções em Asp.Net MVC As aplicações Asp.Net MVC, por omissão, funcionam com base em convenções. Isto evita ter de especificar tudo o que pode ser inferido através de convenções.

5 MVC usa uma estrutura de nomes de diretórios baseados em convenções que permite determinar os templates das vistas referidos pelos controladores sem especificar a localização. O ficheiro com o template da vista referido num método de um controlador encontra-se no diretório \Views\<Nome_do_Controlador>\ e tem o nome igual ao método do qual é invocado. As convenções do MVC podem ser substituídas quando necessário. Este conceito é designado por convenções sobre configurações (convention over configuration). Este conceito foi introduzido pelo Ruby on Rails. Convenções: O nome de cada classe Controlador termina em Controller, e é colocada no diretório Controllers. Há um único diretório Views para todas as vistas da aplicação. As vistas que cada Controlador usa são colocadas num subdiretório de Views com o nome do Controlador (exceto o sufixo Controller). Todas as vistas partilhadas são colocadas no subdiretório de Views com o nome Shared. Especificação das Vistas O diretório Views contém um subdiretório por controlador, com o mesmo nome do controlador, mas sem o sufixo controller. Dentro de cada um destes subdiretórios existe um ficheiro view para cada método de ação, com o mesmo nome do método de ação. Este é o processo base de associação de vistas a métodos de ação. Exemplo1: Se o método de ação do controlador não especificar o nome da vista aplica-se a convenção para localizar o objeto ViewResult retornado pelo método View(): é retornada uma vista com o mesmo nome do método de ação dentro do diretório Views/Nome_do_Controlador. Para o método /Livros/Index a vista selecionada será /Views/Livros/Index.cshtml return View(); Exemplo2: Se pretendermos que o método de ação /Livros/Index retornasse uma vista diferente colocada no subdiretório Livros (por exemplo Teste.cshtml) temos de fornecer o nome da vista. return View("Teste");

6 Exemplo3: Se pretendermos que o método de ação /Livros/Index retornasse uma vista diferente colocada num subdiretório diferente de Livros (por exemplo Teste.cshtml em /Views/Home/) temos de fornecer o nome completo da vista usando sintaxe com ~. Nesta sintaxe com ~ também temos de fornecer a extensão porque não é usado o mecanismo interno de procura de vistas. return View("~/Views/Home/Teste.cshtml"); Vistas fortemente Tipadas Para passar um objeto modelo para a vista, podemos colocá-lo como argumento do método View(). Na vista este objeto é colocado na propriedade Model. Mas esta propriedade é do tipo dinâmico, isto é, o seu tipo de dados só é determinado em tempo de execução. Podemos usá-la deste modo mas também é possível atribuir-lhe o tipo de dados correto. Atribuindo o tipo correto beneficiamos do Intellisense do Visual Studio quando acedemos às propriedades do objeto, e também às verificações em tempo de compilação (compile-time checking). Para que lhe seja atribuído o tipo de dados correcto temos de indicar à vista o tipo de dados da propriedade Model com a seguinte MvcApplication1.Models.Livro View Models Muitas vezes uma vista tem necessidade de mostrar informação que não mapeia diretamente num objeto do modelo do domínio. Como na vista só podemos ter um objeto Model, uma possibilidade para mostrar informação extra que não faça parte do modelo da vista é enviá-la através do ViewBag. Embora seja uma solução flexível, os dados obtidos pela vista através do VIewBag não são fortemente tipados, pelo que o programador da vista não terá a vantagem do intellisense do Visual Studio. Assim, pode ser útil construir uma classe para agregar toda a informação necessária para fornecer à vista, designada por ViewModel, um modelo (classe) construído com o único objetivo de fornecer informação para a vista. Uma classe ViewModel serve para encapsular múltiplos dados representados por instâncias de outras classes num objeto para passar à Vista.

7 Não há nenhuma localização pré-definida para colocar os ViewModels. Normalmente cria-se um diretório ViewModels na raiz do projeto MVC. Nesse diretório colocam-se todos os ViewModels, um ficheiro para cada classe, com a designação do nome do Controlador seguida do nome do método de ação (ou Vista). Exemplo: MvcApplication1 > Add > New Folder: ViewModels ViewModels/LivrosIndexViewModel.cs public class LivrosIndexViewModel public List<Livro> Livros get; set; public List<Autor> Autores get; set; Layouts Podemos usar um layout para definir um template comum para o site ou parte do site. Este template conterá um ou mais placeholders. As outras vistas da aplicação fornecerão conteúdos para estes placeholders. Exemplo: Layout1.cshtml <!DOCTYPE html> <html> <head><title>@viewbag.title</title></head> <body> <header> <h1>@viewbag.title</h1> </header> <div id="main-content">@renderbody() <footer>@rendersection("footer", required: false)</footer> </body> </html> Layout = "~/Views/Shared/Layout1.cshtml"; ViewBag.Title = "Index"; <p>conteudo Footer Este é o é um placeholder que marca o lugar onde as vistas que usam este layout colocarão o seu conteúdo principal.

8 @RenderSection( Footer ) é um placeholder que marca o lugar onde as vistas que usam este layout colocarão o conteúdo especificado na Footer. As vistas têm de fornecer conteúdo para todas as secções definidas no layout, a não ser que a secção seja definida como Footer, required: false) ViewStart Cada vista pode especificar a sua página de layout usando a propriedade Layout. Mas para um grupo de vistas que usem o mesmo layout podemos colocar num directório um ficheiro com o nome _ViewStart.cshtml. Este código é executado antes do código de qualquer vista nesse directório ou subdirectórios. Layout = "~/Views/Shared/_Layout.cshtml"; 3. Método Edit de LivrosController e correspondente vista Edit Classe LivrosController, método Edit: // GET: Livros/Edit/5 public ActionResult Edit(int? id) if (id == null) return new HttpStatusCodeResult(HttpStatusCode.BadRequest); Livro livro = db.livros.find(id); if (livro == null) return HttpNotFound(); return View(livro); // POST: Livros/Edit/5 // To protect from overposting attacks, enable the properties you want to bind to [HttpPost] [ValidateAntiForgeryToken] public ActionResult Edit([Bind(Include = "LivroId, Titulo")] Livro livro) if (ModelState.IsValid) db.entry(livro).state = EntityState.Modified; db.savechanges(); return RedirectToAction("Index"); return View(livro);

9 O 2.º método Edit é precedido pelo atributo HttpPost, o que especifica que este método só é invocado por pedidos POST. O 1.º método Edit poderia ter o atributo HttpGet, mas não é necessário, porque é assumido por omissão. Este método HttpGet só é invocado por pedidos GET. Todos os métodos que criam, editam ou apagam dados devem ser invocados por POST. Modificar dados usando o método de envio GET cria riscos de segurança para além de violar as boas práticas http que especificam que os pedidos GET não devem mudar o estado da aplicação. Processamento do pedido GET Este método recebe o id do Livro a editar. Este parâmetro é opcional (int? id), para que caso não o receba, evite erro de execução. Se o método Find() encontra o livro, retorna o objeto livro para o template vista. Se não encontra, o método HttpNotFound() é invocado. Processamento do pedido POST O mecanismo Model Binder do framework ASP.NET recebe os valores do formulário enviados por POST, cria um objeto Livro, que é passado como parâmetro ao método de ação Edit. ModelState.IsValid verifica se todos os validadores tiveram sucesso. O objeto Livro já existe na base de dados mas sofreu modificações. O método Entry() retorna o objecto DBEntityEntry desta entidade, fornecendo acesso a informação sobre a entidade e à capacidade de alterar essa informação. O estado do objeto é mudado para modificado. SaveChanges() guarda na base de dados todas as modificações feitas no contexto, executando o comando SQL Update para as entidades com a flag Modified. Todas as colunas da correspondente linha da tabela da base de dados são atualizadas, incluindo as que o utilizador não modificou. Em seguida o controlo é redirigido para o método de ação Index(), que mostra uma listagem dos livros já com este livro atualizado. Se a validação não teve sucesso o objeto livro que contém os valores recebidos do formulário é retornado para o template vista Edit.cshtml. Template ViewBag.Title = "Edit"; <div class="form-horizontal"> <h4>livro</h4> <hr "", = "text-danger" => model.livroid) <div => model.titulo, htmlattributes: = "control-label col-md-2" ) <div class="col-md-10">

10 @Html.EditorFor(model => model.titulo, new htmlattributes = = "form-control" => model.titulo, "", = "text-danger" ) <div class="form-group"> <div class="col-md-offset-2 col-md-10"> <input type="submit" value="save" class="btn btn-default" /> to List", 4. Adicionar à aplicação a classe Editora 1. Models > Adicionar classe Models > botão direito do rato: Add > Class > Name: Editora.cs Add namespace MvcApplication1.Models public class Editora public int EditoraId get; set; public string Nome get; set; Modificar a classe Livro public class Livro public int LivroId get; set; public string Titulo get; set; public virtual Editora Editora get; set;

11 2. Incluir a entidade Editora no contexto de ligação à base de dados public class BibliotecaDbContext : DbContext public BibliotecaDbContext() : base("defaultconnection") public DbSet<Livro> Livros get; set; public DbSet<Editora> Editoras get; set; 3. Build 4. Scaffolding para criar Controladores e Vistas para a entidade Editora e novamente para a entidade Livro 5. Executar a aplicação (Start without Debugging = Ctrl+F5) Na barra de endereços do browser acrescentar /Livros Erro na aplicação. localhost:xxxx/livros 6. Usar Migrações Code First Com Entity Framework Code First podemos escrever o modelo que a base de dados é gerada pelo Entity Framework. A funcionalidade Migrações permite migrar a base de dados ao longo do desenvolvimento, sempre que há alterações do modelo de dados. À medida que o código evolui, através do Package Manager podemos adicionar Migrações e atualizar a Base de Dados. A Configuração e os ficheiros de Migração são adicionados à solução do Visual Studio, pelo que todas as mudanças das migrações da base de dados ficam adicionadas ao código fonte. Quando corremos uma aplicação e obtemos erro informando: The model backing the 'MyClassContext' context has changed since the database was created. Consider using Code First Migrations to update the database ( Tools > Nuget Package Manager > Package Manager Console Para ativar as migrações: (enable-migrations -contexttypename MyClassContext) PM> enable-migrations -contexttypename BibliotecaDbContext Este comando adiciona ao projeto uma pasta Migrations contendo 1 ou 2 ficheiros: - Configuration.cs que permite configurar como as migrações se comportam para o nosso contexto. - Se Code First já criou a base de dados, também adiciona uma migração InitialCreate, com código que representa os objetos que já foram criados na base de dados. O nome do ficheiro inicia-se por um timestamp para permitir ordenação. Para criar uma nova migração baseada nas alterações efetuadas ao modelo desde que a última migração foi criada: (add-migration nomemigracao) PM> add-migration AdicionadaClasseEditora

12 Na pasta Migrations é criada uma nova migração com o nome iniciado por um timestamp. A classe definida neste ficheiro contém 2 métodos: - Up com as alterações a executar na base de dados para efetuar a migração. - Down com as alterações a executar na base de dados para desfazer a migração. Para efetuar a migração da base de dados podemos usar o código gerado automaticamente ou fazer modificações nesse código. Para aplicar a última migração criada à base de dados: PM> update-database 7. Executar a aplicação (Start without Debugging = Ctrl+F5) 8. Incluir a chave estrangeira na classe Livro

13 public class Livro public int LivroId get; set; public string Titulo get; set; public int EditoraId get; set; public virtual Editora Editora get; set; 9. Usar Migrações Code First PM> add-migration ChaveEstrangeiraEditoraId PM> update-database System.Data.SqlClient.SqlException: Cannot insert the value NULL into column 'EditoraId', table.livroes'; column does not allow nulls. UPDATE fails. Agora a propriedade EditoraId da classe Livro por ser do tipo int não pode ter valor nulo. Dá erro porque o objeto livro existente na base de dados tem a propriedade EditoraId nula. Migrar para uma versão específica (incluindo Downgrade) Para fazer o upgrade/downgrade da base de dados para o estado que estava após realizar uma migração específica, por exemplo migracao1: PM> update-database targetmigration: migracao1 Este commando executa os scripts UP ou Down para migrar para migracao1. Para desfazer até voltar a ter uma base de dados vazia executar o comando: PM> update-database targetmigration: $InitialDatabase Executar: PM> update-database targetmigration $InitialDatabase PM> update-database Todos os registos são apagados da base de dados. Update-database efetua a migração da base de dados até à última migração criada. 10. Scaffolding novamente para criar Controladores e Vistas para as entidades Editora e Livro 11. Executar a aplicação (Start without Debugging = Ctrl+F5) Criar Editoras. Criar Livros.

14 5. Método Create de LivrosController e correspondente vista Edit // GET: Livros/Create public ActionResult Create() ViewBag.EditoraId = new SelectList(db.Editoras, "EditoraId", "Nome"); return View(); // POST: Livros/Create // To protect from overposting attacks, please enable the specific properties you // want to bind to. [HttpPost] [ValidateAntiForgeryToken] public ActionResult Create( [Bind(Include = "LivroId,Titulo,EditoraId")] Livro livro) if (ModelState.IsValid) db.livros.add(livro); db.savechanges(); return RedirectToAction("Index");

15 ViewBag.EditoraId = new SelectList(db.Editoras, "EditoraId", "Nome", livro.editoraid); return View(livro); O primeiro método Create é um método HttpGet, só executado em pedidos GET, usado para invocar a página Web com o formulário para ser preenchido pelo utilizador para criar objetos Livro. O segundo é um método HttpPost, só executado em pedidos POST, que recebe um objeto Livro criado com os dados introduzidos no formulário, e valida esses dados. Se a validação tem sucesso, guarda o objeto na base de dados, caso contrário, volta a apresentar o formulário com os dados que o utilizador preencheu. Caso a validação não tenha sucesso, o objeto Livro passado à vista contém os dados preenchidos pelo utilizador. O objecto SelectList guarda os itens destinados a carregar um DropDownList. O objecto SelectList é colocado no ViewBag numa dada chave (EditoraId). ficheiro ViewBag.Title = "Create"; <div class="form-horizontal"> <h4>livro</h4> <hr "", = "text-danger" ) <div => model.titulo, htmlattributes: = "control-label col-md-2" ) <div => model.titulo, new htmlattributes = = "form-control" => model.titulo, "", = "text-danger" ) <div => model.editoraid, "EditoraId", htmlattributes: = "control-label col-md-2" ) <div null, htmlattributes: = "form-control" => model.editoraid, "", = "text-danger" )

16 <div class="form-group"> <div class="col-md-offset-2 col-md-10"> <input type="submit" value="create" class="btn btn-default" /> to List", O método Html.DropDownList mostra os itens guardados no SelectList, usando a chave do ViewBag. Neste caso o SelectList guarda todas as Editoras existentes na base de dados, no objeto ViewBag, usando a chave EditoraId. O método Html.DropDownList carrega a DropDownList com o objeto existente no ViewBag na chave especificada EditoraId, ou seja, carrega com as Editoras existentes na base de dados. Se quiséssemos criar um livro com uma editora nova, teríamos primeiro de criar a editora e só depois poderíamos criar o livro. A variável model usada no ficheiro Create.cshtml representa o objeto fortemente tipado que é passado à vista pelo controlador com as restrições estabelecidas no modelo. A efetua o casting para o tipo de dados do objeto. Através do objeto é possível conhecer as suas propriedades. 6. Adicionar à aplicação a classe Autor 1. Models > Adicionar classe Models > botão direito do rato: Add > Class > Name: Autor.cs Add namespace MvcApplication1.Models public class Autor public int AutorId get; set; public string Nome get; set; public virtual ICollection<Livro> Livros get; set;

17 Modificar a classe Livro public class Livro public int LivroId get; set; public string Titulo get; set; public int EditoraId get; set; public virtual Editora Editora get; set; public virtual ICollection<Autor> Autores get; set; 2. Incluir a entidade Autor no contexto de ligação à base de dados public class BibliotecaDbContext : DbContext public BibliotecaDbContext() : base("defaultconnection") public DbSet<Livro> Livros get; set; public DbSet<Editora> Editoras get; set; public DbSet<Autor> Autores get; set; 3. Build 4. Scaffolding para criar Controladores e Vistas para as entidades Autor e novamente para a entidade Livro 5. Executar a aplicação (Start without Debugging = Ctrl+F5) Na barra de endereços do browser acrescentar /Livros Erro na aplicação. localhost:xxxx/livros 6. Usar Migrações Code First PM> add-migration AdicionadaClasseAutor PM> update-database 7. Executar a aplicação (Start without Debugging = Ctrl+F5) Criar Autores.

18

19 8. Criar interface para atribuir valores para a relação LivroAutores Vamos atribuir autores a livros na página Edit de Livro. Para atribuir ou editar os autores de um livro vamos mostrar todos os autores existentes na base de dados, um checkbox para cada autor. A vista não deve ter lógica de negócio, pelo que devemos passar à vista apenas a informação necessária para o funcionamento da interface gráfica. Vamos criar um

20 modelo cujo único objetivo é passar informação para a vista, uma classe ViewModel designada AutorLivro. Como pretendemos atribuir ou editar os autores de um determinado livro, esta classe AutorLivro deve conter a seguinte informação: id do autor, nome do autor e se o autor já está atribuído ao livro. Criar uma nova pasta ViewModels. Nessa pasta criar uma classe com o nome AutorLivro public class AutorLivro public int AutorId get; set; public string Nome get; set; public bool AutorDoLivro get; set; Na classe LivrosController modificar o método HttpGet Edit: Código inicial de Controllers/LivrosController.cs, método HttpGet Edit: // GET: Livros/Edit/5 public ActionResult Edit(int? id) if (id == null) return new HttpStatusCodeResult(HttpStatusCode.BadRequest); Livro livro = db.livros.find(id); if (livro == null) return HttpNotFound(); ViewBag.EditoraId = new SelectList( db.editoras, "EditoraId", "Nome", livro.editoraid); return View(livro); Código modificado de Controllers/LivrosController.cs, método HttpGet Edit: // GET: Livros/Edit/5 public ActionResult Edit(int? id) if (id == null) return new HttpStatusCodeResult(HttpStatusCode.BadRequest); // Find nao permite eager loading //Livro livro = db.livros.find(id); Livro livro = db.livros.include(l => l.autores).where(l => l.livroid == id).singleordefault(); preencherautoresdolivro(livro); if (livro == null) return HttpNotFound(); ViewBag.EditoraId = new SelectList( db.editoras, "EditoraId", "Nome", livro.editoraid); return View(livro); private void preencherautoresdolivro(livro livro) var autores = db.autores; var autoreslivro = new HashSet<int>(livro.Autores.Select(a => a.autorid)); var viewmodel = new List<AutorLivro>();

21 foreach(var autor in autores) viewmodel.add(new AutorLivro AutorId = autor.autorid, Nome = autor.nome, AutorDoLivro = autoreslivro.contains(autor.autorid) ); ViewBag.Autores = viewmodel; Neste código o carregamento de um livro da base de dados inclui o carregamento da sua propriedade de navegação Autores (eager loading). O método preencherautoresdolivro cria uma lista de objetos AutorLivro, um objeto AutorLivro para cada um dos autores existentes na base de dados. Cada objeto AutorLivro leva na propriedade boolean AutorDoLivro informação se atualmente é autor do livro. Esta lista de objetos AutorLivro é passada à vista em ViewBag.Autores. Modificar Views/Livros/Edit.cshtml: Código inicial de ViewBag.Title = "Edit"; <div class="form-horizontal"> <h4>livro</h4> <hr "", = "text-danger" => model.livroid) <div => model.titulo, htmlattributes: = "control-label col-md-2" ) <div => model.titulo, new htmlattributes = = "form-control" => model.titulo, "", = "text-danger" ) <div => model.editoraid, "EditoraId", htmlattributes: = "control-label col-md-2" )

22 <div null, htmlattributes: = "form-control" => model.editoraid, "", = "text-danger" ) <div class="form-group"> <div class="col-md-offset-2 col-md-10"> <input type="submit" value="save" class="btn btn-default" /> to List", Código modificado de ViewBag.Title = "Edit"; <div class="form-horizontal"> <h4>livro</h4> <hr "", = "text-danger" => model.livroid) <div => model.titulo, htmlattributes: = "control-label col-md-2" ) <div => model.titulo, new htmlattributes = = "form-control" => model.titulo, "", = "text-danger" ) <div => model.editoraid, "EditoraId", htmlattributes: = "control-label col-md-2" ) <div null,

23 htmlattributes: = "form-control" => model.editoraid, "", = "text-danger" ) <div class="form-group"> <div class="col-md-offset-2 col-md-10"> <table> int cnt = 0; List< WebApplication6.ViewModels.AutorLivro> autores = ViewBag.Autores; foreach (var autor in autores) if (cnt++ % 3 <input type="checkbox" name="selectedautores" "checked=\"checked\"" : @:</tr> </table> <div class="form-group"> <div class="col-md-offset-2 col-md-10"> <input type="submit" value="save" class="btn btn-default" /> to List", Este código cria uma tabela html com 3 colunas. Cada célula tem um checkbox com o número e nome do autor. Todas as checkboxes têm o mesmo nome (name= selectedautores ) para serem tratadas com um grupo e para o browser enviar no parâmetro selectedautores uma lista com os valores selecionados. Na classe LivrosController modificar o método HttpPost Edit, executado quando o utilizador clica no botão Save. Código inicial de Controllers/LivrosController.cs, método HttpPost Edit: // POST: Livros/Edit/5

24 // To protect from overposting attacks, please enable the specific properties you want to bind to, for // more details see [HttpPost] [ValidateAntiForgeryToken] public ActionResult Edit([Bind(Include = "LivroId,Titulo,EditoraId")] Livro livro) if (ModelState.IsValid) db.entry(livro).state = EntityState.Modified; db.savechanges(); return RedirectToAction("Index"); ViewBag.EditoraId = new SelectList( db.editoras, "EditoraId", "Nome", livro.editoraid); return View(livro); Código modificado de Controllers/LivrosController.cs, método HttpPost Edit: // POST: Livros/Edit/5 // To protect from overposting attacks, please enable the specific properties you want to bind to, for // more details see [HttpPost] [ValidateAntiForgeryToken] public ActionResult Edit([Bind(Include = "LivroId,Titulo,EditoraId")] Livro livro, string[] selectedautores) var logfile = new StreamWriter("C:/temp/log3.txt"); db.database.log = logfile.writeline; if (ModelState.IsValid) Livro livroparaatualizar = db.livros.find(livro.livroid); atualizarautoresdolivro(livroparaatualizar, selectedautores); db.entry(livroparaatualizar).state = EntityState.Modified; db.savechanges(); logfile.close(); return RedirectToAction("Index"); preencherautoresdolivro(livro); ViewBag.EditoraId = new SelectList( db.editoras, "EditoraId", "Nome", livro.editoraid); logfile.close(); return View(livro); private void atualizarautoresdolivro(livro livroparaatualizar, string[] selectedautores) if (selectedautores == null) livroparaatualizar.autores = new List<Autor>(); return; var selectedautoreshs = new HashSet<string>(selectedAutores); var autoreslivro = new HashSet<int>( livroparaatualizar.autores.select(a => a.autorid)); var autores = db.autores; foreach (var autor in autores) // Se este autor foi um dos selecionados e if (selectedautoreshs.contains(autor.autorid.tostring()))

25 // ainda não pertence à lista dos autores do livro if (!autoreslivro.contains(autor.autorid)) // é adicionado à lista dos autores do livro livroparaatualizar.autores.add(autor); else // Se este autor não foi um dos selecionados // e pertence à lista dos autores do livro if (autoreslivro.contains(autor.autorid)) // é removido da lista dos autores do livro livroparaatualizar.autores.remove(autor); No código inicial o objeto livro era criado pelo Model Binder com os valores dos parâmetros recebidos no servidor e o seu estado marcado como Modified (o que faz automaticamente o attach ao contexto) para que SaveChanges o atualizasse (update) na base de dados (SaveChanges executa um Update porque o objeto livro tem id, campo escondido no browser). Agora pretendemos atualizar as propriedades do livro incluindo os objetos constituintes da sua propriedade de navegação Autores. Esta propriedade Autores terá os mesmos objetos que já existiam na base de dados, eventualmente adicionando alguns e removendo outros. O método AtualizarAutoresDoLivro atualiza a propriedade Autores do livro de acordo com o array de strings selectedautores criado pelo Model Binder com os valores dos parâmetros recebidos no servidor ( o name de cada checkbox é selectedautores ). Para que na página Index também seja possível ver os autores de cada livro vamos adicionar uma nova coluna com essa informação. Código de Controllers/LivrosController.cs, método HttpGet Index: // GET: Livros public ActionResult Index() var livros = db.livros.include(l => l.editora); return View(livros.ToList()); Código inicial de ViewBag.Title = "Index";

26 <h2>index</h2> New", "Create") </p> <table class="table"> <tr> => model.editora.nome) </th> => model.titulo) </th> <th></th> (var item in Model) <tr> => item.editora.nome) </td> => item.titulo) </td> "Edit", new id=item.livroid "Details", new id=item.livroid "Delete", new id=item.livroid ) </td> </tr> </table> Código modificado de ViewBag.Title = "Index"; <h2>index</h2> New", "Create") </p> <table class="table"> <tr> => model.editora.nome) </th> => model.titulo) </th> <th>autores</th> <th></th> </tr>

27 @foreach (var item in Model) <tr> => item.editora.nome) </td> => item.titulo) </td> foreach (var autor @autor.nome <br /> </td> "Edit", new id=item.livroid "Details", new id=item.livroid "Delete", new id=item.livroid ) </td> </tr> </table>

Criação de uma aplicação Web ASP.NET MVC 4

Criação de uma aplicação Web ASP.NET MVC 4 Criação de uma aplicação Web ASP.NET MVC 4 usando Code First, com Roles (VS2012) Baseado no artigo de Scott Allen Roles in ASP.NET MVC4 : http://odetocode.com/blogs/scott/archive/2012/08/31/seeding membership

Leia mais

Criação de uma aplicação Web ASP.NET MVC usando Code First

Criação de uma aplicação Web ASP.NET MVC usando Code First Criação de uma aplicação Web ASP.NET MVC usando Code First Visual Studio > File > New Project > (Visual C#, Web) ASP.NET MVC 4 Web Application Name: MvcApplication11 Project Template: View Engine: Internet

Leia mais

Aplicação ASP.NET MVC Cliente de Aplicação Web API

Aplicação ASP.NET MVC Cliente de Aplicação Web API Aplicação ASP.NET MVC Cliente de Aplicação Web API http://www.asp.net/web-api/overview/advanced/calling-a-web-api-from-a-net-client Calling a Web API From a.net Client in ASP.NET Web API 2 (C#) 1. Criar

Leia mais

Aplicação ASP.NET MVC Cliente de Aplicação Web API (com Class Library)

Aplicação ASP.NET MVC Cliente de Aplicação Web API (com Class Library) Aplicação ASP.NET MVC Cliente de Aplicação Web API (com Class Library) http://www.asp.net/web-api/overview/advanced/calling-a-web-api-from-a-net-client Calling a Web API From a.net Client in ASP.NET Web

Leia mais

Aplicação Web Zend Framework 2 Cliente de Aplicação Asp.Net Web API

Aplicação Web Zend Framework 2 Cliente de Aplicação Asp.Net Web API Aplicação Web Zend Framework 2 Cliente de Aplicação Asp.Net Web API 1. Criar a Aplicação Asp.Net Web API 2 com Individual User Accounts Visual Studio 2015 > File > New > Project Visual C#, Web > ASP.NET

Leia mais

ASP.NET MVC. View Engine: linguagem usada para gerar código HTML. Duas opções: Razor View Engine ou ASPX View Engine. Selecionar Razor.

ASP.NET MVC. View Engine: linguagem usada para gerar código HTML. Duas opções: Razor View Engine ou ASPX View Engine. Selecionar Razor. ASP.NET MVC ASP.NET MVC é um framework para desenvolvimento de aplicações web que usa os padrões MVC (Model View Controller) e Convention over Configuration. O padrão MVC aplicado a aplicações web conduz

Leia mais

curso de ASP.NET MVC

curso de ASP.NET MVC Centro Universitário Luterano de Palmas curso de sistemas de informação linguagem de programação para web curso de ASP.NET MVC O conteúdo deste curso é baseado na documentação oficial da Microsoft sobre

Leia mais

Resumo Aplicação MVC Contoso University

Resumo Aplicação MVC Contoso University Resumo Aplicação MVC Contoso University Parte 1. New Project MVC4: ContosoUniversity Html.ActionLink(string linktext, string actionname, string controllername) Retorna MvcHtmlString, uma string com o código

Leia mais

Bem vindos ao Curso de ASP.NET MVC 3 Razor e C#

Bem vindos ao Curso de ASP.NET MVC 3 Razor e C# Bem vindos ao Curso de ASP.NET MVC 3 Razor e C# Pré-requisitos: O curso de C# Csharp veja aqui e o curso de ASP.NET Básico veja aqui Valor R$129.00 compre aqui Veja o video do curso aqui Aprenda ASP.NET

Leia mais

Bases de Dados. Lab 1: Introdução ao ambiente. Figura 1. Base de dados de exemplo

Bases de Dados. Lab 1: Introdução ao ambiente. Figura 1. Base de dados de exemplo Departamento de Engenharia Informática 2013/2014 Bases de Dados Lab 1: Introdução ao ambiente 1º semestre O ficheiro bank.sql contém um conjunto de instruções SQL para criar a base de dados de exemplo

Leia mais

Connection String usada por uma Class Library

Connection String usada por uma Class Library Connection String usada por uma Class Library Vamos considerar uma Class Library com o modelo de dados e com acesso à base de dados através do Entity Framework. Aonde deve ser colocada a connection string

Leia mais

Todos os direitos reservados e protegidos pela Lei nº9.610, de 10/02/1998.

Todos os direitos reservados e protegidos pela Lei nº9.610, de 10/02/1998. Casa do Código Todos os direitos reservados e protegidos pela Lei nº9.610, de 10/02/1998. Nenhuma parte deste livro poderá ser reproduzida, nem transmitida, sem autorização prévia por escri- eletrônicos,

Leia mais

Visual Studio+SQL Server Express LocalDB ANTONIO LUIS

Visual Studio+SQL Server Express LocalDB ANTONIO LUIS Visual Studio+SQL Server Express LocalDB ANTONIO LUIS OBJETIVO Mostrar o processo de criação de um banco de dados usando SQL Server Express LocalDB. Versão do SQL Server voltada pra desenvolvedores, e

Leia mais

Construindo Aplicações com ASP.NET MVC 2.0 Aula 03 Luiz Alberto Ferreira Gomes. Ciência da Computação da PUC Minas

Construindo Aplicações com ASP.NET MVC 2.0 Aula 03 Luiz Alberto Ferreira Gomes. Ciência da Computação da PUC Minas Construindo Aplicações com ASP.NET MVC 2.0 Aula 03 Luiz Alberto Ferreira Gomes Ciência da Computação da PUC Minas 2 Camada responsável por armazenar em um repositório de dados e reconstituir objetos de

Leia mais

Tarefa Orientada 3 Aplic. Manutenção de Produtos Text Box

Tarefa Orientada 3 Aplic. Manutenção de Produtos Text Box Tarefa Orientada 3 Aplic. Manutenção de Produtos Text Box Objectivos: Utilização de uma fonte de dados. Criação de controlos Text Box ligados a uma fonte de dados. Criação de classes. Se uma tabela contém

Leia mais

DESENVOLVIMENTO DE SOFTWARE PARA INTERNET LABORATÓRIO 5 PROF. EMILIO PARMEGIANI

DESENVOLVIMENTO DE SOFTWARE PARA INTERNET LABORATÓRIO 5 PROF. EMILIO PARMEGIANI DESENVOLVIMENTO DE SOFTWARE PARA INTERNET LABORATÓRIO 5 PROF. EMILIO PARMEGIANI MASTER PAGES Master Pages (ou Páginas Mestres) é um arquivo ASP.NET com a extensão.master (por exemplo, MinhaPagina.master)

Leia mais

Aprendendo Na Prática: Aplicativos Web Com Asp.Net MVC em C# e Entity Framework Code First

Aprendendo Na Prática: Aplicativos Web Com Asp.Net MVC em C# e Entity Framework Code First Aprendendo Na Prática: Aplicativos Web Com Asp.Net MVC em C# e Entity Framework Code First Tags: Framework ASP.NET MVC, Linguagem C#, Visual Studio Express 2013, Entity Framework Code First Apresentação

Leia mais

DISTRIBUINDO SUA APLICAÇÃO

DISTRIBUINDO SUA APLICAÇÃO DISTRIBUINDO SUA APLICAÇÃO Depois de pronta sua aplicação precisa ser distribuida para todos que querem ou precisam usá-la. Para usar a sua aplicação, o único requisito para o computador do cliente é que

Leia mais

Bases de Dados. Lab 1: Introdução ao ambiente

Bases de Dados. Lab 1: Introdução ao ambiente Departamento de Engenharia Informática 2009/2010 Bases de Dados Lab 1: Introdução ao ambiente 1º semestre O ficheiro bank.sql contém um conjunto de instruções SQL para criar a base de dados de exemplo

Leia mais

Cadeira de Tecnologias de Informação. Ano lectivo 2009/2010. Sites dinâmicos. Com Expression Web TI2009/10 EWD_1. Filipa Pires da Silva (2009)

Cadeira de Tecnologias de Informação. Ano lectivo 2009/2010. Sites dinâmicos. Com Expression Web TI2009/10 EWD_1. Filipa Pires da Silva (2009) Cadeira de Tecnologias de Informação Ano lectivo 2009/2010 Sites dinâmicos Com Expression Web TI2009/10 EWD_1 .ASPX vs.html HTML: HTML é uma linguagem para descrever páginas web HTML significa Hyper Text

Leia mais

Introdução ao IDE Netbeans (Programação Java)

Introdução ao IDE Netbeans (Programação Java) Universidade Federal do ABC Disciplina: Processamento da Informação (BC-05045) Assunto: Introdução ao IDE Netbeans Introdução ao IDE Netbeans (Programação Java) Conteúdo 1. Introdução... 1 1.1. Programas

Leia mais

UFCD 0793 Scripts CGI e Folhas de Estilo Formadora: Sónia Rodrigues

UFCD 0793 Scripts CGI e Folhas de Estilo Formadora: Sónia Rodrigues UFCD 0793 Scripts CGI e Folhas de Estilo Formadora: Sónia Rodrigues 0793 Scripts CGI e folhas de estilo Objectivos da UFCD: Desenvolver páginas para a Web, através de scripts CGI e folhas de estilo. UFCD

Leia mais

Programação Estruturada e Orientada a Objetos. Objetos e Métodos

Programação Estruturada e Orientada a Objetos. Objetos e Métodos Programação Estruturada e Orientada a Objetos Objetos e Métodos 2013 O que veremos hoje? Objetos e Métodos Transparências baseadas no material do Prof. Jailton Carlos Objetivos Aprender a criar construtores;

Leia mais

Microsoft Visual Studio Community 2013

Microsoft Visual Studio Community 2013 Microsoft Visual Studio Community 2013 Linguagem de Programação III Mauro Lopes Carvalho Silva Professor EBTT DAI Departamento Acadêmico de Informática Campus Monte Castelo Instituto Federal de Educação

Leia mais

Programação Orientada a Objectos - P. Prata, P. Fazendeiro

Programação Orientada a Objectos - P. Prata, P. Fazendeiro 3 Classes e instanciação de objectos (em Java) Suponhamos que queremos criar uma classe que especifique a estrutura e o comportamento de objectos do tipo Contador. As instâncias da classe Contador devem

Leia mais

Benvindo ao Curso de Introdução ao Firebird com Ferramenta de Relatórios!

Benvindo ao Curso de Introdução ao Firebird com Ferramenta de Relatórios! (Apresentação SQL Manager Lite for InterBase and Firebird) Benvindo ao Curso de Introdução ao Firebird com Ferramenta de Relatórios! Ferramenta de alta performance para a otimização da administração de

Leia mais

Guia e Utilização do Visual Studio.NET 2003

Guia e Utilização do Visual Studio.NET 2003 Guia e Utilização do Visual Studio.NET 2003 Objectivo Este guia acompanha-o através do processo de criação de uma aplicação C++ utilizando o ambiente de desenvolvimento Visual Studio.NET 2003. Passo 1:

Leia mais

Utilização de Base de Dados com BluePlant. Sumário

Utilização de Base de Dados com BluePlant. Sumário Nota de Aplicação NAP154 Utilização de Base de Dados com BluePlant Sumário 1. Descrição... 2 2. Introdução... 2 3. Definição da Arquitetura de Referência... 2 3.1 Material Utilizado no Exemplo... 2 4.

Leia mais

Banco de Dados I Introdução SQL

Banco de Dados I Introdução SQL Banco de Dados I Introdução SQL Frederico Queiroga fredericoqueiroga@gmail.com https://sites.google.com/site/fredericoqueiroga/ Linguagem SQL Aspectos Gerais: Independência do fabricante: Está incorporada

Leia mais

PROGRAMAÇÃO ORIENTADA A OBJETOS. Aula 09a- Acessando os dados através JDBC

PROGRAMAÇÃO ORIENTADA A OBJETOS. Aula 09a- Acessando os dados através JDBC Aula 09a- Acessando os dados através JDBC Conteúdo Programático desta aula Compreender os comando existentes para acesso e manipulação de dados nos Bancos de dados Apresentar os dados obtidos no banco

Leia mais

Spectrum Miner. Versão 8.0. Guia de administração para a integração do Portrait Dialogue

Spectrum Miner. Versão 8.0. Guia de administração para a integração do Portrait Dialogue Spectrum Miner Versão 8.0 Conteúdo 1 - Introdução Objetivo 4 Quem deve ler este manual 4 Documentação relacionada 4 2 - Visão geral da integração do Miner Visão geral da integração do Miner 6 3 - Instalação

Leia mais

2 Criar uma Enterprise Application que num módulo EJB irá conter um ou vários Beans.

2 Criar uma Enterprise Application que num módulo EJB irá conter um ou vários Beans. Enterprise java Bens Folha 8-1 Session beans A Aplicação cliente que acede a um session bean (Exemplo retirado de: https://netbeans.org/kb/docs/javaee/entappclient.html) 1 Criar uma Java Class Library

Leia mais

Módulos Tainacan. Estrutura

Módulos Tainacan. Estrutura Módulos Tainacan A arquitetura de módulos foi criada com o objetivo de permitir derivações do Tainacan sem a necessidade de alterações em seu código core. Esta arquitetura utiliza se da estrutura de actions

Leia mais

Listagens & Relatórios

Listagens & Relatórios - Listagens & Relatórios Índice Opções Comuns na Barra 4 Impressão 4 Impressão Rápida 4 Pré-Visualizar 4 Imprimir 4 Desenhar Layout 4 Filtros 4 Filtro Rápido 4 Gerir e Aplicar 5 Limpar 5 Grelha 5 Ordenação

Leia mais

NOTA: Neste tutorial foi utilizado o Visual Studio 2010 para criar o Projeto Web no qual iremos realizar os passos abaixo.

NOTA: Neste tutorial foi utilizado o Visual Studio 2010 para criar o Projeto Web no qual iremos realizar os passos abaixo. TUTORIAL 03 Criando uma base de dados SQL Server com o Visual Studio ETAPA 1: Criando um novo Web Site usando o Visual Studio 2010 NOTA: Neste tutorial foi utilizado o Visual Studio 2010 para criar o Projeto

Leia mais

TRIGGERS Temas abordados

TRIGGERS Temas abordados MYSQL TRIGGERS TRIGGERS Temas abordados 1 - Introdução ao SQL Triggers SQL Trigger é uma instrução SQL ou um conjunto de instruções SQL,que fica armazenado, é será activado ou disparado quando um evento

Leia mais

INSTALAÇÃO DO PROCESSOR BI 6.0

INSTALAÇÃO DO PROCESSOR BI 6.0 INSTALAÇÃO DO PROCESSOR BI 6.0 1 Sumário Pré-requisitos... 3 Servidor:... 3 Cliente:... 4 Instalação... 5 Banco de Dados:... 5 Aplicação:... 7 Configurando o IIS:... 8 Configurações recomendadas do Internet

Leia mais

Oracle Database 10g: Fundamentos de SQL e PL/SQL

Oracle Database 10g: Fundamentos de SQL e PL/SQL Oracle University Contact Us: 0-800-167225 Oracle Database 10g: Fundamentos de SQL e PL/SQL Duration: 5 Dias O que é que gostaria de aprender Conheça os fundamentos de SQL e PL/SQL usando o SQL Developer

Leia mais

Banco de Dados. -Aprendendo conceitos -Usando o SQL Conf para: -Conectar no banco de dados -Criar, alterar, excluir e consultar estruturas de tabelas

Banco de Dados. -Aprendendo conceitos -Usando o SQL Conf para: -Conectar no banco de dados -Criar, alterar, excluir e consultar estruturas de tabelas Banco de Dados -Aprendendo conceitos -Usando o SQL Conf para: -Conectar no banco de dados -Criar, alterar, excluir e consultar estruturas de tabelas O que é banco de dados? São conjuntos de registros dispostos

Leia mais

IDES E PROGRAMAÇÃO. Prof. Dr. Cláudio Fabiano Motta Toledo PAE: Maurício A Dias

IDES E PROGRAMAÇÃO. Prof. Dr. Cláudio Fabiano Motta Toledo PAE: Maurício A Dias 1 IDES E PROGRAMAÇÃO Prof. Dr. Cláudio Fabiano Motta Toledo PAE: Maurício A Dias {claudio,macdias}@icmc.usp.br 2 Agenda Conceitos Instalação e Configuração Compilação e Execução de Código IDEs Exemplo

Leia mais

Lidando com Armazenamento de Dados

Lidando com Armazenamento de Dados Lidando com Armazenamento de Dados Paulo Ricardo Lisboa de Almeida 1 Armazenamento de Dados A grande maioria das aplicações possuem algum mecanismo para armazenagem de dados Dados de usuários Permissões

Leia mais

Web I F R N I N S T I T U TO F E D E R A L D E E D U C A Ç Ã O, C I Ê N C I A E T E C N O LO G I A D O R I O G R A N D E D O N R T E.

Web I F R N I N S T I T U TO F E D E R A L D E E D U C A Ç Ã O, C I Ê N C I A E T E C N O LO G I A D O R I O G R A N D E D O N R T E. Web I F R N I N S T I T U TO F E D E R A L D E E D U C A Ç Ã O, C I Ê N C I A E T E C N O LO G I A D O R I O G R A N D E D O N R T E. J O S É A N TÔ N I O D A C U N H A Web Page HTTP No início a web, era

Leia mais

Tarefa Orientada 17 Scripts

Tarefa Orientada 17 Scripts Tarefa Orientada 17 Scripts Objectivos: Declaração de variáveis escalares Declaração de variáveis do tipo tabela Tabelas temporárias Estruturas Condicionais Estruturas de Repetição Tratamento de erros

Leia mais

Manual Utilizador. Aplicação específica: Sage Bayer Exporter V1.0. Professional Services

Manual Utilizador. Aplicação específica: Sage Bayer Exporter V1.0. Professional Services Manual Utilizador Aplicação específica: Sage Bayer Exporter V1.0 Professional Services Agosto 2009 Índice Introdução... 3 Componentes da aplicação... 4 Instalação... 4 Dependências... 4 Parametrização

Leia mais

Ambientes Virtuais de Execução

Ambientes Virtuais de Execução Ambientes Virtuais de Execução Semestre Inverno 2012/13 Trabalho Final 1 Objectivos Este trabalho tem como objectivo a consolidação de conhecimentos dos mecanismos e construções do sistema de tipos do.net

Leia mais

PCS Laboratório de Engenharia de Software I Tutorial de Modelagem de Dados no RSA v9.5 (por Michelet dal Carpio Chávez)

PCS Laboratório de Engenharia de Software I Tutorial de Modelagem de Dados no RSA v9.5 (por Michelet dal Carpio Chávez) PCS 3443 - Laboratório de Engenharia de Software I Tutorial de Modelagem de Dados no RSA v9.5 (por Michelet dal Carpio Chávez) 1. Pré-requisitos 1. Rational Software Architect instalado com as seguintes

Leia mais

Sumário. SQL - Criação de Tabelas. Structured Query Language. SQL Versões. André Restivo. October 18, 2010

Sumário. SQL - Criação de Tabelas. Structured Query Language. SQL Versões. André Restivo. October 18, 2010 Sumário SQL - Criação de Tabelas André Restivo Faculdade de Engenharia da Universidade do Porto October 18, 2010 1 Introdução 2 Tabelas 3 Colunas 4 5 Modificação de Tabelas 6 Domínios André Restivo (FEUP)

Leia mais

IEC Banco de Dados I Aula 11 Técnicas de Programação SQL

IEC Banco de Dados I Aula 11 Técnicas de Programação SQL IEC Banco de Dados I Aula 11 Técnicas de Programação SQL Turmas: Sistemas de Informação Professora: André Luiz da Costa Carvalho E- mail: andre@icomp.ufam.edu.br Site: hjp://bdufam.wordpress.com Sumário

Leia mais

Esta categoria mais geral, à qual cada objeto pertence, denominamos de classe; IFSC/POO + JAVA - prof. Herval Daminelli

Esta categoria mais geral, à qual cada objeto pertence, denominamos de classe; IFSC/POO + JAVA - prof. Herval Daminelli Esta categoria mais geral, à qual cada objeto pertence, denominamos de classe; Tudo no mundo real pode ser representado por meio do conceito de "objeto": uma planta, uma mesa, uma pessoa, um sentimento,

Leia mais

Web Services Novembro de 2011

Web Services Novembro de 2011 Web Services Novembro de 2011 1. Criação do Web Service Somar na plataforma.net. Colocação do serviço na máquina Dot. 2. Criação de uma aplicação de consola para teste deste serviço. 3. Criação de um Cliente

Leia mais

Tutorial de Extensibilidade

Tutorial de Extensibilidade PRIMAVERA v7.00 Tutorial de Extensibilidade Importação de Pendentes por excel Versão 1.0 Abril de 2007 Índice ÍNDICE... 1 INTRODUÇÃO... 2 EXCEL DE IMPORTAÇÃO DE PENDENTES... 3 Enquadramento...3 Como utilizar

Leia mais

Formação ASP.NET MVC com C#

Formação ASP.NET MVC com C# Comece a desenvolver sistemas para Web e Desktop com a linguagem de programação mais utilizada entre as equipes de alta performance. Carga-horária: 80h O que você aprenderá na formação ASP.NET MVC com

Leia mais

Programação em C#.Net 4.0 com Mobile Apps

Programação em C#.Net 4.0 com Mobile Apps Programação em C#.Net 4.0 com Mobile Apps Programação Formato: Mentored - Online Preço: 415 ( Os valores apresentados não incluem IVA. Oferta de IVA a particulares e estudantes. ) Horário: Flexível das

Leia mais

DATA ACCESS OBJECT (DAO)

DATA ACCESS OBJECT (DAO) Universidade de São Paulo, Instituto de Ciências Matemáticas e de Computação DATA ACCESS OBJECT (DAO) SSC 621: Análise e Projeto Orientados a Objetos Prof. Dr. Lucas Bueno R. Oliveira 2º Semestre 2015

Leia mais

Formulários VIII Vista de estrutura

Formulários VIII Vista de estrutura Formulários VIII Vista de estrutura Permite personalizar o conjunto de controlos de um formulário Cabeçalho, Detalhe e Rodapé do formulário Controlos dependentes: reflectem directamente o conteúdo do registo

Leia mais

Banco de dados Northwind (sample database clique aqui para baixar) em execução ou SqlExpress. Compreensão de C # e ASP.NET

Banco de dados Northwind (sample database clique aqui para baixar) em execução ou SqlExpress. Compreensão de C # e ASP.NET TUTORIAL 04 Acesso a dados com GridView Introdução Este artigo é o primeiro de uma série de artigos sobre a compreensão e aplicação de controles de dados no ASP.NET, que irá explorar as funcionalidades

Leia mais

Autoria Web. Formulários Aula 5. Cleverton Hentz

Autoria Web. Formulários Aula 5. Cleverton Hentz Autoria Web Formulários Aula 5 Cleverton Hentz Sumário da Aula } Introdução } Formulários Básicos } Elementos Suportados 2 Introdução } Os formulários possibilitam o envio de informação para o servidor

Leia mais

Banco de dados. Conteúdo: DDL Prof. Patrícia Lucas

Banco de dados. Conteúdo: DDL Prof. Patrícia Lucas Banco de dados Conteúdo: DDL Prof. Patrícia Lucas O mysql MySQL Workbench é uma ferramenta de design de banco de dados visual que integra o desenvolvimento SQL, administração, design de banco de dados,

Leia mais

2.1-Criar BD e Tabelas.

2.1-Criar BD e Tabelas. 2 2.1-Criar BD e Tabelas. Vamos ao phpmyadmin: Financiado pelo FSE Pág: 1 Tabelas Financiado pelo FSE Pág: 2 2.2-Definir o site e sua conexão. Financiado pelo FSE Pág: 3 Financiado pelo FSE Pág: 4 Depois

Leia mais

Introdução à Engenharia ENG1000

Introdução à Engenharia ENG1000 Introdução à Engenharia ENG1000 Aula 04 Introdução ao Visual Studio 2010 Prof. Augusto Baffa 1. Execute o MS-Visual Studio 2010. Experimente o caminho: Start All Programs Microsoft

Leia mais

EA975 - Laboratório de Engenharia de Software

EA975 - Laboratório de Engenharia de Software EA975 - Laboratório de Engenharia de Software Turmas K/L - 2017 Aula 8 Vamos inicialmente especificar com mais detalhes o termo "recurso" utilizado no estilo arquitetural REST. Em REST, recursos são uma

Leia mais

Especificam quem tem acesso a cada entidade, isto é, quem tem acesso a. cada classe e cada membro da classe (dados e métodos)

Especificam quem tem acesso a cada entidade, isto é, quem tem acesso a. cada classe e cada membro da classe (dados e métodos) Mecanismos de controlo de acesso Especificam quem tem acesso a cada entidade, isto é, quem tem acesso a cada classe e cada membro da classe (dados e métodos) Modificadores de acesso: public protected private

Leia mais

Escrever scripts de PHP com HTML

Escrever scripts de PHP com HTML Escrever scripts de PHP com HTML PHP é uma linguagem de programação de scripts para serem interpretados no lado dos servidores. Numa fase inicial (1995), PHP surgiu com o significado de Personal Home Pages

Leia mais

DISTRIBUINDO SUA APLICAÇÃO

DISTRIBUINDO SUA APLICAÇÃO DISTRIBUINDO SUA APLICAÇÃO Depois de pronta sua aplicação precisa ser distribuída para todos que querem ou precisam usá-la. Para usar a sua aplicação, o único requisito para o computador do cliente é que

Leia mais

Sistemas de Gestão De Bases de Dados. Criação de Tabelas na vista estrutura. Módulo 2. A Professora: Vanda Pereira

Sistemas de Gestão De Bases de Dados. Criação de Tabelas na vista estrutura. Módulo 2. A Professora: Vanda Pereira Sistemas de Gestão De Bases de Dados Criação de Tabelas na vista estrutura A Professora: Vanda Pereira Módulo 2 Para criar uma tabela basta clicar no separador Criar grupo Tabela Vai aparecer no lado esquerdo

Leia mais

Associações de Ficheiros. Mike McBride Tradução: José Pires

Associações de Ficheiros. Mike McBride Tradução: José Pires Mike McBride Tradução: José Pires 2 Conteúdo 1 Associações de Ficheiros 4 1.1 Introdução.......................................... 4 1.2 Como usar este módulo.................................. 4 1.2.1

Leia mais

Criando o Carrinho de Compras (Tarefa D) Prof. Fellipe Aleixo

Criando o Carrinho de Compras (Tarefa D) Prof. Fellipe Aleixo Criando o Carrinho de Compras (Tarefa D) Prof. Fellipe Aleixo (fellipe.aleixo@ifrn.edu.br) Feedback do Cliente Legal, temos o catálogo de produtos! Seria muito legal que pudéssemos estar preparados para

Leia mais

Introdução à linguagem HTML. Volnys Borges Bernal

Introdução à linguagem HTML. Volnys Borges Bernal 1 Introdução à linguagem HTML Volnys Borges Bernal 2013-2015 Volnys Bernal 2 Introdução à linguagem HTML Sumário Visão geral Primeira página Principais tags Principais atributos Formulários 2011-2015 Volnys

Leia mais

Introdução 20 Diagramas de fluxos de dados 20 O processo de elaboração de DFD 22 Regras práticas para a elaboração de DFD 24 Dicionário de dados 26

Introdução 20 Diagramas de fluxos de dados 20 O processo de elaboração de DFD 22 Regras práticas para a elaboração de DFD 24 Dicionário de dados 26 ÍNDICE MÓDULO 1 ANÁLISE DE SISTEMAS 9 1.1 SISTEMAS DE INFORMAÇÃO 10 Sistema conceito e exemplos 10 Dados e informação 11 Sistema de informação conceito e componentes 12 Sistema de informação e sistemas

Leia mais

Bases de Dados. Lab 1: Introdução ao ambiente. Figura 1. Base de dados de exemplo

Bases de Dados. Lab 1: Introdução ao ambiente. Figura 1. Base de dados de exemplo Departamento de Engenharia Informática 2012/2013 Bases de Dados Lab 1: Introdução ao ambiente 1º semestre O ficheiro bank.sql contém um conjunto de instruções SQL para criar a base de dados de exemplo

Leia mais

2-Introdução e Conceitos Básicos das TIC

2-Introdução e Conceitos Básicos das TIC 2-Introdução e Conceitos Básicos das TIC Procedimentos para instalar e aceder a um programa Sistema Operativo em Ambiente Gráfico Windows Prof.: Alexandra Matias Sumário Conhecer os procedimentos associados

Leia mais

Engenharia de Aplicações Sistemas Interactivos 2009/10! JAVASERVER FACES 1.2. Mestrado em Informática Universidade do Minho! 31!

Engenharia de Aplicações Sistemas Interactivos 2009/10! JAVASERVER FACES 1.2. Mestrado em Informática Universidade do Minho! 31! JAVASERVER FACES 1.2 Mestrado em Informática Universidade do Minho! 31! Java Server Faces (JSF) JSP uma tecnologia" JSF uma framework MVC(-like)" - JSP para a apresentação (ou não)" utilização da JSF tag

Leia mais

Novidades no EPC GM. Navegação gráfica. Navegação comum para cada veículo

Novidades no EPC GM. Navegação gráfica. Navegação comum para cada veículo Novidades no EPC GM O GM Next Gen EPC possui inúmeras funcionalidades novas concebidas para tornar a localização da peça certa mais rápida e fácil. Para obter instruções mais detalhadas sobre cada funcionalidade,

Leia mais

TECNOLOGIAS DA INFORMAÇÃO E COMUNICAÇÃO SISTEMAS DE GESTÃO DE BASE DE DADOS FORMULÁRIOS

TECNOLOGIAS DA INFORMAÇÃO E COMUNICAÇÃO SISTEMAS DE GESTÃO DE BASE DE DADOS FORMULÁRIOS TECNOLOGIAS DA INFORMAÇÃO E COMUNICAÇÃO SISTEMAS DE GESTÃO DE BASE DE DADOS FORMULÁRIOS Os constituem uma outra forma de visualizar os dados armazenados nas tabela ou disponibilizados numa consulta. Também

Leia mais

C# (C Sharp) - ASP.NET MVC Avançado

C# (C Sharp) - ASP.NET MVC Avançado CONTEÚDO PROGRAMÁTICO C# (C Sharp) - ASP.NET MVC Avançado Carga horária: 40 horas TreinaWeb Tecnologia LTDA CNPJ: 06.156.637/0001-58 Av. Paulista, 1765 - Conj 71 e 72 São Paulo - SP CONTEÚDO PROGRAMÁTICO

Leia mais

Programação para web HTML: Formulários

Programação para web HTML: Formulários Programação para web HTML: Formulários Professor: Harlley Lima E-mail: harlley@decom.cefetmg.br Departamento de Computação Centro Federal de Educação Tecnológica de Minas Gerais Belo Horizonte, 9 de março

Leia mais

Começando com o AWS IoT

Começando com o AWS IoT Começando com o AWS IoT Bruno Emer e David Reis Dezembro de 2016 Conteúdo Começando com AWS IoT Parte 2 1 Pré-Requisitos 1 Conceitos Básicos 2 Arquitetura de Referência deste Tutorial 2 Acessar a Console

Leia mais

Jornal TAP. Manual de Utilização

Jornal TAP. Manual de Utilização Manual de Utilização 14-10-2015 Login 1- Login O utilizador, credenciado para edição de conteúdos, pode fazer login ao servidor através do endereço: http://jornal.tap.pt/pages/boffice.aspx 2- Após introduzir

Leia mais

Laboratório 01 NetBeans

Laboratório 01 NetBeans Universidade Federal de Uberlândia Faculdade de Computação GGI030 Programação Orientada a Objetos 2o. Semestre de 2017 Prof. Renato Pimentel Atividade individual. Laboratório 01 NetBeans 1 Introdução Os

Leia mais

JAVA. Professor: Bruno Toledo

JAVA. Professor: Bruno Toledo JAVA Professor: Bruno Toledo Funcionamento de uma LP Em uma Linguagem de Programação (LP) como C e Pascal, temos o seguinte quadro quando vamos compilar um programa. Código fonte em c Teste.c Gera código

Leia mais

Correio electrónico. Agrupamento de Escolas de Albufeira

Correio electrónico. Agrupamento de Escolas de Albufeira Correio electrónico 1 1 Primeiros Passos Para aceder ao email do Agrupamento pode digitar directamente no seu browser (Internet Explorer, Firefox, Chrome, ) o endereço: webmail.aealbufeira.pt O correio

Leia mais

Tarefa Orientada 8 Criação de tabelas

Tarefa Orientada 8 Criação de tabelas Tarefa Orientada 8 Criação de tabelas Objectivos: Iniciar o MS SQL Server Manegement Studio Criar tabelas Especificar tipos de dados Definir restrições Alterar as definições de uma tabela Eliminar uma

Leia mais

AULA 8. Ambientes Visuais 8.1. OBJETIVO DA AULA SQL (Structured Query Language)

AULA 8. Ambientes Visuais 8.1. OBJETIVO DA AULA SQL (Structured Query Language) AULA 8 8.1. OBJETIVO DA AULA Relembrar conceitos e recursos básicos apresentados nas aulas anteriores, dar continuidade nas codificações iniciadas e ainda não finalizadas, explorar acesso a banco de dados

Leia mais

Encapsulamento e Métodos (Construtores e Estáticos) João Paulo Q. dos Santos

Encapsulamento e Métodos (Construtores e Estáticos) João Paulo Q. dos Santos Encapsulamento e Métodos (Construtores e Estáticos) Sobrecarga de Métodos João Paulo Q. dos Santos joao.queiroz@ifrn.edu.br Roteiro Conceitos sobre Encapsulamento; Variável this; Métodos Construtores;

Leia mais

Aula 6: Vulnerabilidades Web

Aula 6: Vulnerabilidades Web Aula 6: Vulnerabilidades Web Exploits of a Mom http://xkcd.com 1.1 Objectivos: Compreender duas vulnerabilidades encontradas em aplicações web: SQL Injection; Cross-site Scripting. Pensar sobre formas

Leia mais

Especializado Web Programmer. Sobre o curso. Destinatários. Pré-requisitos. Tecnologias de Informação - Web e Mobile. Promoção: 15% Desconto

Especializado Web Programmer. Sobre o curso. Destinatários. Pré-requisitos. Tecnologias de Informação - Web e Mobile. Promoção: 15% Desconto Especializado Web Programmer Tecnologias de Informação - Web e Mobile Promoção: 15% Desconto Localidade: Porto Data: 31 Oct 2016 Preço: 1805 ( Os valores apresentados não incluem IVA. Oferta de IVA a particulares

Leia mais

WCF RIA Services Part 1

WCF RIA Services Part 1 WCF RIA Services Part 1 Introdução Para construir aplicativos de negócios comerciais em Silverlight (e outras tecnologias de cliente), você tem que trabalhar com dados. Esses dados geralmente não são residentes

Leia mais

Orientação a Objetos - Programação em C++

Orientação a Objetos - Programação em C++ OO- Engenharia Eletrônica Orientação a Objetos - Programação em C++ Slides 17: Programação Visual ou Orientada a Objetos Gráficos (Formulários, Botões, Caixas de Texto etc) Exemplificado em Microsoft Visual

Leia mais

Bases de Dados. Lab 1: Introdução ao ambiente. Figura 1. Base de dados de exemplo

Bases de Dados. Lab 1: Introdução ao ambiente. Figura 1. Base de dados de exemplo Departamento de Engenharia Informática 2014/2015 Bases de Dados Lab 1: Introdução ao ambiente 1º semestre O ficheiro bank.sql contém um conjunto de instruções SQL para criar a base de dados de exemplo

Leia mais

Desenvolvimento Web com Java. Sérgio Lopes Caelum -

Desenvolvimento Web com Java. Sérgio Lopes Caelum - Desenvolvimento Web com Java Sérgio Lopes Caelum - http://www.caelum.com.br sergio.lopes@caelum.com.br Sérgio Lopes Desenvolvedor Java desde 2002 Instrutor de Java pela Caelum Trabalho com Web e Celulares

Leia mais

DDL DML DCL DTL Tipos Numéricos: INT FLOAT DOUBLE Tipos String: CHAR VARCHAR BINARY BLOB TEXT Tipos Data e Hora: DATE TIME TIMESTAMP YEAR

DDL DML DCL DTL Tipos Numéricos: INT FLOAT DOUBLE Tipos String: CHAR VARCHAR BINARY BLOB TEXT Tipos Data e Hora: DATE TIME TIMESTAMP YEAR SQL Structured Query Language, ou Linguagem de Consulta Estruturada, foi desenvolvida pela IBM nos anos 70 para demonstrar a viabilidade do modelo relacional para bancos de dados. No final dos anos 80

Leia mais

Professor Jefferson Chaves Jefferson de Oliveira Chaves

Professor Jefferson Chaves Jefferson de Oliveira Chaves Professor Jefferson Chaves jefferson.chaves@ifc-araquari.edu.br Introdução ao Ambiente Cliente x Servidor; Os métodos GET e POST; Formulários HTML; Validação de dados; HTML, CSS e JavaScript (somente

Leia mais

Banco de Dados. Professora: Luciana Faria

Banco de Dados. Professora: Luciana Faria Banco de Dados Professora: Luciana Faria Introdução ao linguagem é a SQL (Structured Query Language) Linguagem de Consulta Estruturada Para se utilizar, administrar, e trabalhar com um banco de dados é

Leia mais

Formulários são áreas onde se inserem campos que permitem uma troca de informações maior entre usuários e desenvolvedores de sites HTML Até o momento,

Formulários são áreas onde se inserem campos que permitem uma troca de informações maior entre usuários e desenvolvedores de sites HTML Até o momento, HTML Formulários são áreas onde se inserem campos que permitem uma troca de informações maior entre usuários e desenvolvedores de sites HTML Até o momento, HTML mostrou-se uma linguagem bastante adequada

Leia mais

Introdução ao C# com o Microsoft Visual Studio Community 2015

Introdução ao C# com o Microsoft Visual Studio Community 2015 José Roberto Madureira Junior Adaní Cusin Sacilotti Adriana Rodrigues Reginaldo Sacilotti Introdução ao C# com o Microsoft Visual Studio Community 2015 Primeira Edição São Paulo 2016 Sumário 1 INTRODUÇÃO

Leia mais

Programação com Objectos. Processamento de Dados I. 2. Classes, Atributos e Métodos

Programação com Objectos. Processamento de Dados I. 2. Classes, Atributos e Métodos Programação com Objectos Processamento de Dados I 2. Classes, Atributos e Métodos 1 Classes, Atributos e Métodos Modificadores de acesso (visibilidade) Sobrecarga de métodos (method overloading) Variáveis

Leia mais

Tutorial C# - ADO.NET

Tutorial C# - ADO.NET Tutorial C# - ADO.NET Date : 31 de Março de 2009 Olá a todos, hoje vamos falar de ADO.NET e dos elementos que o compõem. E vamos começar a desenvolver a nossa aplicação de Despesas pessoais que irá ter

Leia mais