Category Archives: Desenvolvimento do SharePoint

Explicação simples: “Valor não se enquadra no intervalo esperado.”

ATUALIZAÇÃO: Um cartaz anônimo que deixou um grande comentário sobre nomes internos. Certifique-se de lê-lo.

Quando se trabalha com receptores de eventos e outros códigos que faz referência a itens de lista do SharePoint por meio do modelo de objeto, Eu muitas vezes cometem erros que geram esse erro em tempo de execução:

Erro ao carregar e executar o receptor de evento Conchango.xyzzyEventReceiver em xyzzy, Versão = 1.0.0.0, Cultura = neutro, PublicKeyToken = 0dc50a750396c3ac. Informações adicionais estão abaixo. : Valor não se enquadra dentro do intervalo esperado.

Acho que é um erro bastante genérico que é potencialmente causado muitas maneiras diferentes. No entanto, uma explicação simples é que eu estou fazendo referência a um campo incorretamente. Se o nome do campo "Data de vencimento", Eu deve referenciá-lo como este em um receptor de eventos:

Propriedades.ListItem["Due Date"]

Quando escrever mal ou usar o caso errado ao fazer referência o campo, SharePoint gera o acima mencionado erro de tempo de execução. Por exemplo, Isso é errado:

Propriedades.ListItem["due Date"]

</fim>

Subscreva ao meu blog.

Rápido & Fácil: Crie uma pasta e atribua um tipo de conteúdo (Ou, Ter seus KPIs e comê-los também)

A fim de contornar um problema KPI Eu escrevi sobre aqui, Eu fiz alguns testes e descobriu o trabalho do KPI é contra pastas com meta dados da mesma maneira que eles trabalham contra documentos ou listam itens. Provei-o para fora, criando um novo tipo de conteúdo com base no tipo de conteúdo de pasta e em seguida, adicionado alguns campos. Eu criei alguns indicadores e provar a mesmo que KPIs funcionam como esperado. Isso foi notícia bem-vinda. Não é perfeito, Porque o detalhamento que você começ de KPI contra as pastas não é exatamente o que você quer. Isto não é mais uma desvantagem, no meu caso, porque 1) os usuários finais não conhecem nada melhor e 2) o detalhamento vai para uma pasta. Clique o nome da pasta e eles estão no item. Dois cliques em vez de um, o que não é o fim do mundo.

Isso fluiu muito bem com o trabalho que estava fazendo. Estou criando uma pasta para cada documento que obtém carregado. Isto é feito através de um receptor de eventos. Como resultado, é um pedaço de bolo para manter o a pasta pai meta dados em sincronia com os dados de meta orientada por KPI do arquivo em si, desde que a canalização já está em vigor. This allows me to have my KPI’s and eat them too 🙂

Eu modifiquei o receptor de eventos para adicionar a pasta e em seguida, defina o tipo de conteúdo da pasta esta nova para meu tipo de conteúdo personalizado KPI-amigável. Este trecho de código fez o truque:

 SPFolderCollection srcFolders = targetWeb.GetFolder("Documentos").Subpastas;
  SPFolder addedFolder = srcFolders.Add(Propriedades.ListItem.ID.ToString());
  SPContentTypeId kpiCT = Novo SPContentTypeId("0x0120002A666CAA9176DC4AA8CBAA9DC6B4039F");
  addedFolder.Item[Identificação de tipo de conteúdo""] = kpiCT;
  addedFolder.Item.Update();

Para localizar o ID do tipo de conteúdo real, Eu acessada através de configurações do site, que tipo de conteúdo e copiar/colar é da URL como mostrado:

imagem

</fim>

Subscreva ao meu blog!

Rápido e fácil: Obter o SPFolder de um SPListItem em um receptor de eventos

Eu odeio admitir isso, Mas lutei com um presente todo dia. Meu receptor de eventos precisa atualizar um campo de sua pasta pai. Isso pouco mostra como fazê-lo:

