E era muito pior no SQL Server 2000…

28/08/2009 15:04

Depois de ficar um dia inteiro trabalhando num pacote do SSIS, resolvi dar um zoom to fit no Visual Studio pra ter uma idéia geral do Control Flow do processo e me deparei com isso:

SSIS

O detalhe é que não está aparecendo na imagem os processos de Data Flow nem variáveis e scripts. Se fosse no SQL Server 2000 a coisa estaria muito mais complexa de ser analisada, porque o ambiente de desenvolvimento era a console de administração do SQL Server 2000 (o velho Enterprise Manager) .

Estou pensando em refatorar o processo em pacotes menores e criar um pacote maior para chamar os demais, mas o fato é que desde a versão 2005 do SQL Server desenvolver dentro do Visual Studio é uma tarefa muito melhor, sem contar o fato de que a solução está integrada ao Source Control do Team System.

Como eu gosto do SQL Server… e mais ainda do Visual Studio!

SQL Server



Parte 2 do artigo de VAB na .net Magazine edição 65

25/08/2009 20:33

capa_netMag65

Chegou hoje em minha casa a edição da revista .net Magazine 65 com a segunda e última parte do meu artigo sobre boas práticas com o Validation Application Block da Enterprise Library onde falo sobre integração com WCF entre outros assuntos.

Se você quiser enviar alguma dúvida sobre o artigo, fique a vontade para entrar em contato comigo.

A revista deste mês tem outros artigos muito legais incluindo o artigo de capa que fala sobre Visual Studio 2010 e .NET 4.0. Vale a leitura.

.net Magazine, Artigos , ,



Blocos da Enterprise Library que não vingaram…

16/08/2009 22:07

Alguém já usou?

Asynchronous Invocation Application Block


Se sim, por favor, comente aqui.

Enterprise Library



Décimo terceiro encontro do grupo .Net Architects

08/08/2009 23:01

Hoje participei de mais um encontro do .Net Architects onde tivemos a oportunidade de conhecer sobre MDD (Model Driven Development) e a plataforma “Oslo” da Microsoft apresentado pelo arquiteto da Microsoft Waldemir Cambiucci.

Eu não conhecia nada sobre essa plataforma e preciso confessar que fiquei bastante impressionado com o que vi, pois a aposta da Microsoft é em cima de uma estratégia arrojada, uma visão sobre a aproximação do usuário na construção de softwares através de uma linguagem (gramática) próxima do seu negócio.

O produto ainda está em fase inicial de desenvolvimento mas já é possível baixar uma versão CTP, a mais atual no momento é a de maio de 2009, segue o link:

http://www.microsoft.com/downloads/details.aspx?FamilyID=827122a5-3ca0-4389-a79e-87af37cbf60d&displaylang=en

Com a instalação é possível utilizar a ferramenta de modelagem visual chamada Quadrant onde utilizamos a linguagem do Oslo chamada “M”. O poder que a plataforma promete é algo fantástico, mas ao meu ver,  a Microsoft terá que se preocupar com uma série de questões sobre o direcionamento da plataforma, inclusive sobre a abordagem de utilização, pois seria uma pena acontecer o mesmo que aconteceu com SOA (por culpa principalmente do marketing utilizado para “vender” o conceito).

megafone-medium Enfim, foi uma apresentação excelente do Waldemir que trouxe uma visão de futuro importante para os arquitetos. Gostei muito! A qualidade dos encontros do .Net Architects está cada vez melhor, e aproveito esse espaço para fazer um convite aos membros do grupo que nunca participaram das reuniões presenciais que experimentem faze-lo, pois o nível da discussão que tivemos na segunda parte do encontro também foi muito enriquecedor!

Participem!!

.Net Architects ,



Coletando informações de um site SharePoint

06/08/2009 17:32

Pra quem está iniciando os estudos com SharePoint 3.0, segue um código útil que permite coletar as informações de um site:

using Microsoft.SharePoint;
using Microsoft.SharePoint.WebControls;
using Microsoft.SharePoint.WebPartPages;
using Microsoft.SharePoint.Utilities;

...

List listResult = new List();

using (SPSite siteColl = new SPSite(URL))
{
    using (SPWeb site = siteColl.RootWeb)
    {
        listResult.Add("Title: " + site.Title);
        listResult.Add("Url: " + site.Url);
        listResult.Add("IsRootWeb: " + site.IsRootWeb.ToString());
        listResult.Add("Name: " + site.Name);
        listResult.Add("PortalName: " + site.PortalName);
        listResult.Add("CurrentUser: " + site.CurrentUser.LoginName);
        listResult.Add("Description: " + site.Description);

        listResult.Add("Lists: ");
        foreach (SPList list in site.Lists)
        {
            listResult.Add("  List: " + list.Title + " - " + list.BaseType.ToString() + " - count: " + list.Items.Count);
        }

        listResult.Add("ContentTypes: ");
        foreach (SPContentType ct in site.ContentTypes)
        {
            listResult.Add("  ContentType: " + ct.Name);
        }

        listResult.Add("Features: ");
        foreach (SPFeature feat in site.Features)
        {
            listResult.Add("  Feature: " + feat.Definition.DisplayName);
        }

        listResult.Add("Modules: ");
        foreach (SPModule mod in site.Modules)
        {
            listResult.Add("  Module: " + mod.Name + " - url: " + mod.Url);
        }

        listResult.Add("Fields: "); //Long list
        foreach (SPField field in site.Fields)
        {
            listResult.Add("  Field: " + field.Title);
        }

        listResult.Add("Users: ");
        foreach (SPUser usr in site.Users)
        {
            listResult.Add("  LoginName: " + usr.LoginName);
        }

        listResult.Add("Groups: ");
        foreach (SPGroup role in site.Groups)
        {
            listResult.Add("  Group/Role: " + role.Name);
        }

        listResult.Add("AllProperties: ");
        foreach (System.Collections.DictionaryEntry prop in site.AllProperties)
        {
            listResult.Add("  key: " + prop.Key.ToString() + " - val: " + prop.Value.ToString());
        }

        listResult.Add("Properties: ");
        foreach (System.Collections.DictionaryEntry prop in site.Properties)
        {
            listResult.Add("  key: " + prop.Key.ToString() + " - val: " + prop.Value.ToString());
        }

        listResult.Add("Webs: ");
        foreach (SPWeb childsite in site.Webs)
        {
            listResult.Add("  Title: " + childsite.Title);
            listResult.Add("  Url: " + childsite.Url);
            listResult.Add("  IsRootWeb: " + childsite.IsRootWeb.ToString());
        }
    }
}

Com o código também é possível aprender alguns conceitos importantes do produto. Atentem-se para a recomendação de boas prática no desenvolvimento de SharePoint na utilização do using.

SharePoint