arquivos Mensais: Dezembro 2007

Meu filho cortou a Gamespot

Assim, Esta manhã, meu filho está determinado a ver que um idade-treze restringido Halo 3 vídeo em GameSpot. Estou aqui fora pá de neve, Então não estou lá para ajudar ou atrapalhar. A necessidade é a mãe da invenção e tudo o que … Ele tem um eureka! momento. Ele percebe que, apesar de Gamespot o quer participar dele real Data de nascimento, ele realmente pode entrar qualquer Data de nascimento, que ele quer. Uma vez ele percebeu que, fez-se velho o suficiente para ver o vídeo.

I’m not quite sure how I feel about this 🙂

Domingo engraçados: “É lixo de impressão”

No meu primeiro trabalho fora da faculdade em 1991, Eu tive a sorte de trabalhar para uma empresa de fabricação com 13 locais, não incluindo sua HQ corporativa em Nova Jersey. Juntei-me apenas quando a empresa foi lançando um novo sistema ERP. Éramos um pequeno departamento de ti no total cerca de dez pessoas, dois dos quais não viajar. Parte do projeto envolveu substituindo o sistema de IBM 36 caixas com HP hardware e HPUX. Todos usassem tubos verdes para acessar o sistema.

O projeto rola junto e eu sou enviado para Baltimore com uma nova colega de trabalho, Jeff. Nosso trabalho era para ligar a caixa Unix, certificar-se de que o sistema operacional estava funcionando, instalar o sistema ERP, configurar o ERP, treinar as pessoas sobre o ERP e fazer trabalho personalizado para pais no local. (Este foi um trabalho de sonho, especialmente vindo em linha reta fora da faculdade). Antes de chegarmos realmente fora da terra, precisávamos para descompactar todos os tubos de verdes, colocá-los em mesas e conectá-los. E a melhor parte foi que tivemos que nos impomos os conectores RJ11.

Por algum motivo que eu nunca entendi e na verdade nunca pensei em perguntar sobre o tempo, Tivemos algumas empresa contratante vir e executar o cabo em toda a planta, Mas não tínhamos as coloquei nos conectores. Assim, havia uma caixa de patch"" com dezenas de cabos sem rótulo na sala de informática"" e estas serpenteava em torno do edifício para vários lugares no edifício.

Nós trabalhamos o nosso caminho através ao longo de um fim de semana, teste cada fio, colocar em um conector de (certificando-se que foi em linha reta vs. cruzados), garantindo as definições de bit no tubos verdes e impressoras estavam corretas, fios de rotulagem, certificar-se de que "getty" estava funcionando corretamente para cada porta e provavelmente milhares de outras coisas que eu já suprimido desde então. Todos estavam juntos muito bem.

Mas, havia um cabo importante que não conseguíamos descobrir. A planta em Baltimore teve um relacionamento com um local de armazenagem em New Jersey. Alguns pedidos colocados em Baltimore enviados fora do local. Havia dois fios que tivemos que ligar para a caixa HPUX: um tubo verde e uma impressora. O tubo verde foi fácil, mas a impressora se transformou em um pesadelo de três semanas.

Se você não sabe, ou ele suprimiu, lidando com impressoras e tubos verdes desta forma, Existem várias opções que você lidar com definindo vários pinos. 8-bit, 7-bit, paridade (mesmo/odd/nenhum), Provavelmente, outros. Se errar uma dessas configurações, o tubo ou a impressora ainda mostra que o material, mas vai ser jargão total, ou será sem sentido com um monte de coisas reconhecíveis entre. É claro, Estes pinos são difíceis de ver e têm de ser definidas por meio de uma pequeno apartamento-borda de fenda. E eles nunca são normais.

Montamos a primeira de muitas chamadas rápidas com o cara de NJ (um hater de computador grisalho que provavelmente maldições nos para este dia). Temos o tubo verde trabalhando muito rapidamente, Mas não conseguimos a impressora para trabalhar. Ele manteve o "lixo da impressão". Criaríamos um novo conector RJ11, comutação entre cruzados e em linha reta. Nós iria excluir a porta e re-criado em Unix. Passamos a árdua tarefa de tê-lo nos explicar a configuração de pino na impressora, nunca realmente certo se ele estava fazendo isso corretamente.

