Wednesday, December 20, 2017

Execute SQL in x++

server static void main(Args _args)
{
   Connection      connection;
    Statement       statement;
    str             query;
    Resultset       resultSet;
    Str1260         test = "delay";
    ;

    // create connection object
    connection = new Connection();

    // create statement
    statement = connection.createStatement();

    // Set the SQL statement
    query = "select recid from LANGUAGETXT where LANGUAGETXT.txt = '" + test +"'";

    // assert SQL statement execute permission
    new SqlStatementExecutePermission(query).assert();

    // when the query returns result,
    // loop all results for processing
    //BP Deviation documented
    resultSet = statement.executeQuery(query);

    while(resultSet.next())
    {
        // do something with the result
        info(strFmt("%1",resultSet.getInt64(1)));
    }

    // limit the scope of the assert call
    CodeAccessPermission::revertAssert();
}

Monday, December 4, 2017

Clear Master and release variant which has no transaction and barcode

Clear Release variant first and them master variant.
static void ClearReleaseVarient(Args _args)
{

    EcoResDistinctProductVariant                EcoResDistinctProductVariant, variant;
    EcoResProductVariantDimensionValue          EcoResProductVariantDimensionValue;
    EcoResProductTranslation                    ecoResProductTranslation_Variant;
    EcoResProductVariantColor                   ecoResProductVariantColor;
    EcoResProductVariantStyle                   ecoResProductVariantStyle;
    EcoResProductVariantSize                    ecoResProductVariantSize;
    EcoResProductVariantConfiguration           ecoResProductVariantConfiguration;
   
    InventDimCombination                        InventDimCombination,InventDimCombination1,InventDimCombination2;
    InventItemBarcode                           inventBarcode;
    InventTrans                                 InventTrans;
    InventDimCombination                        InventDimCombinationCheckother;
    DataArea                                    dataArea;
    boolean                                     checkdelete;
   /* EcoResSize                                  size;
    EcoResColor                                 color;
    EcoResStyle                                 style;
    EcoResProductMaster                         productmaster;
    , dimFromCombination;
    EcoResConfiguration                         config;
    InventTable                                 inventTable;
    ,ecoResProducttest;
    container                                   con;
    int                                         conin;*/
    InventDim                                   inventDim,inventDimcheck;
    EcoResProduct                               ecoResProduct;
    FromTime    startTime;
    int seconds = 1,counts;
    CommaIo file;
    container line;
    #define.ExampleFile(FileNameSave)
    FileIoPermission perm;
    CompanyInfo CompanyInfo;
    #File
    str   elapsed;
    ;
    startTime = timeNow();

 while select crossCompany InventDimCombination order by ItemId asc
                            where InventDimCombination.ItemId =="A01112Y07521"
                    notexists join inventBarcode
                           where inventBarcode.RetailVariantId == InventDimCombination.RetailVariantId
                    notexists join InventTrans
                            where InventTrans.ItemId == InventDimCombination.ItemId
                                && InventTrans.inventDimId == InventDimCombination.InventDimId
            {
                counts++;
                select ecoResProduct
                        where ecoResProduct.DisplayProductNumber == InventDimCombination.ItemId
                            && (ecoResProduct.Division == ProductTypeSetup::findByDivision("20").RecId
                            || ecoResProduct.Division == ProductTypeSetup::findByDivision("29").RecId)
                            && EcoResProduct.ProductCreationType == ProductCreationType::GlobalProduct;

                if(ecoResProduct)
                {
                    if(InventDimCombination.validateDelete())
                    {
                         select forUpdate * from InventDimCombination1 where InventDimCombination1.RecId == InventDimCombination.RecId;
                        InventDimCombination1.delete();
                    }
                }
                else
                    {
                        inventDim       = inventDim::find(InventDimCombination.InventDimId);
                        info(strFmt("Item %1, Size %2, Color %3, Config %4, Season %5 has transactions", InventDimCombination.ItemId, inventDim.InventSizeId, inventDim.InventColorId, inventDim.configId, inventDim.InventStyleId));
                    }
    }




        elapsed = timeConsumed(startTime, timeNow());
         info(strFmt("Time elapsed: %1 and number of records deleted %2", elapsed,counts));


}

