jueves, 8 de marzo de 2012

Problema de redirección del Report Server en TFS 2010

Hace unos dias tuve que mover las bases de datos del TFS 2010 y del SharePoint, esto fue complicado pero al final lo logre. Sin embargo me habia quedado un pequeño problema, y es que al ingresar al sitio de SharePoint de algun proyecto, aunque funcionaba bien me seguia dirigiendo los reportes hacia el servidor antiguo, a pesar de que en la consola de administración del TFS estaba bien configurado.

Pues bien, buscando en Internet encontre que el problema fue porque SharePoint maneja un cache del redireccionamiento, por lo tanto continuaba con la dirección antigua, asi que encontré un post bastante que me ayudo a solucionar el problema, y es este Post

En el basicamente despues de configurar el TFS para que los reportes y el Analysis Service apunte a la dirección correcta, hay que ingresar a un URL como el siguiente para que se actualice el cache de redirección que tiene SharePoint

http://[sharepointWebSite]/[DefaultTFSCollection]//_layouts/TfsRedirect.aspx?tf:Type=ReportList&tf:ClearCache=1&tf:Test=1



Donde [sharepointWebSite] es la dirección que se usa para acceder al sitio, [DefaultTFSCollectionn] es donde se ubica el collection del TFS y es el nombre del proyecto. Con esto se actualiza el cache y el sitio redirecciona correctamente hacia los reportes en el nuevo servidor.

Espero que esto sirva

jueves, 29 de diciembre de 2011

UpdateConflict tratando de actualizar un registro en Dynamics Ax 2009

Errores extraños que ocurren, cuando se intenta hacer la actualización de algun registro en Ax aparece el siguiente mensaje: 

Cannot edit a record in Projects (ProjTable).
An update conflict occurred due to another user process deleting the record or changing one or more fields in the record

En este caso es de la ProjTable pero puede ser cualquier tabla. El problema se presentó corriendo una instrucción update_recordset.

La solución, fue hacer un job, reemplazando el update_recordset por un while select forupdate ....
Luego, dentro del ciclo del while antes de iniciar a modificar los registros se puso la siguiente instrucción:

projTable.reread();

Quedando algo asi:

ttsbegin;
while select forupdate projTable...
...
{
    projTable.reread();
    .....
    projTable.update();
}
ttscommit;

Con esto se solucionó el problema, tambien se ejecutó luego el update_recordset y ya no tuvo problemas.

Espero que le sirva a alguien si se le presenta.


jueves, 13 de enero de 2011

Base de datos en modo 'Suspect'

Cuando una base de datos esta en modo 'Suspect', queda en modo no funcional, esto tiene muchas posibles causas, lo importante es poder volver a tener la base de datos funcional para continuar trabajando.

Para hacer se ejecutan los siguientes comandos desde el SQL Management Studio:


EXEC sp_resetstatus 'yourDBname';
ALTER DATABASE yourDBname SET EMERGENCY
DBCC checkdb('yourDBname')
ALTER DATABASE yourDBname SET SINGLE_USER WITH ROLLBACK IMMEDIATE
DBCC checkdb(''yourDBname', REPAIR_ALLOW_DATA_LOSS)
ALTER DATABASE yourDBname SET MULTI_USER


Con esto, se logra volver a tener la base de datos funcional.

martes, 2 de marzo de 2010

Enviar alertas por correo en Axapta 4.0

Es bueno usar las alertas de Axapta para enviar notificaciones por correo electrónico, cuando se requiera saber de algun evento o por vencimiento de fechas. Para hacer esto, en Axapta se pueden cada usuario puede crear sus propias reglas para las alertas, pero tambien hay que realizar cierta configuración en Axapta para poder enviar los mensajes.

Pra configurar las alertas por correo electrónico, se debe hacer lo siguiente.
  1. En Axapta ir a Base->Configurar->Plantillas de Correo Electrónio. Alli se debe crear un Id de correo electrónico con la dirección del remitente.
  2. Ir a Base->Configurar->Avisos->Parámetros de aviso, en Ventana de procesamiento por lotes, poner un valor de días de antiguedad de las notificaciones que se  procesarán, puede usar un valor de 10 o el que desee. En Id de correo electrónico, debe selección el Id que se ingresó en el punto 1.
  3. Ir a Administración->Configurar->Parámetros del correo electrónico. Alli debe configurar el servidor de correo, el nombre del equip local donde se encuentra instalado el AOS, el puerto SMTP, el nombre de usuario de la cuenta de correo (en forma dominio\usuario), la contraseña de la cuenta que enviará los correos.
Una vez realizado esto, queda configurado el correo y las alertas para ser enviadas a través de Correo Electrónico, falta configurar que alertas desea cada usuario, y procesarlas para que puedan ser enviadas. Para esto, se hace lo siguiente.

  1. Vaya a cualquier formulario, y de click derecho en alguna columna, en el menú emergente seleccionar Crear Regla de Alertas...
  2. Alli configure la alerta segun el evento deseado, y en la parte que dice Avisarme también mediante, chequear la opción que dice Enviar correo electrónico.
Ya ahora se procede a realizar el evento que se configuró para que se pueda generar la alerta.
Cuando se haya hecho esto, falta hacer 2 procesos, uno para que se genere la alerta, y otro para que se envíe el correo electrónico. Para esto se debe hacer lo siguiente.
  1. Ir a Base->Periódico->Avisos->Cambio Basado en Avisos, ejecutar y procesar para que se generen las alertas (Se puede configurar para que se procesen en Batch). Si tiene alertas por vencimiento, ejecute tambien Avisos de Fecha de Vencimiento.
  2. Ir a Administración->Periódico->Procesamiento de Correo Electrónico, alli puede mirar en Estado de envío de correo electrónico, los correos pendientes por enviar, si no se encuentra el que se acabo de generar entonces hay un problema y se debe revisar, en caso contrario se debe ejecutar Lote, para que se envien los correos.
Cabe anotar que los procesos en lote se pueden dejar para que se procesen en batch y se envien las alertas.

Esto es todo.

lunes, 26 de octubre de 2009

Error tratando de adicionar referencia a Web Service para Smart Devices en VS 2008

Si se está desarrollando una aplicación para un Smart Device, y se trata de adicionar o actualizar una referencia a un Web Service, aparece el siguiente mensaje de error:

The custom tool 'MSDiscoCodeGenerator' failed. Could not retrieve the current project.

Para resolver este caso, se debe ir a Inicio -> Programas-> Microsoft Visual Studio 2008 -> Visual Studio Tools -> Visual Studio 2008 Command Prompt

Desde la línea de comandos, ejecutar el siguiente comando:

  • devenv /resetskippkgs
Con esto se inicia una nueva instancia del Visual Studio 2008, y la actualización o adición de la referencia Web funciona correctamente.

lunes, 5 de octubre de 2009

Error viendo reportes del TFS. Query execution failed for data set 'dsLastProcessedTime'

Cuando se hace una actualización a SQL Server 2008, en el servidor SQL que usa el Team Foundation Server, posiblemente los reportes dejen de funcionar, y salga el siguiente mensaje:

Query execution failed for data set 'dsLastProcessedTime'.

Para resolver este problema hay que realizar lo siguiente:



  1. Ingresar a la ruta http://server/Reports
  2. Seleccionar el Data Source TfsOlapReportsDS
  3. Habilitar la casilla Enable This Data Source
  4. en Data Source Type, Seleccionar Microsoft SQL Server Analysis Services
  5. En Connection String, ingresar 'Data source=[servername]; initial catalog=TfsWarehouse' (sin las comillas)
  6. Seleccionar Credentials stored securely in the report server, e ingresar el user name [dominio\usuario] y la clave del usuario del dominio que tenga acceso al servidor de analysis Services.
  7. Marcar las casillas 'Use as Windows Credentials ...' y 'Impersonate the authenticated user...' y dar click en el botón Apply.

Despues de esto hay que hacer lo mismo pero para el Data Source TfsReportDS, con la siguiente excepción

  1. En el Data Source Type, seleccionar Microsoft SQL Server.
  2. En Connection String escribir 'Data Source=[servername]; initial catalog=TfsWarehouse'.

De resto, usar la misma configuración del TfsOlapReportDS.

Con esto los reportes se volveran a ver desde el sitio del proyecto de TFS.

sábado, 25 de julio de 2009

Error tratando de abrir una base de datos de SQL CE en Visual Studio 2008

Si se está trabajando un Visual Studio 2008, y creando una aplicación para Windows Mobile que use una base de datos de SQL CE, cuando se intenda crear una nueva base de datos o tablas, o se intenta ver las tablas de una DB existen, y aparece el siguiente error:

"An error ocurred while retrieving the information from the database"

La solución es la siguiente:

1. Instalar el SSCEVSTools-enu.msi que se encuentra en la carpeta del VS 2008 SP 1.

2. Si no se tiene esta carpeta, instalar el VS 2008 SP1.

Con esto ya se podrá manejar las bases de datos del SQL CE en el VS 2008.

viernes, 19 de diciembre de 2008

Conectar Ax 4.0 y una aplicación en .Net usando el BusinessConnector

Si se esta intentando comunicar una aplicación de .NET con Axapta 4.0, esto se puede hacer usando el BusinessConnector, el cual viene con el cliente de Axapta.


Supongase que se tiene el siguiente método en una clase en Axapta llamada TestClass:

int SumNet(int a, int b)
{
;
return a + b;

}

Para ejecutar el método SumNet desde .NET, se requiere hacer lo siguiente:


1. Crear un proyecto en Visual Studio .NET (2005 o 2008)

2. En el proyecto, abrir el dialogo para adicionar una referencia y escoger Browse. Localizar la carpeta donde esta instalado el cliente de Ax, y dentro de la carpeta Bin, seleccionar y adicionar la referencia al assembly Microsoft.Dynamics.BusinessConnectorNet.dll

3. Usar el siguiente código desde el proyecto en .NET para llamar el método SumNet:

//Create the Axapta object to connect with Ax
Microsoft.Dynamics.BusinessConnectorNet.Axapta ax = new Microsoft.Dynamics.BusinessConnectorNet.Axapta();

//Create the object to represent the TestClass from Ax on .NET
Microsoft.Dynamics.BusinessConnectorNet.AxaptaObject axObj;

//Logon on Axapta
ax.Logon(null, null, null, null);


//Create an instance for the class
axObj = ax.CreateAxaptaObject("TestClass");

//Create object to be the parameters used in the call to the class on Axapta.
object[] obj = new object[2];
obj[0] = 5;
obj[1] = 13;

//Call the method SumNet on Ax for the class TestClass
int nResult = (int)axObj.Call("SumNet", obj);

//Show the result
MessageBox.Show(nResult.ToString());

//Don't forget do the LogOff on Axapta
ax.Logoff();


En el ejemplo, se supone que el cliente de Axapta esta configurado al AOS correcto y el usuario tiene permisos en Axapta, en caso contrario, se tendría que modificar los parámetros en el método LogOn para poder hacer el correcto LogOn.

Esto es todo, es así de fácil.

lunes, 24 de noviembre de 2008

Permitir la comunicación SSL en ISA Server usando un puerto diferente al 443 y 563

Por defecto, cuando se usa SSL en un servidor, esta usa el puerto 443 o563, pero cuando se necesita usar otro puerto cuya conexión usa un proxy que esta controlado con el ISA Server 2006 (o posterior) se requiere configurar dicho puerto en el Web Proxy para que pueda ser permitido su uso.

Para hacer esto, se debe crear un archivo con extension .vbs, y luego copiar el siguiente fragmento de código.

' Define the constants needed.
Const NewRangeName = "SSL 3520"
Const NewRangePort = "3520"
' Create the root object.
Dim root ' The FPCLib.FPC root object
Set root = CreateObject("FPC.Root")
'Declare the other objects needed.
Dim isaArray ' An ISA Server array object
Dim tpRanges ' An FPCTunnelPortRanges collection
Dim newRange ' An FPCTunnelPortRange object
' Get a reference to the array and to
' the collection of tunnel port ranges.
Set isaArray = root.GetContainingArray()
Set tpRanges = isaArray.ArrayPolicy.WebProxy.TunnelPortRanges
' Create a new tunnel port range.
Set newRange = tpRanges.AddRange(NewRangeName, NewRangePort, NewRangePort)
' Save the changes to the collection of tunnel port ranges
' with fResetRequiredServices set to True to restart the Firewall service.
tpRanges.Save True

'end file



Antes de grabar el archivo, se reemplaza el número 3520 por el puerto deseado, por ejemplo, el 4886.
Se guarda el archivo y se ejecuta donde se encuentra ejecutandose el ISA Server

jueves, 13 de noviembre de 2008

Indexación en Sharepoint usando Crawl Schedule

Sharepoint usa una tarea llamada Crawl Schedule para indexar los archivos que se han publicado, por defecto, esta tarea se ejecuta cada 5 minutos.

Si Sharepoint esta instalado en un servidor SQL compartido donde se tienen varias bases de datos, posiblemente se experimente un bajon en el rendimiento, debido a que este indexado hace mucho uso de los HDD.

Para evitar esto, se puede cambiar la tarea para que sea ejecutada en diferentes horarios, para hacer esto hay que ir a:

Central Administratorion -> Operations -> Services on Server -> Windows Sharepoint Services Search

Una vez alli se modifica la tarea de indexación para que sea ejecutada cada cierta cantidad de minutos, cada hora en un rango de minutos, o diariamente a cierta hora.