archivos mensuales: Junio 2009

Servicios de formulario de InfoPath, Autenticación basada en formularios (FBA) y nombres de archivo únicos

He estado trabajando en algunos formularios de InfoPath esta semana en MOSS en un entorno de FBA y aprendido, Cuando fui a implementar los formularios a un entorno de producción con un FBA zona que el nombre de usuario() función no funciona. Lo estaba usando para generar nombres de archivo único.

Bien, esa función no funciona en un entorno de FBA (por lo menos, no fuera de la caja). Y, sobre la reflexión, usando nombre de usuario en la forma que había planeado no habría garantizado un nombre de archivo único en cualquier caso.

Mi solución fue usar el ahora() función y un estado que se activa en la carga de la forma. Asignar el nombre del archivo al elemento de datos cuando está en blanco:

image

image

La ventaja de este enfoque es que el nombre del archivo es solamente una vez. (No me presento en la captura de pantalla, pero puso una condición sobre la regla para disparar sólo cuando "myFilename" está en blanco). Permite configurar el nombre del archivo en el nivel de la fuente de datos. Por lo general, Yo haría algo (mal) Así:

image

El problema es que si el usuario A abre el formulario el lunes y el usuario B cambia el martes, Terminarás con dos formas diferentes puesto que dos usuarios distintos guardan con nombres de usuario diferente.

Por lo tanto, tan molesto como FBA puede ser en general y con InfoPath en particular, me hizo volver a pensar en un pequeño pero muy importante detalle técnico y enfoque que no hubiera hecho lo contrario!

</final>

Suscribirse a mi blog.

Sígueme en Twitter en http://www.twitter.com/pagalvin

Etiquetas de Technorati:

Parece asegurar vistas de bibliotecas de documentos y lista de SharePoint (tipo de) Posible con jQuery

Este es otro post en mi en serie sobre cómo utilizar jQuery con SharePoint.
Si desea obtener más información sobre jQuery, Lo recomiendo: jQuery en acción por Bibeault de oso y Yehuda Katz.

Una de las primeras cosas que pensé, una vez que empecé a jugar con jQuery, era si podríamos usarlo para garantizar una vista de SharePoint. La respuesta es "no" (o al menos, Yo no estoy reclamando es posible). Sin embargo, es ciertamente posible para que sea difícil para la gente ver una vista particular.

Empecé con mi entorno sandbox al trabajar en este. Escribí acerca de que aquí el medio ambiente: Fácil y rápida: Crear tu propio jQuery Sandbox para SharePoint.

Para "asegurar" una vista, siga estos pasos:

  1. Crear una vista que desea asegurar. Hice y lo llamó "Aseguró ver".

    Esto es lo que parece cuando no está "protegido":

    image

  2. Agregue un elemento web editor de contenido a la página de la vista mediante el truco descrito en el artículo sandbox (i.e. Añadir "páginaVer = Shared&ToolPaneView = 2 "a la dirección URL).
  3. Averiguar su _spUserId SharePoint siguiendo estos pasos loco, creer o no:
    1. Inicie sesión en el entorno de SharePoint.
    2. En el campo de dirección del navegador web, tipo: "javascript:alerta(_spUserId").
    3. Registre el resultado (es "13" en mi caso).

      image

  4. Agregar el siguiente javascript a tu CEWP en la vista Código:

    <la escritura de tipo ="text/javascript"
        src =".. /.. /jQuery Library/jQuery-1.3.2.min.js">
    </secuencia de comandos>
    
    <tipo de script ="text/javascript">
      $(función() {
    
        alerta(_spUserId);
    
        var theSecuredView = $(' iframe[FilterLink * = 20View % asegurado]');
    
        Si ((theSecuredView.length > 0) && (_spUserId == 13))
          $(' iframe[FilterLink * = 20View % asegurado]').padre().padre().padre().HTML("<TR bgcolor = rojo><TD>Ninguna visión para usted!</TD></TR>");
      });
    
    </secuencia de comandos>
    

He incluido esa alerta(_spUserId) línea allí para demostrar que esto no es realmente una "seguridad" en una vista, pero simplemente lo que es más difícil ver. Más en el momento de.

