arquivos Mensais: Junho 2009

Serviços de formulário do InfoPath, Autenticação baseado em formulários (FBA) e nomes de arquivo exclusivo

Eu estive trabalhando em alguns formulários do InfoPath esta semana em musgo em um ambiente de FBA e aprendeu, Quando fui para implantar os formulários a um ambiente de produção com um FBA zona que o nome de usuário() função de função não funciona. Eu estava usando para gerar nomes de arquivo exclusivo.

Bem, Essa função não funciona em um ambiente de FBA (pelo menos, não fora da caixa). E, após a reflexão, usar o nome de usuário da maneira que eu tinha planejado não garantiram um nome de arquivo exclusivo em todo o caso.

Minha solução foi usar o agora() função e uma regra que é acionado na carga do formulário. Eu atribuir o nome de arquivo para o elemento de dados quando ele estiver em branco:

image

image

A vantagem dessa abordagem é que o nome do arquivo é definido somente uma vez. (Eu não mostrá-lo na captura de tela, mas colocar uma condição na regra ao fogo somente quando "meuNomeDeFicheir" está em branco). Eu usei para definir o nome do arquivo a nível de fonte de dados. Normalmente, Gostaria de fazer algo (ruim) Assim:

image

O problema com isto é que, se o usuário abre o formulário na segunda-feira e o usuário B muda-na terça-feira, você vai acabar com duas formas diferentes, já que dois usuários diferentes salva-lo com nomes diferentes.

Assim, tão irritante como FBA pode ser em geral e com o InfoPath em particular, Isso me fez repensar um pequeno mas importante detalhe técnico e abordagem que eu não teria feito de outra forma!

</fim>

Subscreva ao meu blog.

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

Technorati Tags:

Proteger exibições da biblioteca de documento da lista SharePoint parece (tipo de) Possível com jQuery

Este é outro post em meu série em curso sobre como usar jQuery com o SharePoint.
Se você quer aprender mais sobre jQuery, Eu recomendo: jQuery em ação por Bibeault de urso e Yehuda Katz.

Uma das primeiras coisas que pensei, Depois que eu comecei a jogar ao redor com jQuery, era se poderia usá-lo para garantir um modo de exibição do SharePoint. A resposta é "não" (ou pelo menos, Não estou a dizer que é possível). No entanto, é certamente possível tornar difícil para as pessoas verem uma visão particular.

Eu comecei com meu ambiente sandbox quando trabalhando nisso. Eu escrevi sobre esse ambiente aqui: Rápido e fácil: Crie seu próprio jQuery Sandbox para SharePoint.

Para "fixar" uma visão, Siga estes passos:

  1. Criar uma exibição que você deseja proteger. Eu fiz isso e chamou-lhe "Garantiu View".

    Isto é o que parece quando ele não é "seguro":

    image

  2. Adicionar uma web part do editor de conteúdo para a página do modo de exibição usando o truque descrito no artigo da caixa de areia (ou seja. Adicionar "PageView = Shared&ToolPaneView = 2 "para a URL).
  3. Descobrir seu SharePoint _spUserId seguindo estas etapas loucas, Acredite ou não:
    1. Entrar no ambiente do SharePoint.
    2. No campo de endereço do navegador da web, tipo: "javascript:alerta(_spUserId").
    3. Gravar o resultado (é "13", no meu caso).

      image

  4. Adicionar o seguinte javascript para seu CEWP na visualização de código:

    <script type ="text/javascript"
        src ="../../jQuery Library/jQuery-1.3.2.min.js">
    </script>
    
    <script type ="text/javascript">
      $(função() {
    
        alerta(_spUserId);
    
        var theSecuredView = $(' iframe[FilterLink FilterLink * = 20View % garantido]');
    
        se ((theSecuredView.length > 0) && (_spUserId = = 13))
          $(' iframe[FilterLink FilterLink * = 20View % garantido]').pai().pai().pai().HTML("<TR bgcolor = vermelho><TD>Sem vista para você!</TD></TR>");
      });
    
    </script>
    

