Skip to main content

Code Delete From Entity for Items

 static void DeleteItemsFromExcelEntity(Args _args)

{

    SysExcelApplication         application;

    SysExcelWorkbooks           workbooks;

    SysExcelWorkbook            workbook;

    SysExcelWorksheets          worksheets;

    SysExcelWorksheet           worksheet;

    SysExcelCells               cells;

    COMVariantType              type;

    FilenameOpen                filename;

    Dialog                      dialog;

    DialogField                 dialogFilename;

    str                         itemId;

    int                         row;

    str                         targetCompany = "usmf"; // Change to your target legal entity (DataAreaId)


    InventTable                 inventTable;

    InventTrans                 inventTrans;


    #Excel


    str COMVariant2Str(COMVariant _cv, int _decimals = 0, int _characters = 0, int _separator1 = 0, int _separator2 = 0)

    {

        switch (_cv.variantType())

        {

            case (COMVariantType::VT_BSTR):     return _cv.bStr();

            case (COMVariantType::VT_R4):       return num2str(_cv.float(), _characters, _decimals, _separator1, _separator2);

            case (COMVariantType::VT_R8):       return num2str(_cv.double(), _characters, _decimals, _separator1, _separator2);

            case (COMVariantType::VT_DECIMAL):  return num2str(_cv.decimal(), _characters, _decimals, _separator1, _separator2);

            case (COMVariantType::VT_DATE):     return date2str(_cv.date(), 123, 2, 1, 2, 1, 4);

            case (COMVariantType::VT_EMPTY):    return "";

            default: throw error(strFmt("@SYS26908", _cv.variantType()));

        }

    }


    dialog = new Dialog("Delete Items in Specific Entity");

    dialogFilename = dialog.addField(extendedTypeStr(FilenameOpen), "Select Excel File");

    dialog.filenameLookupFilter(["@SYS28576", #XLSX, "@SYS28576", #XLS]);

    dialog.caption("Delete Items Job");


    if (!dialog.run())

        return;


    filename = dialogFilename.value();


    application = SysExcelApplication::construct();

    workbooks = application.workbooks();


    try

    {

        workbooks.open(filename);

    }

    catch

    {

        throw error("Cannot open Excel file.");

    }


    workbook = workbooks.item(1);

    worksheets = workbook.worksheets();

    worksheet = worksheets.itemFromNum(1);

    cells = worksheet.cells();


    row = 1;


    try

    {

        ttsBegin;


        changeCompany(targetCompany)

        {

            do

            {

                row++;

                itemId = COMVariant2Str(cells.item(row, 1).value());


                if (!itemId)

                    continue;


                select firstOnly inventTrans where inventTrans.ItemId == itemId;


                if (inventTrans.RecId)

                {

                    warning(strFmt("Item '%1' has transactions in company '%2'. Skipping.", itemId, targetCompany));

                    continue;

                }


                select forUpdate inventTable where inventTable.ItemId == itemId;


                if (inventTable.RecId)

                {

                    try

                    {

                        inventTable.delete();

                        info(strFmt("Deleted item '%1' from company '%2'.", itemId, targetCompany));

                    }

                    catch

                    {

                        error(strFmt("Error deleting item '%1'.", itemId));

                    }

                }

                else

                {

                    warning(strFmt("Item '%1' not found in company '%2'.", itemId, targetCompany));

                }


                type = cells.item(row + 1, 1).value().variantType();

            }

            while (type != COMVariantType::VT_EMPTY);

        }


        ttsCommit;

        info("Deletion process completed.");

    }

    catch

    {

        error("Exception occurred during item deletion.");

    }


    application.quit();

}


Comments

Popular posts from this blog

Process of Sales order in Technical terms in D365Fo

 🔥 Sales Order Technical Flow in D365FO (Creation → Confirmation → Picking → Packing Slip → Invoice → Accounting) 1. Sales Order Creation Tables SalesTable → SO header SalesLine → SO lines CustTable → Customer master InventDim / InventDimCombination → Dimensions InventTable / EcoResProduct → Item master Framework Classes SalesTableType / SalesLineType Responsible for validation, defaulting, creation logic Key Methods SalesTable.initValue() SalesLine.initFromSalesTable() SalesTable.validateWrite() SalesLine.validateWrite() Events (Extensions) SalesTableType.createSalesTable() SalesLineType.createSalesLine() 2. Reservation (Optional) If reservation is done: Tables InventTrans (Reservation status) InventReservation Classes InventUpd_Reservation InventTransReservation Reservations impact picking and inventory availability. 3. Sales Order Confirmation Confirms order and freezes price/quantity. Posti...

Top 200 Q&A in D365FO Technical

  SECTION 1 — X++ BASICS (10 Q&A) 1. What is X++? A proprietary object-oriented language used in Dynamics 365 Finance & Operations for business logic, similar to C# but integrated with D365 runtime. 2. What is a TableBuffer? It is an in-memory object referencing a table. Example: CustTable custTable; 3. What is difference between select and select firstonly ? select → returns all matching rows firstonly → returns only the first matched row 4. What is ttsbegin & ttscommit ? Used to wrap database transactions; ensures atomicity. 5. Can we write SQL queries directly in X++? No. X++ uses a database-abstracted select statement. 6. What is a container? A collection datatype used to store mixed data types. 7. Difference between container and map? Map stores key-value pairs; container is indexed and immutable. 8. What is a temp table? A table that stores data temporarily in memory or database depending on property. 9. What is recursion in X++? A method c...

Process of Purchase order in Technical terms in D365Fo

  Purchase Order Technical Flow in D365FO (Step-by-Step) (From creation → approval workflow → posting → product receipt → invoice → accounting) 1. Purchase Order Creation Tables involved PurchTable → PO header PurchLine → PO lines VendTable → Vendor master InventDim / InventDimCombination → Item dimensions EcoResProduct / InventTable → Item master Classes / Framework PurchTableType / PurchLineType Framework that controls creation, validation, defaulting. Key methods PurchTable.initValue() PurchLine.initFromPurchTable() PurchTable.validateWrite() PurchLine.validateWrite() Events (Extension points) PurchTableType.createPurchTable() PurchLineType.createPurchLine() 2. Purchase Order Confirmation Document Status update PurchTable.DocumentState → Confirmation PurchParmBuffer tables used for versioning. Posting Class PurchFormLetter_Confirm Called internally via PurchFormLetter::construct(DocumentStatus::Co...