Básicamente, jQuery está en busca de un iFrame en la página que tiene un atributo que contiene "Asegurado % 20View" en su valor. Una vez que lo encuentra, comprobamos si el usuario actual es "13". Si se trata de, Caminamos por el DOM para un <TR> etiqueta (que averiguado por ver origen y lo seguimiento de) y, a continuación, reemplazar la etiqueta TR con mi mensaje. Realmente no sé cómo sólida es (Soy muy sospechosa, En realidad), pero trabajó en mi recinto. Si encuentro una mejor manera de, I'll blog sobre ella. Este es el resultado:

image

Haga clic en el botón Aceptar y se sustituyen los datos con un mensaje en rojo grande:

image

Como puede decir, el camino que he de implementar esta solución de "seguridad" es que la parte web para sí mismo. Después de termine, Sobrescribir su contenido con mi "No vista!"el mensaje.

A pesar de que no es realmente un "seguro" "vista, es potencialmente útil y con un trabajo inteligente, Eventualmente puede ser asegurable en un sentido más formal. La cuestión fundamental es que el cliente está recibiendo todos los datos y luego, sólo después de obtiene los datos, elimina a. Si el cliente está recibiendo los datos, un usuario inteligente puede impedir que el jQuery ejecutando a todos y ver lo que quiere ver.

Hay otros inconvenientes. Este enfoque de "seguridad" se basa en un _spUserId. Queremos realmente seguro basado en el modelo completo de seguridad de SharePoint, o por lo menos por nombre de usuario. Se vuelve progresivamente más difícil, pero veo algún buen material escrito sobre este tema, así que confío en que existe una buena respuesta a ese problema.

La lista de vistas propios debe ser recortada, Si es posible. No he probado a averiguarlo. Supongo que es posible, pero realmente no resuelve el problema de seguridad fundamentales porque alguien podría todavía sólo escriba la dirección URL de la vista que desee (Si supieran lo). Sin embargo, ajuste del sentido. Es una característica buena usabilidad y ayuda a oscurecer las cosas. Si un usuario final no sabe que existe el evento, probablemente no intentan utilizar. A veces, es lo suficientemente bueno.

Con suerte, Voy a tener más escribir sobre este tema en el tiempo.

</final>

Suscribirse a mi blog.

Sígueme en Twitter en http://www.twitter.com/pagalvin

Etiquetas de Technorati: ,,

Etiquetas de del.icio.US: ,,

Fácil y rápida: Una mejor forma de utilizar jQuery para ocultar un campo de texto en un formulario de SharePoint

Este es otro post en mi en serie sobre cómo utilizar jQuery con SharePoint.
Si desea obtener más información sobre jQuery, Lo recomiendo: jQuery en acción por Bibeault de oso y Yehuda Katz.

Previamente, Escribí acerca de cómo utilizar jQuery para localizar y ocultar un campo de texto en un formulario. No me importaba para el enfoque específico (Fui encadenamiento de padres – que simplemente no se realiza estos días, al menos en las familias de calidad).

Cuando empecé a pensar en ello, Sabía que necesitaba encontrar un <TR> a los que podía invocar a la piel() método. Mi esfuerzo temprano para encontrar el correcto <TR> fue algo como esto:

$(' tr:ha(entrada[Título = esconderme!])');

El problema con eso es que encuentre cada <TR> etiqueta que Me tenía alguna relación de padre a la piel! campo, incluso si esconderme! está anidado muchos niveles de profundidad en <TR>'s. Resulta que en mi formulario de sandbox, considera que la expresión 9 diferentes TR que tienen esconderme! como un niño en algún lugar de su árbol de DOM. Me di cuenta de que podía caminar hacia atrás por el árbol desde el campo de entrada, así es cómo terminé abusando de los padres, pero no se sientan bien conmigo.

Me dio algunos pensamiento a esto y una de las cosas que leí por último sentido: Podría utilizar la no() método de recorte <TR>'s que no quiero que en mi conjunto envuelto. Eso me llevó a esto:

