sábado, 15 de outubro de 2011

Conceitos WCM IV - Biblioteca (Library)

A Biblioteca é um repositório de objetos (Componentes). No estabelecimento de uma Workspace pode-se chamar Componentes de qualquer Biblioteca (utilizando a referência Biblioteca/Componente).

Só se pode referenciar um componente, um conteúdo, templates e categorias pela sua Biblioteca. Portanto, planeje bem a divisão dos seus objetos de site, de forma a permitir a manipulação pelos grupos corretos de usuário somente em suas Bibliotecas específicas.

Em uma empresa, os conteúdos deverão estar divididos em áreas de sites contidas em Bibliotecas como:


  • Comercial
  • Financeira
  • Imprensa
  • Recursos Humanos


Para que as informações de cada tipo de departamento, seção, gerência, superintendência e diretoria só sejam acessadas pelos seus mantenedores.

Já áreas como Planejamento e Auditoria deverão ter acesso a todas elas, por motivos óbvios.

A etapa de criação desta organização deverá ser bem feita, para evitar cruzamentos funestos de permissões, e consequentes alterações indevidas de conteúdos por áreas não desejadas. E não adianta nada o log de alterações de conteúdos depois que algo danoso já foi feito. Não adianta punir os agentes das alterações, pois a informação já terá sido perdida. Quem deve ser punido é o Gerenciador do Processo de implantação do Portal no WCM, pois dele é a responsabilidade de planejar a divisão das Bibliotecas pelos grupos de acesso.

Aconselhamos a consulta ao blog Gestão de Conhecimento.

sexta-feira, 2 de setembro de 2011

Listando e exibindo imagens do WCM através de um servlet - JSP - I

Mecanismo a princípio incompreensível é a manipulação de imagens por uma script JSP externa ao WCM, porém dentro do espaço do Websphere.

Alguns pontos teóricos necessários para se compreender a script que está mais abaixo:
  • Imagens não pertencem a uma área de site (sitearea) ou site específico. Elas pertencem e devem ser procuradas diretamente abaixo do nível biblioteca (Library);
  • As imagens são armazenadas na biblioteca como streams de bytes em java, e para exibição devem ser transformadas em arrays de bits;
  • Imagens, seja no formato jpeg, seja no formato gif, correspondem ao MIME (tipo de conteúdo para o protocolo http) image/jpeg;


Script JSP para listar as imagens de uma Biblioteca

Os trechos da script estão enumerados e explicados a seguir. Ao final, basta uní-los em uma script com extensão JSP.

Bibliotecas necessárias



<%@ page language="java" contentType="text/html; charset=ISO-8859-1" %>
<%@page import="com.ibm.workplace.wcm.api.*, com.ibm.workplace.wcm.api.exceptions.*,java.security.Principal, java.util.*, javax.servlet.*" %>
<%@page import="com.ibm.workplace.wcm.api.exceptions.*,
	java.security.Principal,
	java.io.*,
	java.lang.*" %>
<%@ taglib uri="/WEB-INF/tld/wcm.tld" prefix="wcm" %>


Declarações básicas HTML


O tipo de documento HTML, estilos e o content-type do META são todos triviais. Um acréscimo é a poderosa framework jQuery, cujo uso é justificado pelo fato dela oferecer uma compatibilidade de código javascript muito grande. Já existem versões mais avançadas, mas aqui está declarada em 1.3.2. A biblioteca javascript jquery.tablesorter não precisa ser entendida profundamente, mas oferece a seguinte vantagem:

Clicar no título da coluna que se quer ordenar da tabela de imagens provoca a ordenação do conteúdo da tabela pelo conteúdo desta coluna. Isto economiza chamadas ao banco do WCM . Esta ordenação é feita no micro cliente, e não no servidor.

Rotinas Javascript de apoio




A função init faz a inicialização da rotina de ordenação da biblioteca javascript jquery.tablesorter. Ela faz a leitura dos conteúdos das tags TH, que deverão estar dentro de tags THEAD. As linhas de resultado deverão estar também dentro de tags TBODY. Do contrário, o tablesorter não fará a correta interpretação da tabela. E não se esqueça que o atributo id da TABLE deverá ser Resultset.

Inicialização do código JSP