-------------------------------------------------------------------------------------------------------------------
static void ClearProductMastervarient(Args _args)
{
     EcoResDistinctProductVariant                EcoResDistinctProductVariant, variant;
    EcoResProductVariantDimensionValue          EcoResProductVariantDimensionValue;
    EcoResProductTranslation                    ecoResProductTranslation_Variant;
    EcoResProductVariantColor                   ecoResProductVariantColor;
    EcoResProductVariantStyle                   ecoResProductVariantStyle;
    EcoResProductVariantSize                    ecoResProductVariantSize;
    EcoResProductVariantConfiguration           ecoResProductVariantConfiguration;
     DimensionAttributeValues                 DimensionAttributeValues;
    InventDimCombination                        InventDimCombination,InventDimCombination1,InventDimCombination2;
    InventItemBarcode                           inventBarcode;
    InventTrans                                 InventTrans;
    InventDimCombination                        InventDimCombinationCheckother;
    DataArea                                    dataArea;
    boolean                                     checkdelete;
   /* EcoResSize                                  size;
    EcoResColor                                 color;
    EcoResStyle                                 style;
    EcoResProductMaster                         productmaster;
    , dimFromCombination;
    EcoResConfiguration                         config;
    InventTable                                 inventTable;
    ,ecoResProducttest;
    container                                   con;
    int                                         conin;*/
    InventDim                                   inventDim,inventDimcheck;
    EcoResProduct                               ecoResProduct;
    FromTime    startTime;
    int seconds = 1,counts;
    CommaIo file;
    container line;
    #define.ExampleFile(FileNameSave)
    FileIoPermission perm;
    CompanyInfo CompanyInfo;
    #File
    str   elapsed;
    ;
    startTime = timeNow();

      while   select  ecoResProduct
                        where
                         ecoResProduct.DisplayProductNumber == "A01112Y07521"
                            && (ecoResProduct.Division == ProductTypeSetup::findByDivision("20").RecId
                            || ecoResProduct.Division == ProductTypeSetup::findByDivision("29").RecId)
                            && EcoResProduct.ProductCreationType == ProductCreationType::GlobalProduct
    {
     while select EcoResDistinctProductVariant order by RecId asc
     where EcoResDistinctProductVariant.DisplayProductNumber like ecoResProduct.DisplayProductNumber +"*"
        {
        select crossCompany InventDimCombination
        where InventDimCombination.DistinctProductVariant == EcoResDistinctProductVariant.RecId
        && InventDimCombination.ItemId == ecoResProduct.DisplayProductNumber;


                if(!InventDimCombination)
                {
                    ttsBegin;

                   // select forUpdate * from ecoResProductTranslation_Variant where ecoResProductTranslation_Variant.Product ==ecoResProduct.RecId;
                   // ecoResProductTranslation_Variant.delete();
                        select forUpdate * from EcoResProductVariantColor where EcoResProductVariantColor.DistinctProductVariant == EcoResDistinctProductVariant.RecId;
                    EcoResProductVariantColor.delete();
                        select forUpdate * from EcoResProductVariantStyle where EcoResProductVariantStyle.DistinctProductVariant == EcoResDistinctProductVariant.RecId;
                    EcoResProductVariantStyle.delete();
                        select forUpdate * from EcoResProductVariantSize where EcoResProductVariantSize.DistinctProductVariant == EcoResDistinctProductVariant.RecId;
                    EcoResProductVariantSize.delete();
                        select forUpdate * from EcoResProductVariantConfiguration where EcoResProductVariantConfiguration.DistinctProductVariant == EcoResDistinctProductVariant.RecId;
                    EcoResProductVariantConfiguration.delete();
                        select forUpdate * from DimensionAttributeValues where DimensionAttributeValues.EcoResDistinctProductVariant == EcoResDistinctProductVariant.RecId;
                     DimensionAttributeValues.delete();
                    InventDimCombination1=null;
                    select forUpdate * from variant where variant.RecId == EcoResDistinctProductVariant.RecId;
                    variant.delete();
                    ttsCommit;
                }
        }
    }
     elapsed = timeConsumed(startTime, timeNow());
         info(strFmt("Time elapsed: %1 and number of records deleted %2", elapsed,counts));

}

Sunday, December 3, 2017

Update All table id and Field Id on SQL dict based on AOT property