$(' tr:ha(entrada[Título = esconderme!])').no(' tr:ha(TR)').ocultar();

El primer bit encuentra todos los <TR> etiquetas que tienen la piel Me! campo en cualquier parte de su propia jerarquía. Luego las tiras cualquiera <TR> también tiene un hijo <TR>. Esto nos deja con una sola <TR> que:

1) No tiene ningún <TR> registros secundarios

2) Tiene el campo de entrada como niño.

Entonces podemos aplicar la piel() método de la resultante y hemos terminado.

Todavía estoy un poco nervioso acerca de esto, pero no tan nervioso como el encadenamiento de los padres.

No sé si esto es una mejor práctica o no. Puede ser una manera más adecuada de identificar sólo el <TR> que nos preocupamos por un formulario de SharePoint. Si usted sabe, por favor enviar un comentario.

</final>

Suscribirse a mi blog.

Sígueme en Twitter en http://www.twitter.com/pagalvin

Etiquetas de Technorati: ,

Fácil y rápida: Utilizar jQuery para ocultar un campo de texto en un formulario de SharePoint

Este es otro post en mi en serie sobre cómo utilizar jQuery con SharePoint.
Si desea obtener más información sobre jQuery, Lo recomiendo: jQuery en acción por Bibeault de oso y Yehuda Katz.

ACTUALIZACIÓN (ya!): Pensar en una mejor forma de localizar el <TR> etiqueta desea ocultar y escribió sobre ello aquí. Puede todavía encontrar este artículo interesante de todos modos estoy leavnig para arriba.

Quiero ocultar un campo de texto, "Esconderme!"como se muestra:

image

El siguiente jQuery hace el truco para mí:

<tipo de script ="text/javascript">

  $(función() {


    $(' entrada[Título = esconderme!]').padre().padre().padre().ocultar();

  });

</secuencia de comandos>

El código está diciendo, "find me todo entrada campos cuyo título = esconderme!. A continuación, su padre y luego en siguiente padre y el * siguiente * padres (Ufff!) e invocar la piel() método en esa cosa, lo que pasa a ser.

Comprendí esa estructura de padres viendo el código HTML de forma que SharePoint creado como se muestra:

<TR>
    <TD nowrap= "true" vAlign= "top" Ancho= "190px" clase= "ms-formlabel">
        <H3 clase= "ms-standardheader">
            <NOBR>Esconderme!</NOBR>
        </H3>
    </TD>

    <TD vAlign= "top" clase= "ms-formbody" Ancho= "400px">
        <!-- FieldName = "esconderme!"
                 FieldInternalName = "Hide_x0020_Me_x0021_"
                 FieldType = "SPFieldText"
        -->
        <abarcan dir= "none">
            <entrada
                nombre= "ctl00$ m$ g_bdb23c2c_fde7_495f_8676_69714a308d8e$ ctl00$ ctl04$ ctl02$ ctl00$ ctl00$ ctl04$ ctl00$ ctl00$ TextField"
                tipo= "text"
                MaxLength= "255"
                ID.= "ctl00_m_g_bdb23c2c_fde7_495f_8676_69714a308d8e_ctl00_ctl04_ctl02_ctl00_ctl00_ctl04_ctl00_ctl00_TextField"
                Título= "Esconderme!"
                clase= "ms largo" />
                <BR>
        </abarcan>


    </TD>
</TR>

Esta imagen muestra la misma, pero marcado con los padres:

image

La primera de los padres (1) es una etiqueta span. Padre de luz (2) es una etiqueta TD y, a continuación, finalmente llegamos a la real padre quiero ocultar (3) que es la propia etiqueta TR.

Este es un enfoque bastante terrible creo que porque es muy dependiente de la estructura muy específica de esta forma. Cuando SharePoint 2010 sale, Esta estructura entera podía cambiar y romper este enfoque. Lo que realmente quiero hacer es arte un selector de jQuery que es a lo largo de las líneas de "Encuéntrame de TR (y sólo etiquetas TR) que tienen en algún lugar en sus elementos secundarios un campo de entrada cuyo título = esconderme!”. Yo a partir de la parte inferior y subiendo. Suponiendo que esto averiguar, Voy a publicar un actualizado "fácil y rápida ' post.