privada privatevoid UpdateParentFolder(SPItemEventProperties Propriedades)
{

SPFolder thisItemFolder = Propriedades.ListItem.File.ParentFolder;
thisItemFolder.Item["ZZ Status de aprovação"] = "Good news, todos os!";
thisItemFolder.Item.Update();


} // UpdateParentFolder

Neste caso, Estou trabalhando com uma biblioteca de documentos e as propriedades são provenientes de um evento ItemAdded.

O truque é que você não pode obter o SPFolder do item diretamente do item propriamente dito (ou seja. Propriedades.ListItem.Folder é nulo). Em vez disso, ir para o arquivo associado do item lista e obter a pasta do arquivo.

</fim>

Subscreva ao meu blog!

Ainda um outro receptor de eventos depuração truque

Tenho certeza que não sou a primeira pessoa a chegar a este. No entanto, Eu não notei qualquer um publicar um truque como esse desde que comecei a prestando atenção à Comunidade em julho. Assim, Eu pensei que eu ia postar essa dica rápida e fácil de depurar.

Estou trabalhando em um receptor de eventos que começou a gerar o erro na 12 colméia:

Erro ao carregar e executar o receptor de evento Conchango.xyzzyEventReceiver em xyzzy, Versão = 1.0.0.0, Cultura = neutro, PublicKeyToken = blahbalhbalh. Informações adicionais estão abaixo. : Referência de objeto não definida para uma instância de um objeto.

Eu não sabia onde eu tinha introduzido este bug, porque eu tinha feito muitas coisas em um dos meus ciclos de código/implantar/teste.

Eu tentei Esta solução para obter o meu pdb lá com as esperanças do SharePoint que 12 colméia mostraria o rastreamento de pilha, Mas sem sorte. Não sei se é possível e se alguém faz, por favor me avise 🙂

Eu sei que é possível escrever suas próprias mensagens de log para o 12 colméia. Sinceramente, Eu queria algo um pouco menos assustador e mais rápido para implementar.

Ocorreu-me que pelo menos consigo algumas informações básicas de rastreamento por capturar e relançar exceções genéricas como esta:

  Tente {
    UpdateEditionDate(Propriedades);
  }
  pegar (Exceção e)
  {
    jogar Novo Exceção("Despachante, UpdateEditionDate(): Exceção: [" + e.ToString() + "].");
  }

Isto apareceu na 12 colmeia desta forma:

Erro ao carregar e executar o receptor de evento Conchango.xyzzyEventReceiver em xyzzy, Versão = 1.0.0.0, Cultura = neutro, PublicKeyToken = blahblahblah. Informações adicionais estão abaixo. : Despachante, UpdateEditionDate(): Exceção: [NullReferenceException.: Referência de objeto não definida para uma instância de um objeto. em Conchango.xyzzyManagementEventReceiver.UpdateEditionDate(SPItemEventProperties Propriedades) em Conchango.xyzzyManagementEventReceiver.Dispatcher(SPItemEventProperties Propriedades, String eventDescription)].

Isso me deu todos os detalhes que eu precisava para rastrear esse problema em particular e pretendo usá-lo muito daqui para frente.

</fim>

Subscreva ao meu blog!

Solução: SPQuery não pesquisa pastas

Esta semana eu estava implementando um "evoluindo" solução para um cliente que usa o BDC e SPQuery e encontrei alguma dificuldade usando SPQuery contra uma biblioteca de documentos que contêm pastas. Linha inferior: atribuir "recursiva" para o atributo de exibição da consulta.

Meu cenário:

  • Na segunda-feira, Eu carregar um documento e fornecer alguns dados meta.
  • Na semana seguinte, Eu carregar um novo documento. Grande parte meta dados do documento esta nova baseia-se no documento que fiz upload na segunda-feira (que chamamos o "documento principal").
  • Nós criamos uma fachada de serviço web que fornece uma interface de BDC amigável para a lista para que os usuários podem facilmente localizar esse documento segunda-feira através de uma pesquisa de título.
  • Uma coluna de dados BDC fornece uma interface de usuário amigável. (Isto é parte da minha tentativa de usar BDC para uma coluna de pesquisa mais amigável).

