Social Icons

Mostrando entradas con la etiqueta Configuración. Mostrar todas las entradas
Mostrando entradas con la etiqueta Configuración. Mostrar todas las entradas

miércoles, 4 de enero de 2012

Configurando Silverlight y Servicios Web con SSL y Certificados Autofirmados

Yo tenía un servidor de SharePoint funcionando perfectamente o por lo menos tan bien como funciona un server de SharePoint en HTTP, pero de repente sentí la urgencia de hacerlo HTTPS. Extendí la aplicación etc., y era capaz de acceder a todas partes, pero ¡Oh sorpresa!, mis silverlights no funcionaban.

Cambié el <security mode="Transport" /> en el ServiceReferences.ClientConfig pero siempre me daba el infame error:
An error occurred while trying to make a request to URI 'https://MyURL/_vti_bin/Service.asmx'. This could be due to attempting to access a service in a cross-domain way without a proper cross-domain policy in place, or a policy that is unsuitable for SOAP services. You may need to contact the owner of the service to publish a cross-domain policy file and to ensure it allows SOAP-related HTTP headers to be sent. This error may also be caused by using internal types in the web service proxy without using the InternalsVisibleToAttribute attribute.
Hay un par de cosas que arreglar aquí.

Lo primero es añadir un buen certificado autofirmado a tu sitio.
C:\Program Files\Microsoft SDKs\Windows\v7.1>MakeCert.exe -r -pe -n "CN=MyURL" -sky exchange -ss my
El MyURL es muy importante. No puedes usar un certificado autofirmado cualquiera, debes usar uno que le venga bien a la URL de tu sitio.
El certificado se almacena en tus certificados personales, asi que para exportarlo deberás ejecutar MMC.exe, y allí:
File –> Add/Remove Snap-In –> Certificates –> My user account –> Finish –> OK
Entonces podrás de ver tus certigicados. El que acabas de crear está enÑ:
Certificates – Current User –> Personal –> Certificates –> MyURL
Allí deberás:
Click derecho –> All Tasks –> Export
Y entonces asegurate de que exportas la clave privada con el certificado. Esto te dará como resultado un fichero .pfx.

Ahora podemos ir al server que queremos hacer SSL, si es que no estábamos allí ya, y copiar el fichero .pfx en algún sitio en donde luego recordemos donde esta.

Después abrimos el IIS Manager, seleccionamos el nodo raíz y hacemos click en Certificados del Servidor image.

En la columna de la derecha deberás hacer click en Importar y seleccionar el fichero .pfx que acabas de crear. Después de importarlo deberás poder verlo en la lista de Certificados del Servidor.

Entonces haremos click en la colección de sitios 443 (la mía se llama SharePoint 443) y allí, otra vez en la columna derecha, hacemos click en bindings. Seleccionamos HTTPS (añade uno si no lo tienes ya creado) y luego hacemos click en editar. En la lista Certificado SSL selecciona el que acabas de subir.

Bien, ya hemos hecho la parte difícil, ahora todo es más fácil.

Ahora añadiremos el crossdomain.xml y el clientaccesspolicy.xml tanto a la carpeta 80 como a la 443. (c:\inetpub\…\443)
El contenido de estos ficheros es:

crossdomain.xml
<?xml version="1.0"?>
<!DOCTYPE cross-domain-policy SYSTEM "http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd">
<cross-domain-policy>
  <allow-access-from domain="*"/>
  <allow-http-request-headers-from domain="*" headers="SOAPAction"/>
</cross-domain-policy>

clientaccesspolicy.xml
<?xml version="1.0" encoding="utf-8"?>
<access-policy>
  <cross-domain-access>
    <policy>
      <allow-from http-request-headers="SOAPAction">
        <domain uri="http://*"/>
        <domain uri="https://*"/>
      </allow-from>
      <grant-to>
        <resource path="/" include-subpaths="true"/>
      </grant-to>
    </policy>
  </cross-domain-access>
</access-policy>

Y ahora la parte todavía más sencilla. Configurar el navegador.
Debemos navegar a https://MyURL y allí veremos algo así:
image

Aquí deberás hacer click en continuar (Recomendado) y después verás la barra de dirección volverse roja. Bien.
Haz click en el botón Error de Certificado y luego en el link Ver Certificados:
image

Después de eso:
Instalar Certificado… –> Next –> image & Next –> Finish –> Yes –> Ok.
Cierra el navegador y ábrelo otra vez tu https://myurl. Ahora deberías ver la barra de la URL en blanco y el icono del candado al lado:
image

Vamos bien. Ahora borraremos las cookies del navegador y todo lo demás, qué demonios:
image

Como toque final reiniciaremos el IIS y saltaremos tres veces a la pata coja.

Ahora, finalmente, debes de ser capaz de depurar tus web services SSL y tus Silverlights en Visual Studio.

No hay comentarios:

martes, 27 de octubre de 2009

Reporte de uso gráfico del portal en SharePoint 2007

Vaya, una de esas cosas con las que cuentas y de repente te fallan… Y lo peor es que ahora todos los post tratan del SharePoint 2010 por lo que es más difícil encontrar cosas básicas de MOSS.

Bueno, a lo que voy, que este es cosa rápida. Resulta que tras activar los análisis de uso en la administración central y en la feature del sitio y en todos los lados conseguimos en la página de configuración del sitio un precioso link como este:

Informe de uso del sitio

Hasta aquí todo correcto, pero hoy me ha ocurrido que pulsando sobre ese link (en un MOSS) me redirigía a página de “Informe de uso del sitio” /_layouts/usageDetails.aspx, que es la página de WSS:

usageDetails.aspx - Informe de uso del sitio

Útil, sí, pero mu fea