</final>

Suscribirse a mi blog.

Sígueme en Twitter en http://www.twitter.com/pagalvin

Etiquetas de del.icio.US: ,

Etiquetas de Technorati: ,

Fácil y rápida: Crear tu propio jQuery Sandbox para SharePoint

Este es otro post en mi en serie sobre cómo utilizar jQuery con SharePoint.
Si desea obtener más información sobre jQuery, Lo recomiendo: jQuery en acción por Bibeault de oso y Yehuda Katz.

Es sorprendentemente fácil comenzar con jQuery en SharePoint (Para mí). (Tengo serias dudas sobre un enfoque de "mejores prácticas" para la implementación de estas cosas a la producción, pero eso es para otro día). Apenas he empezado a jugar con esta tecnología y para ello, He creado un ambiente sandbox para utilizar. Si usted está buscando para empezar con jQuery, Este enfoque puede encontrar útil.

1. Crear un sitio en blanco

Crear un sitio en blanco en algún lugar en su sitio y llamarlo algo inteligente como "jQuery Sandbox".

2. Descargar jQuery

La biblioteca de javascript de jQuery puede descargar desde aquí: http://docs.jquery.com/Downloading_jQuery

Que guarde en el escritorio.

He estado utilizando la versión "".

3. Crear una biblioteca de documentos de SharePoint

En su sitio de sandbox, crear una biblioteca de documentos.

4. Cargar la biblioteca de jQuery en SharePoint

Acceder a la biblioteca de doc que acaba de crear y cargar la biblioteca jQuery.

5. Crear una lista personalizada de SharePoint

He empezado con una lista personalizada porque quiero la suciedad con formularios estándar de SharePoint. También se podrían crear una página en una biblioteca de páginas o páginas de elementos web y probablemente un montón de otros lugares.

Agregar algunas columnas a la lista personalizada para que usted tenga que ejecutar jQuery contra. Mi objetivo inicial fue:

  1. Ocultar un campo.
  2. Asignar un valor a un campo.

Con ese objetivo en mente, He añadido dos campos de texto. Con el tiempo, Yo voy jugando con enlaces, imágenes, búsquedas, etc..

6. Modificar la página de elementos Web NewForm.aspx y agregue un elemento Web Editor de contenido

Esto es un poco negro magic-ish , en es un concepto nuevo para mí. En primer lugar aprendí sobre esto de Paul Grenier, SharePoint jQuery Superstar, en su sitio de proyecto de CodePlex: http://spff.codeplex.com/.

Siga estos pasos para agregar un CEWP a la misma página que muestra NewForm.aspx para cualquier lista personalizada:

  1. Acceder a la lista personalizada y haga clic en nuevo.
  2. Añadir lo siguiente a la URL: PageView = compartido&ToolPaneView = 2

Transformará su inscripción datos vainilla aburrido de algo como esto:

image

A esto:

image

Añadir la WebPart de editor de contenido a la página.

7. Escribir jQuery primero su código

Abrir eso CEWP en la vista Código y agregue el siguiente:

image

Aquí está el código si desea copiar/pegar:

<la escritura de tipo ="text/javascript"
    src =".. /.. /jQuery Library/jQuery-1.3.2.min.js">
</secuencia de comandos>

<tipo de script ="text/javascript">
  $(función() {

    $('#resultsID').HTML('Hay' + $('a').tamaño() + 'una etiquetas etiquetas en esta página.');

  });
</secuencia de comandos>

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

Tenga en cuenta que la primera <secuencia de comandos> etiqueta se hace referencia a la biblioteca de jQuery real. Probablemente, estas cosas cambian con el tiempo, así que usted querrá asegurarse de que un) Utilice el nombre correcto y b) apunte a la biblioteca de documentos de SharePoint correcta.

Disfrutar de la gloria

Si lo hiciste correctamente, verá un resultado similar al siguiente:

image

Terminando

Esta no es la única forma de empezar, pero es rápido, fácil y aislado de su entorno existente de SharePoint.

