5.0

static void AXL_TestSHA1(Args _args)
{
#define.ClrFileStream (‘System.IO.FileStream’)
#define.ClrFileModeEnum (‘System.IO.FileMode’)
#define.ClrFileModeOpen (‘Open’)
#define.ClrFileAccessEnum (‘System.IO.FileAccess’)
#define.ClrFileAccessWrite (‘Write’)
#define.ClrFileAccessRead (‘Read’)//(‘ReadWrite’)

System.IO.FileStream fileStream;
ClrObject fileMode;
ClrObject fileAccess;
str _filename = ‘C:\\Log.txt’;

System.Type typeOfByte;
System.Array arrayOfByte;
int arrayOfByteLength = 1;
int i;
System.Security.Cryptography.SHA1CryptoServiceProvider SHA1;
System.Text.ASCIIEncoding encoding;

str strError;
CLRObject exc;
CLRObject innerExc;
CLRObject clrExcMessage;
int Struct1[];
container cont;
;
try
{
typeOfByte = System.Type::GetType(“System.Byte”);
arrayOfByte = System.Array::CreateInstance( typeOfByte, arrayOfByteLength );

fileMode = CLRInterop::parseClrEnum(#ClrFileModeEnum, #ClrFileModeOpen);
fileAccess = CLRInterop::parseClrEnum(#ClrFileAccessEnum, #ClrFileAccessRead);
SHA1 = new System.Security.Cryptography.SHA1CryptoServiceProvider();
fileStream = new CLRObject(#ClrFileStream, _filename, fileMode, fileAccess);
arrayOfByte = SHA1.ComputeHash(fileStream);
fileStream.Close();

arrayOfByteLength = ClrInterop::getAnyTypeForObject(arrayOfByte.get_Length());
for( i = 0; i < arrayOfByteLength; ++i )
{
cont = conins(cont,i+1,(ClrInterop::getAnyTypeForObject( arrayOfByte.GetValue( i ) )));
print int2hex(ClrInterop::getAnyTypeForObject( arrayOfByte.GetValue( i ) ));
}
}
catch( Exception::Internal )
{
// BP Deviation Documented
exc = CLRInterop::getLastException();
if( exc )
{
clrExcMessage = exc.get_Message();
// BP Deviation Documented
strError = CLRInterop::getAnyTypeForObject( clrExcMessage );

throw error(strError);
}

}
catch( Exception::CLRError )
{
// BP Deviation Documented
exc = CLRInterop::getLastException();
if( exc )
{
clrExcMessage = exc.get_Message();
innerExc = exc.get_InnerException();

while(innerExc != null)
{
clrExcMessage = innerExc.get_Message();
innerExc = innerExc.get_InnerException();
}

// BP Deviation Documented
strError = CLRInterop::getAnyTypeForObject( clrExcMessage );

throw error(strError);
}

}

pause;
}

using System;
using System.Collections.Generic;
using System.Text;
using System.Xml;
using System.Security.Cryptography;
using System.IO;
using Microsoft.Dynamics.BusinessConnectorNet;

namespace ConsoleApplication3
{
class Program
{

static void Main(string[] args)
{
Axapta AX;
AX = new Axapta();
AX.Logon(“CNS”, null, “DYmanicsAx1:2713″ , null);
object[] Parmlist = new object[1];

AxaptaContainer Container = AX.CreateAxaptaContainer();
Container = (AxaptaContainer)AX.CallStaticRecordMethod(“InventDim”, “dimEnabledFieldList”, 1);
Console.WriteLine(BankAccountTable.Call(“balanceCur”, Container));

AX.Logoff();
}

Delete sample

// Execute a query to retrieve an editable record
// where the name is MyStateUpdated.
axRecord.ExecuteStmt(“select forupdate * from %1 where %1.Name ==
‘MyStateUpdated’”);

// If the record is found then delete the record.
if (axRecord.Found)
{
// Start a transaction that can be committed.
ax.TTSBegin();
axRecord.Delete();
// Commit the transaction.
ax.TTSCommit();
}

INSERT

// Create the .NET Business Connector objects.
Axapta ax;
AxaptaRecord axRecord;
string tableName = “AddressState”;

try
{
// Login to Microsoft Dynamics AX.
ax = new Axapta();
ax.Logon(null, null, null, null);

// Create a new AddressState table record.
using (axRecord = ax.CreateAxaptaRecord(tableName));
{

// Provide values for each of the AddressState record fields.
axRecord.set_Field(“NAME”, “MyState”);
axRecord.set_Field(“STATEID”, “MyState”);
axRecord.set_Field(“COUNTRYREGIONID”, “US”);
axRecord.set_Field(“INTRASTATCODE”, “”);

// Commit the record to the database.
axRecord.Insert();
}
}
catch (Exception e)
{
Console.WriteLine(“Error encountered: {0}”, e.Message);
// Take other error action as needed.
}
READ

// Create the .NET Business Connector objects.
Axapta ax;
AxaptaRecord axRecord;
string tableName = “AddressState”;

// The AddressState field names for calls to
// the AxRecord.get_field method.
string strNameField = “NAME”;
string strStateIdField = “STATEID”;

// The output variables for calls to the
// AxRecord.get_Field method.
object fieldName, fieldStateId;

try
{
// Login to Microsoft Dynamics AX.
ax = new Axapta();
ax.Logon(null, null, null, null);

// Create a query using the AxaptaRecord class
// for the StateAddress table.
using (axRecord = ax.CreateAxaptaRecord(tableName));
{

// Execute the query on the table.
axRecord.ExecuteStmt(“select * from %1″);

// Create output with a title and column headings
// for the returned records.
Console.WriteLine(“List of selected records from {0}”,
tableName);
Console.WriteLine(“{0}\t{1}”, strNameField, strStateIdField);

// Loop through the set of retrieved records.
while (axRecord.Found)
{
// Retrieve the record data for the specified fields.
fieldName = axRecord.get_Field(strNameField);
fieldStateId = axRecord.get_Field(strStateIdField);

// Display the retrieved data.
Console.WriteLine(fieldName + “\t” + fieldStateId);

// Advance to the next row.
axRecord.Next();
}
}
}

catch (Exception e)
{
Console.WriteLine(“Error encountered: {0}”, e.Message);
// Take other error action as needed.
}

UPDATE

// Create an Axapta record for the StateAddress table.
axRecord = ax.CreateAxaptaRecord(tableName);

// Execute a query to retrieve an editable record where the name is MyState.
axRecord.ExecuteStmt(“select forupdate * from %1 where %1.Name ==
‘MyState’”);

// If the record is found then update the name.
if (axRecord.Found)
{
// Start a transaction that can be committed.
ax.TTSBegin();
axRecord.set_Field(“Name”, “MyStateUpdated”);
axRecord.Update();

// Commit the transaction.
ax.TTSCommit();
}

Guía rápida de instalación ax2009. Sobre W2003 R2 y SQL2005

Instalación del servidor Windows 2003.

Instalación de SQL server 2005

Instalar Aplication Role

Al ejecutar el instalador nos cargara los prerrequisitos automáticamente.

Necesario permisos de Administrador.

Crear base de datos para AX 2009.

Para ello el usuario(login) debe ser miembro del grupo “dbcreator“ en SQL server.

Instalar el AOS Role.

Dar permios al usuario(login) que instala AOS dentro de la base de datos como securityadmin.

Comprobar tras la instalación que se crea el inicio de sesión para el AOS “domain\host$” con los permisos “db_datareader”, “db_datawriter”, “db_ddladmin”, “public” sobre la BBDD.

Validar permisos de ejecución para el inicio de sesión del usuario de AOS (“domain\host$”) y las credenciales que arranque del servicio de AOS para los procedimientos almacenados, “CREATESERVERSESSIONS”, “CREATEUSERSESIONS”

Instalar Client Role.

Necesario permisos de Administrador.

Al iniciar sesión se crean los perfiles ,“Admin “y “guest” en la “userinfo” .

Instalar .NET bussines conector.

User: AXDOS\ProxyAX .

pass: Axapta20.

Instalar Role center and Enterprise Portal.

Necesario permisos de Administrador.

Requisitos previos:

- Crear la cuenta bussines conector en el dominio.

- Instalar el framework 3.5 básico sin SP

- Crear un grupo de aplicaciones en IIS y asignarle el usuario para Bussines conector.

- Crear un directorio virtual y asignarle la aplicación anterior.

- ASP .NET 2.0.

- Microsoft SQL Server 2005 ADOMD.Net

- Microsoft Windows SharePoint Service 3.0 SP1

Estos se instalan de forma automática con desde el instaler de AX2009.

Es necesario descargar de la pagina de Microsoft Sharepoint sp1.

http://www.microsoft.com/downloads/details.aspx?familyid=EF93E453-75F1-45DF-8C6F-4565E8549C2A&displaylang=en

Durante la instalación puede aparecer el siguiente error:

Error executing code: SysDevelopmentProxy (object) has no valid runable code in method ‘generate’.

(C)\Classes\SysDevelopmentProxy\generate
(C)\Classes\SysEPDeployment\clrGenerateProxies – line 7
(C)\Classes\SysEPDeployment\deployProxies
(C)\Classes\SysEPDeployment\deployAllWebParts
(C)\Classes\SysEPDeployment\deployEPOnSharepoint
(C)\Classes\SysEPDeployment\installEnterprisePortal


Microsoft.Dynamics.BusinessConnectorNet.BusinessConnectorException
at Microsoft.Dynamics.BusinessConnectorNet.AxaptaObject.Call(String methodName, Object[] paramList)
at Microsoft.Dynamics.BusinessConnectorNet.AxaptaObject.Call(String methodName, Object param1)
at Microsoft.Dynamics.Framework.BusinessConnector.Session.DynamicsObjectAdapter.Call(String methodName, Object param1)

An error occurred during setup of Role Centers and Enterprise Portal.
Reason: No .NET Business Connector session could be found.
=== Rolling back setup of Role Centers and Enterprise Portal due to error =

Este es provocado por un error en la referencia al conector, al compilar la aplicación sin haber instalado el “bussines conector”.

Puede aparecer este error el desplegar las áreas de negocio.

Ha ocurrido un error inesperado.

A ProgressTemplate must be specified on UpdateProgress control with ID ‘AxProgressControl’.

System.InvalidOperationException

at System.Web.UI.UpdateProgress.CreateChildControls()

at System.Web.UI.Control.EnsureChildControls()

at System.Web.UI.UpdateProgress.get_Controls()

at Microsoft.Dynamics.Framework.Portal.UI.WebControls.AxProgressControl.Create()

at Microsoft.Dynamics.Framework.Portal.UI.WebControls.AxProgressControl.AddToPage(Control control)

at Microsoft.Dynamics.Framework.Portal.UI.WebControls.AxContentPanel.Page_PreLoad(Object sender, EventArgs e)

at System.EventHandler.Invoke(Object sender, EventArgs e)

at System.Web.UI.Page.OnPreLoad(EventArgs e)

at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)

Este error es debido a la instalación del SP1 sobre el framework 3.5. El Share point y Dynamics no admiten este parche.

La idea de hacer experimentos con gaseosa siempre nos ha llamado la atención debe ser esa parte animal que dentro de nuestros cerebros se resiste a desaparecer y que hace reacción ante cualquier botón o lucecita q se nos ponga delante. Algo parecido nos sucede con las nuevas versiones y los download. Todo es descargar y probar. XDD

A lo que vamos, nos hemos propuesto instalar lo último de lo más en y ello vamos.

Tras descargar la imagen iso de sql Server 2008, le damos setup, este nos recomienda que nos instalemos una serie de parches, la cosa funciona sola y las actualizaciones necesarias se descargan y actualizan sin mucho esfuerzo.

Después llega el momento del siguiente, siguiente, siguiente que tanto nos gusta a los grandes gurus de la informática.

Nos peleamos un poco con los permisos de los servicios y las configuración standrad.

Para reducir esperas le damos a todo como administrador del domino que para eso lo hemos creado, ejjeje y asin no tenemos que pagarle horas extras al externo que nos lo mantiene.

Todo ok. Sql chutando y el AX 2009 prepardo para instalar.

Un poco de lo mismo (Siguiente siguente siguiente..) y ya tenemos la instalación preparada para compilar.

Despues de todo esto, provaremos el rendimiento de sql 2008 y alguna cosilla nueva. .

“Una experiencia nunca es un fracaso, pues siempre viene a demostrar algo”.
Thomas Alva Edison (1847-1931);

PD: Hasta un consultor financiero se podria instalar esto …. XDDDD

Ya esta aquí, la pre-released de axapta 2009 y como lo han bautizado Dynamics 2009.

Bueno puestos a probarla, pues hay va el resumen de la instalación, lo cierto que esta nueva versión tiene muchas cosas nuevas que iremos descubriendo y probando, así rápido de decir que podremos configurar en nuestros clientes el consumo de memoria en función de la instalación he incluso en que cpu queremos que se ejecute nuestro aos. También hay nuevos conceptos que la parte de desarrollo que consiguen una perfecta integración y nos facilitara la vida a todos los X frikis. 

Diario de una instalación.

Herramientas:

-Windosw 2003 R2

-Oracle express 10 g

Después de hacernos con la copia de dynamics 2009 en el mercado negro por supuesto.

La tostamos por que queda muy chuli eso de ir enseñando el dvd por hay .. jejej…

y le damos cera a la instalación.

dibujo_1.JPG

Uno empieza a darle a los botones todo loko de contento cuando se encuentra con que no se puede instalar en sql server 2000, el framework 3.5 y un par de cosillas mas, eso me pasa por darle y no leer las especificaciones de instalación.

Suerte que los pakistanies que ha puesto  M$ a trabajar en esta versión se han puesto las pilas y se nota que son de donde son… total q la cosa y a viene lista sin andar por hay buscando parches y otras fiestas…

dibujo_2.JPG

dibujo_3.JPG

Tras  pegarnos con la instalación de oracle, configurar el usuario y el active directori que no falte… (estos siempre barriendo pa su casa)

dibujo_5.JPG

Una de las cosas mas interesantes que trae este pre-released es la posibilidad de consultar un log con todas las maldades que nos ha ido haciendo en el sistema, lo que proporcina una gran ayuda para solventar posibles errores.

dibujo_6.JPG

Es importante que la instalación al igual que 4.0 nos envia bastante información al visor de sucesos.

Durante una de las pruebas el tablespaces de systema se nos quedo pequeño al configurar mal  la ubicación de tablas lo que nos produjo unos cuantos errores de sincronización, como unos 800, total que por suerte en 2 minutos se pudo averiguar la causa y solventarla.

dibujo_7.JPG

Esta versión ya podemos decir que es un producto tecnologicamente mas competitivo y mas estable.

dibujo_8.JPG

Estas son los comandos para crear un tablespaces de pruebas y un usuario valido, a la vez que la autentificación  externa.

SQL> alter system set os_authent_prefix =”OPS$” scope=SPFILE;
SQL> create user “OPS$DOM\ADMINISTRADOR” identified externally;

Usuario creado.

SQL> grant connect to “OPS$DOM\ADMINISTRADOR”;

Concesi¾n terminada correctamente.

SQL>
create tablespace AXDATA datafile ‘C:\oraclexe\oradata\XE\AXDATA.dbf’
size 50M autoextend on;

create tablespace AXINDEX datafile ‘C:\oraclexe\oradata\XE\AXINDEX.dbf’
size 50M autoextend on;

Rápido y conciso no ???

No hay para mas que el jefe me pide cerrar  iva y no llegamos..

JAJJAJAJA