Buscar este blog

miércoles, 26 de febrero de 2014

Codigos X++

Primera consulta en X++:
q = new Query();
qbds = q.addDataSource(tablenum(SalesTable));
qr = new QueryRun(q);
while(qr.next())
{
     SalesTable = qr.get(tablenum(SalesTable));
}

Query para Dimension
qbdsQuality.addRange(fieldId2Ext(fieldnum(Custtrans, Dimension), SysDimension::Department)).value(Dimension);


Query para rango de fechas:
qbdsLine.addRange(fieldNum(PurchLine,DeliveryDate)).value(sysquery::range(fromdate,todate));
Hasta fecha (con str):
qbds.addRange(fieldnum(CustTrans,DueDate)).value('..' + date2str(fecha,2,2,1,2,1,2));

Forzar índice (cuando no lo coge con el index hint)
queryBuildDataSource.addSortIndex(indexnum(Tabla,Indice));
querybuilddatasource.indexIsHint(true);
q.literals(#queryForcePlaceholders);
queryInventrans.literals(true);
queryInventrans.forceNestedLoop(true);
queryInventrans.forceSelectOrder(true);

Ordenar descendente:
datasource.addRange(fieldnum(ERNotesAims,ItemId)).value(cadauxitem);
datasource.addSortField(fieldnum(ERNotesAims,DateDeal),SortOrder::Descending);
datasource.orderMode(OrderMode::OrderBy);

Posicionarte en el registro de un grid después de hacer el executequery
Tabla1        orig;
;
orig = Tabla1::findRecId(Tabla1.RecId);
Tabla1_ds.executequery();
Tabla1_ds.findRecord(orig);

Bloquear un filtro para que no lo puedan consultar por diseño: status(1)
qbdsERDirectSentPurch.addRange(fieldnum(ERDirectSentPurch,InventLocationId)).status(1);
qbdsERDirectSentPurch.addRange(fieldnum(ERDirectSentPurch,InventLocationId)).value(queryvalue(UserInventLocationId.text()));

Recorrerse todas las empresas de tipo VIR:
while select VirtualDataAreaList
        order by id
        where VirtualDataAreaList.virtualDataArea == 'VIR'
{
        info(VirtualDataAreaList.id);
        if(VirtualDataAreaList.id != 'RSG' && VirtualDataAreaList.id != 'EDR')
        {
               ChangeCompany('EDR') //(VirtualDataAreaList.Id) //(DataArea.Id)
        }
}

Cambio de divisa:
static void Job817(Args _args)
{
   PurchId                      PurchId = 'R6PC000393';
   VendinvoiceTrans             recordVendinvoiceTrans = VendinvoiceTrans::findRecId(-544939969);
    Amount        Amount;
   ;
   Amount = currency::AmountCur2amountCurExchRate( 480,recordVendinvoiceTrans.CurrencyCode,
                    currency::codeCompanyCurrency(),UnknownNoYes::Unknown,recordVendinvoiceTrans.exchRate());
   }

Quita todos los caracteres que no sean numéricos y opcionalmente blancos.
str deleteChrToCad(str str1, boolean blancos,str cad = '')
{
    str str2,chr;
    str whites = ' ';
    int i;
    str cadnum = '0123456789'
    ;
    for (i=1;i<=strLen(str1);i++)
    {
        chr = subStr(str1, i, 1); //caracter actual
        if(blancos) //quitar espacios en blancos
        {
            if(chr == whites)
                str2 = str2;
            else
            {
                if(StrFind(cadnum,chr,1,strlen(str1)) > 0)
                    str2 += chr;
            }
        }
        else
        {
            if(StrFind(cadnum,chr,1,strlen(str1)) >0)
                str2 += chr;
        }
    }
    return str2;
}

Quita Intros en una cadena.
str deleteStrChr13(str str1)
{  
    str str2,chr;
    int i;
    ;
    for (i=1;i<=strLen(str1);i++)
    {
        chr = subStr(str1, i, 1);
        if (subStr(str1, i, 1) != '\n')
            str2 = str2 + chr;
        else
            str2 = str2 + " ";
    }
    return str2;
}


Hacer un OR en varios campos con strfmt:
queryBuildRange.value(strFmt('((%1 == %2) || ((%1 == %3) && (%4 == "%5")))', fieldStr(InventTable, ItemType),any2int(ItemType::Service), any2int(ItemType::Item),    fieldStr(InventTable, ProjCategoryId), queryValue("Spares")));




Llamada a un método de una tabla por código à ejemplo en el formulario InventTrans (método init)
inventTrans_ds.cacheAddMethod(tablemethodstr(InventTrans, pcsPrice));

Borrar los datos de uso por código
Para todos los usuarios  à  xSysLastValue::deleteAllUsers(Objeto)
Para un usuario  à  xSysLastValue::deleteLast(objeto);
    sysLastValue    sysLastValue;
    ;
    ttsbegin;
    delete_from sysLastValue
        where sysLastValue.Company      == curext()
           && sysLastValue.RecordType   == UtilElementType::Form   //Ponemos el tipo que sea.
           && sysLastValue.ElementName  == 'ERDelegateAnalitsys'
           && sysLastValue.DesignName   == '';
    ttscommit;
 


Quitar la letra de acceso directo de un botón:
ShowShortCut
Bloquear para que no se pueda buscar por un campo (botón derecho - buscar):
QbdsCust.addRange(fieldNum(custTable,VatNum)).status(1);

Para que en una clase no salga el Batch
Public boolean canGoBatch ()
{
      Return false;
}


Para que maximice un formulario al entrar, ponerlo después del super del Run del FRM
winapi::maximizeWindow(element.hWnd());



Buscar carácter numérico en una cadena
chr = subStr(SalesTable.VATNum, 1, 1);
if(StrFind('0123456789',chr,1,strlen('0123456789')))



Para compartir una tabla: trampear la clase xDataArea \ validateOnlineUsersAndAOS

Para refrescar uu fromulario o Grid utilizamos el Datasource_ds.reSearch()




Para hacer un findRange de los valores de la tabla del inform desde una clase
if(this.queryRun().query().dataSourceNo(1).findRange(fieldnum(ERTMPTransMovement,ItemId)))
        ItemRange = this.queryRun().query().dataSourceNo(1).findRange(fieldnum(ERTMPTransMovement,ItemId)).value();



http://www.dynamicsax.es/index.php/programacion/36-x/89-agregar-funcionalidad-ir-a-la-tabla-principal

Si queremos habilitar la funcionalidad de Ir a la tabla principal en estos casos, tendremos que sobre escribir el método JumpRef() del desplegable o campo que estemos utilizando.

Método modificado para acceder a la tabla de clientes:

Public void jumpRef()

{

      EmplTable emplTable;

 Args args;

 MenuFunction menuFunction;

 ;

 emplTable = EmplTable::find(this.text());



 if (emplTable)

 {

 args = new Args();

 args.caller(element);

 args.record(emplTable);

 //Llamamos al formulario de clientes

 menuFunction = new MenuFunction(menuitemdisplaystr(EmplTable), MenuItemType::Display);

 menuFunction.run(args);

 }

}


Query un Real mayor que 0:
qbds.addRange(fieldnum(custTrans,AmountMSTTotal)).value(strfmt(">%1",0));

No hay comentarios:

Publicar un comentario