Eu incluí o alerta(_spUserId) linha lá para demonstrar como isso não é realmente um "protegendo" uma visão, Mas simplesmente tornando mais difícil de ver. Mais sobre isso em um momento.

Basicamente, jQuery está à procura de um iFrame na página que tem um atributo que contém "Secured % 20View" em seu valor. Uma vez que ela encontra-lo, Podemos verificar se o usuário atual é "13". Se é, caminhamos até o DOM de uma <TR> Tag (que eu descobri, exibindo a fonte e rastreá-lo) e então, substituindo aquela marca TR com minha mensagem. Não sei mesmo como robusto é (Eu sou muito suspeito, Na verdade), Mas funcionou na minha caixa de areia. Se eu encontrar uma maneira melhor, I'll blog sobre isso. Este é o resultado:

image

Eu clico no botão OK e os dados são substituídos com uma grande mensagem vermelha:

image

Como você pode dizer, do jeito que eu ter que implementar essa solução de "segurança" é permitir que a web part para processar-se. Depois que termina, Eu substituir seu conteúdo com meu "sem vista para você!"mensagem.

Apesar do fato de que não é realmente um "seguro" "vista, é potencialmente útil e com um trabalho inteligente, pode eventualmente ser protegido em um sentido mais formal. A questão fundamental é que o cliente vai receber todos os dados e então, Só depois que obtém os dados, -apagar. Se o cliente está recebendo os dados, um usuário esperto pode impedir a execução de todo de jQuery e vê o que quer ver.

Há outros inconvenientes. Esta abordagem de "segurança" é baseada fora de um _spUserId. Queremos realmente seguro com base no modelo de segurança do SharePoint completo, ou pelo menos por nome de usuário. Isso torna-se progressivamente mais difíceis, Mas vejo algumas coisas boas sobre este assunto, Então eu estou esperançoso de que há uma boa resposta para esse problema.

A lista de pontos de vista se deve ser aparada., se possível. Não tentei descobrir isso. Eu suponho que é possível, Mas realmente não resolve o problema de segurança fundamentais porque alguém poderia ainda apenas digite a URL do modo de exibição que eles querem (Se soubessem que). No entanto, aparar faz sentido. É uma característica de boa usabilidade e ajuda a ofuscar as coisas. Se um usuário final não sabe que o evento de exibição existe, Eles provavelmente não vão tentar usá-lo. Às vezes, Isso é bom o suficiente.

Com sorte, Eu vou ter mais para escrever sobre este assunto ao longo do tempo.

</fim>

Subscreva ao meu blog.

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

Rápido e fácil: A melhor maneira de usar jQuery para ocultar um campo de texto em um formulário do SharePoint

Este é outro post em meu série em curso sobre como usar jQuery com o SharePoint.
Se você quer aprender mais sobre jQuery, Eu recomendo: jQuery em ação por Bibeault de urso e Yehuda Katz.

Anteriormente, Eu escrevi sobre como usar jQuery para localizar e ocultar um campo de texto em um formulário. Não me importava para o enfoque específico (Foi de encadeamento pais – que simplesmente não é feito hoje em dia, pelo menos em famílias de qualidade).

Quando comecei a pensar nisso, Eu sabia que precisava encontrar um <TR> ao qual eu poderia invocar a ocultar() Método. Meu esforço inicial para encontrar o correto <TR> foi algo assim:

$(' tr:tem(entrada[título = esconder-Me!])');

O problema é que que ele iria encontrar cada <TR> marca que tinha qualquer relação de pai para a ocultar-Me! campo, mesmo que Me esconder! é aninhado profundamente em muitos níveis <TR>é. Acontece que no meu formulário de caixa de areia, Essa expressão encontra 9 TR diferentes que têm Me esconder! como uma criança em algum lugar na sua árvore DOM. Eu percebi que eu poderia andar volta para a árvore do campo entrado própria, então é isso, como eu acabei abusando de pais, mas ele não se sente bem comigo.