Después de un rato de buscar por internet, en donde me fue imposible encontrar nada por culpa de las páginas de 2010, me vi obligado a preguntarle a un amigo que dónde estaba la paginita dichosa con las gráficas de uso y me dijo que era /_layouts/SpUsageWeb.aspx. Vale bien, muy bonito, pero ¿cómo accede un usuario administrador a esa página sin saberse la url? Aburrido de buscar a ojo, me fui a la página de configuración del sitio y busqué en el código un link a SpUsageWeb.aspx pero nada, tan solo creí ver pasar a lo lejos una planta rodadora…

¿No hay forma de que los usuarios lleguen a ese link? Pues No. Por lo menos, no en WSS. Resulta que la página del reporte de uso gráfico es parte de MOSS y para que se muestre tendremos que activar las “Características de sitio de Office SharePoint Server Enterprise” y con esto, el link de “Informe de uso del sitio” apuntará a /_layouts/SpUsageWeb.aspx y el usuario podrá entrar a la página de “Resumen de uso del sitio” que es la misma de antes, pero con grafiquitas, así:

SpUsageWeb.aspx - Resumen de uso del sitio

Hala, qué bonito, ahora sí que me puedo ir a casa contento…

4 comentarios:

lunes, 26 de octubre de 2009

Creación de usuarios de FBA programáticamente

El otro día tuve que hacer una instalación de un FBA y se me ocurrió que no tenía ganas de usar el asistente de Visual Studio eso o que no tenía un Visual Studio a mano… total que se me metió en la cabeza que debía de ser facilísimo crear los usarios programáticamente. Claro, desde el portal no tiene ningún secreto, pero yo lo que quería era hacerlo desde una aplicación de consola.

Al final,como siempre, no me resultó trivial pese a ser facilísimo, y como no lo tengo subido al TFS y yo soy de los que se olvidan de este tipo de cosas, lo subo al blog.

El main no tiene ninguna complicación, se crea el usuario con un Membership.CreateUser y ser recoge el resultado de la operacion en un MembershipCreateStatue, así:


static void Main(string[] args)
{
System.Web.Security.MembershipCreateStatus Creado;
System.Web.Security.Membership.CreateUser(args[0], args[1], args[2],
Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), true, out Creado);

Console.WriteLine(Creado.ToString());
Console.ReadKey();
}

Claro, qué fáci :) pero ¿cómo sabe el Membership a dónde apuntar? pues se lo tenemos que decir añadiendo a nuestra solución un “Archivo de Configuración de Aplicación”. Yo como soy tremendamente original lo llamé App.config.


Y en este fichero .config es donde tenemos que definir todos los datos de nuestro Membership Provider. Para regocijo de todos, se puede sacar la configuración directamente desde el web.config de la aplicacion web donde tenemos montado la infraestructura del Form Based Authentication. Os pego una copia esquemática de lo que hay que añadir:


<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<connectionStrings>
<add name="NOMBREDELACONEXION" connectionString="server=INSTANCIA;database=BASEDEDATOS;Trusted_Connection=true" />
</connectionStrings>
<system.web>
<membership defaultProvider="NOMBERDELMEMBERSHIPPROVIDER">
<providers>
<add connectionStringName="NOMBREDELACONEXION" applicationName="/"
name="NOMBERDELMEMBERSHIPPROVIDER"
type="CLASE, ASSEMBLY, Version=X.X.X.X, Culture=neutral, PublicKeyToken=KEY" />
</providers>
</membership>
<roleManager enabled="true" defaultProvider="NOMBREDELROLEPROVIDER">
</roleManager>
</system.web>
</configuration>

Y con esto ya funciona mágicamente.


Suerte!

No hay comentarios:

viernes, 8 de mayo de 2009

stsadm can inadvertently delete a root site collection if erroneous URL path used

¡Qué peligro! como se nos explica en el kb968474 si usamos el comando stsadm –o restore con el parámetro –overwrite y nos equivocamos en la url stsadm se carga la colección de sitios raíz.

Claro, poner un mensaje de error no tendría sentido ya que es completamente imposible que nadie pueda equivocarse a la hora de escribir una url…

Yo sigo siendo más amigo del SQLServer que del stsadm a la hora de hacer estas cosas. También he probado soluciones de terceros como http://www.avepoint.com/ y también me fio más de ellas.

Como todo en este blog esta es mi humilde opinión personal.

No hay comentarios:

martes, 5 de mayo de 2009

An error has occurred in the script on this page

[EDIT: Lee los comentarios antes de seguir este método]

Hoy se me ha dado este caso, y no es la primera vez que veo esto, así que post al canto.

Internet Explorer Script Error


Line: 3031
Char: 2
Error: ‘RTE_ToggleEnableShortcuts’ is undefined
Code: 0
Y el fichero que nos canta es el /_layouts/1033/HtmlEditor.js

El error se nos produce al teclear en una ventana de editor de texto enriquecido de un webpart editor de contenido.

¿No os ha ocurrido un error parecido a esto? si trabajáis con portales en “en-US” os pasará.

Tras darnos un paseito por /layouts/1033 y mirar las fechas de los ficheros js comparándolos con los de, por ejemplo, /layouts/3082 nos damos de que hay ciertos ficheros que no están actualizados…

En este momento podemos hacer dos cosas, solucionarlo por la vía rápida o leer un poco sobre el tema.

Leyendo un poco sobre el tema nos enteraremos de que dependiendo de si instalas el sharepoint con el SP1 o si instalas el sharepoint y luego pasas el update estos ficheros pueden no estar actualizados y que hay que hacerlo a mano.

Y ahora lo solucionamos por la vía rápida: copiamos desde el directorio 3082 al 1033 todos estos ficheros nuevos:

  • FORM.JS
  • INIT.JS
  • CORE.JS
  • BFORM.JS
  • OWS.JS

Hacemos el IISRESET de rigor y a teclear.

Saludos.

