Infinitamente aninhando <div> Tags e jQuery

Este parece ser um tema tão excêntrico, Não tenho certeza realmente vale a pena blogar sobre, mas que nunca deixou de me antes, Então, aqui vamos nós Sorriso

Estou trabalhando fora de um projeto onde estou puxando alguns dados de uma pesquisa, embalagem em uma mensagem de XML e, em seguida, o XML é, finalmente, transformada em HTML através do XSLT.  Há um monte de jQuery envolvido, um pouco de que implementa algumas funcionalidades das tabulações.  Quando você clica em uma guia (realmente, uma <div>), jQuery chama Hide() e show() em várias divs (o carregamento da página inicial baixa todo o conteúdo assim lá não são nenhuma postagens neste caso).

Um monte de horas atrás, na guia comutação lógica começou a se comportar de forma irregular e ele não iria mostrar um dos meus guias.  Eu finalmente seguiu para baixo para o fato de que explorer internet (pelo menos) pensa-se que o <div> marcas aninhadas até agora, muito mais profundo do que se destinam.Mostra barra de ferramentas do desenvolvedor:

-<div id = "Tab1Content">
  -<div>
    -<div>
      -<div id = "Tab2Content">
        -<div>
           …………………………
                   </div>  <— Finalmente mostrando ele foi fechado todo o caminho aqui!

Assim, se eu fiz um $("# Tab1Content").esconder(), Eu também esconderia Tab2 e nunca poderia mostrar Tab2 se eu não mostrar também Tab1.  Copiei e colei o código em visual studio e ele mostrou tudo de forro da div acima agradàvel, exatamente como eles deveriam estar fazendo, parecido com isto:

-<div id = "Tab1Content">
  +<div>
  +<div>
-<div id = "Tab2Content">
  +<div>
  +<div>

Eu bati minha cabeça contra a parede por um tempo e notei que no HTML real código foi gerando um monte de vazio <div> marcas, como:

<corpo>

  <div id = "Tab1Content">

    <div id = "row1" />
    <div id = "row2" />

  </div>

  <div id = "Tab2Content">

    <div id = "row1" />
    <div id = "row2" />

  </div>

</corpo>

