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.

miércoles, 24 de septiembre de 2008

Error del control Activex CmxPhone en Axapta 4.0

Cuando se inicia el cliente de Axapta 4.0, y se muestra un mensaje de error como el siguiente:

No se puede crear el control ActiveX.
CmxPhone Control

esto no impide que se pueda usar Axapta, pero para corregirlo hay que hacer lo siguiente:

  • Ir a Inicio-> Ejecutar y escribir cmd, para cargar la ventana de comandos.
  • Ejecutar el siguiente comando: regsvr32 c:\Archivos de Programa\Microsoft Dynamics AX\40\Client\Bin\smmPhone.ocx. (Esto suponiendo que el ciente de Axapta se encuentre en la ruta c:\Archivos de Programa\Microsoft Dynamics AX\40\Client, sino, entonces usar la ruta en la cual se encuentra instalado el cliente y usar la carpeta Bin).

Si se registra exitosamente el control, no volverá a aparecer el mensaje de error al iniciar Ax.

lunes, 25 de agosto de 2008

Error mostrando reportes en el Team Site, cuando el Team Foundation Server es instalado en un servidor diferente al WSS

Cuando se tiene el siguiente escenario:
  • Team Foundation Server instalado en el servidor ServerA
  • Windows Sharepoint Services (WSS) instalado en el servidor ServerB
  • Reporting Services instalado en el servidor ServerC (o en ServerA o cualquier otro servidor diferente a ServerB)

Asumamos que el Uri donde se crea el sitio del Team Project usado por TFS, es http://ServerB/Sites

Si se crea un Team Project, que usa WSS 3.0 (puede funcionar si se usa WSS 2.0), y cuando se intenta ver algun reporte que usa Reporting Services en el sitio, se puede obtener el siguiente mensaje de error:

The following registry key is not set: HKLM\Software\Microsoft\VisualStudio\9.0\TeamFoundation\ReportServer\80\Sites for Uri /Sites/[ProjectName]/_layouts/tfsredirect.aspx?IsReport=1&ReportName=Remaining+Work

Esto es porque ServerB, donde esta instalado el WSS necesita conocer el Uri del Report Server y de esta forma, poder redirigir el reporte de la página hacia este servidor. En este caso, se necesita hacer lo siguiente en el servidor ServerB(donde esta instalado el WSS):

1. Crear una clave de registro con la siguiente ruta:

  • HKLM\software\Microsoft\VisualStudio\9.0\TeamFoundation\ReportServer\80\Sites

2. Crear los siguientes String Values dentro de la clave creada anteriormente :

  • BaseReportsUrl con el valor http://ServerC/Reports
  • ReportsService con el valor http://ServerC/reportServer

Adicionando estas claves con estos valores, el problema se resuelve.

La razón para que este problema ocurra, es porque WSS intenta redireccionar el reporte hacie el servidor donde esta instalado el Report Server, y por eso necesita esta clave para saber hacia donde redirigirlo.

jueves, 21 de agosto de 2008

Conectar Visual Studio 2005 con Team Foundation Server 2008

Probando Team Foundation Server 2008, encontré la necesidad de manejar proyectos creados con Visual Studio 2005 y no con Visual Studio 2008 , pero se encontró un problema tratando de usar Team Foundadion Server 2008 on Visual Studio 2005.

Cuando se intenta crear un Team Project desde VS 2005 al TFS 2008 se encuentra el siguiente mensaje:

Plugin error text: "The language id specified in the process template does not exist on the WSS server"

Buscando en la Web, encontré una solución de como se puede configurar Visual Studio 2005 para trabajar con TFS 2008, solo haciendo lo siguiente:

1. Instalar el Team Explorer 2005, descargandolo desde microsoft en la siguiente dirección : Team Explorer 2005

2. Instalar (o reinstalar si ya se tenia instalado) el VS 2005 Service Pack 1 el cual va a instalar el Team Explorer 2005 SP 1 tambien.

3. El ultimo paso es instalar un hotfix de Visual Studio 2005, con el cual, VS 2005 podrá comunicarse con Sharepoint 3.0, el hotfix es VS80sp1-KB932544-X86-ENU.exe

La razón de este problema es que VS 2005 viene hecho para comunicarse con SharePoint 2.0, pero no con la versión 3.0, lo cual se corrige unicamente con el hotfix que se aplica sobre el VS 2005 SP 1, pero cuando se instala el Team Explorer 2005, se desactualizan algunas librerías y por eso no es posible aplicarle el hotfix hasta que no se haya instalado (o reinstalado) el VS 2005 Service Pack 1.