Eu dei algum pensamento para isso e uma das coisas que li finalmente fez sentido: Eu poderia usar o não() Método para cortar fora <TR>é que não quero no meu conjunto de quebra automática. Isso me levou a isto:

$(' tr:tem(entrada[título = esconder-Me!])').não(' tr:tem(TR)').esconder();

O primeiro bit encontra todos os <TR> marcas que têm a esconder-Me! campo em qualquer lugar na sua própria hierarquia. Ele então retira qualquer <TR> que também tem um filho <TR>. Isto nos deixa com um único <TR> que:

1) Não tem nenhum <TR> registros filho

2) Tem o campo de entrada como criança.

Podemos então aplicar a ocultar() Método para o resultante definido e pronto.

Ainda estou um pouco nervoso sobre isso, mas não tão nervoso como pais de encadeamento.

Não sei se isso é uma prática recomendada ou não. Pode haver uma maneira mais adequada de identificar apenas o <TR> que nos interessa em um formulário do SharePoint. Se você sabe, por favor, poste um comentário.

</fim>

Subscreva ao meu blog.

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

Rápido e fácil: Usando jQuery para ocultar um campo de texto em um formulário do SharePoint

Este é outro post em meu série em curso sobre como usar jQuery com o SharePoint.
Se você quer aprender mais sobre jQuery, Eu recomendo: jQuery em ação por Bibeault de urso e Yehuda Katz.

ATUALIZAÇÃO (já!): Eu acho que a melhor maneira de localizar o <TR> marca eu quero esconder e escrevi sobre isso aqui. Você pode encontrar este artigo interessante de qualquer forma estou leavnig-se.

Eu quero ocultar um campo de texto, "Me esconder!"como mostrado:

image

A seguir jQuery faz o truque para mim:

<script type ="text/javascript">

  $(função() {


    $(' entrada[título = esconder-Me!]').pai().pai().pai().esconder();

  });

</script>

O código está dizendo, "find me entrada todos os campos cujo título = esconder-Me!. Em seguida, seu pai e clique em seguida avançar pai e o * próximo * pai (Ufa!) e invocar a ocultar() Método em que coisa, tudo o que acontece de ser.

Eu descobri que a estrutura pai exibindo o HTML para o formulário que SharePoint criado como mostrado:

<TR>
    <TD NoWrap= "true" VAlign= "top" Largura= "190px" Classe= "ms-formlabel">
        <H3 Classe= "ms-standardheader">
            <sem-serifbrdiv>Me esconder!</sem-serifbrdiv>
        </H3>
    </TD>

    <TD VAlign= "top" Classe= "ms-formbody" Largura= "400px">
        <!-- FieldName = "Ocultar-Me!"
                 FieldInternalName = "Hide_x0020_Me_x0021_"
                 FieldType = "SPFieldText"
        -->
        <extensão dir= "none">
            <entrada
                nome= "ctl00$ m$ g_bdb23c2c_fde7_495f_8676_69714a308d8e$ ctl00$ ctl04$ ctl02$ ctl00$ ctl00$ ctl04$ ctl00$ ctl00$ TextField"
                tipo= "texto"
                MaxLength= "255"
                ID= "ctl00_m_g_bdb23c2c_fde7_495f_8676_69714a308d8e_ctl00_ctl04_ctl02_ctl00_ctl00_ctl04_ctl00_ctl00_TextField"
                título= "Ocultar-Me!"
                Classe= "ms-long" />
                <br>
        </extensão>


    </TD>
</TR>

Esta imagem mostra o mesmo, mas marcado com os pais:

image

Primeiro pai (1) é uma marca de span. Pai do intervalo (2) é uma marca de TD e, em seguida, finalmente chegamos ao real pai eu quero esconder (3) que é a própria marca TR.