É hora de ir ao vivo, tudo em Baltimore está cantarolando, mas não pode chegar a maldita impressora até em NJ para trabalhar! Já esgotamos todas as possibilidades, excepto dirigindo até em NJ para trabalhar na impressora em pessoa. Para evitar tudo o que a condução, Finalmente pedimos a ele para enviar-no que ele está recebendo quando é "lixo", na esperança que talvez haverá alguma pista naquele lixo que nos diga o que estamos fazendo errado.

Quando recebemos o fax, Nós imediatamente soube o que estava errado. Consulte, nosso método de testar se tinha configuramos uma impressora corretamente era emitir um "lp" comando como este:

LP/etc/passwd

Basicamente, Nós imprimimos o arquivo de senha do unix. É sempre presente e fora da caixa, sempre apenas uma página. Você padrão Unix senha arquivo parecida com esta:

Smith:*:100:100:8A-74(escritório):/casa/smith:/usr/bin/sh comentários:*:200:0::/casa/comentários:/usr/bin/sh  

Nós tinha estado a imprimir o arquivo de senha repetidamente durante várias semanas e que estava imprimindo corretamente. No entanto, para o usuário final, era "lixo da impressão".

</fim>

Ainda outra rede credenciais desafio problema e solução

Meu cliente instalado, recentemente, um dispositivo mágico de Zimbro que aparentemente substituído seu balanceador de carga de rede Cisco velho (NLB). Na mesma época, instalamos um Hotfix para resolver um problema de fluxo de trabalho.

Um dia ou dois mais tarde, Notamos um problema quando temos acessado o provedor de serviços compartilhados (SSP). Vamos a isso, Mas temos que ser desafiados para um ID de usuário e senha, muitas vezes em cada página. Isto não aconteceu com o aplicativo de portal principal, Nem a administração central. Naturalmente, não sabemos qual dos dois (Zimbro ou hotfix) seria a questão, Embora suspeitei fortemente o hotfix, imaginando que nós não tínhamos instalado certo.

Acontece que a Juniper tinha algum tipo de configuração de compactação. Dentre os figuras de vestido ao longo da rede grupo transformou essa configuração. Que resolveu nosso problema.

Esta não é a primeira vez que a compressão tem sido a causa de raiz de um problema de SharePoint para mim. Compressão de IIS afetado negativamente uma 3ª ferramenta de festa do povo bom no Dot Net Factory para o IE 6 navegadores (IE 7 navegadores trabalhadas sem dificuldade).

Assim, Adicionar "compressão" a lista de riscos.

</fim>

Crédito para: http://www.elfwood.com/art/s/h/sherry/death_colour.jpg.html

Pensando em mudar a plataforma de Blogging

Eu comecei minha carreira de blogging"" usando a plataforma Microsoft e ele tem sido bom para mim. É fácil postar, Existem boas opções e widgets para gerenciar o seu "espaço", armazenamento web decente e assim por diante.

No entanto, Realmente apenas caí a solução MS quase sem planejamento. Que chama sozinho para que eu avalie onde estou e onde vou, em termos de uma plataforma de blogging. Existem também duas importantes limitações que incomodam-me mesmo agora vis-à-vis Windows Live Spaces.

Primeira, Não consigo muito boas estatísticas. Existem estatísticas, mas o detalhe é muitas vezes truncado e não apresentado de uma forma que permite a qualquer tipo de análise. Lá sem recurso de classificação ou de exportação. Eu tenho muitas idéias do blog baseadas o tipo de informação que as pessoas acham (ou especialmente deixar de encontrar) Quando eles procurar meu blog. É muito difícil usar vidas espaços para que.

Segundo, Não parece ser qualquer mecanismo para "rentabilizar" um blog de espaço vivo de windows. Na verdade, a fim de se livrar de MS anúncios (da qual se derivam nenhum benefício), Eu preciso realmente pagar Microsoft. (Pelo menos, é assim que eu entendo; Eu ter sido incapaz de obter respostas definitivas para isso e perguntas como-).

Agora que tenho um padrão estabelecido e o conjunto de hábitos de blogging, Eu quero avaliar outras opções. Tenho feito algumas pesquisas e há um monte de opções, Mas estou curioso para saber o que outras pessoas, particularmente outros membros da comunidade de SharePoint (como blogueiros ou leitores), gosto de usar.

Se este assunto lhe interessa e você tem uma opinião ou estão dispostos a partilhar a sua experiência, por favor, deixe um comentário ou me enviar um e-mail diretamente.

