Category Archives: Desenvolvimento do SharePoint

Uma razão para "um ou mais campo tipos não estão instalados corretamente”

Eu estava fazendo um pequeno puxão ontem a uma web part que faz uma consulta CAML contra uma lista.  Eu fiz a mudança, implantado e foi atingido com um erro:

Ocorreu um erro inesperado em três dias Outlook Weather Forecast WebPart. Por favor, entre em contato com o administrador do sistema. Um ou mais tipos de campo não estão instalados corretamente. Ir para a página de configurações de lista para excluir esses campos.

Eu estava enfrentando uma outra questão de aves raras mais cedo para que eu não ligar imediatamente minha consulta CAML com o erro que SharePoint estava relatando a mim.  Eu fiz uma rápida pesquisa bing e e encontrou este post útil blog por Sandeep Nahta  (http://snahta.blogspot.com/2009/01/one-or-more-field-types-are-not.html).

Aqui está a consulta ruim:

consulta.Consulta ="<Onde><E><EQ><FieldRef FieldRef nome = 'Abbr' /><Tipo de valor = 'Texto'>SFNY</Valor><FieldRef FieldRef nome = 'Abbr' /><Tipo de valor = 'Texto'>SFIS</Valor></EQ></E></Onde>";

Aqui é fixo:

consulta.Consulta ="<Onde><E><EQ><FieldRef FieldRef nome = 'Abbr' /><Tipo de valor = 'Texto'>SFNY</Valor></EQ><EQ><FieldRef FieldRef nome = 'Abbr' /><Tipo de valor = 'Texto'>SFIS</Valor></EQ></E></Onde>";

Assim, a moral da história é: Certifique-se de seu CAML é correto ou você pode receber um erro de excêntrico.

Subscreva ao meu blog.

Siga-me no Twitter em http://www.twitter.com/pagalvin

</fim>

SharePoint 2010 Solução espetada em "Implantando o” Estatuto

Eu usei o PowerShell para implantar uma solução em um farm do SharePoint (h/t:  Corey Roth e seu post do blog). 

Eu fui então para a administração central, acessar as configurações do sistema e, em seguida, "Gerenciar soluções de farm de servidores" para implantá-lo para a fazenda e a minha (ligeira) desânimo, Ele ficou preso na "implantação".

Já vi esse problema surgem muitas vezes em fóruns do MSDN, assim que eu estava bem nervoso sobre ele.  Eu procurei um pouco e achou este artigo útil (por uma pessoa aparentemente estressantes de http://www.resolutionsnet.co.uk/).  Eu cancelado o trabalho de implantação e quando eu cliquei na solução, Ele me disse que ele tinha implantado com êxito a solução para três dos quatro servidores no farm.

Eu fui para o servidor errante, interrompido o serviço de timer e reiniciado-lo.  Servidor Windows realmente me disse que o serviço falhou ao responder ao comando, assim que me diz que estava doente.

Desta vez, Quando eu voltei para o administrador central, Eu era capaz de implantá-lo sem nenhum problema.

Esperemos que este bit de informação ajudará alguns em um ligamento um dos dias.

</fim>

Subscreva ao meu blog.

Siga-me no Twitter em http://www.twitter.com/pagalvin

Erro do dia: "Não é possível adicionar o Assembly no GAC”

Eu tenho lutado um pouco com o visual studio 2010 em uma solução de sp2010 e estava recebendo este erro:

Ocorreu um erro na etapa de implantação 'Adicionar solução': Erro: Não é possível adicionar o assembly especificado do cache de assembly global: YourAwesomeDLLThat IAmJustNotGoingToInstallRightNow.dll

Eu fui para o GAC-se (c:\WINDOWSassembly) para tentar remover e começ um erro "arquivo em uso".

Eu fiz um iisreset, Eu quase baixei Sysinternals, Eu parei o serviço de timer em serviços... finalmente, Eu apenas fechado e reaberto visual studio próprio e finalmente consegui fechá-lo.

</fim>

Subscreva ao meu blog.

Siga-me no Twitter em http://www.twitter.com/pagalvin

Rápido e fácil: Depurando VS 2010 Implantação da solução

Visual Studio 2010 relata erros de disco rígido para depurar durante a implantação algumas vezes.  Uma maneira fácil e rápida de fazer alguma depuração muito áspera é lançar suas próprias exceções nomeadas.  Visual Studio irá mostrar-lhes no console de saída.

Considere este trecho de código:

image

Se este recurso tem como escopo a um aplicativo web, site será nulo.  Se você tentar e fazer referência a uma propriedade do site, você obterá o erro ambíguo:

Ocorreu um erro na etapa de implantação 'Adicionar solução': Referência de objeto não definida para uma instância de um objeto.

No entanto, se lançar uma exceção de nova e passar uma Cadeia de caracteres para o Construtor, você começ uma mensagem um pouco mais útil:

image

É uma técnica em bruto, mas bastante rápido e fácil.

</fim>

Subscreva ao meu blog.

Siga-me no Twitter em http://www.twitter.com/pagalvin

Timer Job FeatureActivated E escopo de recursos

Eu tenho trabalhado com alguns códigos que alguém deu-me para um trabalho de timer.  Ele não tinha fornecido o código de ativação do recurso real, então eu tinha que escrevê-lo, É claro.  Aproveitei Post do famoso blog de Andrew Connell sobre o assunto.

Estou usando o Visual Studio 2010 e implantação manteve a falhar com um erro "ocorreu um erro na etapa de implantação Add Solution': Referência de objeto não definida para uma instância de um objeto."

Eu estava tomando seu código demasiado literalmente.  Foi de escopo o recurso de nível de aplicativo da web, como mostrado:

image

Como resultado, são as propriedades que são enviadas para o receptor do aplicativo da web, não é um conjunto de sites.  No final, o código tem esta aparência:

public override void FeatureActivated(SPFeatureReceiverProperties Propriedades)
{

    // Não fazer o seguinte com recursos web app no escopo, Ele leva ao desespero Sorriso
    // SPSite t: Microsoft.SharePoint.SPSite site = Propriedades.Feature.Parent como SPSite t: Microsoft.SharePoint.SPSite;

    SPWebApplication wa = Propriedades.Feature.Parent como SPWebApplication;

    se (WA = = null) lançar nova exceção("webapp2 é nulo.");

    foreach (SPJobDefinition trabalho em wa.JobDefinitions)
    {

        Tente
        {
            se (trabalho.Nome = = List_JOB_NAME)

                trabalho.Excluir();
        }
        pegar (Exceção e)
        {
            lançar nova exceção("marcador de 2");
        } // catch exceção e
    }

    // Instale o trabalho

    WeatherForecastTimerJob weatherForecastTimerJob =
        WeatherForecastTimerJob novo(List_JOB_NAME, WA);

    SPMinuteSchedule agenda = novo SPMinuteSchedule();
    Agende.BeginSecond = 0;
    Agende.EndSecond = 59;
    Agende.Intervalo = 5;
    weatherForecastTimerJob.Schedule = agenda;
    weatherForecastTimerJob.Update();

}

A chave de Take-Away é que quando o recurso é escopo para uma correia fotorreceptora app, o SPFeatureReceiverProperties que SharePoint passa para o receptor de recurso tem parâmetros de nível de aplicativo da web.  Entrada de blog antiga de Andrew pressupõe que o escopo dele está no conjunto de sites.

</fim>

Subscreva ao meu blog.

Siga-me no Twitter em http://www.twitter.com/pagalvin

Onde está Microsoft.SharePoint.ApplicationPages.Administration.dll?

Eu foi entregou um projeto de visual studio que faz referência a Microsoft.SharePoint.ApplicationPages.Administration.dll.  Tomou-me um pouco enquanto encontrar pensamento e eu partilho.  No meu ambiente, Ele está localizado no:

c:\program filescommon filesmicrosoft sharedweb server extensions14configadminbin

</fim>

Subscreva ao meu blog.

Siga-me no Twitter em http://www.twitter.com/pagalvin

Projeto do CodePlex – SP2010 Explorer

Como parte de um esforço contínuo para saber os detalhes técnicos de nível baixos do SharePoint 2010, Eu criei um "SharePoint Explorer"tipo de ferramenta.  A idéia não é nova.  Eu usei este projeto mais de uma vez: http://sharepointexplorer.codeplex.com/.  Minha idéia é criar uma versão do SharePoint que usa conectado web parts para Mostrar todos os detalhes de baixo nível que pode fornecer o modelo de objeto. 

Este blog serve como tanto o anúncio do projeto, bem como uma chamada para voluntários.  Se você está interessado em trabalhar neste projecto, Avise-me via e-mail (Galvin.Paul@gmail.com) e nós elaboraremos.

Aqui está o projeto: http://sp2010explorer.codeplex.com/

</fim>

Subscreva ao meu blog.

Siga-me no Twitter em http://www.twitter.com/pagalvin

Trabalhando com TreeNodeBinding em ASP.Controle Treeview NET

Tenho vindo a trabalhar sobre o que espero que seja um logo liberado CodePlex projeto que fornece um agradável bit integrado de web parts, falando uns aos outros por meio de conexões de consumidor do provedor de explorar um site do SharePoint nos bastidores.  (Isso certamente foi feito antes, mas este é um projeto de aprendizagem, tanto quanto qualquer outro coisa).  Isto pretende ser um substituto para a vista do Explorador de windows do SharePoint 2010 bibliotecas de documentos.

O código tem recursiva habitual chamar para baixo o SPWeb e SPLists partir um determinado ponto.  O objeto que faz todos os que atravessem constrói uma Cadeia de caracteres XML que é algo como isto:

<SiteCollection url =’http://demo2010a:9090′>
 
<Web
     título = 'Olá mundo Sandbox' 
     Modelo =' um site para as equipes organizar rapidamente, autor, e compartilhar informações, BLÁ BLÁ BLÁ '>

     <lista
        título ='BCC_Health_Services_FAQs’
        Modelo ='CustomList’
       
ListId =’http://demo2010a:9090/helloworldsandbox[delim]1e02b001-3cb2-4f17-b63d-7809e86b4174′>
    
</lista>

     <lista
        título = 'BCC_Notifications' 
        Modelo = 'CustomList' 
        ListId =’
http://demo2010a:9090/helloworldsandbox[delim]5a5a13d1-877 c-41 c 0-9063-b9612be80d5e’>
     </lista>

  </Web>

</sitecollection>

Eu espero para limpar acima que XML antes de tudo é dito e feito.

Eu quero começar, finalmente, que as informações acima e em um Controlarar de Treeview.  Não é exatamente a terra coisas estilhaçando.

O desafio que eu tirei aqui foi ligar o modo de exibição de árvore para um controle de fonte de dados XML em vez de construir manualmente até meu treenodes como eu percorrer a árvore.  Eu fiz isso porque eu estou deliberadamente fazendo coisas mais difícil para mim (Este é um projeto de aprendizagem depois de tudo) e em parte porque eu tenho esta vaga noção de que a criação de nós da árvore como eu percorrer a árvore não é uma boa idéia para o longo prazo.

O problema dessa abordagem é que o Controlarar de Treeview não sabe sobre os atributos de boas em nós interessantes como "lista" ou "web" para que ele mostre essa saída por padrão:

 

image

Isso não é útil.  Isto é onde a classe TreeNodeBinding ajuda.  Posso usar isso para dizer o controle Treeview como ele deve interpretar o XML.  Aqui está um exemplo:

TNB = novo TreeNodeBinding();
TNB.DataMember = "lista"; // Este é o rótulo no xml para um site.
TNB.TargetField = "listid";
TNB.ValueField = "title";
TNB.ToolTipField = "Modelo";

Essa ligação informa o treeview que quando encontra uma <lista> nó de XML, aplicam-se as ligações para TargetField, ValueField e ToolTipField.  Em Maio app, Estes mapeiam as seguintes:

  • TargetField: Quando alguém clica em um valor de nó, Isso é o que você vai ter para SelectedNode.Value.  Isso não deve ser confundido with…
  • ValueField: Isto é o que você quer de Treeview para exibir para o usuário.
  • ToolTipField: O valor de XML que você deseja como uma dica de ferramenta.

Adicionar que TreeNodebinding DataBindings da exibição em árvore e você obter saída como este:

 

image

Eu vou ter mais sobre tudo isso como eu continuar no projeto e eventualmente colocar isso no Codeplex.

</fim>

Subscreva ao meu blog.

Siga-me no Twitter em http://www.twitter.com/pagalvin

Conectando-se filtros de campo de texto para sua Web Part personalizada

Eu queria receber informações de um filtro de campo de texto no SharePoint 2010 em minha parte de web personalizado.  Eu tentei usar neste artigo do MSDN como uma base mas o artigo está quebrado ou simplesmente não estou seguindo ele corretamente.

Um pouco mais de pesquisa transformou-se Mike Smith Contribuição do MSDN here (http://social.msdn.microsoft.com/forums/en-us/sharepointdevelopment/thread/72F1732A-7F93-441E-8644-2E82BBB153D9).

Há um monte de coisas lá fora em conectável web parts mas artigo de Mike é tão simple quanto ele ganha.

</fim>

Subscreva ao meu blog.

Siga-me no Twitter em http://www.twitter.com/pagalvin

Rápido e fácil: Envie Email usando o servidor de SMTP do Gmail em.NET C#

Isso não é exatamente um novo tópico, mas quando eu precisava fazê-lo, Eu encontrei um monte de "por que não este trabalho para mim" e não há muitas respostas diretas. Espero que alguém encontre isto útil.

O seguinte trecho de código irá enviar um e-mail usando minha conta do gmail para fazê-lo, incluindo anexos:

usando System.Net.Mail;
usando System.Net;

NetworkCredential loginInfo = Novo NetworkCredential("[Meu ID do Gmail]", "[Minha senha do Gmail]");
MailMessage MSG = Novo MailMessage();
MSG.From = Novo MailAddress("[M Gmail Id]@gmail.com");
MSG.To.Add(Novo MailAddress("e paul.galvin@arcovis.com"));
MSG. Assunto = "Infopath dev cobaia";
MSG. Corpo = "<HTML><corpo><forte>Uma mensagem forte.</forte></corpo></HTML>";
MSG. IsBodyHtml = verdadeiro;

foreach (Cadeia de caracteres aFile em NIPFD. GetAttachmentNamesAndLocations())
{
    MSG. Attachments.Add(Novo Anexo(aFile));
} // Adicionar anexos.

SmtpClient cliente = Novo SmtpClient("smtp.gmail.com");
cliente.EnableSsl = verdadeiro;
cliente.UseDefaultCredentials = falso;
cliente.Credenciais = loginInfo;
cliente.Port = 587;
cliente.EnableSsl = verdadeiro;
cliente.Enviar(MSG);

Alguns bits chaves que me atrasou e outras observações / notas:

  • A primeira linha que cria o objeto loginInfo precisa usar o gmail de que ID despojado "@gmail.com”. Assim, Se é o meu endereço de e-mail do gmail "e sharepoint@gmail.com"e minha senha é"xyzzy"Então a linha pareceria:

NetworkCredential loginInfo = Novo NetworkCredential("sharepoint", "xyzzy");

  • Minha conta do gmail está configurada para usar SSL, e não era um problema.
  • Há algumas informações conflitantes na qual porta usar. Eu usei a porta 587 e ele funcionou bem para mim.
  • No meu caso, Eu também precisava enviar anexos. Esse objeto NIPFD tem um método que sabe onde estão meus acessórios. Ele está retornando um caminho totalmente (EG. "c:\tempattachment1.jpg". No meu teste, Eu tinha dois acessórios e ambos funcionavam bem.

Eu usei o visual studio 2008 para escrever esse código.

</fim>

Subscreva ao meu blog.

Siga-me no Twitter em http://www.twitter.com/pagalvin

Technorati Tags: ,,,