miércoles, 19 de agosto de 2009

Parámetro Windowless del objeto Silverlight

Un problema que ocurre con mucha frecuencia al personalizar SharePoint, sobre todo los menús. Es, que si tenemos objetos Silverlight dentro de la pagina,  los menus aparecen por debajo de los objetos Silverlight, lo cual es un error fácil de solucionar.

Solo se debe establecer el parámetro Windowless a true, y automagicamente el problema estará resuelto. El parámetro se puede establecer de diferentes maneras:


<
object id="xamlHost0" width="900" height="412" type="application/x-silverlight">
   
<param value="transparent" name="background"/>
   
<param value="true" name="windowless"/>
   
<!-- a bunch of other params go here -->
</object>

Silverlight.createHostedObjectEx({
    source:
'Silverlight/Player/Player.xaml?v=1',
    parentElement: $get(parentId ||
"Player_SilverlightContainer"),
    id:
this._hostname,
    properties: {    width:
'900',    height: '412',
    framerate:
'24',
    version:
'1.0',
    background:
'transparent',    isWindowless: 'true'
}
 

<asp:Silverlight runat="server" ID="Silverlight1"

Height="340"

Width="320"

Windowless="true"

Source="../Xaml1.xaml"

OnPluginError="onXamlError"/>

 

<!—Inclusive, mediante javascript-->


silverlightObject.settings.Windowless = true;

 

Para el mismo problema pero con objetos Flash, he aquí un post del buen Haarón González, en el que explica la solución

 

 

lunes, 15 de junio de 2009

Evento onload de la página con _spBodyOnLoadFunctionNames

 

 

 

 

 

 

 

 

 

 

 

 

Habrá muchas ocasiones en las que requeriremos ejecutar alguna función de javascript en el evento onload de nuestra página, cuando esto sucede, la primera alternativa en la que pensamos podría ser el método ClientScriptManager.RegisterStartupScript, sin embargo en el modelo de programación de SharePoint esto se logra de manera un poco diferente, debido a que si somos programadores de componentes que se ejecutaran en una página de SharePoint, la mayoría de las veces no tendremos acceso al tag <body>, que se encuentra comúnmente en la masterpage, para hacer algo así:

 

 



<body onload=”MyFunction()”>


.

…..
</body>


Y claro, podríamos pensar en hacer algo como esto, que es sintácticamente correcto:

window.onload = function() {

                              

//do Something
                          

};



Pero podríamos generar comportamiento inesperado, ya que SharePoint también utiliza este evento para ejecutar funcionas propias


<body class="body" onload="javascript:_spBodyOnLoadWrapper();">


Lo recomendable es utilizar la función _spBodyOnLoadFunctionNames.push(), para registrar todas aquellas funciones de javascript que queramos que se ejecuten en el evento onload de la página, de la siguiente forma:

<script type="text/javascript">

_spBodyOnLoadFunctionNames.push('MyFunction');

function MyFunction() {

   alert('Esta función se ejecutara en el evento onload de la  página');


                     
}

</script>

 



alert(“Happy coding!”);

viernes, 3 de abril de 2009

Segundo Simposio Latinoamericano de SharePoint

El próximo 23 de abril del presente año se llevará acabo el Segundo Simposio Latinoamericano de SharePoint donde habrá platicas acerca del poderoso SharePoint, lo interesante es que se abordaran tanto temas para desarrolladores como IT Pro’s. La lista de expositores es la siguiente:

Haaron Gonzalez
Luis Du Solier
Misael Monterroca
Rodrigo Diaz
Mauricio Angulo
Hector Insua
Ruben Colomo
Tomas Hernández
Javier De Labra
Francisco Hernández
Joel Olson.



El evento tiene el simbólico costo de 250 pesos, regístrate AQUI.



Allá nos vemos.

invitacionSegundoSimposioSharePointMexico_thumb_05F64227

jueves, 2 de abril de 2009

GAC versus BIN

Hace unos días, se presento la siguiente situación con dos desarrolladores (Juan Topo y Max Power)de Sharepoint, ambos estaban utilizando un componente creado por ellos, para un proyecto anterior, llameMOSSle (no pude evitarlo) Assembly1. Ahora ellos lo utilizaban para proyectos diferentes, a Juan Topo le funcionaba a las mil maravillas y a Max Power le lanzaba SecurityExceptions hasta en el web.config.


Después de los comentarios llenos de odio y reclamos al altísimo de Max Power, llegamos a la parte en la que debuggeamos visualmente©  el código que usa su componente, la forma en la que ambos estaban utilizando el componente era muy parecida y nada fuera de lo normal.

Ahora llegamos a la parte de analizar de ejecución e inspeccionar la información proporcionada por la excepción lanzada.   Efectivamente, el código lanza una excepción al momento de intentar acceder a un objeto SPWeb, pero no ofrece mucha información.

Primer pensamiento, si encierro esta operación dentro de un RunWithElevatedPrivileges, funcionará sin problemas….. Pues no.

Desktop_security_splash

 


¿Entonces cual es la diferencia en sus dos implementaciones?

Después de un rato recopilando información, me doy cuenta que Juan Topo agrego su Assembly1 al GAC y Max Power al directorio BIN de su aplicación. He ahí la respuesta, cualquier assembly agregado al GAC se ejecuta con Full Trust, por otro lado, cualquier  assembly agregado al directorio bin de una web application de SharePoint se ejecuta dentro del contexto de seguridad establecido por el CAS policy local.

Entonces la solución es que Max debe agregar su assembly a la GAC?

 

La respuesta depende de las necesidades, en la mayoría de los casos, no es conveniente agregar el Assembly1 a la GAC, ya que este se salta el CAS policy y por lo tanto adquiere acceso total a los recursos de la maquina, lo que puede ser un hueco de seguridad. Sin embargo existen algunas consideraciones que podemos tomar en cuenta al tomar esta decisión:

1.       Si se trata de un Assembly de Webparts, lo recomendable es que sea despegado en el directorio BIN de tu web application, para asegurate que el código de las webparts solo accedan a recursos sobre los que se les ha dado permisos explícitos.

2.       Si tienes una o más webparts que requieren un conjunto de permisos superior al de otras, es recomendable que compiles estas webparts en un assembly separado y asignes permisos específicos a este ensamblado, en lugar poner todas tus webparts en un assembly y asignar permisos elevados a este.

3.       Si tienes un ensamblado que requiere un nivel de confianza (level trust) mayor, no intentes subir subas el nivel de seguridad local, porque esto subirá automáticamente el nivel confianza de todos los ensamblados que se ejecutan con ese nivel, en lugar de esto, asigna permisos especifico al assembly.

4.       Pero qué pasa con los elementos de SharePoint que requieren ser desplegados en la GAC? Por ejemplo, los event receivers y las features?.Si tienes mezclados este tipo de componentes con webparts dentro de tu solución de SharePoint, debes compila tus webparts en un assembly aparte para que puedan ser desplegados en el folder BIN.

5.       Los administradores de SharePoint son como perros bull terry, y no permitirán que despliegues assemblies en la GAC, solo porque les digas que está firmado, debes habilitarlos para desplegar dentro del folder BIN de sus aplicaciones, si tienes alguna webpart que requiera de mas permisos, debes otorgárselos explícitamente a través de WSS_Minimal trust.



Es importante tener en cuenta esto para construir código seguro por defecto.

Happy Coding!

miércoles, 25 de marzo de 2009

Nuevas Características en Silverlight 3 Beta 1

Sin lugar a dudas uno de los huecos mas grandes de Silvelight 2.0 es la integración con servicios web, restricciones tales como basicHttpBinding, hacían la vida de un desarrollador  menos divertida. Como sabemos el basicHttpBinding codifca los mensajes de respuesta como texto, lo cual es grandioso si uno de los alcances de nuestro proyecto es la interoperabilidad  con SOAP 1.1 pero nefasto por la sobrecarga de información que se envía en la respuesta. Cuantos desarrolladores no dedicamos tiempo creando alguna forma para que la respuesta de un servicio web se redujera de tamaño?



Y he aquí una de las características, por la que rezaba todas las noches,  que mas esperaba de la versión Beta 1 que fue anunciada en el pasado mix.




Binary Message Encoding


BinaryHttpBinding es la respuesta que Silverlight 3 trae a los desarrolladores, para reducir el overhead que se tenía en la codificación a texto.  Este nuevo tipo de binding es, por alguna razón, implementado como un custom binding.



<bindings>


  <customBinding>

    <binding name="binaryHttpBinding">

      <binaryMessageEncoding />

      <httpTransport />

    </binding>

  </customBinding>

</bindings>

<endpoint address="" binding="customBinding" bindingConfiguration="binaryHttpBinding"  contract="ServiceContract" />

El gran incremento en performance que trae este nuevo tipo de binding, seguramente repercutirá en su utilización como default binding, y relegaremos el basicHttpBinding en los escenarios en los que sea obligatorio la interoperabilidad.

 


Un modo  de seguridad adicional

Silverlight 3 introduce un nuevo modo de seguridad, que ya conocíamos al utilizar otros clientes  con WCF, TransportWithMessageCredential es casi la respuesta a nuestras plegarias, ya que nos permite enviar credenciales para autentificarnos con el servicio  web que estamos consumiendo. La desventaja (porque siempre hay un “pero”?), es que las credenciales que enviemos para la autentificación, serán enviadas en cada mensaje, y el servicio validara las credenciales en una capa SOAP. Por lo anterior las credenciales viajaran en texto plano, por lo que será necesario utilizar HTTPS

<security mode="TransportWithMessageCredential">


SLsvcutil.exe

Por ultimo, aunque no menos  importante, quiero hacer mención de la herramienta SLsvcutil.exe, que podremos utilizar desde la línea de comandos, la cual nos permitirá crear las clases proxy, para realizar peticiones a los servicios web. Recordemos que en la versión anterior de Silverlight solo podíamos hacer esto a través de  Visual Studio | Add Service Reference. 

Aquí pueden encontrar la documentación para utilizar esta herramienta.


Happy Coding!

Etiquetas

SharePoint 2010 (38) Microsoft (32) Desarrollo SharePoint (31) Gerardo Reyes Ortiz (27) SharePoint (20) SharePoint 2013 (18) Errores SharePoint (12) México (10) PowerShell (9) Silverlight (8) Visio Services (7) Features (6) MVP (6) Silverlight 3 (6) WebCast (6) Workflows (6) Configuracion SharePoint 2010 (5) D.F. (5) API REST (4) Configuracion SharePoint 2010; (4) Troubleshooting (4) Visual Studio 2010 (4) Visual studio (4) WSS (4) Web parts (4) Apps (3) Comunidad SharePoint (3) Configuración SharePoint 2013 (3) ODATA (3) SharePoint Server (3) SharePoint; Instalación SharePoint; Troubleshooting; Search Service (3) Silverlight 3.0 (3) Silverlight Toolkit (3) WebParts (3) javascript (3) jquery (3) Eventos SharePoint (2) Office 2010 (2) PeoplePicker (2) REST (2) SQL Server (2) Scripting (2) Search Service Application (2) SharePoint Designer (2) UPA (2) UPS (2) Workflows SharePoint (2) host header (2) Apps Development (1) Big Bang (1) CAS (1) CSOM (1) Codeplex (1) CompartiMOSS (1) Configuracion SharePoint 2010; Errores SharePoint (1) Configuracion SharePoint 2010; SharePoint 2010 (1) Custom Actions (1) Custom Editor Parts (1) Delegate Controls (1) Deployment (1) DisableLoopbackCheck (1) Document Library (1) Entrevista (1) Examenes de Certificación (1) Extract WSP (1) FBA (1) FS4SP (1) Fakes (1) Fast Search Server 2010 For SharePoint (1) Fiddler (1) HTTP.SYS (1) HTTPS (1) JSON (1) Language Pack's (1) Latam (1) MAXDOP (1) MCSM (1) MSExpertos (1) MVC (1) Microsoft México (1) Microsoft; Codeplex; Screencast; (1) My Sites (1) SQL Server 2012 (1) SQL Server Reporting Services (1) Screencast (1) Screencast; (1) Service Applications (1) Service Pack (1) SharePoint 2007 (1) SharePoint 2010 SP 1 (1) SharePoint API (1) SharePoint Conference (1) SharePoint Emulators (1) SharePoint Farm (1) SharePoint Health Analyzer (1) SharePoint Magazine (1) SharePoint Online (1) SharePoint Search (1) SharePoint Test (1) SharePoint; Desarrollo SharePoint (1) Shims (1) Simposio (1) Simposio Latinoamericano (1) SkyDrive Pro (1) Soporte Microsoft (1) Templates (1) Tip (1) VSeWSS (1) Virtual Machine (1) Visual Studio 2012 (1) WCF (1) WSS; IIS 7 (1) Web API (1) Web Content Management (1) Web Services (1) Windows 8 (1) Windows Live ID (1) Xml (1) appcmd (1) iOS (1) jqGrid (1) onload function (1)