Buscar en este blog

martes, 12 de septiembre de 2017

Validar si existe un archivo y la extensión del mismo por código - Dynamics Ax 2012


Cuando se requiere validar si un archivo aún existe en una ruta y/o validar el tipo de archivo de acuerdo a la extensión, se puede usar dos opciones. Con una de ellas se debe tener cuidado porque no funciona si se requiere para un proceso batch.


static void ValidateFile(Args _args)
{
Contracts contract;
boolean existe;
System.IO.FileInfo fileInfo;
container datosArchivo;
str extArchivo;

//se busca un registro de una tabla que en uno de sus campos contiene un path completo del tipo c:\\carpeta1\archivo.docx
contract = Contracts::find("CONTRATO 050717");

//Opción 1: del lado del server, si funciona en procesos batch
new InteropPermission(InteropKind::ClrInterop).assert();
fileInfo = new System.IO.FileInfo(contract.AttachmentPath);
extArchivo = fileInfo.get_Extension();
existe = fileInfo.get_Exists();
CodeAccessPermission::revertAssert();

if (existe)
{
  info("si existe");

  //Valida si es un word
  if(strStartsWith(extArchivo, ".do"))
    info("si es doc");
  else
    info("no es doc");
}
else
{
  info("no existe");
}

//Opción 2 - del lado del cliente, no funciona bajo procesos batch
if (WinAPI::fileExists(itsContract.AttachmentPath))
{
  info("si existe 2");

  //Valida si es un word
  new InteropPermission(InteropKind::ClrInterop).assert();
  datosArchivo = Global::fileNameSplit(contract.AttachmentPath);
  CodeAccessPermission::revertAssert();

  if(strStartsWith(conPeek(datosArchivo, 3), ".do"))
    info("si es doc 2");
  else
    info("no es doc 2");
}
else
{
  info("no existe 2");
}

}



Post relacionados:
Registrar diario de producción por código, Dynamics Ax 2009, X++
Métodos display y métodos edit en un datasource o tablas temporales, Dynamics Ax 2012
Imprimir factura electrónica (México) a partir de una CustInvoiceJour por código - Dynamics Ax 2012



No olvides que te puedes unir a la página en Facebook Aprendiendo Dynamics Ax donde únicamente se tratan temas de desarrollo y se busca crear una comunidad de desarrollador@s de Ax en nuestro idioma. 


martes, 15 de agosto de 2017

Métodos display y métodos edit en un datasource o tablas temporales, Dynamics Ax 2012


Formularios: se debe poner el datasource como parámetro en caso de usar el display o edit en formularios.
Tablas temporales: se debe pasar como parámetro la tabla misma.


display str dispDebitor(simtcotetmp _simtcotetmp)
{
    simtDebitor deb;
    ;

    select nume, prenume from deb where deb.Ident == _simtcotetmp.IdDebitor; 
    return deb.Nume;
}