O serviço de fachada do BDC final usa uma consulta como esta para fazer a pesquisa:

 // Usado U2U ferramenta para auxiliar na geração esta consulta CAML.
      oQuery.Query =
        "<Onde>";

      se (titleFilter.Length > 0)
        oQuery.Query   =
          "  <E>";

      oQuery.Query   =
        "    <E>" +
        "      <GEQ>" +
        "        <Nome FieldRef =  "DocumentId" />" +
        "        <Tipo de valor =  "Text">" + minId + "</Valor>" +
        "      </GEQ>" +
        "      <Leq>" +
        "        <Nome FieldRef =  "DocumentId" />" +
        "        <Tipo de valor =  "Text">" + maxId + "</Valor>" +
        "      </Leq>" +
        "    </E>";

      se (titleFilter.Length > 0)
        oQuery.Query   =
          "    <Contém>" +
          "      <Nome FieldRef =  "Title" />" +
          "      <Tipo de valor =  "Text">" + titleFilter + "</Valor>" +
          "    </Contém>" +
          "  </E>";
      oQuery.Query   =
        "</Onde>";

Durante a fase inicial de desenvolvimento, Isso funcionou muito bem. No entanto, Introduzimos pastas no diretório para resolver alguns problemas e de repente, meu seletor de BDC não retorna nenhum resultado. Eu segui isso ao fato de que o SPQuery nunca iria retornar todos os resultados. Usamos pastas principalmente para permitir que vários arquivos com o mesmo nome a ser carregado, mas com diferentes dados meta. Quando o arquivo é carregado, Vamos criar uma pasta com base na identificação do item da lista e em seguida, mova o arquivo lá (Eu escrevi sobre isso here; Já tivemos resultados mistos com esta abordagem, mas em todo o, está funcionando bem). O usuário não se importam sobre pastas e na verdade, realmente não entendo que existem todas as pastas. Temos configurado todos os pontos de vista da biblioteca para mostrar itens sem considerar pastas.

Eu bati esse problema duas vezes como a execução técnica evoluiu e resolvido isso de forma diferente cada vez. A primeira vez, Eu não estava usando o operador CONTAINS na consulta. Sem um operador CONTAINS, Eu era capaz de resolver o problema, especificando o modo de exibição contructor do SPQuery. Em vez de usar o construtor padrão:

SPList t: Microsoft.SharePoint.SPList oList = web.Listas["Documentos"];

SPQuery oQuery = Novo SPQuery();

Em vez disso usei um construtor que especificou uma vista:

SPList t: Microsoft.SharePoint.SPList oList = web.Listas["Documentos"];

SPQuery oQuery = Novo SPQuery(oList.Views["Todos os documentos"]);

Isso resolveu o problema e comecei a receber meus resultados.

Em seguida, adicionei o operador CONTAINS na mistura e quebrou novamente. Verifica-se que o operador CONTAINS, tanto quanto eu posso dizer, Não funciona com a vista da mesma forma que a um simples GEQ / Operadores LEQ. Eu fiz alguma pesquisa e aprendi que ViewAttributes a consulta deve ser definido como "Recursiva", como em:

oQuery.ViewAttributes = "Escopo = "Recursive"";

Isso resolveu o problema para CONTAINS. Na verdade, Isto também resolveu o meu problema de pesquisa original e se eu tivesse especificado o recursivo atributo pela primeira vez, Eu não encontraria com a questão novamente.

O fato de que uma visão-baseada SPQuery funciona para alguns operadores (GEQ/LEQ) e outros não (CONTÉM), juntamente com o fato de que os KPIs não parecem trabalhar em conjunto com pasta contendo o documento bibliotecas conduz me acreditar que SPQuery tem alguns problemas de ortogonalidade.

Agradecimentos especiais:

  • O pessoal da R22 e sua ferramenta de consulta.
  • Grande de Michael Hoffer "aprender fazendo" post do blog, Comentários e respostas.

</fim>

Subscreva ao meu blog!