Dictionary      dictionary = new Dictionary();
    DictTable    dictTable;
    DictField       dictField;
    TableId         tableId,tableIdbuffer,NewtableId;
    FieldId         fieldId,fieldIdbuffer,newfieldId,fieldIdmin,fieldIdmax;
    SqlDictionary   sqlDictionaryTable;
    SqlDictionary   sqlDictionaryField;
    SqlDictionary   SqlDictionaryupdate,SqlDictionaryupdaterecordset;
    PS_Table        PS_Table;
    int             i;

    setPrefix("Update of data dictionary IDs");
    tableId = dictionary.tableNext(0);
    ttsbegin;
    select maxof(tabid) from SqlDictionaryupdate;
    tableIdbuffer = SqlDictionaryupdate.tabId + 1000;

    ttsBegin;
    delete_from PS_Table;
    ttsCommit;

    while (tableId > 0)
    {

        dictTable = new SysDictTable(tableId);
        setPrefix(dictTable.name());

        if (!dictTable.isSystemTable())
        {
            //Finds table in SqlDictionary by name in AOT, if ID was changed.
            //Empty field ID represents a table.
            select sqlDictionaryTable
                where sqlDictionaryTable.name == dictTable.name()
                && sqlDictionaryTable.fieldId == 0
                && sqlDictionaryTable.tabId != dictTable.id();

            if (sqlDictionaryTable)
            {
                //Updates table ID in SqlDictionary
                NewtableId = dictTable.id();
                select * from SqlDictionaryupdate
                where SqlDictionaryupdate.tabId == NewtableId;
                if(SqlDictionaryupdate)
                {

                    update_recordset SqlDictionaryupdaterecordset
                    setting TabId = tableIdbuffer
                    where SqlDictionaryupdaterecordset.TabId == SqlDictionaryupdate.tabId;
                    tableIdbuffer--;

                }

                if (ReleaseUpdateDB::changeTableId(
                    sqlDictionaryTable.tabId,
                    dictTable.id(),
                    dictTable.name()))
                {
                    info(strFmt("Table ID changed (%1 -> %2)", sqlDictionaryTable.tabId, dictTable.id()));
                }
            }

            fieldId = dictTable.fieldNext(0);
            select maxof(fieldId) from SqlDictionaryupdate;
            fieldIdbuffer = SqlDictionaryupdate.fieldId + 1000;
            select minOf(fieldId) from SqlDictionaryupdate;
            fieldIdmin = SqlDictionaryupdate.fieldId;
            //For all fields in table
            while (fieldId)
            {

                info(strFmt("%1",fieldId));
                dictField = dictTable.fieldObject(fieldId);
                //    info(dictField.name());
                if (dictField.isSql() && !dictField.isSystem())
                {
                    //Finds fields in SqlDictionary by name and compares IDs



                    select sqlDictionaryField
                        where sqlDictionaryField.tabId == dictTable.id()
                        && sqlDictionaryField.name == dictField.name()
                        && sqlDictionaryField.fieldId != 0
                        && sqlDictionaryField.fieldId != dictField.id();

                    if (sqlDictionaryField)
                    {
                        Newfieldid = dictField.id();
                        NewtableId = dictTable.id();

                        ttsBegin;
                        PS_Table.TabId = NewtableId;
                        PS_Table.Tablename = dictTable.name();
                        PS_Table.FieldName = dictField.name();
                        PS_Table.FieldId = Newfieldid;
                        PS_Table.insert();
                        ttsCommit;

                        select * from SqlDictionaryupdate
                        where SqlDictionaryupdate.tabId == NewtableId
                        && SqlDictionaryupdate.fieldId == Newfieldid;
                        if(SqlDictionaryupdate)
                        {

                             update_recordset SqlDictionaryupdaterecordset
                                setting FieldId = fieldIdbuffer
                                where SqlDictionaryupdaterecordset.TabId    == NewtableId
                                   && SqlDictionaryupdaterecordset.FieldId  == Newfieldid;
                            fieldIdbuffer--;

                        }

                        //Updates field ID in SqlDictionary
                        if (ReleaseUpdateDB::changeFieldId(
                            dictTable.id(),
                            sqlDictionaryField.fieldId,
                            dictField.id(),
                            dictTable.name(),
                            dictField.name()))
                        {
                            info(strFmt("Field %1 - ID changed (%2 -> %3)",
                            dictField.name(),
                            sqlDictionaryField.fieldId,
                            dictField.id()));
                        }
                    }
                }
                fieldId = dictTable.fieldNext(fieldId);
            }
        }
        tableId = dictionary.tableNext(tableId);
    }
    ttscommit;

Sunday, August 6, 2017

Stock on hand from SQL as of date