3 comentarios:

jueves, 30 de abril de 2009

Agregar Tipo de resultado y/o Restricciones de propiedades

Uf ya se me había olvidado cómo se llamaba el blog :)

No, en realidad es que he estado liado y un poco falto de inspiración ¿Cuándo he andado yo sobrao de eso? estos últimos dos meses. ¡¡DOS MESES!!

Bueno, a lo que voy.

Modificar el webpart Cuadro de búsqueda avanzado da un poco de miedo, pero la verdad es que si nos acostumbramos a su interfaz podemos lograr cositas muy interesantes con muy poco esfuerzo.

Por ejemplo:

Tengo un ámbito creado (MiAmbito) que contiene solo los elementos de una lista y dentro de esa lista tengo un metadato que se llama TextoLista que está dado de alta en las Asignaciones de propiedades de metadatos. ¿Podría añadir yo a mi sitio de Buscador avanzado un Tipo de resultado llamado “Mi lista” y una Restricción de propiedad específica para mi metadato “TextoLista”?

Pues nada más fácil.

Primero editamos el webpart Cuadro de búsqueda avanzado y abrimos el texto que se esconde en Propiedades—> Propiedades:

image

En la ventana que se nos abre podremos ver muy mal por cierto, mejor que trabajar ahí es hacer un c&p al visual studio un xml que (entre otras cosas) define las propiedades que estarán disponibles para los tipos de resultado <PropertyDefs> y los diferentes tipos de resultado que se mostrarán en el webpart de búsqueda <ResultTypes>

Bien pues a trabajar. Añadiremos nuestra propiedad “TextoLista” dentro de PropertyDefs para poderla usar luego.

<PropertyDefs>
<PropertyDef Name="Path" DataType="text" DisplayName="dirección URL"/>
<PropertyDef Name="Size" DataType="integer" DisplayName="Tamaño"/>
<PropertyDef Name="Write" DataType="datetime" DisplayName="Fecha de la última modificación"/>
<PropertyDef Name="FileName" DataType="text" DisplayName="nombre"/>
<PropertyDef Name="Description" DataType="text" DisplayName="descripción"/>
<PropertyDef Name="Title" DataType="text" DisplayName="Título"/>
<PropertyDef Name="Author" DataType="text" DisplayName="autor"/>
<PropertyDef Name="DocSubject" DataType="text" DisplayName="tema"/>
<PropertyDef Name="DocKeywords" DataType="text" DisplayName="palabras clave"/>
<PropertyDef Name="DocComments" DataType="text" DisplayName="comentarios"/>
<PropertyDef Name="Manager" DataType="text" DisplayName="jefe"/>
<PropertyDef Name="Company" DataType="text" DisplayName="compañía"/>
<PropertyDef Name="Created" DataType="datetime" DisplayName="fecha de creación"/>
<PropertyDef Name="CreatedBy" DataType="text" DisplayName="creado por"/>
<PropertyDef Name="ModifiedBy" DataType="text" DisplayName="modificado por última vez por"/>
<PropertyDef Name="TipoResolucion" DataType="text" DisplayName="Tipo de resolución"/>
</PropertyDefs>

Y por último añadiremos un nuevo ResultType dentro de ResultTypes, así:

<ResultTypes>
<ResultType DisplayName="Todos los resultados" Name="default">
<Query/>
<PropertyRef Name="Author" />
<PropertyRef Name="Description" />
<PropertyRef Name="FileName" />
<PropertyRef Name="Size" />
<PropertyRef Name="Path" />
<PropertyRef Name="Created" />
<PropertyRef Name="Write" />
<PropertyRef Name="CreatedBy" />
<PropertyRef Name="ModifiedBy" />
</ResultType>
<ResultType DisplayName="Documentos" Name="documents">
<Query>IsDocument=1</Query>
<PropertyRef Name="Author" />
<PropertyRef Name="DocComments"/>
<PropertyRef Name="Description" />
<PropertyRef Name="DocKeywords"/>
<PropertyRef Name="FileName" />
<PropertyRef Name="Size" />
<PropertyRef Name="DocSubject"/>
<PropertyRef Name="Path" />
<PropertyRef Name="Created" />
<PropertyRef Name="Write" />
<PropertyRef Name="CreatedBy" />
<PropertyRef Name="ModifiedBy" />
<PropertyRef Name="Title"/>
<PropertyRef Name="Manager" />
<PropertyRef Name="Company"/>
</ResultType>
<ResultType DisplayName="Documentos de Word" Name="worddocuments">
<Query>FileExtension='doc' Or FileExtension='docx' Or FileExtension='dot'</Query>
<PropertyRef Name="Author" />
<PropertyRef Name="DocComments"/>
<PropertyRef Name="Description" />
<PropertyRef Name="DocKeywords"/>
<PropertyRef Name="FileName" />
<PropertyRef Name="Size" />
<PropertyRef Name="DocSubject"/>
<PropertyRef Name="Path" />
<PropertyRef Name="Created" />
<PropertyRef Name="Write" />
<PropertyRef Name="CreatedBy" />
<PropertyRef Name="ModifiedBy" />
<PropertyRef Name="Title"/>
<PropertyRef Name="Manager" />
<PropertyRef Name="Company"/>
</ResultType>
<ResultType DisplayName="Documentos de Excel" Name="exceldocuments">
<Query>FileExtension='xls' Or FileExtension='xlsx' Or FileExtension='xlt'</Query>
<PropertyRef Name="Author" />
<PropertyRef Name="DocComments"/>
<PropertyRef Name="Description" />
<PropertyRef Name="DocKeywords"/>
<PropertyRef Name="FileName" />
<PropertyRef Name="Size" />
<PropertyRef Name="DocSubject"/>
<PropertyRef Name="Path" />
<PropertyRef Name="Created" />
<PropertyRef Name="Write" />
<PropertyRef Name="CreatedBy" />
<PropertyRef Name="ModifiedBy" />
<PropertyRef Name="Title"/>
<PropertyRef Name="Manager" />
<PropertyRef Name="Company"/>
</ResultType>
<ResultType DisplayName="Presentaciones" Name="presentations">
<Query>FileExtension='ppt'</Query>
<PropertyRef Name="Author" />
<PropertyRef Name="DocComments"/>
<PropertyRef Name="Description" />
<PropertyRef Name="DocKeywords"/>
<PropertyRef Name="FileName" />
<PropertyRef Name="Size" />
<PropertyRef Name="DocSubject"/>
<PropertyRef Name="Path" />
<PropertyRef Name="Created" />
<PropertyRef Name="Write" />
<PropertyRef Name="CreatedBy" />
<PropertyRef Name="ModifiedBy" />
<PropertyRef Name="Title"/>
<PropertyRef Name="Manager" />
<PropertyRef Name="Company"/>
</ResultType>
<ResultType DisplayName="Mi lista" Name="MiLista">
<Query>"scope"='MiAmbito'</Query>
<PropertyRef Name="DocSubject"/>
<PropertyRef Name="Path" />
<PropertyRef Name="Created" />
<PropertyRef Name="CreatedBy" />
<PropertyRef Name="ModifiedBy" />
<PropertyRef Name="Title"/>
<PropertyRef Name="TextoLista"/>
</ResultType>
</ResultTypes>