<%
String sNome = "";
String sSenha = "";
// Biblioteca Default
String Biblioteca = "";
if( request.getParameter("Bib") != null ) {
Biblioteca = request.getParameter("Bib");
}

Este trecho coleta parâmetros que serão aproveitados em toda a script. São eles:

NOME - Substitua pelo nome de usuário, registrado no LDAP e declarado no Websphere e WCM. Nestes dois últimos consta o Web Anonymous para acesso via HTTP. Como esta script vai abrir uma workspace que precisa de acesso tanto aos componentes quanto ao espaço de renderização, e a senha do Anonymous deve ser mantida em segredo, vamos precisar de um nome de usuário;
SENHA - Senha do usuário cujo identificador é NOME;
NOME DA BIBLIOTECA - É fornecido através da URL, que pode recebê-lo de um formulário. Neste caso, é um parâmetro de name Bib na URL ou num INPUT de FORM;

Isto corrobora nossa afirmação de que as imagens estão no nível das bibliotecas (Library), e não precisam de acesso à hierarquia das áreas de site.

Constantes para facilitar a leitura de código no trecho principal


// Constantes
String baseURL = "http:///wps/wcm/jsp/html/LeConteudoImprensa.jsp?Bib="+Biblioteca+"&Nome=";
String baseURLRest = "http:///wps/wcm/jsp/html/conteudoRestartar.jsp?Bib="+Biblioteca+"&Nome=";
String eRecDoc = "Não consegui recuperar o documento
";

String eAutorz = "Sem autorização
";


Workspace e cabeçalho


A workspace é estabelecida com base no usuário, conforme já explicamos. O cabeçalho da página é um simples header H1.

Busca pelas imagens e inicialização da lista com pointers





A lista de imagens é colocada num objeto do tipo iterador (iterator) na forma de ponteiros para cada uma delas. É preparado o cabeçalho da TABLE, na forma que é exigida pelo jquery.tablesorter.

Loop de exibição dos itens de imagem



Finalizações


Emite um fechamento de table () e fecha a workspace (é necessário). Fecha a script (%>), ajusta a tag IFRAME (onde a figura vai ser exibida) e fecha a tag BODY.


No próximo post mostraremos o servlet chamado no link VER para exibir a figura na IFRAME desta script.


















sexta-feira, 12 de agosto de 2011

Criando um site no WCM com JSP

O WCM (1) define e (2) acessa uma estrutura lógica hierárquica expressa da seguinte forma:




O Repositório é um cenário em um momento, onde existem usuários com sessões estabelecidas e transações ativas. Usaremos o termo transação apesar de não ser muito apropriado para Gerenciamento de Conteúdo. Cada transação estabelece uma Workspace usando um usuário e senha, e várias podem ser estabelecidas por usuário (pelo menos ao nível da API).

O Site

O site não está em uma Workspace; ele reside em uma Biblioteca das várias que podem existir de Documentos (Document Library) mas é manipulado  em uma Workspace. Em outras palavras, a Workspace é uma situação ativa que modifica uma Biblioteca de Documentos do WCM. Portanto, a figura anterior é um "retrato" de algo acontecendo no WCM.

Criando uma área de site no WCM com JSP

Existem algumas bibliotecas necessárias para que um site seja criado em uma Biblioteca:


<%@page import="java.util.*,
java.security.*,
java.io.*,
java.net.*,
java.text.*,
javax.servlet.http.*"%>
<%@page import="com.ibm.workplace.wcm.api.*,
com.ibm.workplace.wcm.api.exceptions.*"%>

As primeiras são do "mínimo de java" para manipular servlets. O segundo grupo são também "o mínimo de bibliotecas" WCM utilizadas para criar o site.

Coletando dados do usuário

// Usuário autenticado
String sNome = session.getAttribute("Nome").toString();
String sSenha = session.getAttribute("Senha").toString(); 

Estas são variáveis de sessão, à semelhança do ASP, espécie de cookies, com o usuário e a senha, para que o WCM saiba que quem entrou está autorizado a criar Workspaces.

Coletando dados do site


// Parâmetros para o novo site
String sNomeSite = request.getParameter("NomeSite");
String sTituloSite = request.getParameter("TituloSite");
String sDescricaoSite = request.getParameter("DescricaoSite");
String Biblioteca = request.getParameter("Bib");