Bug de musgo KPI? Indicador? Lista Amarrado uma biblioteca de documentos com Pastas

ATUALIZAÇÃO 02/29/08: Eu resolvi esse problema criando uma pasta e, em seguida, atribuir um tipo de conteúdo para a pasta que tem os dados de meta que eu preciso para os KPIs. < um href="http://translate.googleusercontent.com/translate_c?hl=pt-BR & prev=/search?q=bug+report+kpi&hl=pt-BR&biw=1280&bih=683&prmd=imvnsa & rurl=translate.google.com.br & sl = pt & u=http://feeds.feedburner.com/~r/PaulGalvinsSharepointSpace/~3/237910104/cns!1CC1EDB3DAA9B8AA!748.entry & usg=ALkJrhiLDU94yo8BcLRwV55cRaLSB4EX3g"> UE descrevi em detalhes um pouco mais aqui.

Temos implementado uma solução técnica, onde os usuários fazer upload de documentos em uma biblioteca de documentos. Um receptor de eventos cria um diretório e move o arquivo para esse diretório (usando uma técnica semelhante para o que eu escrevi sobre here). Já navegamos em torno das questões potenciais causadas por receptores de evento que renomear arquivos enviados com sucesso ((principalmente porque os usuários não iniciar o seu documento clicando em "Novo"," mas em vez de criar os documentos localmente e depois enviá-los).).

The meta data for these documents includes a Yes/No site column called "Urgent" e outro coluna de site chamado "Status". Temos de atender a um requisito de negócio que mostra a porcentagem de "urgente" documents whose status is "Pending".

Isso é geralmente simple de fazer < um href="http://translate.googleusercontent.com/translate_c?hl=pt-BR & prev=/search?q=bug+report+kpi&hl=pt-BR&biw=1280&bih=683&prmd=imvnsa & rurl=translate.google.com.br & sl = pt & u=http://sharepointbeagle.com/channels/realworld/Pages/PermitManagementSolutionOnMOSS2007.aspx & usg=ALkJrhjbOIajrVtFDcPo1KgGEd-smxBhlg" target="_blank"> e eu descrito algo muito parecido com isso no SharePoint Beagle com muitos tiros de tela se você estiver interessado.

In a nutshell, I did the following:

  • Create a view on the doc library called "Pending".
  • Configure the view to ignore folder structure.
  • Create a KPI List.
  • Criar um indicador na lista que aponta para o lib de doc e que "pendente" Exibir.

Isso simplesmente não funciona. O KPI mostra meu destino (EG. cinco documentos urgentes) Mas sempre mostra o número real de documentos urgentes como zero. Paradoxalmente, detalhes,, Ele mostra os cinco documentos urgentes na lista. Eu criei um cenário muito simples com dois documentos, um em uma pasta e um não. Aqui está a foto de tela:

imagem

A tela acima mostra claramente existem dois documentos em exibição, mas o valor"" é um. O CamlSchema"" com Id documento em branco é na pasta raiz eo outro é em uma pasta chamada "84"..

It appears to me that even though you specify a view, the KPI doesn't honor the "show all items without folders" setting and instead, confines itself to the root folder.

If I'm wrong, please drop me a line or leave a comment.

</fim>

Subscreva ao meu blog!

Solução para problema: “FileNotFoundException” Com o meu receptor de recurso.

Eu estava trabalhando em um recurso na semana passada que gostaria de acrescentar alguns receptores de evento para uma instância de lista específica. (Eu blogged um pouco sobre esse receptor de lista aqui).

Usando a linha de comando, Eu poderia instalar o recurso sem erros (mas veja abaixo o erro oculto). Quando eu tentei implantar o recurso no site, MOSS queixou-se de um "FileNotFoundException" erro. Esta entrada de blog descreve como eu resolvi isso.

Este é o erro que MOSS mostrou-me no navegador da web:

Recurso ' b2cb42e3-4f0a-4380-aaba-1ef9cd526f20’ não pôde ser instalado porque o carregamento de assembly de receptor de eventos "xyzzyFeatureReceiver_0" Falha: System.IO.FileNotFoundException: Não foi possível carregar arquivo ou assembly ' xyzzyFeatureReceiver_0’ ou uma de suas dependências. O sistema não pode encontrar o arquivo especificado.
Nome do arquivo: ' xyzzyFeatureReceiver_0’
em System.Reflection.Assembly.nLoad(Nome de arquivo de AssemblyName, Base de código de seqüência de caracteres, Evidência assemblySecurity, Montagem locationHint, StackCrawlMark& stackMark, Boolean throwOnFileNotFound, Boolean forIntrospection)
em System.Reflection.Assembly.InternalLoad(AssemblyName assemblyRef, Evidência assemblySecurity, StackCrawlMark& stackMark, Boolean forIntrospection)
em System.Reflection.Assembly.InternalLoad(AssemblyString de Cadeia de caracteres, Evidência assemblySecurity, StackCrawlMark& stackMark, Boolean forIntrospection)
no Load(AssemblyString de Cadeia de caracteres)
em Microsoft.SharePoint.Administration.SPFeatureDefinition.get_ReceiverObject()
AVI: Log de vinculação conjunto está activado OFF.
Para habilitar o log de falha bind assembly, Defina o valor do registro [HKLMSoftwareMicrosoftFusion!EnableLog] (DWORD) Para 1.
Observação: Há alguma penalidade de desempenho associada assembly vincular falha log.
Para desativar esse recurso, Remova o valor do registro [HKLMSoftwareMicrosoftFusion!EnableLog].

Solucionar problemas com o Windows SharePoint Services.

Eu sei como deliberadamente causar esse erro: Não instalar o assembly no GAC. Mas, foi no GAC. Eu normalmente instalar assemblies no GAC arrastando-os para o c:\WINDOWSassembly. pasta usando o windows explorer. Eu nunca senti 100% confortável fazendo isso porque eu sempre pensei que gacutil existiu por uma razão … Então, eu tentei isso. Isso não fez diferença.

Eu procurei a internete e encontrei este post: http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=2243677&SiteID=1

O cartaz aconteceu estar usando o mesmo bit de raiz do código (do livro WSS dentro desta lista) Então isso foi um sinal de esperança. No entanto, a sugestão de decorar o assembly com um [montagem: ] directiva não fazia sentido para mim. Eu tentei de qualquer maneira e eu estava certo. Isso não fez diferença.

Então eu notei que a minha definição de classe não era pública. Eu fiz isso público e que não fez diferença.

Próximo, Eu fui para o problema de habilitar o log de falha de ligação, montagem"" (seguindo as instruções úteis e precisas fornecidas) e isto é onde as coisas começaram a ficar interessante. Esse log mostra-me que o tempo de execução está procurando em todo lugar nesse servidor para minha montagem. Nem parece ser procurá-lo no meu armário de remédios. Mas … Ele não vai procurá-lo no GAC.

Coloquei meu casaco de inverno e ir procurar a Internet novamente e achar que alguém teve este problema também. A longa discussão em que a publicação peters fora em nada e não consigo encontrar uma solução.

Mudar meu assembly para um dos lugares que o log afirma está procurando e eu avançar um pouco mais. Eu sou recompensado com um novo erro no navegador quando tento ativar o recurso:

Falha ao criar objeto receptor de recursos do assembly "xyzzyFeatureReceiver_0", Digite "Conchango.xyzzyFeatureReceiver" para o recurso b2cb42e3-4f0a-4380-aaba-1ef9cd526f20: Sistema. ArgumentNullException: Valor não pode ser nulo.
Nome do parâmetro: tipo
em System.Activator.CreateInstance(Tipo tipo, Boolean confidenciais)
em System.Activator.CreateInstance(Tipo tipo)
em Microsoft.SharePoint.Administration.SPFeatureDefinition.get_ReceiverObject()

Solucionar problemas com o Windows SharePoint Services.

Tempo para uma última viagem à Internets!

Desta vez eu descobrir, previsibilidade suficiente, que MOSS emite este erro porque o assembly não está no GAC.

Quero comprar obter algo positivo fora deste e tentar sentir um pouco orgulhoso que eu criei o Fugitivo de assemblies MSIL, Mas não está funcionando. Estou muito chateado. Me pego resmungando "ovo ou a galinha" sob a minha respiração.

Eu finalmente decidir chutar. Criar um projeto totalmente novo e copiar/colar o código do projeto de não-trabalho de incredible-cloaked-from-the-GAC-assembly sobre a este novo projecto. (Eu procuro um sinalizador de compilação chamado algo como "hide from assembly ligação se instalado no GAC" mas não é possível encontrar um).

Posso instalar o recurso e ativá-lo e … Ele funciona! Assim, Depois de tudo isso, Eu tive que basicamente ' reiniciar’ meu projeto. Esta é outra razão por que eu odeio computadores.

Aprendi uma coisa útil disso. Eu tinha sido instalando recursos usando linha de comando stsadm dia inteiro e usando o "-força" opção por hábito. Por alguma razão, Eu não uso o - opção de força quando eu instalei o novo projeto. Desta vez, Eu fiz realmente, verdadeiramente esquecer copiar assembly deste novo projeto no GAC. Como resultado, Recebi esse "FielNotFoundException" erro. Desta vez, I got it from stsadm, Não, quando eu tentei ativar o recurso através do web browser. Assim, -força, na verdade, interpreta dois papéis. Ele permite que você re-instalar um recurso existente. Ele também permite que você instale uma buggy característica que não pode trabalhar em tempo de execução, suprimindo o erro. Provavelmente diz tanto na ajuda em algum lugar, mas eu nunca notei isso.

</fim>

Rápido & Fácil: Renomear arquivo carregado usando o modelo de objeto SharePoint através de um receptor de eventos

ATUALIZAÇÃO: Isso funciona, mas existem limitações significativas, que são descritas nos comentários. Isto ainda pode ser útil em algumas circunstâncias.

ATUALIZAÇÃO 2: No meu projeto atual, os usuários sempre fazer upload de documentos. Como resultado, Eu não corro em um problema onde o MS Word está sendo executado e acha que o arquivo foi renomeado nele. Eu funcionei em um problema, "o arquivo foi modificado por outro usuário" e isto resolvido através de um sinalizador de tipo semáforo simples. Os usuários precisam mudar um campo de dados de meta de seu valor padrão para outra coisa. O itemupdated() receptor procura lá um valor válido antes de realmente executar a renomeação e desde então, Eu não tive quaisquer problemas. Sua milhagem pode variar.

Eu tenho uma exigência do cliente para alterar o nome de arquivos carregados para uma biblioteca de documentos específica conformar-se com uma Convenção de nomenclatura específica. A API não oferece uma "renomear()" Método. Em vez disso, Nós usamos "MoveTo(…)". Aqui está um pouco mínimo de código para realizar essa tarefa:

 público substituir privatevoid ItemAdded(SPItemEventProperties Propriedades)
        {
            SPFile t: Microsoft.SharePoint.SPFile f = Propriedades.ListItem.File;

            f.MoveTo(Propriedades.ListItem.ParentList.RootFolder.Url + "/xyzzy.doc");
            f.Update();

        }

O bit apenas complicado é as "Propriedades. ListItem.ParentList.RootFolder.Url". O MoveTo() método requer uma URL. Que mínimo pontos de seqüência de caracteres para a pasta raiz de minha biblioteca do documento atual. Isso me permite evitar qualquer codificação difícil no meu receptor de eventos.

Esta é uma versão mais útil que faz a mesma coisa, mas atribui o nome do arquivo para "Título":

 público substituir privatevoid ItemAdded(SPItemEventProperties Propriedades)
        {
            DisableEventFiring();

            // Atribuir o título deste item para o nome do próprio arquivo.
 // OBSERVAÇÃO: Esta atribuição deve ter lugar antes de nós modificar o próprio arquivo.
 // Atualização de chamada() sobre o SPFile t: Microsoft.SharePoint.SPFile parece invalidar as propriedades em
 // algum sentido.  Atualizações para "título" falha até que altere (e atualização() chamar)
 // passaram em frente da mudança para o nome do arquivo.
            Propriedades.ListItem["Título"] = Propriedades.ListItem.File.Name;

            Propriedades.ListItem.Update();

            SPFile t: Microsoft.SharePoint.SPFile f = Propriedades.ListItem.File;

            // Obter a extensão do arquivo.  Precisamos que mais tarde.
 Cadeia de caracteres spfileExt = Novo FileInfo(f.Name).Extensão;

            // Renomeie o arquivo para ID do item de lista e use a extensão de arquivo para manter
 // parte dele intacta.
            f.MoveTo(Propriedades.ListItem.ParentList.RootFolder.Url +
                "/" + Propriedades.ListItem["ID"] + spfileExt);

            // Confirmar a mudança.
            f.Update();

            EnableEventFiring();
        }

Dica rápida: Web Part de consulta de conteúdo, XSL e o valor da coluna de pesquisa

Eu tenho um nome de coluna em um tipo de conteúdo chamado "Real Estate localização".

Essa coluna é do tipo "pesquisa".

Eu modifiquei <CommonViewFields> e ItemStyle.xsl para mostrar a coluna.

Um simples <XSL:valor da selecione =…> volta retorna um valor interno que inclui dados de posição ordinal, tais como:

1;#Miami

Para obter o valor de humanos-amigável, usar xsl substring após, como mostrado:

<XSL:valor da selecione = "substring-after(@ Real_x005F_x0020_Estate_x005F_x0020_Location,’#’)"></XSL:valor da>

Use esta técnica sempre que você estiver trabalhando com valores de pesquisa em transformações XSL e precisa para obter o valor de humanos-amigável.

<final />

Technorati Tags: , ,

Rápido e fácil: Determinar o nome de coluna interno de uma coluna de Site

ATUALIZAÇÃO: Jeremy Thake tem um blog sobre isso e colocar algumas código de um aplicativo de console que mostra nomes internos.

Eu estava tentando conseguir uma web part de consulta de conteúdo para exibir uma data de conclusão de uma tarefa e porque o rótulo de tela é "uma Data de vencimento", Achei que o nome da coluna para usar em <CommonViewFields> é "Due_x0020_Date".

Errado!

Neste caso, o nome da coluna real foi "DueDate".

Como para encontrá-lo? Re-li Heather Entrada de blog de Salomão sobre a modificação de CQWP para mostrar colunas adicionais de dados. Ela descreve este processo na etapa #13. Confiar nele. É correto. Pelo menos, deu certo para mim. Não confiou isso em primeiro lugar para outra coluna com um nome muito mais tempo.

Digo "confiar nele" Porque eu não confie nele e provavelmente desperdiçado perto de duas horas, batendo a cabeça contra a parede. Depois que eu resolvi "DueDate" nome, Eu queria adicionar outro campo para <CommonViewFields>. Usando a técnica de Solomon, Eu estava recebendo um nome de coluna como "XYZ_x0020_Project_x0020_Due_x00".

Eu pensei:, Isso é claramente um nome truncado. Eu fui em frente e un-truncado-sem sucesso. Finalmente usei o nome aparentemente truncado e funcionou.

Dica de bônus: Quando eu estava trabalhando com o CQWP, se eu adicionei um mau nome interno para <CommonViewFields>, o CQWP me diria que a consulta não teve retornou nenhum resultado. Mas, se eu adicionar um tipo de dados para o nome do campo, Ela iria retornar um resultado. Adicionando os dados tipo na verdade mascarada um problema desde que eu estava fazendo referência a um campo inexistente. Eu poderia adicioná-lo, mas quando tentei exibir seu valor, Sempre fico em branco.

Isso não o erro de máscara:

<CommonViewFields>Due_x0020_Date;</CommonViewfields>

Isso o erro de máscara:

<CommonViewFields>Due_x0020_Date,DateTime;</CommonViewfields>

</fim>