Aceptamos, aceptamos publicamos y probamos.

A mi me ha funcionado ¿y a ti?

2 comentarios:

jueves, 26 de febrero de 2009

Asignar palabras como ruido (noise) en las búsquedas

Hay ocasiones en que no queremos permitir que se busque por una palabra determinada podemos decirle a SharePoint que esa palabra es ruido de forma que se la omita en las consultas que se realicen al motor y no devuelva nada.

Por ejemplo, no queremos que cuando alguien busque por el nombre de nuestro dominio "DOMAIN" se le muestren todas las páginas, ¿Qué hacer?

Nos vamos a C:\Archivos de programa\Microsoft Office Servers\12.0\Data\Office Server\Applications\<GUID>\Config y allí editamos el fichero noiseesn.txt añadimos al final la palabra DOMAIN (por cierto no es case sensitive) y guardamos.

Para que tenga efecto nuestra modificación hacemos un net stop osearch y un net start osearch y ya podemos probar. Con un poco de suerte obtendremos este resultado:

image

Prueba superada, y esto está bien, pero los diccionarios (thesaurus) son bastante más potentes, tengo que hacer otro post al respecto.

Editar el noiseneu.txt no parece tener ningún efecto se ve que hace realmente honor a su nombre y es neutral, una pena en los portales multiidioma...

No hay comentarios:

miércoles, 18 de febrero de 2009

xhtml 1.0 strict en SharePoint es posible

Tras pasar las validaciones WAI-AA y XHTML con el Total Validator y con el TAW me dispuse a pasarlas también con el validator del W3C, pero cuál sería mi sorpresa al darme cuenta de que precisamente con éste último no valida...

Tras decirle que me mostrase el código fuente me fijé en que el renderizado que estaba mandando SharePoint al validator.w3.org no era el mismo que el que mandaba a Explorer, Firefox, Opera, Safari etc. (Faltaba un "div"; debajo del "form" y, al no estar contenidos, todos los "inputs" se entendían como erróneos). Esto me hizo pensar en que debía añadir un "browser" específico para el "analizador".



Y tras un ratito charlando con mi amigo google encontré un par de browsers que, tras mezclarlos entre si quedaron:


<browser id="w3cValidator" parentID="default">
<identification>
<userAgent match="^W3C_Validator" />
</identification>
<capture>
<userAgent match="^W3C_Validator/(?'version'(?'major'\d+)(?'minor'\.\d+)\w*).*" />
</capture>
<capabilities>
<capability name="browser" value="w3cValidator" />
<capability name="majorversion" value="${major}" />
<capability name="minorversion" value="${minor}" />
<capability name="version" value="${version}" />
<capability name="ecmaScriptVersion" value="1.2" />
<capability name="javascript" value="true" />
<capability name="supportsCss" value="true" />
<capability name="tables" value="true" />
<capability name="xml" value="true" />
<capability name="w3cdomversion" value="1.0" />
<capability name="tagWriter" value="System.Web.UI.HtmlTextWriter" />
</capabilities>
</browser>


No fue suficiente, pero ya lo tuve fácil. Faltaba añadir en el web.config, debajo del <system.web>

<xhtmlConformance mode="Strict" />

Para finalizar, un leve toque de iisreset y listo.


A disfrutar del Congratulations!


Todo lo que podais porque entre unas cosas y otras dura poco

No hay comentarios:

jueves, 12 de febrero de 2009

Auto-Update del SQLServer Express ¡CUIDADO!

Sinceramente espero que esto sólo me haya pasado a mí en todo el mundo, pero me da en la nariz que el mundo es muy grande.

La última actualización (SP3 creo) del SQL Server Express que tengo en un servidor de desarrollo, albergando un SharePoint cómo no..., me ha borrado la instancia OFFICESERVERS con todas sus bases de datos y a cambio me ha creado una prístina instancia nueva llamada SQLEXPRESS.

Si instalaste SharePoint con el método "to p'alante" desconfía de las actualizaciones del SQL Server Express o te puedes encontrar con esto:

image

Luego dicen que el puenting quema adrenalina... Hombre de Dios, ¡desarrolla un poco para SharePoint y sabrás lo que es el miedo!

No hay comentarios:

miércoles, 28 de enero de 2009

Configurando el IFilter de Adobe para PDF en x64

