quarta-feira, 31 de agosto de 2011

Erro "List not found" (lista inexistente) ao tentar exibir um DataFormWebPart importado de outro site

Olá amigos,

Estou migrando funcionalidades de um site para outro site dentro do mesmo site collection.

Precisava exibir o conteudo de uma lista que estava em outro site.

Tarefa simples de ser realizada utilizando a DataFormWebPart com o parametro
webUrl no seu datasource.

O Grande problema, que mesmo a lista existindo. O Sharepoint retornava a seguinte mensagem "Lista Inexistente" (list not found)

Para solucionar o problema simplesmente troca-se o atributo ViewFlag para "0"

WebPartPages:DataFormWebPart runat="server" IsIncluded="True" AsyncRefresh="True" FrameType="None" NoDefaultStyle="TRUE" ViewFlag="0"

Não me perguntem o porque. Sei que funciona :)

Encontrei essa pérola no seguinte site:

http://www.codepoint.es/archive/2011/07/12/error-de-“list-not-found”-para-un-dataformwebpart-exportado-a-otro-sitio.aspx

Abraços,
Maca

quinta-feira, 11 de agosto de 2011

Erro "Um arquivo especificado na seção de módulos deste modelo já existe."

Olá,

Ao tentar ativar uma feature, recebi o seguinte erro:

"Um arquivo especificado na seção de módulos deste modelo já existe."

Após instalar e reinstalar feature várias vezes. (minutos perdidos da minha vida)

Encontrei no o segguinte POST
http://lawo.wordpress.com/2010/09/11/file-specified-in-the-modules-section-of-this-template-already-exists/

Que descreve a solução :)

Basicamente, é necessário ir no arquivo Elements do seu modulo e trocar a propriedade "IgnoreIfAlreadyExists" para "true"

Abraço,
Maca


sexta-feira, 15 de julho de 2011

Como fazer deploy WSP (moss 2007) em um Sharepoint 2010 server

Olá Amigos,

Depois de 150 anos distante do blog resolvi postar novamente :)

Hoje me deparei com o seguinte problema:

Fazer deploy de um wsp (moss 2007) em um Sharepoint 2010.
Fui em busca do conhecimento (by Et Bilú) e descobri que é uma operação bastante simples.

No Visual Studio 2010, sigam os seguintes passos:
1) Crie um Novo Projeto;
2) Selecione Import SharePoint Solution Package (dentro da aba Sharepoint)
3) Nomeie seu Projeto
4) Escolha a Farm Solution
5) Faça Upload do seu WSP
6) Troque o nome da Feature para o nome da antiga Feature (feature do wsp)
7) Build
8) Deploy
9) Teste

Facílimo!

Até a próxima.

quarta-feira, 25 de março de 2009

Fazer Download de documentos do Sharepoint 2003 usando WS nativos e sem usar OM

Olá Amigos,

Abaixo um pequeno código, que demotra como podemos baixar documentos de uma document library do SharePoint 2003.



public void DownloadFilesFromDocumentLibrary(string url, string documentLibraryName){
Lists.Lists proxy = new Lists.Lists();//set url and credentials on proxy
proxy.Url = url + "_vti_bin/lists.asmx";
proxy.Credentials = CredentialCache.DefaultCredentials;//call get list items to retrieve document library
XmlNode elm = proxy.GetListItems(documentLibraryName, null, null, null, null, null);
XmlNamespaceManager nsMgr = new XmlNamespaceManager(elm.OwnerDocument.NameTable);
nsMgr.AddNamespace("rs", "urn:schemas-microsoft-com:rowset");
nsMgr.AddNamespace("z", "#RowsetSchema");
if (elm != null){
XmlNode dataNode = elm.SelectSingleNode("rs:data", nsMgr);
int itemCount = Convert.ToInt32(dataNode.Attributes.GetNamedItem("ItemCount").Value);
if (itemCount == 0){
Console.WriteLine("Nothing to download");
}else{
foreach (XmlNode row in dataNode.SelectNodes("z:row", nsMgr))
{
//Response.Write(row.Attributes.GetNamedItem("ows_LinkFilename").Value+"
");
DownLoadFile(url, documentLibraryName, row.Attributes.GetNamedItem("ows_LinkFilename").Value);
}
}
}
}