select INVENTSUM.itemid, sum(postedqty) as Postedqty,
sum(Received) as Received,
sum(Deducted) as Deducted,
sum(Registered) as Registered,
sum(PICKED) as PICKED,
sum(RESERVPHYSICAL) as RESERVPHYSICAL,
sum(ORDERED) as ORDERED,
sum(ARRIVED) as ARRIVED,
sum(RESERVORDERED) as RESERVORDERED,
sum(ONORDER) as ONORDER,
INVENTDIM.INVENTLOCATIONID,
INVENTDIM.INVENTSITEID,
INVENTDIM.CONFIGID
from INVENTSUM
join INVENTDIM
on INVENTDIM.INVENTDIMID = INVENTSUM.INVENTDIMID
where LASTUPDDATEPHYSICAL <= '2016-04-01'
--and itemid = '200935'
group by INVENTSUM.itemid, INVENTDIM.INVENTLOCATIONID,INVENTDIM.INVENTSITEID,INVENTDIM.CONFIGID

--------------------------------------------------------------------------------------------------------
select * from (select INVENTSUM.itemid, sum(AvailPhysical) as AvailPhysical,
INVENTDIM.INVENTLOCATIONID,
INVENTDIM.INVENTSITEID,
INVENTDIM.CONFIGID,
INVENTDIM.INVENTSTYLEID,INVENTDIM.INVENTCOLORID
,INVENTDIM.INVENTBATCHID,INVENTDIM.INVENTSIZEID
from INVENTSUM as INVENTSUM
join INVENTDIM
on INVENTDIM.INVENTDIMID = INVENTSUM.INVENTDIMID
where /*LASTUPDDATEPHYSICAL <= '2016-04-01'
and */ INVENTSUM.itemid = 'A92991Y61553' and  INVENTSUM.DATAAREAID = 'USMF'
and INVENTDIM.INVENTSTYLEID != ''
group by INVENTSUM.itemid, INVENTDIM.INVENTLOCATIONID,INVENTDIM.INVENTSITEID,INVENTDIM.CONFIGID,INVENTDIM.INVENTSTYLEID,INVENTDIM.INVENTCOLORID,INVENTDIM.INVENTBATCHID,INVENTDIM.INVENTSIZEID)
 Stock
where stock.AvailPhysical >0 

Wednesday, July 19, 2017

Main Account Dimension update

static void MainAccountDimension(Args _args)
{
LSVVendInvStageTmp LSVVendInvStageTmp;
    MainAccountLegalEntity  MainAccountLegalEntity;
    MainAccount             mainaccount;
    CompanyInfo                         companyInfoList;
    Ledger                              ledgerList;
    MainAccountLegalEntity              mainAccountLegalEntityList;
    ;
    while select *from mainaccount
    {
   
         while select DataArea from companyInfoList
            join RecId from ledgerList
                where ledgerList.PrimaryForLegalEntity == companyInfoList.RecId &&
                    ledgerList.ChartOfAccounts == mainaccount.LedgerChartOfAccounts
            notexists join RecId from mainAccountLegalEntityList
                where mainAccountLegalEntityList.LegalEntity == companyInfoList.RecId &&
                    mainAccountLegalEntityList.MainAccount == mainaccount.RecId
        {
            MainAccountLegalEntity.clear();
            MainAccountLegalEntity.MainAccount          = mainaccount.RecId;
            MainAccountLegalEntity.LegalEntity          = companyInfoList.RecId;
            MainAccountLegalEntity.DefaultDimension     = 5637144576;
            MainAccountLegalEntity.FixedDimensions      = 0;

            MainAccountLegalEntity.insert();
        }
    }
}

Thursday, July 13, 2017

Connect two DB

select sl4.salesid,sl4.itemid,sl4.LINENUM,sl4.CREATEDDATE from I5Production.dbo.SALESLINE as SL4
where NOT EXISTS

( select SL12.salesid,SL12.ITEMID,SL12.LINENUM From AxDev.dbo.SALESLINE SL12
where  sl4.salesid = SL12.salesid
and sl4.itemid = SL12.ITEMID
and sl4.LINENUM = SL12.LINENUM
and sl4.DATAAREAID = SL12.DATAAREAID
and  sl4.DATAAREAID = 'i5d'
--and  sl4.CREATEDDATE > '2015-12-31'
--and  sl4.SALESID ='S10099614'
);

How to identify the user that was used to change an object from AOT in AX2012

Get the object name for which we need to track these (user and date&time) information's. Login to SQL Server Management Studio an...