Obrigado!

<final />

Technorati Tags:

Envia Email do SharePoint Designer ???? em um E-mail

Os usuários do fórum, ocasionalmente, perguntar: Por que põe o SharePoint Designer ???? em meu email em vez de um valor do campo?

Uma razão pela qual que isso acontece é porque a variável à qual você se refere é nula.

Isto pode acontecer porque você está tentando fazer referência a um campo de item atual"" Mas o usuário nunca inseriu um valor nesse campo de formulário.

<final />

Comparar / Teste as datas em branco no fluxo de trabalho do SharePoint Designer

Cenário: Em um fluxo de trabalho do SharePoint Designer, Você precisa determinar se um campo de data é em branco.

Problema: SPD não fornece um método direto para comparar datas para algo diferente de um encontro. Você não pode criar uma condição assim: "Se [DateField] é igual em branco".

Solução: Converter a data para uma cadeia de caracteres. Usar a comparação de seqüência de caracteres para determinar se a data estiver em branco.

Capturas de tela:

As capturas de tela a seguir mostram como fazer isso. Neste cenário, um campo em um item, "Licenças ambientais:Primeiro título de data de lembrete", é enviado e o fluxo de trabalho é acionado em resposta.

imagem

imagem

Notas:

Quando eu tentei isso, Fiquei agradavelmente surpreso ao saber que ele funciona. Eu estava preocupado que SharePoint Designer pode não permitir a atribuição de seqüência de caracteres (Variável:StringReminderDateDate) Mas permite.

Também fiquei preocupado que permitindo que ele, o valor pode ser nulo e também explodir o WF em tempo de execução ou talvez elevar a temperatura global 1/2 um grau, Mas essas preocupações eram infundadas.

</fim>

Barra é ainda bastante elevado para estender MOSS

Hoje, Eu estava trabalhando com um cliente e descreve como modificar a web part de consulta de conteúdo e exibir os bits adicionais de informação de um tipo de conteúdo.

"Primeiro., você configurar o CQWP para se conectar a suas fontes de dados, em seguida, exportá-lo para sua estação de trabalho, modificar <CommonViewFields>, fazer upload, remover o original e agora é ' carregado’ para exibir as outras colunas. Próximo, Abra o SharePoint designer, Navegue até a raiz de coleção do site e localize ItemStyle. Copiar um dos modelos como ponto de partida útil. Voltar e modificar o CQWP para fazer uso desse novo modelo. Finalmente, modificar o modelo para processar seus novos campos! (Não se esqueça de verificar que em para que outros usuários pode ver os resultados)."

É tudo muito claro para mim (e a maioria de nós, tipos de desenvolvedor do SharePoint) o que está acontecendo e como é muito bom, realmente, que os aspectos de recuperação de dados do CQWP são tão bem-separa os aspectos de apresentação de dados. Mas, Não é tão fácil de explicar, é isso?

<final />

Exibir conteúdo consulta Web Part resultados em uma grade / Tabela

Visão geral e objectivo

Fora da caixa, MUSGO’ Web Part de consulta de conteúdo (CQWP) exibe seus resultados em um formato de lista, semelhante ao resultados da pesquisa. Também é possível exibir os resultados em um formato de grade (ou seja. Tabela HTML). Formatos de grade são melhores em algumas circunstâncias. Descrevo como conseguir esse efeito neste artigo.

Cenário de negócios

Já trabalhei com um cliente em uma distribuição de musgo de toda a empresa. Nós projetamos sua taxonomia tal que projetos são cidadãos de primeira classe na hierarquia e tem seu próprio site de nível superior. Gerentes de projeto mantém uma lista de singleton de informações de resumo do projeto, como o título, orçamento, Data de conclusão prevista, restante orçamento e outros campos de tipo de resumo. Por "singleton" Quero dizer uma lista de SharePoint personalizada garantida para conter apenas um item. Forma simplista, Ele se parece com isso:

imagem