(O acima é waaaaaaaaaaaay simplificado.  As tags div vazia são totalmente válidas. Alguns dos meus <div> marcas estavam cheias de conteúdo, mas muitos outros não foram.  Cheguei à conclusão de que meu <XSL:for-each> directivas foram emitindo a forma curta div marcas quando o xsl:for each não ' encontrar qualquer dados.  Forcei um comentário HTML na saída, como mostrado:

image

 

Depois que eu fiz que, o div alinhado perfeitamente e meu guia comutação começou a trabalhar.

Como sempre, Espero que isso ajude alguém em um beliscão.

</fim>

Subscreva ao meu blog.

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

Correção rápida: "O nome de tipo de conteúdo '$ Resources:ReportServerResources … não pode conter … caracteres especiais”

Fui passar algum tempo limpando um SharePoint 2010 site e uma das questões de limpeza se relaciona com um corrupto / instalado incorretamente emissão de serviços de relatório do SQL Server.  A questão surgiu quando um dos meus colegas tentou salvar um site como um modelo e, em seguida, criar criar um novo site baseado nesse modelo.  Salvar operação trabalhou muito bem, mas quando ela tentou criar o novo site, SharePoint exibida a seguinte mensagem de erro:

Erro

O nome de tipo de conteúdo '$ Resources:ReportServerResources,DataSourceContentTypeName;' não pode conter: \ / : * ? “ # % < > { } | ~ & , dois períodos consecutivos (..), ou caracteres especiais, como um guia.

Aqui está uma tampa de tela:

 

image

Eu tinha um olhar para os tipos de conteúdo no site e encontrei este:

image

Esses tipos de conteúdo são claramente insalubres.

Esse problema parece vir acima muito na Internet e não parece haver um consenso único sobre como resolvê-lo.  Eu encontrei uma tabela acessível que mapeado os nomes de tipo de conteúdo ruim para nomes de tipo de conteúdo bom aqui: http://social.technet.microsoft.com/Forums/en-ZA/sharepoint2010programming/thread/cb03e866-8184-4943-acfe-cafffa1b8b7a.  Eu atualizado manualmente-los assim:

image

(BrightStarr o nome é, obviamente, opcional, mas não pode ferir Sorriso )

Isso permitiu-me criar um novo modelo e não quebra nada em outros sites, inclusive algumas coisas do PerformancePoint Server que um grupo totalmente diferente de pessoas trabalhavam em.  Então eu era capaz de criar um novo site no modelo.  Sucesso!

Eu não sou certo se trata de uma 100% solução, mas ele me pegou e todos os envolvidos do passado esta enervante erro.  Se eu encontrar alguma coisa nova, Vou postar uma atualização.  Meu nervosismo decorre do fato de que estes nomes não devem estar errados em primeiro lugar e corrigindo-se o nome de exibição, Eu não estou tocando o nome interno. 

</fim>

Subscreva ao meu blog.

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

Uma das causas para "O criador desta falha não especificou um motivo.”

Eu tenho feito muito trabalho com a pesquisa do SharePoint ultimamente e especificamente o KeywordQuery KeywordQuery classe, Propriedades e métodos.

Se você deseja que o conjunto de resultados para retornar resultados além dos suspeitos do costume (Consulte aqui), adicioná-lo à coleção SelectedProperties, como em:

myKeywordQuery.SelectProperties.Add("xyzzy");

Muito obrigado e uma ponta do chapéu a Corey Roth and Este post do blog extremamente útil (http://www.dotnetmafia.com/blogs/dotnettipoftheday/archive/2008/02/19/how-to-use-the-moss-enterprise-search-keywordquery-class.aspx)

No meu caso, "xyzzy" não é realmente uma propriedade gerenciada.  Quando eu adicionei-a SelectedProperties de qualquer forma, SharePoint atirou um dos meu favorito sempre exceções de tempo de execução:

"O criador desta falha não especificou um motivo."

Eu gosto especialmente a capital "R" no razão.  Isso soa-me como o.LÍQUIDA equivalente de"Eu não tenho nenhuma boca, e eu deve gritar.”

</fim>

Subscreva ao meu blog.

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

Referência útil: Resultados de padrão de pesquisa KeywordQuery

Quando você chamar Execute() Método em um KeywordQuery, Você pode criar um ResultTable baseado em ResultType.RelevantResults.  Este trecho de código ilustra o que quero dizer:

ResultTableCollection resultsTableCollection = myKeywordQuery.Execute();

ResultTable searchResultsTable = resultsTableCollection[ResultType.RelevantResults];

A tabela resultante terá as seguintes colunas de informações: 

WorkId
Classificação
Título
Autor
Tamanho
Caminho
Descrição
Gravação
Nome do site
CollapsingStatus de
HitHighlightedSummary
HitHighlightedProperties
ContentClass
IsDocument
PictureThumbnailURL
ServerRedirectedURL

Esta lista eu derivado um SharePoint 2010 meio ambiente, Enterprise edition.  Espero que seja útil a alguém no futuro.

</fim>

Subscreva ao meu blog.

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

Uma das razões para: "Falha ao extrair o arquivo cab da solução”

Enquanto trabalhava em uma web part visual studio projeto hoje, Eu fiz uma pequena re-org de alguns arquivos para ser colocado na pasta Layouts como parte do processo de implantação. Especificamente, Eu renomeado o arquivo. js de "TypeAhead.js" para "TypeAhead(antigos).js"  Eu pretendo removê-lo assim que seu sucessor "TypeAhead.js" prova correta.  Parecia que isso:

image

Isso causou imediatamente um problema com o visual studio quando tentei implantar o projeto:

Ocorreu um erro na etapa de implantação 'Adicionar solução': Falha ao extrair o arquivo cab da solução.

Gira para fora que você não deve colocar um parêntese em nomes de arquivo.  Eu removi o parens e que resolveu o problema.

</fim>

Subscreva ao meu blog.

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

Ainda mais jQuery–Redimensionar um exemplo de imagem

Eu herdei uma web part de fornecedor antigo do cliente e tem um problema de tamanho de imagem.  As imagens devem ser 60×50 mas por algum motivo estranho, o fornecedor original forçou-os em 42×42, para que eles tenham aparência achatados:

 

Boa imagem

Imagem ruim

Aqui está a marcação (um pouco simplificado):

<classe de tabela = 'estendido-outlook'>
  <thead>
    <TR>
      <th  largura = 100′>3 Terça-feira</th>
    </TR>
  </thead>

  <tbody>
    <Classe TR = 'tempo'>
      <largura de TD = 100′>
        <UL>
          <Classe Li = 'alta'>Alta: 72&deg;F</Li>
          <Classe Li = 'baixa'>Baixo: 44&deg;F</Li>
          <Classe Li = 'condição'>Ensolarado
            <img src =’
http://deskwx.WeatherBug.com/images/Forecast/Icons/localized/60×50/en/trans/cond007.png’ Largura = 42’ altura = 42’ ALT =” />
          </Li>
        </UL>
      </TD>
    </TR>

  </tbody>

</tabela>

Você notará que, embora o caminho para a própria imagem mostra a dimensão adequada (60×50) o fornecedor original forçou-42.×42.  Por que?  Louco.

De qualquer forma, Eu queria uma solução rápida e fácil para esse problema e eu me virei para jQuery.  O truque foi localizar todos os apropriado <img> marcas de formatação.  Eu não queria Muck com quaisquer outras tags img (de que há muitos).  Este pouco de jQuery feito a manha:

<script type = "text/javascript" src ="http://AJAX.googleapis.com/AJAX/libs/jQuery/1.5/jQuery.min.js"></script>

<script type = "text/javascript">
     $(documento).pronto(função () {

         $(' li.condition > img').cada(função (índice, item de)
           
{
             $(item de).CSS("largura", "60"); 
             $(item de).CSS("altura", "50");
            });
     }); // carga do documento
</script>

Esse pedaço de código localiza a coleção <Li> marcas cuja classe é "condição" e <img> crianças.  Ele, em seguida, itera Tudo isso.  Trabalhou como um encanto.

Eu provavelmente poderia simplificar ele, mas eu nunca fui um o tipo de cara de unix que resolveu π Para 18 precisão de dígitos usando sed e awk e eu não sou desse tipo se jQuery cara quer Sorriso.

</fim>

Subscreva ao meu blog.

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

Análise de XML com LINQ

Aqui está um exemplo rápido usando LINQ para analisar alguns  XML e receber no doce, doce atributos nele.

Aqui está o XML eu quero analisar:

<?XML version = "1.0" Encoding = "utf-8" ?>
<DeafultConfigurationSets>
  <PageLayouts>

    <PageLayout nome = "xyzzy">
      <Guias>
        <Guia TabOrder = "1" TabLabel = "x" SharePointContentType = "a" AdditionalConstraints = "ac1" />
        <Guia TabOrder = "2" TabLabel = "y" SharePointContentType = "b" AdditionalConstraints = "ac2" />
      </Guias>
    </PageLayout>

    <PageLayout nome = "xyzzy2">
      <Guias>
        <Guia TabOrder = "100" TabLabel = "x" SharePointContentType = "a" AdditionalConstraints = "ac1" />
        <Guia TabOrder = "101" TabLabel = "y" SharePointContentType = "b" AdditionalConstraints = "ac2" />
        <Guia TabOrder = "103" TabLabel = "z" SharePointContentType = "c" AdditionalConstraints = "ac3" />
      </Guias>
    </PageLayout>

  </PageLayouts>
</DeafultConfigurationSets>

Eu quero construir algumas abas em tempo de execução analisando o acima exposto.  Meus guias dependem de um layout de página.  Se o nome do meu layout da página é "xyzzy2" deseja obter guias 100, 101 and 103 (guias <PageLayout nome = "xyzzy2">).

Aqui está o LINQ que faz isso:

var allTabs =
              de p em
                  XElement(theXmlToParse).
                 
Elementos("PageLayouts").
                  Elementos("PageLayout")
              onde (p.Attribute("nome").Value.Equals("xyzzy2"))
              de m em p.Elements("Guias").Elementos("Guia")
              Selecione m;

          Results.text = string.Vazio;

          foreach (var aTab em allTabs)
          {
              Results.Text =
                  "Ordem de tabulação: " + aTab.Attribute("TabOrder").Valor + " |" +
                  "Tab Label: " + aTab.Attribute("TabLabel").Valor + " | " +
                  "SharePointContentType: " + aTab.Attribute("SharePointContentType").Valor + " | " +
                  "AdditionalConstraints: " + aTab.Attribute("AdditionalConstraints").Valor + "r";
          }

No exemplo acima, a variável "theXmlToParse" é uma variável de Cadeia de caracteres, mas você pode usar a carga() Método em um fluxo se você gosta de.

"Resultados" são um rótulo em um formulário da web e quando esse código é executado, Ele se parece com isso:

SNAGHTML11cd2e7c

Eu não tenho trabalhado como classificar os resultados ainda, então vou deixar isso para um borne futuro do blogue.

</fim>

Subscreva ao meu blog.

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

SharePoint 2010 KeywordQuery e usuários anônimos

Eu habilitado o acesso anônimo no meu site para testar uma web part de pesquisa que tenho vindo a desenvolver e nenhuma grande surpresa, não funcionou bem.  Acesso anônimo muito bonita sempre é um desafio para mim.

Neste caso, a pesquisa inicial não estava sendo executado por algum motivo.  Devo dizer que ele foi correndo, mas ele não estava retornando quaisquer resultados.  Estou usando o KeywordQuery para essa exibição inicial.

Eu fiz uma busca rápida e este post do blog por"sowmyancs"veio rapidamente: “SharePoint 2010 Pesquisa: não apresentando quaisquer resultados para usuários anônimos?”  Entrada de blog descreve o problema de um fora das perspectivas de pesquisa de palavra-chave de caixa, mas o comportamento foi semelhante das minas – aquilo trabalhado para usuários autenticados e para usuários anônimos, mas usuários anônimos não tem nenhum resultado. 

Eu segui as instruções e o estrondo!  Ele resolveu meu problema.  Eu não sou certo o que efeitos colaterais que isso terá e eles podem revelar-se um problema, mas o resultado de curto prazo é útil.

Clique em através do blog:

image

</fim>

Subscreva ao meu blog.

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

SharePoint 2010 KeywordQuery e a propriedade de HiddenConstraints

Eu tenho feito um pouco de trabalho com o KeywordQuery objeto no SharePoint 2010 e fazendo uso do HiddenConstraints Propriedade.

Eu não encontrei qualquer informação imediatamente útil no que propriedade, então eu pensei que eu iria rapidamente anotar como eu tenho usado ele.

Tanto quanto eu posso dizer, Essa é uma restrição automática adicionada à consulta para que você pode classificar do parque para lá e não se preocupe.  Como tal, é apenas uma outra palavra-chave (ou conjunto de palavras-chave) e modificadores que você pode digitar na interface do usuário quando você fizer uma pesquisa de palavra-chave.  Aqui está um exemplo:

keywordQuery.HiddenConstraints = "âmbito de aplicação:\"Industry" ";

Você pode adicionar restrições adicionais com um delimitador de espaço.

keywordQuery.HiddenConstraints = "âmbito de aplicação:\"Industry" defesa";

Acima está dizendo em inglês, "executar uma consulta de palavra-chave à procura de"defesa"e, além disso, usar o escopo de "Indústria".

Aqui é uma outra maneira de olhar para ele:

image

Eu tenho usado para fornecer um escopo automático dependente do contexto em um personalizado web part.  Quando o usuário clica em uma guia e clica em um botão de pesquisa, na guia dita um escopo de pesquisa específico.  Ele está funcionando bem até agora.

</fim>

Subscreva ao meu blog.

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

Exemplo: XSLT Criando HTML Href

Eu estive fazendo um pouco de coisas de XSL ultimamente e pensei que eu iria montar uma amostra para minha referência futura e que pode ser de valor para todos nós XSLT-ers fazendo uma vida na internets.

Considere o XML a seguir:

<Contagem de FdcSearchTabsCollection = "2">
  <Pesquisarpesquisaguia Label = "indústria" SortOrder = "00" Label = "Indústrias" SearchConstraints = "contenttype:Indústria" TabID = "831b2a74-98c4-4453-8061-86e2fdb22c63" />
  <Pesquisarpesquisaguia Label = "práticas" SortOrder = "01" Label = "Práticas" SearchConstraints = "contenttype:PracticeGroups" TabID = "678e206b-6996-421f-9765-b0558fe1a9c0" />
</FdcSearchTabsCollection>

O seguinte trecho de XSL irá gerar uma lista classificada de guias hrefs:

<XSL:jogo de modelo = "FdcSearchTabsCollection" XML:Space = "preserve">
   
    <!– A todos"" Guia –>
    <um href = "javascript:ViewTab(' O)">Ver todos os</uma>
   
    <!– Cada guia individual –>
    <!– Fazer uma iteração através de todas as guias e exibir o correto  ligações. –>
    <XSL:for-each selecione = "Pesquisarpesquisaguia">
      <XSL:classificação select="@SortOrder"/>

      …
      <um href = "javascript:ViewTab(‘{@ TabID}’)"><XSL:valor de select="@Label"/></uma>
    </XSL:for-each>

    <DRI> 
   

   </XSL:modelo>

Aqui está o que olha como no SharePoint:

SNAGHTML78aa2cb

 

 

</fim>

Subscreva ao meu blog.

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