Um site deve ter um nome, um título, uma descrição, e pertencer a uma Biblioteca. O site é de uma Biblioteca e não do Workspace.

Configurando um Workspace

// Configura workspace
Workspace ws = WCM_API.getRepository().getWorkspace(sNome,sSenha);
Workspace workspace = ws;

Confirmamos, com os comandos acima, o que dissemos sobre Workspace: Ela é um espaço intermediário para poder manipular os documentos das bibliotecas. É uma transação no sentido meio torto do termo.

Entrando no nível das Bibliotecas


// Acessa a Biblioteca de documentos
DocumentLibrary dl = ws.getDocumentLibrary(Biblioteca);
ws.setCurrentDocumentLibrary(dl);


Os documentos da Biblioteca apontada nos parâmetros para o novo site são referenciados por um ponteiro (dl).

Configurando as propriedades do objeto para criação do site


// Cria o SCHEMA do site
Site siteCriado = ws.createSite();
siteCriado.setName(sNomeSite);
siteCriado.setTitle(sTituloSite);
siteCriado.setDescription(sDescricaoSite);

Como tudo no WCM funciona a base de manipulação de objetos através da sua API, basta alimentar os parâmetros para o método createSite desta mesma API.

Concluindo a transação


// Grava o SCHEMA no WCM
String[] saveErrors = ws.save(siteCriado);
// Dá o logoff
ws.logout();



sexta-feira, 5 de agosto de 2011

Servlets JSP

Onde colocar

Os servlets escritos em JSP devem ser colocados na árvore de diretórios do Websphere em:


c:\ibm\wp_profile\installedApps\node\wcm.ear\ilwwcm.war\jsp\html\

onde node é o nome da aplicação criada para ser a base de diretórios da instalação do WCM. Qualquer dúvida, procure com o buscador de arquivos do seu servidor o nome "wcm.ear".

Criando o componente JSP





sexta-feira, 29 de julho de 2011

Incluindo bibliotecas já criadas no WCM

Uma das operações meio escondidas do WCM, por ser pouco usada, é a inclusão de uma Biblioteca que foi criada para desenvolvimento.

Na orelha de Conteúdo da Web, clique em Personalizar:



Aparece a tela:


Selecione um nome da esquerda e pressione Incluir, ou um nome da direita e pressione Remover.

Pressione OK e pronto.

quarta-feira, 11 de maio de 2011

Definição de layout por Table versus definição por DIVs

Um dos recursos mais utilizados para concretização dos Wireframes para layout de sites foi, por muito tempo a Table do HTML.

A definição por células da Table é muito flexível, pois a tabela se ajusta às maiores larguras necessárias em cada coluna, e produz um desenho equilibrado em resoluções de vídeo diferentes. Mas no caso de definição de seções de layout para portais, e para atender aos requisitos de visibilidade exigidos até pela força da lei, é desejável e prudente reservar espaço fixo para áreas da tela terem certa visão privilegiada.

Então, para o fim de visão privilegiada, quem melhor se adapta é a DIV. Ela ganhou tanto espaço, que o conhecido framework jQuery se ocupa em muito de achá-la e formatá-la a contento. Além disto, ela tem a utilíssima propriedade de posicionamento absoluto, possibilitando a construção de softwares de desenho para os browsers. Todos estão indo na direção de permitir este posicionamento, e as folhas de estilo padrão CSS3 fornecem, agora, bordas arredondadas, sombras e outras características altamente esperadas por nós programadores.

DIVs em cascata

DIVs podem ser colocadas dentro de DIVs em níveis inimagináveis, mas contenha a sua fome de aninhamento em três níveis, no máximo. Imagine a sucessão de DIVs em um desenho de tabela, pois a tag Table é a que melhor se presta para isto. Se necessário, coloque as DIVs dentro de células. Uma das utilizações deste tipo de disposição é o caso dos gráficos. Cada barrinha do gráfico pode ficar em uma coluna da Table gerada, com o alinhamento vertical (valign) no rodapé (bottom).

Portanto, pense em refazer determinados layouts que estão esquecidos em seus sites.