</final>

Suscribirse a mi blog.

Sígueme en Twitter en http://www.twitter.com/pagalvin

Etiquetas de Technorati: ,

Etiquetas de del.icio.US: ,

Fácil y rápida: Utilizar jQuery para valor del definir un campo de texto de un formulario de SharePoint

Comenzó a jugar con jQuery ayer. He estado queriendo hacer esto por mucho tiempo, desde Paul Grenier comenzó a escribir su serie acerca de jQuery para los usuarios finales en el venerable www.endusersharepoint.com sitio web. Como lo uso, Espero poder añadir que una serie de "Rápido y fácil" posts como este. Este post describe cómo establecer el valor de un campo de texto conocido en todo lo que quieras.

En este escenario, He creado una lista personalizada cuya forma "nueva" mira como se muestra:

image

Esta es la nueva forma de una lista personalizada con la columna de título predeterminado y dos columnas de la lista (no columnas de sitio; No creo que debe hacer alguna diferencia).

El objetivo es asignar un valor arbitrario al campo, "DefaultMeFieldNoSpaces" (puede decir que soy un poco cobarde con lo de "no hay espacios" va, pero especias lo el final de este artículo).

Este bit de jQuery trabajó para mí:

<tipo de script ="text/javascript">

  $(función() {

    $(' entrada[Título = DefaultMeFieldNoSpaces]').attr(
        {valor: "Estás en un laberinto de pasadizos revirado, todos iguales. "});

  });

</secuencia de comandos>

Es decir tengo entendido que este bit de jQuery, "encontrarme alguna entrada etiqueta cuyo título = DefaultMeFieldNoSpaces. A continuación, establecer todos sus valores en una famosa frase de un viejo juego de equipo."

Ya que sólo habrá un campo de formulario con un título igual a "DefaultMeFieldNoSpaces" somos asegurada de asignar un valor a ese campo y ningún otro.

¿Qué pasa con un campo cuyo nombre posee espacios? Es casi lo mismo:

<tipo de script ="text/javascript">

  $(función() {
     $(' entrada[Título = campo asignar con espacio]').attr(
        {valor: "Estás en un laberinto de pasadizos revirado, todos iguales. "});

  });

</secuencia de comandos>

Creo que este es un enfoque bastante seguro, lo que significa que debemos ser capaces de encontrar el campo que queremos y sólo en el campo que queremos. Si nos fijamos en el HTML de SharePoint nos da, es un tipo de desorden:

<entrada
nombre= "ctl00$ m$ g_bdb23c2c_fde7_495f_8676_69714a308d8e$ ctl00$ ctl04$ ctl02$ ctl00$ ctl00$ ctl04$ ctl00$ ctl00$ TextField"
tipo= "text"
MaxLength= "255"
ID.= "ctl00_m_g_bdb23c2c_fde7_495f_8676_69714a308d8e_ctl00_ctl04_ctl02_ctl00_ctl00_ctl04_ctl00_ctl00_TextField"
Título= "DefaultMeFieldNoSpaces"
clase= "ms largo"
/>

"título" se destaca como un atributo reconocible y esperemos único para ayudarnos a identificar la columna específica a la que queremos asignar nuestro valor arbitrario.

Este es un concepto fundacional. Configuración de un campo de manera arbitraria como ésta no va a ganar cualquier premio. Sin embargo, Si queremos hacer cosas más interesantes de nivel de formulario (que todos nosotros siempre queremos hacer, Claro, justo después de terminar de lavar los platos), como cambiar el valor de "campo b" automáticamente basándose en el valor de "campo un", nos (ME) es necesario aprender estas cosas.

Creo que es nuestra mejor oportunidad de obtener un valor real útil aquí por el título, por lo menos para campos de texto. Puede ser un mejor, enfoque más confiable. Si lo encuentro, Podrá actualizar este post. Si conoces una manera mejor, por favor, deje un comentario.</final>

</final>

Suscribirse a mi blog.

Sígueme en Twitter en http://www.twitter.com/pagalvin

Etiquetas de Technorati: ,