Con esta clase se puede leer archivos externos para poder ingresarlos mediante interface a las tablas de MSDAX.
Este metodo contiene 2 parametros, el primero es donde se pondra la ruta del archivo y el segundo donde pondremos el modo a utilizar, nosotros utilizaremos el modo leer, por lo tanto utilizaremos "R".
CommaIo io;
container con;
FileIoPermission perm;
#define.EjemploArchivo(@"c:\prueba.txt")
#define.EjemploModo("R")
;
perm = new FileIoPermission(#EjemploArchivo, #EjemploModo);
if (perm == null)
{
info("No existe archivo");
}
// Dando permisos para la ejecución de CommaIo.new method.
perm.assert();
// Cargando archivo.
io = new CommaIo(#ExampleFile, #ExampleOpenMode);
if (io)
{
con = io.read();
}
// Cerrando los permisos de acceso.
CodeAccessPermission::revertAssert();
-------------------------------------------------------
Teniendo la información en un contenedor, simplemente es cuestión de recorrerlo.
Saludos.
viernes, 26 de agosto de 2011
viernes, 22 de julio de 2011
Manipular varios campos al modificar un campo principal de un formulario
Hola, vamos a realizar un caso en que al momento de modificar un campo, se modifiquen otros a consecuencia. Para facilitar el ejemplo los campos seran de tipo enum (NoYes).
Utilizaremos lo siguiente:
TABLA: Table1
CAMPO: Field1, Field2, Field3
METODO: Update()
FORMULARIO: Form1
DATASOURCE: Table1
DISEÑO: Grid(todos los campos del datasource)
--------------------------------------Pasos---------------------------------------------------
En el metodo update() de la tabla ponemos las condiciones:
public void update()
{
if(this.Field1 == noyes::Yes)
{
this.Field2 = noyes::No;
this.Field3 = noyes::No;
}
if(this.Field2 == noyes::Yes)
{
this.Field1 = noyes::No;
this.Field3 = noyes::No;
}
if(this.Field3 == noyes::Yes)
{
this.Field1 = noyes::No;
this.Field2 = noyes::No;
}
super();
}
En cada campo del grid del formulario vamos a crear metodos clicked() y poner lo siguiente:
public void clicked()
{
super();
Table1_ds.research();
}
Con lo realizado, al momento de que un campo este con check, los otros se van a blanquear.
Saludos.
Utilizaremos lo siguiente:
TABLA: Table1
CAMPO: Field1, Field2, Field3
METODO: Update()
FORMULARIO: Form1
DATASOURCE: Table1
DISEÑO: Grid(todos los campos del datasource)
--------------------------------------Pasos---------------------------------------------------
En el metodo update() de la tabla ponemos las condiciones:
public void update()
{
if(this.Field1 == noyes::Yes)
{
this.Field2 = noyes::No;
this.Field3 = noyes::No;
}
if(this.Field2 == noyes::Yes)
{
this.Field1 = noyes::No;
this.Field3 = noyes::No;
}
if(this.Field3 == noyes::Yes)
{
this.Field1 = noyes::No;
this.Field2 = noyes::No;
}
super();
}
En cada campo del grid del formulario vamos a crear metodos clicked() y poner lo siguiente:
public void clicked()
{
super();
Table1_ds.research();
}
Con lo realizado, al momento de que un campo este con check, los otros se van a blanquear.
Saludos.
jueves, 21 de julio de 2011
Manejando columnas y filas de un grid
Hola, hay veces que nos piden capturar especificamente algunas columnas o filas de un grid en un formulario. Daré un ejemplo de cómo hacer dicho procedimiento, utilizando un botón. Para esto pondremos el siguiente código en el metodo clicked() del botón:
void clicked()
{
int i;
int numcol, f;
;
numcol = tuGrid.controlCount();
if (TuDatasource_ds.first())
{
do
{
for (f=1;f<=numcol;f++)
{
box::info(tuGrid.controlNum(f).valueStr());
}
} While (TuDatasource_ds.next());
}
super();
}
Nota: es importante tener la propiedad "AutoDeclaration" del grid en TRUE.
Saludos.
void clicked()
{
int i;
int numcol, f;
;
numcol = tuGrid.controlCount();
if (TuDatasource_ds.first())
{
do
{
for (f=1;f<=numcol;f++)
{
box::info(tuGrid.controlNum(f).valueStr());
}
} While (TuDatasource_ds.next());
}
super();
}
Nota: es importante tener la propiedad "AutoDeclaration" del grid en TRUE.
Saludos.
martes, 7 de junio de 2011
Controlar desde un formulario hijo a uno padre
Lo que haremos es actualizar un grid que se encuentra en el formulario padre (formulario llamador) desde un formulario hijo (formulario llamado).
Para nuestro ejemplo, vamos a trabajar con el formulario VendInvoiceJournal.
Para nuestro ejemplo, vamos a trabajar con el formulario VendInvoiceJournal.
- En la tabla VendInvoiceJour creamos el campo PRB_Actualiza (extended: name).
- Creamos el botón PRB_Pase en el formulario VendInvoiceJournal (VendInvoiceJournal/Designs/Design/Tab/Overview/OverviewButtonGroup/PRB_Pase).
- Creamos la tabla temporal PRB_TablaPase.
- Creamos el formulario PRB_PaseActualiza
- Creamos el metodo clicked() en el boton PRB_Pase del formulario VendInvoiceJournal. void clicked() { Args args; FormRun formRun; ; super(); args = new Args(formstr(PRB_PaseActualiza)); args.record(vendinvoicejour); formRun = classFactory.formRunClass(args); formRun.init(); formRun.run(); formRun.wait(); vendInvoiceJour_ds.research(); }
- Creamos el metodo clicked() en el botón Button del formulario PRB_PaseActualiza
- Hacemos pruebas:
a. Abrimos el formulario VendInvoiceJournal (Proveedores/Consultas/Diarios/Facturas) y seleccionamos una linea

b. Hacemos click en el botón creado “llamada formulario” y nos abre el formulario creado PRB_PaseActualiza
void clicked()
{
vendinvoicejour vij;
vendinvoicejour xxx;
super();
vij = element.args().record();
update_recordset xxx
setting PRB_Actualiza = DataSource1_PRB_Actualiza.text()
where xxx.LedgerVoucher == DataSource1_LedgerVoucher.text();
element.close();
}
Saludos.
domingo, 5 de junio de 2011
Ingresar direccion del proveedor mediante excel desde un JOB
Hola, les dejo como podemos ingresar direcciones de un proveedor en forma masiva desde un job mediante un excel.
}
}
xlImport.moveNext();
}
xlImport.finalize();
info("direcciones: " + num2str(i,3,2,1,1));
}
catch(Exception::Error)
{
info("error");
xlImport.finalize();
}
}
Saludos.
- El excel debe tener las columnas codigo del proveedor y direccion, con la informacion correspondiente.
static void ActualizaDireccion(Args _args)
{
container conSheets;
ExcelImportADO xlImport;
SysDataExcelCOM dataExcelCom;
Filename strFlename;
accountnum id;
str direccion;
vendtable vend;
dirpartytable dir;
address addre;
int i = 0;
accountnum id;
str direccion;
vendtable vend;
dirpartytable dir;
address addre;
int i = 0;
;
strFilename = "C:\\Users\\PC\\Desktop\\direccion.xls";
xlImport = new ExcelImportADO(strFilename);
try
{
// abriendo solo la primera hoja de excel if(!xlImport.openFile())
throw error(strfmt("Error opening Excel file «%1»", strFilename));
while(!xlImport.eof())//previo
{
id = xlImport.getFieldValue(1);
direccion = xlImport.getFieldValue(2);
while select vend
where vend.AccountNum == id
{
while select dir
where dir.PartyId == vend.PartyId
{
if(!address::find(2303,dir.RecId,addresstype::None).AddrRecId)
{
addre.AddrTableId = 2303; //vendtable
addre.AddrRecId = dir.RecId;
addre.Street = direccion;
addre.Address = direccion;
addre.insert();
i++;
}}
}
xlImport.moveNext();
}
xlImport.finalize();
info("direcciones: " + num2str(i,3,2,1,1));
}
catch(Exception::Error)
{
info("error");
xlImport.finalize();
}
}
- Ejecutar el JOB.
Saludos.
martes, 31 de mayo de 2011
Exportar excel desde table browser
Para poder exportar el contenido de las tablas (mediante el AOT, función abrir tabla) a Excel, debemos activar la funcionalidad de la barra de herramientas estándar de DAX. Para ello haremos lo siguiente:
1. Ir al formulario SysTableBrowser
2. Ir al nodo SysTableBrowser/Design/design
3. Click derecho y seleccionar propiedades
4. Cambiar la propiedad WindowsType = PopUp por Estándar
Antes
Despues
Saludos.
1. Ir al formulario SysTableBrowser
2. Ir al nodo SysTableBrowser/Design/design
3. Click derecho y seleccionar propiedades
4. Cambiar la propiedad WindowsType = PopUp por Estándar
Antes
Despues
Saludos.
viernes, 27 de mayo de 2011
Opcion "Ir al formulario de la tabla principal"
Hay veces que necesitamos utilizar esta opcion para hacer referencia a tablas que hemos creado y necesitamos llenar informacion, para el logro del llenado utilizando esta opcion, estamos obligados a crear formularios.
- Crear tabla a llenar (campos).
- Crear formulario (datasource, grid).
- Crear menuitem (jalar el formulario a menuitem/display).
- En las propiedad "FormRef" de la tabla, poner el menuitem creado.
jueves, 26 de mayo de 2011
Almacenar imagenes en dynamics AX
Hola, aqui les dejo un ejemplo de como almacenar imagenes dentro del AX, esta funcionalidad es una copia de la carga de logotipo de la empresa (Base/Configurar/Informacion de la empresa/Logotipo de la empresa).
• En este ejemplo estoy simulando tener un datasouce custInvoiceJour
x++:
display Bitmap mostrarImagen()
{
CustTable custTable = CustTable::find(custInvoiceJour.InvoiceAccount);
;
custTable = CustTable::find(custInvoiceJour.InvoiceAccount);
return CompanyImage::find(custTable.dataAreaId, custTable.TableId, custTable.RecId).Image;
}
-----------------------------------------------------------------------
Para las personas un poquito mas tecnicas, aqui les dejo lo explicado en codigo:
static void ImagenCarga(Args _args)
{
Image image = new Image();
str filename;
CustTable custTable;
CompanyImage companyImage;
;
filename = "C:\\Rosarojadespedida.jpg";
select custTable
where custTable.AccountNum == '1101';
if (Image::canLoad(filename))
{
image.loadImage(filename);
companyImage.Image = image.getData();
companyImage.RefTableId = 77;
companyImage.RefRecId = custTable.RecId;
companyIMage.RefCompanyId = 'con';
companyImage.insert();
}
}
Saludos.
- Abrir el AOT/Menu Items/Display/CompanyImage.
- Abrir otro AOT/Forms/CustTable.
- Abrir formulario : CustTable/Design/Design/ButtonGroup.
- Jalar el menu item CompanyImage en el ButtonGroup.
- Click derecho en el nuevo MenuItemButtom e ir a sus propiedades. En Texto escribir "Imagen Cliente".
- Salvar los cambios.
- Abrir el formulario CustTable, veremos que tenemos un nuevo boton (Imagen Cliente).
- Dar click al boton "Imagen Cliente".
- Cargar Imagen.
Si se quisiera ver esta imagen en un reporte, lo que se debe hacer es crear un método display:
• En este ejemplo estoy simulando tener un datasouce custInvoiceJour
x++:
display Bitmap mostrarImagen()
{
CustTable custTable = CustTable::find(custInvoiceJour.InvoiceAccount);
;
custTable = CustTable::find(custInvoiceJour.InvoiceAccount);
return CompanyImage::find(custTable.dataAreaId, custTable.TableId, custTable.RecId).Image;
}
-----------------------------------------------------------------------
Para las personas un poquito mas tecnicas, aqui les dejo lo explicado en codigo:
static void ImagenCarga(Args _args)
{
Image image = new Image();
str filename;
CustTable custTable;
CompanyImage companyImage;
;
filename = "C:\\Rosarojadespedida.jpg";
select custTable
where custTable.AccountNum == '1101';
if (Image::canLoad(filename))
{
image.loadImage(filename);
companyImage.Image = image.getData();
companyImage.RefTableId = 77;
companyImage.RefRecId = custTable.RecId;
companyIMage.RefCompanyId = 'con';
companyImage.insert();
}
}
Saludos.
miércoles, 18 de mayo de 2011
Terminar una sesion de un cliente
- Terminar la sesion de un cliente en específico
static void TerminateSession(UserId UserId)
{
}xSession xSession;int xSessionId;
;
xSessionId = (select * from SysClientSessions where SysClientSessions.userId==UserId && SysClientSessions.Status==1).SessionId;
xSession = new xSession(xSessionId);
if (xSession)
xSession.terminate(xSession.loginDate(), xSession.loginTime());
- Terminar la actual sesion
static void ShutDown(Args _args)
{
}Info Info = new Info();;
Info.shutDown(true);
Borrar todas las transacciones de una Cia
Simplemente se debe hacer lo siguiente:
Saludos.
- Ubicar la clase Clase SysDatabaseTransDelete
- Ejecutar la clase
Saludos.
Suscribirse a:
Entradas (Atom)