Igual, si se aplica el hotfix antes de instalar el Team Explorer, al instalar este último se desactualizan las librerias que actualizó el hotfix, y no se puede aplicar nuevamente este hotfix hasta que no se haya aplicado nuevamente el VS SP 1.

Eso es todo.

Cambiar version de SQL sin necesidad de desinstalar

Si requiere cambiar de version de SQL, (por ejemplo, de SQL Express Edition a la version SQL Standar), se puede realizar esto sin necesidad de desinstalar la versión anterior. Esto da la ventaja de no necesitar restaurar las bases de datos y volver a crear los permisos y la configuración que ya se tenia, para esto, hay que hacer lo siguiente:

1. Poner el DVD de la version SQL que se va a instalar, si se va a hacer desde un directorio ubicarse alli.

2. Iniciar la instalacion desde la línea de comandos(Supongamos que el DVD de instalación esta en e:\) usando la siguiente línea:

e:\setup SKUUPGRADE=1

3. Seguir las instrucciónes de instalación. Si la instancia a ser actualizada es una instancia nombrada, como myserver\sqlinstance, use este mismo nombre la para instalación que esta haciendo, sino, no se reemplazará la anterior.

4. Cuando aparece el resumen de la instalación que se va a realizar, debe aparecer que se va a hacer un UPGRADE, despues de que la instalación termine, usted necesita instalar todos los Service Pack para SQL, puesto que quedan desintalados.

Esto es todo, solo es revisar y observara que las bases de datos quedan activas y configuradas como estaban.

Usar Google maps para mostrar una ruta

Voy a demostrar como usar Google Maps para mostrar una ruta en un sitio Web.

1. Ir a http://code.google.com/apis/maps/ para obtener una clave para el sitio Web y de esta forma poder usar Google Maps. Se necesita una cuenta de Google Mail para poder obtener la clave y ademas proporcionar el URL principal de su sitio Web, si esta trabajando localmente, es recomendable proporcionar un URL como http://mycomputername/, esto para poder ver el sitio web desde otros computadores en la red, porque si se usa http://localhost/, solo se podra mostrar la pagina localmente . Si esta usando un sitio web público, use una dirección como http://mywebsite/


2. Con su clave, adicionar las siguientes lineas entre el tag head de su pagina web:
<head>
<
script src="http://maps.google.com/maps?file=api&v=2&key=mykey" type="text/javascript"> < / script>

Note en el código key=mykey, donde mykey es la clave que se obtuvo de google maps

3. Adicionar el siguiente escript entre el tag head tambien de su pagina web:
<script type="text/javascript">
function initialize()
{
var map;
//Verify if the browser is compatible
if (GBrowserIsCompatible()) {
//Create the map object, for the div with id map_canvas
map = new GMap2(document.getElementById("map_canvas"));
//Set the center of the map and the initial zoom
map.setCenter(new GLatLng(5.971217,-74.95697), //Center
6 // zoom from 1 to 15
);
//Create the line secuence
var polyline = new GPolyline([
new GLatLng(6.252507, -75.583191),
new GLatLng(6.342597, -75.555725),
new GLatLng(6.247046,-75.421143),
new GLatLng(6.118708, -75.187683),
new GLatLng(5.971217,-74.95697),
new GLatLng(5.807292, -74.602661),
new GLatLng(5.20857,-74.742737),
new GLatLng(4.646920, -74.093170)], //Line points array
"#ff0000", //Color for the line
5 //width
);
map.addOverlay(polyline); //Add the line to the map
//Add mark for the start
map.addOverlay(new GMarker(new GLatLng(6.252507, -75.583191)));
//Add mark for the end
map.addOverlay(new GMarker(new GLatLng(4.658555, -74.100037)));
//Create the map control to show diferent type of the map
var mapControl = new GMapTypeControl();
//Add the control to the map
map.addControl(mapControl);
//Add zoom in/out control
map.addControl(new GLargeMapControl());
}
}
< /script>


4. Asignar al evento onload del tag body, la funcion Initialize:

<body onload="javascript:initialize();">


5. Adicionar el siguiente Div dentro del body, la propiedad size del div será el tamaño de la ventana del mapa en la pagina web:

<div id="map_canvas" style="width: 500px; height: 300px">< /div>


Note que el div id, es el mismo usado cuando se creó el objeto map.

Esto es todo, explore su página web y disfrute de google maps.