A abordagem técnica é o mesmo descrito here (http://paulgalvin.spaces.live.com/blog/cns!1CC1EDB3DAA9B8AA!447.entry). O CQWP usa uma transformação XSL para emitir o HTML para o navegador para processar.

Eu sempre imagino o resultado antes de mergulhar o XSL porque XSL é um pesadelo. Aqui está o meu resultado desejado:

imagem

HTML como este gera esse resultado:

<HTML>
 <corpo>
 <Centro>
 <tabela fronteira= 1>

<!-- Rótulos->
 <TR bgcolor= azul>
 <TD><fonte Cor= branco><b>Nome do projeto</b></fonte></TD>
 <TD alinhar= direita><fonte Cor= branco><b>Data completa</b></fonte></TD>
 <TD alinhar= direita><fonte Cor= branco><b>Orçamento</b></fonte></TD>
 <TD alinhar= direita><fonte Cor= branco><b>Despesas reais</b></fonte></TD>
 <TD><fonte Cor= branco><b>Status geral</b></fonte></TD>
 </TR>

<TR>
 <TD>Sala de computadores re-Wire.</TD>
 <TD alinhar= direita>02/01/08</TD>
 <TD alinhar= direita>22,500.00</TD>
 <TD alinhar= direita>19,000.00</TD>
 <TD>Em andamento</TD>
 </TR>

<TR>
 <TD>Provisionar servidores para atualizar o SQL</TD>
 <TD alinhar= direita>04/01/08</TD>
 <TD alinhar= direita>7,500.00</TD>
 <TD alinhar= direita>0.00</TD>
 <TD>Planejado</TD>
 </TR>

</tabela>
 </Centro>
 </corpo>
</HTML>

Abordagem

Siga estas etapas para criar a grade:

  1. Identificar os componentes da grade (linhas/colunas).
  2. Definir e criar colunas de site necessárias.
  3. Criar páginas para os projetos e listas de singleton.
  4. Adicionar o CQWP a uma página da web e configurá-lo para pesquisar suas listas.
  5. Modificar o XML do CQWP para reunir-se as colunas adicionais.
  6. Modificar o XSL para gerar uma tabela.

Vou concentrar-me no número 6. Números de um a quatro são direta e algo que qualquer usuário CQWP já feito. O número cinco tem sido bem documentado por outros, incluindo este artigo carga exaustivo de screen shot do MSDN here (http://msdn2.microsoft.com/en-us/library/bb897399.aspx) blog do Heather Salomão e here (http://www.heathersolomon.com/blog/articles/CustomItemStyle.aspx).

Porcas e parafusos

Iniciar e implementar as etapas de um a cinco de acordo com a documentação do MSDN e artigo Heather Solomon.

Neste ponto, você adicionou seu CQWP para a página e você tem seu <CommonViewFields> configurado conforme necessário.

Seguindo os passos habituais, Posso obter estes resultados intermédios:

1. Criar um tipo de conteúdo, uma lista personalizada modelos para esse tipo de conteúdo e dois sites. Aqui é o tipo de conteúdo:

imagem

Aqui é a estrutura do site:

imagem

2. Adicionar o CQWP depois de criar meu projeto subsites e singleton listas de resumo do projeto:

imagem

3. Adicionar todas as informações adicionais que eu quero através da <CommonViewFields>:

        <Propriedade nome="CommonViewFields" tipo="Cadeia de caracteres">Project_x0020_Name;Project_x0020_Expenses;Project_x0020_Status;Project_x0020_Start_x0020_Date;Project_x0020_End_x0020_Date;Project_x0020_Budget</Propriedade>

Nota que eu tinha que manter todos os campos de propriedade em uma linha ou não iria funcionar (CQWP me diria que a consulta não retornou nenhum item).

4. Neste ponto, Estamos prontos para ir além do artigo do MSDN e aleta sobre sobre artigo de Heather Solomon. Siga seus passos, começando próximo passo #5 para criar um personalizado / unghosted versão de ItemStyle. Eu seguir o Conselho de Heather, para cima até a etapa 11 e obter estes resultados intermédios:

4.1: Meu modelo de XSL nome da seguinte forma:

<XSL:nome do modelo = "grade" corresponder = "linha[@Style = 'Grid']" modo = "itemstyle">

Eu também ligeiramente modificá-la sugeriu <XSL:for-each …> Adicionando um <DRI> marca para fornecer uma listagem mais limpa:

    <XSL:for-each Selecione="@*">
      P:<XSL:valor da Selecione="nome()" /><br/>
    </XSL:for-each>

4.2: Posso modificar a web part, ir para a aparência e selecione minha grade"" estilo:

imagem

Aplicar a alteração e aqui está o resultado:

imagem

Do acima exposto podemos ver que os campos que nós queremos (Nome do projeto, despesas, estatuto, etc) estão disponíveis para nós usarmos quando emitimos o HTML. Não só isso, Mas vemos os nomes pelos quais nós deve fazer referência a essas colunas na XSL. Por exemplo, podemos fazer referência Status do projeto como "Project_x005F_x0020_Name".

Neste ponto, Devemos afastar-se do blog de Heather e de ombros destes gigantes, Posso adicionar meu próprios pouco.

ContentQueryMain.xsl

OBSERVAÇÃO: Ao fazer alterações em tanto ContentQueryMain.xsl como ItemStyle.xsl, você precisa verificar que os arquivos de volta em antes de ver o efeito das alterações.

Para fins de tomada de grade, MOSS usa dois diferentes arquivos XSL para produzir os resultados que vemos de um CQWP. Para gerar o bit anterior da saída, Nós modificamos ItemStyle. MOSS, na verdade, usa outro arquivo XSL, ContentQueryMain para, em conjunto com ItemStyle para gerar o HTML. Como seu nome implica, ContentQueryMain.xsl é o principal"" XSL que controla o fluxo global de tradução. Ele percorre todos os itens encontrados e passa-los um por um para modelos em ItemStyle. Modificaremos ItemStyle para gerar a céu aberto <tabela> etiqueta antes de emitir a primeira linha de dados e o fechamento <tabela> etiqueta depois de emitir a última linha. Para realizar essa tarefa, ContentQueryMain.xsl é modificado para passar dois parâmetros para nossa grade"" modelo em ItemStyle.xsl, "última linha" e a "linha atual". ItemStyle usa essas condicionalmente emitir as etiquetas necessárias.

Usando a técnica do Heather Salomão, Podemos localizar ContentQueryMain. Situa-se no mesmo lugar como ItemStyle. Esta captura de tela deve ajudar:

imagem

Temos de fazer as seguintes alterações:

  • Modificar um modelo xsl, "CallItemTemplate" que na verdade invoca o nosso modelo de grade em ItemStyle. Vamos passar dois parâmetros para o modelo de grade para que ele terá os dados necessários para gerar condicionalmente abrindo e fechando <tabela> marcas.
  • Modificar outro pouco de ContentQueryMain.xsl que chama o CallItemTemplate"" passá-lo um LastRow"" parâmetro de modo que LastRow pode ser transferido para o nosso modelo de grade.

Localize o modelo chamado "OuterTemplate.CallItemTemplate" identificado pela Cadeia de caracteres:

  <XSL:modelo nome="OuterTemplate.CallItemTemplate">

Substituir o modelo inteiro como segue:

  <XSL:modelo nome="OuterTemplate.CallItemTemplate">
    <XSL:param nome="CurPosition" />

    <!--
      Adicionar o LastRow"" parâmetro.
      Nós só usá-lo quando a passagem de estilo de item no é "Grade".
    -->
    <XSL:param nome="LastRow" />

    <XSL:Escolha>
      <XSL:Quando teste="@ Estilo = 'NewsRollUpItem'">
        <XSL:aplicar-se-modelos Selecione="." modo="ItemStyle">
          <XSL:com-param nome="EditMode" Selecione="$cbq_iseditmode" />
        </XSL:aplicar-se-modelos>
      </XSL:Quando>
      <XSL:Quando teste="@ Estilo = 'NewsBigItem'">
        <XSL:aplicar-se-modelos Selecione="." modo="ItemStyle">
          <XSL:com-param nome="CurPos" Selecione="$CurPosition" />
        </XSL:aplicar-se-modelos>
      </XSL:Quando>
      <XSL:Quando teste="@ Estilo = 'NewsCategoryItem'">
        <XSL:aplicar-se-modelos Selecione="." modo="ItemStyle">
          <XSL:com-param nome="CurPos" Selecione="$CurPosition" />
        </XSL:aplicar-se-modelos>
      </XSL:Quando>

      <!--
              Transmitir posição atual e lastrow para o modelo de itemstyle.xsl de grade.
              ItemStyle.xsl que usará para emitir o abrir e fechar <tabela> marcas.
      -->
      <XSL:Quando teste="@ Estilo = 'Grid'">
        <XSL:aplicar-se-modelos Selecione="." modo="ItemStyle">
          <XSL:com-param nome="CurPos" Selecione="$CurPosition" />
          <XSL:com-param nome="Última" Selecione="$LastRow" />
        </XSL:aplicar-se-modelos>
      </XSL:Quando>

      <XSL:caso contrário>
        <XSL:aplicar-se-modelos Selecione="." modo="ItemStyle">
        </XSL:aplicar-se-modelos>
      </XSL:caso contrário>
    </XSL:Escolha>
  </XSL:modelo>

Os comentários descrevem a finalidade das alterações.

É claro, o OuterTemplate.CallItemTemplate"" Chama-se de outro modelo. Localize esse modelo procurando por essa seqüência de caracteres de texto:

<XSL:modelo nome="OuterTemplate.Body">

Percorra as instruções em OuterTemplate.Body e inserir o parâmetro LastRow como segue (mostrado como um comentário em itálico):

<XSL:modelo de convite nome="OuterTemplate.CallItemTemplate">
  <XSL:com-param nome="CurPosition" Selecione="$CurPosition" />
  <!-- Inserir o parâmetro LastRow. -->
  <XSL:com-param nome="LastRow" Selecione="$LastRow"/>
</XSL:modelo de convite>

Depois de tudo isso, Finalmente temos coisas configurar corretamente para que o nosso ItemStyle.xsl pode emitir <tabela> marcas no lugar certo.

ItemStyle.Xsl

OBSERVAÇÃO: Mais uma vez, o check-in ItemStyle.xsl depois de fazer todas as alterações para que você veja o efeito dessas alterações.

Aqui temos duas tarefas:

  • Substituir o modelo inteiro de grade. Você pode copiar/colar de baixo.
  • Adicionar alguns patranhas fora da definição de modelo que permite "formatcurrency" modelo de trabalho. (Você pode dizer que eu tenho um identificador tênue em XSL).

Primeira, perto do topo da ItemStyle.xsl, Adicione esta linha:

  <!-- Alguns patranhas que nos capacita a Exibir dos e.u.. moeda. -->
  <XSL:decimal-formato nome="pessoal" dígito="D" />

  <XSL:modelo nome="Padrão" correspondência="*" modo="ItemStyle">

Nota que eu adicionado diretamente antes do <XSL:nome do modelo = padrão"" …> definição.

Próximo, voltar para o nosso modelo de grade. Substituir o modelo de grade inteiro com o código abaixo. Isso é completamente comentou, mas não hesite em me e-mail ou deixar comentários no meu blog, se você tiver perguntas.

  <XSL:modelo nome="Grelha" correspondência="Linha[@ Estilo = 'Grid']" modo="ItemStyle">

    <!--
      ContentMain.xsl passa CurPos e última.
      Podemos usá-los para emitir condicionalmente a abrir e fechar <tabela> marcas.
    -->
    <XSL:param nome="CurPos" />
    <XSL:param nome="Última" />

    <!-- As seguintes variáveis são inalteradas desde o padrão ItemStyle -->
    <XSL:variável nome="SafeImageUrl">
      <XSL:modelo de convite nome="OuterTemplate.GetSafeStaticUrl">
        <XSL:com-param nome="UrlColumnName" Selecione="'ImageUrl'"/>
      </XSL:modelo de convite>
    </XSL:variável>
    <XSL:variável nome="SafeLinkUrl">
      <XSL:modelo de convite nome="OuterTemplate.GetSafeLink">
        <XSL:com-param nome="UrlColumnName" Selecione="'LinkUrl'"/>
      </XSL:modelo de convite>
    </XSL:variável>
    <XSL:variável nome="DisplayTitle">
      <XSL:modelo de convite nome="OuterTemplate.GetTitle">
        <XSL:com-param nome="Título" Selecione="@Title"/>
        <XSL:com-param nome="UrlColumnName" Selecione="'LinkUrl'"/>
      </XSL:modelo de convite>
    </XSL:variável>
    <XSL:variável nome="LinkTarget">
      <XSL:se teste="@OpenInNewWindow = 'True'" >Blank</XSL:se>
    </XSL:variável>

    <!--
      Aqui, definimos uma variável, "tableStart".  Este contém o HTML que usamos para definir a abertura da mesa, bem como os rótulos de coluna.  Observe que, se CurPos = 1, inclui o HTML em uma marca CDATA.
      Caso contrário, vai ser vazio.

      O valor de tableStart é emited sempre ItemStyle é chamado através de ContentQueryMain.
    -->
    <XSL:variável nome="tableStart">
      <XSL:se teste="$CurPos = 1">
        <![CDATA[
        <borda de tabela = 1>
          <TR bgcolor = "azul">
            <TD><cor da fonte = "branco"><b>Nome do projeto</b></fonte></TD>
            <TD align = "right"><cor da fonte = "branco"><b>Data completa</b></fonte></TD>
            <TD align = "right"><cor da fonte = "branco"><b>Orçamento</b></fonte></TD>
            <TD align = "right"><cor da fonte = "branco"><b>Despesas reais</b></fonte></TD>
            <TD><cor da fonte = "branco"><b>Status geral</b></fonte></TD>
          </TR>
        ]]>
      </XSL:se>
    </XSL:variável>

    <!--
      Outra variável, tableEnd simplesmente define o fechamento marca de tabela.

      Tal como acontece com tableStart, sempre é emited.  Eis porque seu valor é atribuído condicionalmente com base em se nós já foi passados a última linha por ContentQueryMain.
    -->
    <XSL:variável nome="tableEnd">
      <XSL:se teste="$CurPos = $Last">
        <![CDATA[ </tabela> ]]>
      </XSL:se>
    </XSL:variável>

    <!--
      Sempre emitir o conteúdo de tableStart.  Se isto não é a primeira linha que passou para nós por ContentQueryMain, Então sabemos que seu valor será em branco.

      Desativar a saída saída porque quando tableStart não em branco, Ele inclui HTML real que nós queremos ser processado pelo navegador.  Se não contarmos o analisador XSL para desabilitar saída escapando, Ele irá gerar coisas como"&lt;tabela&gt;" em vez de"<tabela>".
    -->
    <XSL:valor da Selecione="$tableStart" desativar-saída-saída="Sim"/>


    <TR>
      <!--
      P:Project_x005F_x0020_Name P:Project_x005F_x0020_End_x005F_x0020_Date P:Project_x005F_x0020_Budget P:Project_x005F_x0020_Expenses P:Project_x005F_x0020_Status
      -->
      <TD>
        <XSL:valor da Selecione="@ Project_x005F_x0020_Name"/>
      </TD>

      <TD alinhar="direito">
        <XSL:valor da Selecione="@ Project_x005F_x0020_End_x005F_x0020_Date"/>
      </TD>

      <TD alinhar="direito">
        <XSL:modelo de convite nome="FormatCurrency">
          <XSL:com-param nome="valor" 
Selecione="@ Project_x005F_x0020_Budget"></XSL:com-param> </XSL:modelo de convite> </TD> <TD alinhar="direito"> <XSL:modelo de convite nome="FormatCurrency"> <XSL:com-param nome="valor" Selecione="@ Project_x005F_x0020_Expenses">
</XSL:com-param> </XSL:modelo de convite> </TD> <TD> <XSL:valor da Selecione="@ Project_x005F_x0020_Status"/> </TD> <!-- Todos os itens a seguir está comentada para esclarecer as coisas. No entanto, trazer de volta e o material em um <TD> para ver seu efeito. --> <!-- <div id = "linkitem" Classe = "item"> <XSL:se teste = "Cadeia de caracteres de comprimento($SafeImageUrl) != 0 "> <div class = "image-área-esquerda"> <um href = "SafeLinkUrl{$SafeLinkUrl}" destino = "{$LinkTarget}"> <Classe img = "imagem-fixo-largura" src = "{$SafeImageUrl}"
Alt = "{@ ImageUrlAltText}"/> </uma> </div> </XSL:se> <div class = "item de link"> <XSL:modelo de convite
Name="OuterTemplate.CallPresenceStatusIconTemplate"/> <um href = "SafeLinkUrl{$SafeLinkUrl}"
destino = "{$LinkTarget}" title = "{@ LinkToolTip}"> <XSL:valor da selecione = "$ DisplayTitle" /> </uma> <div class = "description"> <XSL:valor de select="@Description" /> </div> </div> </div>
--> </TR> <!-- Emitir o fechamento marca de tabela. Se não estamos na última linha, Este será em branco. --> <XSL:valor da Selecione="$tableEnd" desativar-saída-saída="Sim"/> </XSL:modelo> <XSL:modelo nome="FormatCurrency"> <XSL:param nome="valor" Selecione="0" /> <XSL:valor da Selecione='formato-número($valor, "$ DDD,DDD,DDD.DD", "pessoal")' /> </XSL:modelo>

Telas de entrada de dados WSS/MOSS padrão não suportam suspensas em cascata (ou outro intra-comunicação)

ATUALIZAÇÃO (04/2008): Esta entrada de blog grande mostra uma abordagem deste problema bom javascript baseado: http://webborg.blogspot.com/2008/04/add-functions-and-events-to-sharepoint.html

ATUALIZAÇÃO II: (04/2008): Esta entrada de blog também parece promissor: http://www.cleverworkarounds.com/2008/03/13/free-mosswss-2007-web-part-hide-controls-via-javascript/

Várias vezes por semana, Se não diária, os usuários do fórum descrevem um requisito que normalmente seria atendido através de suspensas em cascata. Por exemplo, Eu tenho dois controles de soltar-para baixo:

  • Lista de E.U.. Estados-Membros
  • Lista de E.U.. cidades.

Como provedores de interface do usuário responsáveis, Queremos operar assim:

  • Paul seleciona dos E.U.. Estado do soltar-para baixo.
  • Isso faz com que as cidades suspensa para filtrar apenas as cidades que pertencem ao estado selecionado.
  • Paul seleciona uma cidade desta lista filtrada.

Não há nenhum suporte out-of-the-box para esse recurso. Na verdade, Não há nenhum suporte OOB para qualquer tipo de comunicação direta intra-formulário. Isso inclui programaticamente campos escondidos/ativação/desativação em resposta a alterações de campo em outro lugar no formulário.

O verdadeiro objectivo deste artigo para descrever as soluções possíveis e estas são as opções de como eu os conheço:

  1. Desenvolver um tipo de coluna personalizados. Como um costume-coluna-desenvolvedor, Você tem controle total sobre o mundo"" dessa coluna personalizada. Você pode implementar uma cascata suspensa assim.
  2. Considere o uso de fluxo de trabalho. Em alguns casos, você deseja atribuir automaticamente um valor de campo com base no valor do campo outro. Neste caso, Você normalmente tentaria usar uma coluna calculada, Mas algumas vezes, Não só vai fazer o trabalho. Fluxo de trabalho do SharePoint Designer é uma alternativa de administrar relativamente favorável para descer em código e visual studio. Se você vai esta rota, Lembre-se da questão abordada pelo Este artigo (http://paulgalvin.spaces.live.com/blog/cns!CC1EDB3DAA9B8AA!405.entry).
  3. Manipuladores de eventos: Como o fluxo de trabalho, Esta é uma solução após o fato. Manipulador de eventos é um assembly .NET (C#, VB.NET) a qual o SharePoint passa o controle. O objeto que você desenvolver tem acesso aos dados da lista (e o modelo de objeto inteiro) e posso fazer qualquer cálculo necessário.
  4. Usar o SharePoint Designer para criar formulários de entrada personalizado. Não tenho experiência direta com esta abordagem, but I hear they are doing good things with NewForm.aspx these days 🙂
  5. Rolo de sua própria função de entrada de dados do ASP.NET (como uma página da web stand-alone ou como uma web part) e utilizá-lo.

Se alguém souber de outras e/ou melhores opções, por favor, poste um comentário e eu vou atualizar o corpo deste post.

<final />

Sim/não (caixa de seleção) filtragem Content Query Web Part

Para filtrar uma consulta para o sim/sem caixa de seleção intitulada "PG Milestone", configure desta forma CQWP:

imagem

Este é mais um daquelas perguntas óbvias-uma vez-você-sabe-lo, mas hard-to-find-an-answer-to: Como filtrar a um sim/não há caixa de seleção usando a web part de consulta de conteúdo.

O primeiro resultado da pesquisa Acho que usando o termo de pesquisa "sim/não conteúdo consulta web part de filtro" flat out errado, Então eu pensei que eu iria colocar isso lá em cima e ver se ele pode substituir o resultado incorreto nos resultados de pesquisa típico.

É muito fácil: True valores = 1" e os falsos valores não são iguais a "1" (retro bonito, na verdade).

No exemplo acima, Criei a coluna de site do tipo "sim/não (caixa de seleção)" nomeado "PG Milestone". Eu adicionei-o a uma biblioteca de doutor, carregado alguns documentos, Defina o valor para um casal e testei.

<final />