Esta é uma abordagem muito terrível, que acho que porque é extremamente dependente da estrutura muito específica desta forma. Quando SharePoint 2010 sai, toda esta estrutura poderia mudar e quebrar esta abordagem. O que eu realmente quero fazer é ofício um seletor do jQuery que é ao longo das linhas de "encontra-me todos os TR (e apenas tags TR) que tem em algum lugar em seus elementos filho um campo de entrada cujo título = esconder-Me!”. Eu a partir do fundo e movendo-se. Supondo que eu descobrir isso, Vou postar um actualizado "rápido e fácil ' post.

</fim>

Subscreva ao meu blog.

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

Rápido e fácil: Crie seu próprio jQuery Sandbox para SharePoint

Este é outro post em meu série em curso sobre como usar jQuery com o SharePoint.
Se você quer aprender mais sobre jQuery, Eu recomendo: jQuery em ação por Bibeault de urso e Yehuda Katz.

Introdução ao jQuery no SharePoint é surpreendentemente fácil (Para mim). (Tenho sérias dúvidas sobre uma abordagem de "melhores práticas" para implantar essas coisas para produção, mas isso é para outro dia). Eu só comecei a jogar com esta tecnologia e para esse fim, Eu criei um ambiente seguro de usar. Se você estiver olhando para começar a trabalhar com jQuery, Você pode encontrar esta abordagem útil.

1. Criar um Site em branco

Criar um site em branco em algum lugar no seu site e chamá-lo algo inteligente como "jQuery Sandbox".

2. Download jQuery

Você pode baixar a biblioteca javascript jQuery aqui: http://docs.jquery.com/Downloading_jQuery

Que, para salvar no seu desktop.

Tenho vindo a utilizar a versão "minified".

3. Criar uma biblioteca de documentos do SharePoint

Em seu site seguro, criar uma biblioteca de documentos.

4. Carregar a biblioteca jQuery para SharePoint

Acessar a biblioteca de doc que você acabou de criar e carregar a biblioteca jQuery.

5. Criar uma lista do SharePoint personalizado

Eu comecei com uma lista personalizada porque quero ficar rindo com formulários padrão do SharePoint. Você também pode criar uma página em uma biblioteca de páginas ou páginas de web parts e, provavelmente, um monte de outros lugares.

Adicionar algumas colunas de lista personalizada para que você tenha algo para executar jQuery contra. Meus objetivos iniciais foram:

  1. Ocultar um campo.
  2. Atribuir um valor a um campo.

Com esse objetivo em mente, Eu adicionei dois campos de texto. Ao longo do tempo, Eu vou estar jogando com links, imagens, pesquisas de, etc.

6. Modificar NewForm. aspx Web Part Page e adicionar uma Web Part do Editor de conteúdo

Isso é um pouco de preto magic-ish , em que é um novo conceito para mim. Eu aprendi sobre isso de Paul Grenier, SharePoint jQuery Superstar, em seu site de projeto do CodePlex: http://spff.codeplex.com/.

Siga estas etapas para adicionar um CEWP para a mesma página que mostra NewForm. aspx para qualquer lista personalizada:

  1. Acessar a lista personalizada e clique em novo.
  2. Acrescentar o seguinte URL: PageView = compartilhado&ToolPaneView = 2

Que irá transformar o seu formulário de entrada de dados de baunilha chato de algo parecido com isto:

image

Para isso:

image

Adicionar a web part do editor de conteúdo para a página.

7. Escrever seu primeiro jQuery código

Abrir esse CEWP na exibição de código e adicione o seguinte:

image

Aqui está o código real, se você deseja copiar/colar:

<script type ="text/javascript"
    src ="../../jQuery Library/jQuery-1.3.2.min.js">
</script>

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

    $('#resultsID').HTML('Há' + $('a').Tamanho() + 'um tags tags nesta página.');

  });
</script>

Resultado:
<div id ='resultsID'></div>
/resultado

Observe que o primeiro <script> marca faz referência a biblioteca jQuery real. Presumivelmente, essas coisas mudam com o tempo, Então você vai querer ter certeza de uma) usar o nome certo e b) aponte para a biblioteca de documentos do SharePoint correta.

Aquecer na glória

