Monday, October 4, 2010

Rename items quickly

Here is a little script to rename items quickly.  Just provide a CSV file with old and new item number.  I found that making the CSV file was faster than making a job to intelligently rename items because I could use Excel functions and review the new item numbers faster.

static void renameFromCSV(Args _args)
{
    #File
    CommaIO                 file;
    Container               values;
    Dialog                  dialog;
    DialogField             dfFileName;
    LineNum                 lineNum;
    ItemID                  itemIDfrom;
    ItemID                  itemIDto;
    InventTable             inventTable;
    ;
    setPrefix(funcName());
    dialog      = new Dialog("Rename items");
    dialog.filenameLookupFilter(["@SYS39829", #AllFilesName + #csv]);
    dfFileName  = dialog.addField(typeid(FileNameOpen));
    if (!dialog.run() || !dfFileName.value())
        return;

    if (!WinAPI::fileExists(dfFileName.value()))
        throw error(strfmt("@SYS18678", dfFileName.value()));

    file = new CommaIO(dfFileName.value(), #io_read);
    if (!file)
        throw error("@SYS74299");
    values = file.read();

    while (values != connull())
    {
        setPrefix(strfmt("Row %1 for %2", lineNum, conpeek(values, 1)));
        if (conlen(values) != 2)
            throw error('Bad row');

        itemIDfrom  = conpeek(values, 1);
        itemIDto    = conpeek(values, 2);

        if (InventTable::exist(itemIDfrom))
        {
            if (!InventTable::exist(itemIDto))
            {
                ttsbegin;
                inventTable = InventTable::find(itemIDfrom, true);
                inventTable.ItemId = itemIDto;
                inventTable.renamePrimaryKey();
                ttscommit;
                
                info(strfmt("%1 to %2", itemIDfrom, itemIDto));
            }
            else
                error(strfmt("@SYS93964", itemIDto));
        }
        else
            error(strfmt("@SYS94719", itemIDfrom));

        lineNum++;
        values = file.read();
    }
    info("@SYS78985");
}

No comments:

Post a Comment