edit NoYes MarkSKUs(boolean set,
InventTable Invent,
NoYes _markSKUs)
{

if (set)
{
MarkMap.insert(Invent.RecId,_markSKUs);
MarkMap.valueSet();

else
{
if (MarkMap.exists(Invent.RecId))
{
_markSKUs = MarkMap.lookup(Invent.RecId);
}


return _MarkSKUs;
}



Post relacionados:
Crear un campo edit en un control de usuario en Enterprise Portal de Dynamics Ax 2012 R2
Crear búsquedas por nombre de producto en métodos display
Cómo crear un proyecto con todos los elementos de una capa - Microsoft Dynamics Ax 2012



No olvides que te puedes unir a la página en Facebook Aprendiendo Dynamics Ax donde únicamente se tratan temas de desarrollo y se busca crear una comunidad de desarrollador@s de Ax en nuestro idioma. 


sábado, 22 de julio de 2017

Imprimir factura electrónica (México) a partir de una CustInvoiceJour por código - Dynamics Ax 2012

Les comparto cómo mandar a PDF una factura electrónica a partir de la custInvoiceJour

static void SaveReportToPDFFromController(Args _args)
{
    EInvoiceCFDISalesController_MX salesInvoiceController;
    EInvoiceCFDIReportContract_MX salesInvoiceContract;
    Args                    args = new Args();
    SrsReportRunImpl        srsReportRun;
    CustInvoiceJour         custInvoiceJour;
    ReportName              reportName = "EInvoiceCFDIReport_MX.Report";
    EInvoiceJour_MX         eInvoiceJour_MX;
    SrsPrintMgmtExecutionInfo   srsPrintMgmtExecutionInfo;
    srsPrintMgmtExecutionInfo = new srsPrintMgmtExecutionInfo();
    select firstOnly custInvoiceJour where custInvoiceJour.RecId == 5637322330;
    select eInvoiceJour_MX
        where eInvoiceJour_MX.RefRecId == custInvoiceJour.RecId &&
              eInvoiceJour_MX.RefTableId == custInvoiceJour.TableId;
    args.record(eInvoiceJour_MX);
    salesInvoiceController = new EInvoiceCFDISalesController_MX();
    salesInvoiceController.parmReportName(reportName);
    salesInvoiceContract = salesInvoiceController.parmReportContract().parmRdpContract();
    salesInvoiceContract.parmRecordId(eInvoiceJour_MX.RecId);
    salesInvoiceController.parmArgs(args);
    srsReportRun = salesInvoiceController.parmReportRun() as SrsReportRunImpl;
    salesInvoiceController.parmReportRun(srsReportRun);
    salesInvoiceController.parmReportContract().parmPrintSettings().printMediumType(SRSPrintMediumType::File);
    salesInvoiceController.parmReportContract().parmPrintSettings().overwriteFile(true);
    salesInvoiceController.parmReportContract().parmPrintSettings().fileFormat(SRSReportFileFormat::PDF);
    salesInvoiceController.parmReportContract().parmPrintSettings().fileName(@"C:\Users\xxx\aloha.pdf");
    salesInvoiceController.parmReportContract().parmReportExecutionInfo(srsPrintMgmtExecutionInfo);
    salesInvoiceController.runReport();

}





No olvides que te puedes unir a la página en Facebook Aprendiendo Dynamics Ax donde únicamente se tratan temas de desarrollo y se busca crear una comunidad de desarrollador@s de Ax en nuestro idioma. 


miércoles, 19 de abril de 2017

The request failed with HTTP status 401: Unauthorized. Enterprise Portal Dynamics Ax 2012

Hay veces que tratando de implementar paginas, menu items o web controls en el Enterprise Portal (EP) llegamos a ver el error The request failed with HTTP status 401: Unauthorized.



La solución es sobre el IIS

Claro, además de validar que el usuario tenga permisos de administrador y cumplir con los requerimientos técnicos que definidos Microsoft.

Referencia:
https://msdn.microsoft.com/en-us/library/dd261467.aspx

The account specified in Microsoft Dynamics AX to use for the Business Connector Proxy must be the same account that is used to run the application pool for the SharePoint site that is used for Enterprise Portal. If two different accounts are used, the AxUpdatePortal utility operations will not complete successfully.
To successfully deploy Enterprise Portal resources, you must have the following roles and permissions:
  • Administrator role in Microsoft Dynamics AX.
  • Administrator for SharePoint. To verify this, open SharePoint Central Administration on the Enterprise Portal server. If you cannot access SharePoint Central Administration, a SharePoint administrator must open SharePoint Central Administration > Security > Manage the farm administrators group and add you as an administrator.
  • Site collection administrator for the Enterprise Portal site. To verify this, open SharePoint Central Administration > Application Management. Click Site Collections > Change site collection administrators. Verify that you are listed as the primary or secondary site collection administrator.
  • Privileges to access the file locations on the Enterprise Portal server where files will be put. One way to guarantee this is by running the command prompt that is used to call AxUpdatePortal.exe with administrative privileges.


Post relacionados:
Enterprise Portal Dynamics Ax 2012 – Crear List Pages y PartPreview Pane
Crear un campo edit en un control de usuario en Enterprise Portal de Dynamics Ax 2012 R2
Modificar un control de usuario en el Enterprise Portal de Dynamics Ax


No olvides que te puedes unir a la página en Facebook Aprendiendo Dynamics Ax donde únicamente se tratan temas de desarrollo y se busca crear una comunidad de desarrollador@s de Ax en nuestro idioma. 



jueves, 23 de marzo de 2017

Cannot edit a record in Print journal (LedgerJournalTmp) Dynamics Ax 2012


Cuando llegues a ver el error Cannot edit a record in Print journal (LedgerJournalTmp) al tratar de imprimir un diario, a lo que se refiere es que el dato extendido del campo AccountName no es de la misma longitud que el campo del que hereda, la solucion es que se cambie el dato extendido de ese campo (AccountName) al DirPartyName.

"Cannot edit a record in Print journal (LedgerJournalTmp).
The SQL database has issued an error."

"[Microsoft][SQL Server Native Client 10.0][SQL Server]String or binary data would be truncated."
and the third line is.
"SQL statement: UPDATE T1 SET ACCOUNTNAME=T4.NAME,ACCOUNTNUM=T2.DISPLAYVALUE,RECVERSION=? FROM tempdb."DBO".t10841_69B3F7D1F031409EBC810A2C719FD5DB T1 CROSS JOIN DIMENSIONATTRIBUTEVALUECOMBINATION T2 CROSS JOIN CUSTTABLE T3 CROSS JOIN DIRPARTYTABLE T4 WHERE ((T1.PARTITION=?) AND (T1.ACCOUNTTYPE=?)) AND ((T2.PARTITION=?) AND (T2.RECID=T1.LEDGERDIMENSION)) AND (((T3.PARTITION=?) AND (T3.DATAAREAID=?)) AND (T3.ACCOUNTNUM=T2.DISPLAYVALUE)) AND ((T4.PARTITION=?) AND (T4.RECID=T3.PARTY))"




No olvides que te puedes unir a la página en Facebook Aprendiendo Dynamics Ax donde únicamente se tratan temas de desarrollo y se busca crear una comunidad de desarrollador@s de Ax en nuestro idioma.