Se você fez isso corretamente, você verá um resultado semelhante ao seguinte:

image

Resumindo

Esta não é a única maneira de começar, mas é rápido, fácil e isolada do seu ambiente do SharePoint existente.

</fim>

Subscreva ao meu blog.

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

Rápido e fácil: Usar jQuery para valor do definir um campo de texto em um formulário do SharePoint

Comecei a brincar com jQuery ontem. Estou querendo fazer isso há muito tempo, desde que Paul Grenier comecei a escrever sua série sobre jQuery para usuários finais no Venerável www.endusersharepoint.com Web site. Como usá-lo, Espero acrescentar que uma série de "Rápida e fácil" posts como este. Este post descreve como definir valor um campo de texto conhecido a qualquer coisa que você quer.

Neste cenário, Eu criei uma lista personalizada, cuja "nova" forma olha como mostrado:

image

Este é o novo formulário para uma lista personalizada com a coluna de título padrão e duas colunas de lista (não as colunas de site; Eu não acho que ele deve fazer toda a diferença).

O objetivo é atribuir um valor arbitrário para o campo, "DefaultMeFieldNoSpaces" (Você pode dizer que eu sou um pouco de um covarde com a coisa "sem espaços" acontecendo, mas combiná-lo no final deste artigo).

Este pouco de jQuery, funcionado para mim:

<script type ="text/javascript">

  $(função() {

    $(' entrada[título = DefaultMeFieldNoSpaces]').attr(
        {valor: ' Você está em um labirinto sinuoso de passagens, todos iguais.'});

  });

</script>

Pelo que entendi este pouco de jQuery está dizendo, "me encontrar qualquer entrada tag cujo título = DefaultMeFieldNoSpaces. Em seguida, conjunto todos os seus valores de uma famosa frase de um antigo jogo de computador."

Uma vez que só haverá um campo no formulário com um título igual ao "DefaultMeFieldNoSpaces" Estamos garantida de atribuir um valor ao campo e nenhum outro.

Que tal um campo cujo nome tiver espaços? É quase a mesma coisa:

<script type ="text/javascript">

  $(função() {
     $(' entrada[título = atribuir o campo com o espaço]').attr(
        {valor: ' Você está em um labirinto sinuoso de passagens, todos iguais.'});

  });

</script>

Acho que essa é uma abordagem bastante segura, significa que poderemos encontrar os campos que queremos e só o que queremos.. Se você olhar para o SharePoint de HTML está nos dando., é meio confuso:

<entrada
nome= "ctl00$ m$ g_bdb23c2c_fde7_495f_8676_69714a308d8e$ ctl00$ ctl04$ ctl02$ ctl00$ ctl00$ ctl04$ ctl00$ ctl00$ TextField"
tipo= "texto"
MaxLength= "255"
ID= "ctl00_m_g_bdb23c2c_fde7_495f_8676_69714a308d8e_ctl00_ctl04_ctl02_ctl00_ctl00_ctl04_ctl00_ctl00_TextField"
título= "DefaultMeFieldNoSpaces"
Classe= "ms-long"
/>

"título" destaca-se como um atributo reconhecível e espero que única para nos ajudar a identificar a coluna específica ao qual queremos atribuir o nosso valor arbitrário.

Este é um conceito fundamental. Configuração de um campo de forma arbitrária, assim não vai ganhar nenhum prêmio. No entanto, Se nós queremos fazer coisas de nível de formulário mais interessantes (que todos nós queremos sempre fazer, É claro, logo depois que terminar de lavar a louça), como alterar o valor de "b campo" automaticamente com base no valor do "campo um", Nós (EU) necessidade de aprender essas coisas.

Acho que nossa melhor chance de obter um valor útil real aqui é via o título, pelo menos para os campos de texto. Pode haver um melhor, abordagem mais confiável. Se eu encontrá-lo, Vou atualizar este post. Se você conhece uma maneira melhor, por favor, deixe um comentário.</fim>

</fim>

Subscreva ao meu blog.

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