public void DownLoadFile(string url, string documentLibraryName, string fileName){
//string downloadPage = url + "/download.aspx";
HttpWebRequest request = null;
HttpWebResponse response = null;
Stream responseStream = null;
FileStream fs = null;
try{
//request = (HttpWebRequest) HttpWebRequest.Create(downloadPage + "?SourceUrl=" + documentLibraryName + "/" + fileName);
request = (HttpWebRequest)HttpWebRequest.Create(SharePointHost + documentLibraryName + "/" + fileName);
request.Credentials = CredentialCache.DefaultCredentials;
request.Timeout = 6000;
response = (HttpWebResponse)request.GetResponse();
responseStream = response.GetResponseStream();//write to filesystem
fs = new FileStream(fileName, FileMode.Create);
byte[] buffer = new byte[1024];
int count = responseStream.Read(buffer, 0, buffer.Length);
while (count > 0)
{
fs.Write(buffer, 0, buffer.Length);
count = responseStream.Read(buffer, 0, buffer.Length);
}
}
finally{
if(fs != null)
fs.Close();
if(responseStream != null)
responseStream.Close();
if(response!=null)
response.Close();
}
}

sexta-feira, 12 de dezembro de 2008

FormatDateTime - Mostrar hora no formato 24 horas

Olá Amigos,

Dica idiota, mas me custou alguns minutos da minha vida =]

Eu estava usando o código, para formatar a hora no formato 12 horas

<xsl:value-of select="ddwrt:FormatDateTime(string(@EventDate) ,1046,'hh:mm')" />

Precisava mostrar no formato 24 horas, para isso, foi só trocar a mascara de 'hh:mm' p/ 'HH:mm'

<xsl:value-of select="ddwrt:FormatDateTime(string(@EventDate) ,1046,'HH:mm')" />

Abraços,
Leonardo

sexta-feira, 22 de agosto de 2008

Lendo dados de uma View (SPView) (Exibição)

Olá PessoALL,

Faz tempão que não posto e ainda por cima vou aparecer hoje por aqui para dar uma dicazinha bem simples =]

Criar views (exibições) em listas do SharePoint é uma tarefa muito simples e bem poderosa. Conseguimos fazer diversas funcionalidades (agrupamento, ordenação, limitar itens) usando apenas o mouse.

Então por que ao criarmos uma WebPart precisamos fazer tudo de novo? Na verdade não precisamos ^^
Podemos ler itens diretamente de uma View (Exibição)

Bem, chega de chalálá e vamos ao código:

SPListItemCollection coll = spWeb.Lists["ListName"].GetItems(spWebInstance.Lists["ListName"].Views["ViewName"]);

Toda malandragem envolvida neste código, está em passar a view por parâmetro para o método GetItems, se não pudéssemos fazer isso, seria necessário escrever um baita CAML para alcançar as funcionalidades (agrupamento, ordenação, limitar itens) desejadas

Maca espera ter sido útil =]

Abraços,
Leonardo Macanudo

terça-feira, 27 de maio de 2008

Collection was modified; enumeration operation may not execute

Olá Amigos,

Tenho duas listas relacionadas (tópicos,respostas), preciso remover todas as respostas relacionadas a um determinado tópico.

O primeiro código que vem a cabeça é fazer um for each e deletar item por item.

Como no exemplo abaixo:

SPQuery q = new SPQuery();
q.Query = "<Where><Eq><FieldRef Name='Topico' /><Value Type='Lookup'>" + sTopico + "</Value></Eq></Where>";

SPList listRespostas = SPContext.Current.Web.Lists["Respostas"];
SPListItemCollection itensTopicos = listRespostas.GetItems(q);

foreach (SPListItem itemResposta in itensTopicosFake)
{
itemResposta.Delete();
}

Porém quando executamos este código, nos deparamos com o seguinte erro.

Collection was modified; enumeration operation may not execute

Este erro acontece porque a collection que eu estou usando no for each, está sendo modificada dentro dele mesmo.

Para resolver este problema substitui o for each pelo while abaixo.

while (itensTopicos.Count > 0)
itensTopicos[0].Delete();

Abraços,
Leonardo