Vaya, pues resulta que lo sacaron en diciembre del 2008 y ni me había enterado qué raro cuando yo estoy pulsando ctrl+f5 cada 10 segundos en la web de adobe por si acaso.

Ya había perdido la esperanza después de los años que han tardado, pero al final lo han sacado haciendo así realidad la peor pesadilla de los de Foxit que por muy bien que vaya no es gratis.

Sin más dilación paso a presentarles...

El tan esperado Adobe PDF iFilter 9 para plataformas de 64-bits

Voy a instalarlo a ver qué tal y os cuento.

... me lo bajo ... lo subo ... descomprimo ... doble click ... Math.Pow(Next,n) ... Close

Por otro lado me voy a la administración de búsquedas del SSP, Tipos de archivo y añado el PDF.

Paso de la henna de ponerle el iconito :P

Como siempre hago un Restablecer todo el contenido rastreado, por qué no, un un toquecito de iisreset y luego los consabidos net stop osearch, net stop spsearch, net start spsearch y net start osearch para luego hacer un rastreo completo y rezar mientras se completa.

Hago una búsqueda para probar y... nada :(

Me leo las instrucciones del ifilter y me dice que tengo que agregar al path el directorio bin, así que Panel de control, Sistema, Opciones avanzadas, Variables de entorno y a la Variable de sistema Path le añado al final ;C:\Archivos de programa\Adobe\Adobe PDF iFilter 9 for 64-bit platforms\bin

Para intentar ahorrarme el reinicio añado el path a mano, y vuelvo a crawlear, pero nada :(

La desesperación se apodera de mi y me decido a leerme las instrucciones, pero cual no sería mi sorpresa al darme cuenta de que el fichero de instrucciones que hay alojado en la página de Adobe conduce a un PDF que no se puede leer... bueno pues a buscar otro poco.

Despues de un ratito dando vueltas encontré en el blog de Alexander un señor muy respetable a juzgar por la foto, un link al dichoso manual colgando de un servidor que no es el de Adobe si no queréis ir os ahorro el viaje al blog Configuring PDF iFilter for MS Sharepoint 2007.pdf.

Vale, antes de nada hago una copia del registro que nunca está de más y sigo las instrucciones... y reestablezco y rastreo y rezo y nada :'(

Y ya claro, me termino por enfadar y como ya había hecho una copia del registro pues en un arrebato berserker me fui a la parte más alta del arbol del registro y desde allí me dediqué a buscar y reemplazar todas las apariciones de la cadena {4C904448-74A9-11D0-AF6E-00C04FD8DC02} por la que nos aconsejan en las instrucciones {E8978DA6-047F-4E3D-9C78-CDBE46041603}... y reestablezco y rastreo y rezo y ...

¡¡CONSEGUIDO!!

Pero el resultado de la búsqueda queda muy feo sin el iconito de PDF... venga se lo añado ¿En los demás frontends también? si, en todos.

Por cierto, para no tener problemas con los de Adobe más nos vale usar su iconito corporativo, lo podemos bajar de aquí.

Enhorabuena a los de Adobe que han sabido responder ágilmente a las súplicas de toda la comunidad, es una suerte que todavía no se haya inventado ninguna forma de escribir en el registro con un instalador y nos brinden la oportunidad de hacerlo nosotros manualmente. Enhorabuena también por el esmero que han puesto para regalarnos a los que no somos de los EEUU este acertijo extra ¿Os funciona sin hacer lo de el reemplazo en el registro?

Y mis condolencias a los de foxit.

Soy el peor... pa lo que me ha costao, encima con exigencias...

<edit>NOO00o, al día siguiente probé y no buscaba :( finalmente deshice el cambio de los guids y reinstalé el ifilter y sorprendentemente funcionó, esto me pasa por postear sin dejar pasar dos meses de garantía</edit>

No hay comentarios:

jueves, 8 de enero de 2009

Problemas rastreando listas grandes en Sharepoint

Las listas de SharePoint pueden contener, como todo el mundo sabe, millones de elementos sin despeinarse aro,aro, y a mi me tocó la lotería pero vengo a trabajar porque no se me ocurre donde gastarme el dinero.

Bien, pues pese a que hayas hecho una columna de índice y además hayas hecho una vista de tus elementos en la que salgan poquitos (no te canses SharePoint, tu no hagas esfuerzos, tenemos buenos comerciales), es posible que cuando hagas un rastreo completo de tu sitio te de un error y te diga en el Registro de Rastreo:

"Puede que el elemento sea demasiado grande o que esté dañado. Compruebe también si tiene la versión más reciente del iFiler."

Si, si y yo por si acaso busqué el iFiler, pero claro es que el que estaba haciendo el motor también metió la zarpita a la hora de escribir el mensaje de error y escribió mal iFilter... ¡Ay!

¿Pero qué es este error? 2300 elementos no pueden tumbar a un motor de búsqueda... En el entorno x86 daba error del webservice y lo pasamos a x64 y ni aún así...

¡¿QUÉ HAGO, QUÉ HAGO?!

Bueno pues haces un rastreo incremental y ya si funciona. Nos quejamos por vicio.

Ahora solo hay que tener en cuenta que si tienes que programar un rastreo incremental después del completo, porque parece que el incremental es más completo que el completo cuando se trata de rastrear y al pasar el completo te borra los resultados que el incremental te encuentra claro, muy coherente.

Bueno, pues mosqueo para ser el primer post del año, menos mal que por lo menos, al final funcionó.

No hay comentarios:

jueves, 4 de diciembre de 2008

Directiva de administración de la información: Caducidad

Hay veces que, dada su naturaleza, los elementos de una biblioteca son candidatos a ser desechados cuando tienen una antigüedad determinada.

SharePoint contempla añadir caducidad a los elementos de listas o bibliotecas a partir de los valores de un metadato tipo fecha del mismo y como es muy fácil hacerlo os contaré cómo.

Voy a elegir una biblioteca de documentos porque SharePoint te permite tomar como referencia para la caducidad la fecha de creación del documento se ve que "alguien" consideró que no tenía sentido tomar como referencia la fecha de creación de un elemento de lista. En el caso de usar un elemento de lista tendremos que usar un campo fecha que creemos nosotros, por ejemplo un campo Fecha de Creación que tome por defecto la fecha del día.

Bueno, a lo que vamos.

Nos dirigimos a la biblioteca de documentos en cuestión y nos vamos a "Configuración" y a "Configuración de Biblioteca de documentos". Una vez allí pulsamos en "Configuración de la directiva de administración de la información" un nombre cortito para que sea fácil de recordar.

Configuración de la directiva de administración de la información

Allí pulsamos "Definir una directiva" y "Aceptar" y en el menú que nos aparece seleccionamos "Habilitar Caducidad":

Habilitar Caducidad

Una vez allí seleccionamos "Período de tiempo basado en las propiedades del elemento" y el campo (Por ejemplo "Creado" o "Modificado"), el tiempo de caducidad y también seleccionamos "Realizar esta acción" y luego elegimos una de entre la lista de acciones (Por ejemplo "Eliminar" o "Eliminar").

Luego pulsamos "Aceptar" y listo.

¿No se han dado cuenta los muchachos de Microsoft de que la longitud del nombre "directivas de administración de la información" es inadecuada para un título? Si me hubieran encargado a mi la tarea de nombrarlo hubiese elegido algo como "Directivas de Administración de la Información de Elementos que Pueden Ser o No Documentos y Que Se Encuentran Contenidos en Bibliotecas o Listas de SharePoint Según su Idiosincrasia".

No hay comentarios:

jueves, 27 de noviembre de 2008

NLB & Sharepoint: Best Practices

Parece simple pero no he encontrado en internet a nadie que se moje en el tema de Balanceo de carga de red y SharePoint.


Bueno, esto hace pensar que es un tema escabroso y que habría que estar loco para meterse. Estar loco o tener muy poco que perder y en mi caso ambas son ciertas.


En 0,2 para no perder tiempo en explicar una cosa que no controlo quiero decir que aún controlo menos esto que las otras cosas que explico.



  • Montaremos NLB en todos los Web Front End

  • El modo de operación del cluster deberá ser Multicast (Para ahorrarnos hardware, básicamente)

  • Configuraremos el NLB con afinidad (obviamente por ser servidor de SharePoint)


    • Si va a servir a una intranet la configuraremos en tipo "Single"

    • Si va a servir a internet la configuraremos en tipo "Class C"

Y eso es todo lo que he sacado en claro.


He colgado el post antes de que se me olviden las configuraciones, pero todavía no está probado. Si veo que todo falla lo corregiré y si veo que todo explota lo borraré y pasaré vergüenza durante una franja temporal comprendida entre los 2 y los 5 minutos.


Sí, lo de las mejores prácticas era un farol, pero no da confianza poner en el título "NLB & Sharepoint: Best Practices (in case they work)"

No hay comentarios:

miércoles, 26 de noviembre de 2008

Los resultados más probables son tu Best Bet

Los best bets o como se tradujeron al castellano “Resultados más probables” son muy útiles, por lo menos a mi me gustan.

¿No os ha pasado, por ejemplo, que en las estadísticas de búsqueda de vuestro sitio veis consultas como “Teléfono”, “Dirección”, “Contacto”?, casi seguro, si vuestro sitio no trata de telefonía, vectores o pegamento que vuestros usuarios se encuentran solos en sus casas y quieren hablar con vosotros.

O por ejemplo, que tengamos una página sobre la etiqueta en una fiesta de bonobos de la cual estamos especialmente orgullosos y no nos gustaría que ningún usuario que buscase temas relacionados con “Monos” en nuestro portal se la perdiese.

Quizás nos convendría poder encaminar a los usuarios a una página determinada cuando se introdujesen ciertos términos en la búsqueda para que no se mareasen entre tantos resultados…

Pues por una vez, y sin que sirva de precedente, es facilísimo.

En la configuración del sitio clickamos en Palabras clave de búsqueda:

Agregar resultado más probable

Una vez allí pulsaremos sobre Agregar palabra clave y rellenaremos el formulario. Debemos pulsar sobre el link Agregar resultado más probable en donde se nos pedirá que introduzcamos los datos del link:

Agregar palabra clave

Después de esto ya puedes pulsar aceptar unas cuantas veces e ir derechito al sitio de búsqueda para ver cómo te ha quedado.

El mío quedó así:

Resultados de búsqueda con Best Bets de erChan

Mira qué bien y que pronto.

Bueno y con esto me despido hasta la próxima, que espero que no se demore tanto, que ya había quien pensó que no iba a seguir con el blog….

Saludos cordiales, Kind Regards, Zaijian.

No hay comentarios:

jueves, 23 de octubre de 2008

Creación de workflows con SharePoint Designer

¿Quién dice que en la página de Office Online no se publica nada interesante?.


Por fin hay un curso donde se explica como está mandado la forma de hacer flujos complejos con el Microsoft SharePoint Designer. ¡Es sorprendente! Lo que siempre quise saber y nunca me atreví a preguntar y un par de cosas que no se me habían ocurrido.


Os copio una foto del cuadro de mando para que vayáis abriendo boca:


Dashboard de Design a document review workflow solution



En la página se explica cómo realizar un flujo de revisión de documentos con sus formularios, sus mensajes de correo personalizados a los participantes para que estén todos informaditos, asignaciones de tareas a los usuarios implicados, un flujo secundario que volverá a avisar a los revisores si superan una fecha tope y no han mandado su aprobación (o bien asigna la tarea a un participante de seguridad), si a la mayoría de los revisores les parece bien asigna una tarea al revisor final, mientras que otro workflow va anotando todos los cambios en un cuadro de mando (dashboard) la mar de vistoso. Y para terminar, encima nos dice cómo guardar el sitio como plantilla para poder volver a usarlo cuando nos parezca, lo que son 14 pasos, vamos.


¡GENIAL!


Los vídeos son en inglés, pero se entienden perfectamente y no son en plan comercial como nos tienen acostumbrados, nada de eso, van al grano.


Diseña una solución de flujo de revisión de documentos con Designer


Gracias Stephen Howard, quienquiera que seas...

No hay comentarios:

miércoles, 22 de octubre de 2008

Edición de ámbitos en la búsqueda avanzada de MOSS para dummies

Como hoy no tengo muchas ganas de postear vamos con algo vistoso y facilón (si sabes cómo hacerlo).

Empezaré con el sitio de Búsqueda Avanzada por defecto. Lo primero que tenemos que hacer es quitar lo de las búsquedas por idiomas, ¿quién decidió que los tres idiomas que deberían de aparecer por defecto fueran Español, Alemán y Francés? pa haberlo matao.

Como es natural, lo primero que tenemos que hacer es quitar eso de los idiomas a la mayor brevedad posible. Editamos la página y nos vamos a las propiedades del webpart de Cuadro de búsqueda avanzada. Una vez allí desplegamos Ámbitos añadimos Mostrar el selector de ámbito y quitamos el tag de Mostrar el selector de idiomas, nos debe de quedar así:

Configuramos el Cuadro de búsqueda avanzada

Por si no lo has adivinado, la flecha roja significa PELIGRO, y es que deshabilitamos el tag de Mostrar el selector de tipo de resultado el webpart se rompe y solo queda eliminarlo y añadir otro igual. Bueno a lo que vamos, si sólo tocamos donde marcan las flechitas azules nos quedará el webpart parecido a este:

Cuadro de búsqueda avanzada

Si no sale a la primera habrá que refrescar la página, este webpart es un poco tontito.

Una vez que tenemos el Cuadro de búsqueda avanzada de esta forma nos vamos a definir un ámbito nuevo. Para ello nos vamos a la Administración central, a nuestro Sharepoint Services Provider favorito, que casi siempre es SharedServices1 en los servidores de pre y desde allí a Configuración de búsquedas.

Una vez aquí haremos click en Ver ámbitos:

Ver ámbitos

Allí haremos click en Nuevo ámbito, ponemos un nombre a nuestro nuevo ámbito y pulsamos aceptar. Yo para ser original lo he llamado Ámbito de Chan. Tras ésto voleremos a la ventana Ver ámbitos y ya podremos ver nuestra nueva creación. Ahora pulsamos Agregar reglas y seleccionamos el Tipo de regla de ámbito y su comportamiento:

Agregar regla de ámbito

Es importante que nos fijemos en que podemos hacer ámbitos por Dirección web, por propiedades, por Origen de contenido o seleccionando directamente todo a saco y luego con el comportamiento y sumando varias reglas a un ámbito podemos hacer selecciones bastante potentes. Yo haré una regla simple de Consulta de propiedad y requerir que el Autor sea Chan:

Configuramos regla de ámbito

Una vez que tenemos nuestro ámbito (no es mala idea compilarlo para que contenga datos) nos iremos al sitio raíz de nuestra colección de sitios y entraremos en Acciones del sitio, Modificar toda la configuración del sitio y desde allí nos vamos a Ambitos de búsqueda:

Ambitos de búsqueda en la configuración del sitio

Allí desplegaremos el Grupo de presentación: Búsqueda avanzada

Grupo de presentación

Y hacemos click en el tag de nuestro nuevo ámbito, y por último Aceptar:

Configurar grupo de presentación

Y con ésto hemos acabado. Ahora si vamos a nuestra página de búsquedas avanzadas, ¡Oh Sorpresa!

Busquedas avanzadas personalizadas

Algunos de los informadores de nuestro departamento de inteligencia de SharePoint han detectado que si el ámbito está vacío (contiene cero elementos) no se muestra, ya que MOSS es tan listo que no se molesta en hacer búsquedas en ámbitos vacíos por lo que no los muestra para total desesperación de las personas que, pese a haberlo configurado perfectamente, no tuvieron la preacución de compilar el ámbito y tras tarle mil vueltas a lo mismo terminaron por suicidarse.

Menos mal que iba a ser un post cortito...

9 comentarios:

jueves, 16 de octubre de 2008

Busquedas en Sharepoint con SQL (II)

Hoy mismo lo voy a continuar, qué ilusión que te lean desde Bulgaria, dentro de nada tendré un ego tan grande como el de Jay de TC, bueno, a lo que vamos...
Como iba diciendo ayer en el post
Busquedas en Sharepoint con SQL (I) es muy fácil hacer consultas al motor de búsquedas de MOSS, lo malo es saber qué preguntarle.
Es interesante a la hora de hacer un buscador custom poder buscar por los campos que en cada caso nos interesen, y no con el freetext.
Out of the box se pueden hacer consultas del tipo:
"SELECT Title FROM SCOPE() WHERE CONTAINS(Title,'Chan')"
De esta forma nos devolverá una tabla con todos los elementos de lista o biblioteca cuyo Title sea 'Chan'. Y quien dice title dice una de las ciento y pico managed properties (Asignaciones de propiedades de metadatos) que hay por defecto en MOSS, solo con esto ya podemos ofrecer alguna potencia, por ejemplo:
"SELECT Title FROM SCOPE() WHERE CONTAINS(Title,'Chan') AND Size > 162 ORDER BY Created"
Pero aún así no es suficiente, por eso mismo SharePoint nos permite crear nuestras propias managed properties para poder buscar en cualquiera de las columnas que hayamos creado en nuestro portal.


luego


Desde allí hacemos click en Nueva propiedad administrada y configuramos nuestra columna para buscar:

Por último, para rellenar de datos nuestra propiedad administrada necesitaremos hacer un rastreo completo (Full Crawl).
He creado una columna llamada factura y le he asignado la propiedad rastrada (crawled property) Factura(Texto).
Las crawled properties salen después de crear una columna en una lista cualquiera del portal y hacer un rastreo completo, o sea, que puedes buscar por el parámetro que te de la gana.

Después de tener todos los campos que necesitamos ya sí que podemos hacer búsquedas potentes, por ejemplo:
"SELECT Title, Factura, FechaFactura FROM SCOPE() WHERE CONTAINS(Factura,'VRG535') ORDER BY FechaFactura"
O por ejemplo si necesitamos más de una palabra en el CONTAINS:
"SELECT NombreReunion, Asistentes FROM SCOPE() WHERE CONTAINS(Asistentes,'Chan AND Jay') ORDER BY FechaReunion"
O bien:
"SELECT NombreReunion, Asistentes FROM SCOPE() WHERE CONTAINS(Asistentes,'Chan AND Jay') AND CONTAINS(Supervisor,'Eva') ORDER BY FechaReunion"
Si quieres buscar en un scope (ámbito) específico puedes hacer:
"SELECT NombreReunion, Asistentes FROM SCOPE() WHERE "SCOPE"='MiScope' AND CONTAINS(Asistentes,'Chan') AND NOT CONTAINS(Supervisor,'Eva OR Jay') ORDER BY FechaReunion"
Y solo con ésto ya me siento capaz de bastantes cosas...
¡¡YOOOOOO TENGO EL PODER!!

También funciona el Like e incluso algunos wildcards o comodines, algún día de éstos si llego a enterarme de cómo funcionan lo postearé, mientras tanto prueba a discreción y disfruta por fin de unas búsquedas relativamente potentes.

No hay comentarios:

lunes, 13 de octubre de 2008

¿Es mejor usar URL de producción en el servidor de preproducción?

Pues yo creo que si.

¿Cuántas veces no pasa que los links funcionan perfectamente en tu servidor de pre, pero luego al pasarlo a pro se te rompe alguno (por no decir la mitad)?

Hacer esto es bastante fácil y, normalmente, te quita un montón de quebraderos de cabeza.

Simplemente hay que ir al fichero hosts, que está en C:\windows\system32\drivers\etc\hosts , es así, sin extensión ni nada, abrirlo con el mejor editor, el block de notas y añadir al final la IP local junto con la URL de nuestro portal de producción.

127.0.0.1       localhost
127.0.0.1 http://www.spenta.es
127.0.0.1 www.spenta.es #Asi no hay duda

Tras guardar los cambios, las peticiones que se hagan a http://www.spenta.es/ desde el servidor se enrutarán a 127.0.0.1. Si no te fías haz un ping a http://www.spenta.es/.

Una vez hecho esto deberemos de añadir la ruta de acceso alternativo a nuestro servidor, de esta forma:


Una vez en la lista de Asignaciones de acceso alternativas pulsamos y luego cambiamos a la aplicación web que nos corresponda para el sitio del desarrollo aquí .


Tras esto añadimos el nuevo mapeo de URL a la Predeterminada, por ejemplo:

Pulsamos Guardar y listo, ya podemos llamar a la URL de producción desde el portal de pre.

Si queremos ser muy puristas podemos cambiar el hosts antes de instalar nada en el portal y luego hacer todas las instalaciones de MOSS y SQL llamando a la URL de producción. De esta forma el pobre portal de PRE nunca sabrá que no es el verdadero protagonista.

Hay veces que da problemas porque el navegador no se cosca bien y no te reconoce la URL, si te pasa ésto prueba a reparar la conexión de red, a borrar las cookies, reiniciar, volver a configurar el alternate access mapping, hacer iis reset, esperarte un ratitlo... no sé, échale imaginación.



Aunque haya elegido la url de la página de spenta yo no he sido el que la ha hecho, que conste.

No hay comentarios:

sábado, 4 de octubre de 2008

Cross-Site Lookup Columns out-of-the-box (más o menos)

Cuántas veces he necesitado una columna de búsqueda que lea desde una lista que pertenece a otro sitio ... y a veces lo sigo necesitando.

Qué fácil sería todo si se le pudiese decir a las columnas que buscasen en cualquier sitio del portal, pero no se puede. No pido tanto, no, me conformaría con menos, ¿no sería posible hacer algún apaño? Bueno, algo sí que podemos hacer.

Quizás no podamos hacer lookup desde y hasta cualquier parte del portal, pero si que podemos hacer lookup desde sitios hijos hasta sitios padres. El truco es:

1.- Nos vamos al sitio Padre y allí creamos una columna de sitio. No vale cualquiera, tiene que ser una columna de sitio tipo lookup. La parte mala es que SharePoint solo te permitirá elegir entre columnas del sitio en el que estás creando la columna de sitio.

columnas ... crear ... columnaBusqueda

2.- Cuando hayamos creado la columna de búsqueda en el sitio raíz nos será posible heredarla desde cualquier lista de cualquier sitio hijo.

CrearColumna ...AgregarColumna

3.- Y una vez integrado en nuestra lista el resultado será como este:

ResultadoEjemplo

4.- Y ya que hemos conseguido esto, ¿no sería bonito tener una lista donde viésemos nuestros documentos relacionados con anuncios? Pues sería tan fácil como crear una vista y agrupar por nuestra "Cross-Children-Site Lookup Column" (hay que ver los nombres que me invento), y quedaría así:

listaAgrupada

Qué bien cuando las cosas funcionan bien, y sin programar, ¿Quién da más?

1 comentario: