public void closeOk()
{
    MultiSelectionHelper                    msh                     = MultiSelectionHelper::construct();
    FormRun                                 fr                      = this.args().caller();
    RecId                                   recId;
    str                                     vaultDrawingPrintType;
    str                                     inventBomRecId;
    str                                     prodIds;
    ProdId                                  prodId;
    Args                                    printArgs               = new Args();
    str                                     strDrawings;
    str                                     strMultiSelect;
    PALDC_OPC_PrintSubType                  subType;

    boolean                                 drawingFather           = false;
    boolean                                 drawingChildren         = false;

    FormDataSource                          fds                     = fr.dataSource();
    CustPackingSlipJour                     custPackingSlipTable;

    CustTrans                               custTrans;
    CustTable                               custTable;
    BFInventPackingSlipJour                 inventPackingSlipTable;
    InventJournalTable                      inventJournalTable;
    VendPackingSlipJour                     vendPackingSlipJour;
    VendPackingSlipTrans                    vendPackingSlipTrans;
    VendPackingSlipVersion                  vendPackingSlipVersion;
    ProdTable                               prodTable;
    WMSJournalTable                         wmsJournalTable;

    List                                    resultList              = new List(Types::Int64);
    ListIterator                            resultIterator;


    msh.parmDatasource(fds);

    switch (this.args().parmEnum())
    {
        case PALDC_OPC_PrintType::ProdTableAll:
            prodTable = msh.getFirst();
            while(prodTable)
            {
                recId = prodTable.RecId;

                //verifico i check box e lancio direttamente il runOPC
                // Ordini di Produzione
                if(cbxProdTable.checked())
                {
                    printArgs.parmEnum(PALDC_OPC_PrintType::ProdTable);

                    resultList.addEnd(element.runOPC(recId                          // recId
                                    , printArgs                                     // printArgd
                                    , strFmt("OP %1", prodTable.ProdId)             // objectId
                                    , ""                                            // optionalStr1
                                    , ""                                            // optionalStr2
                                    , ieProdTableNoCopies.value()                   // nOfCopies
                                    , false                                         // optionalBoolean1
                                    , false                                         // optionalBoolean2
                                    ));
                }

                // Bindelli
                if(cbxProdTableBadge.checked())
                {
                    printArgs.parmEnum(PALDC_OPC_PrintType::ProdTableBadge);

                    resultList.addEnd(element.runOPC(recId                          // recId
                                    , printArgs                                     // printArgd
                                    , strFmt("Bindello %1", prodTable.ProdId)       // objectId
                                    , seProjId.text()                               // optionalStr1
                                    , ""                                            // optionalStr2
                                    , ieProdTableBadgeNoCopies.value()              // nOfCopies
                                    , false                                         // optionalBoolean1
                                    , false                                         // optionalBoolean2
                                    ));

                }

                //Disegni da Vault
                if(cbVaultDraw.selection() != PALCBO_VaultDrawingPrintType::None)
                {

                    switch(cbVaultDraw.selection())
                    {
                        case PALCBO_VaultDrawingPrintType::FatherChilds:
                            drawingFather   = true;
                            drawingChildren = true;
                            break;
                        case PALCBO_VaultDrawingPrintType::Father:
                            drawingFather   = true;
                            break;
                        case PALCBO_VaultDrawingPrintType::Childs:
                            drawingChildren = true;
                            break;
                        default:
                            throw Exception::Error;
                    }

                    printArgs.parmEnum(PALDC_OPC_PrintType::VaultDrawings);

                    resultList.addEnd(element.runOPC(recId                                                                          // recId
                                    , printArgs                                                                                     // printArgd
                                    , strFmt("Disegni %1%2 %3", (drawingFather ? "Padre" : ""), (drawingChildren ? "Figli" : ""), prodTable.ProdId)                                                      // objectId
                                    , strFmt("%1$%2",prodTable.ItemId, prodTable.inventTable().PALEBI_VaultRevision)                // optionalStr1
                                    , prodTable.ProdId                                                                              // optionalStr2
                                    , 1                                                                                             // nOfCopies
                                    , drawingFather                                                                                 // optionalBoolean1
                                    , drawingChildren                                                                               // optionalBoolean2
                                    , PALDC_OPC_PrintSubType::ProdBom                                                               // printSubType
                                    ));
                }

                prodTable = msh.getNext();
            }
            break;

        case PALDC_OPC_PrintType::CustPackingSlip:
            custPackingSlipTable = msh.getFirst();
            while(custPackingSlipTable)
            {

                resultList.addEnd(element.runOPC(custPackingSlipTable.RecId         // recId
                    , this.args()                                                   // printArgs
                    , custPackingSlipTable.PackingSlipId                            // objectId
                    ));

                custPackingSlipTable = msh.getNext();
            }
            break;

        case PALDC_OPC_PrintType::CustPackingSlipWH:
            inventPackingSlipTable = msh.getFirst();
            while(inventPackingSlipTable)
            {
                resultList.addEnd(element.runOPC(inventPackingSlipTable.RecId       // recId
                    , this.args()                                                   // printArgs
                    , inventPackingSlipTable.BFInventPackingSlipOriginNum           // objectId
                    ));
                inventPackingSlipTable = msh.getNext();
            }
            break;

        case PALDC_OPC_PrintType::VendPackingSlip:
            vendPackingSlipJour = msh.getFirst();
            while(vendPackingSlipJour)
            {
                vendPackingSlipVersion = VendPackingSlipVersion::findLatest(vendPackingSlipJour.RecId);
                resultList.addEnd(element.runOPC(vendPackingSlipJour.RecId         // recId
                    , this.args()                                                   // printArgs
                    , vendPackingSlipVersion.InternalPackingSlipId                  // objectId
                    ));
                vendPackingSlipJour = msh.getNext();
            }
            break;

        case PALDC_OPC_PrintType::LabelPrinterSystem:

            switch(this.args().dataset())
            {
                case tableNum(custTable):
                    //Stampa indirizzi cliente
                    msh.parmDatasource(this.args().record().dataSource());

                    subType = PALDC_OPC_PrintSubType::CustomerAddressLPS;
                    custTable   = msh.getFirst();
                    while(custTable.RecId)
                    {
                        if(dtFrom.dateValue() && dtTo.dateValue())
                        {
                            while select firstOnly custTrans
                            where custTrans.AccountNum == custTable.AccountNum
                            && custTrans.TransDate >= dtFrom.dateValue()
                            && custTrans.TransDate <= dtTo.dateValue()
                            {
                                strMultiSelect += strFmt("%1,", custTable.RecId);
                            }
                        }
                        else
                        {
                            strMultiSelect += strFmt("%1,", custTable.RecId);
                        }
                        custTable = msh.getNext();
                    }
                    break;
                case tableNum(VendPackingSlipJour):
                    //Stampa
                    msh.parmDatasource(this.args().record().dataSource());

                    subType = PALDC_OPC_PrintSubType::VendPackingSlipJourLPS;
                    vendPackingSlipJour = msh.getFirst();
                    while(vendPackingSlipJour.RecId)
                    {
                        strMultiSelect += strFmt("%1§%2@", vendPackingSlipJour.RecId, reLabelCopies.realValue());
                        vendPackingSlipJour = msh.getNext();
                    }
                    break;

                case tableNum(InventJournalTable):
                    //Stampa
                    msh.parmDatasource(this.args().record().dataSource());

                    subType = PALDC_OPC_PrintSubType::InventJournalTableLPS;
                    inventJournalTable   = msh.getFirst();
                    while(inventJournalTable.RecId)
                    {
                        strMultiSelect += strFmt("%1§%2@", inventJournalTable.RecId, reLabelCopies.realValue());
                        inventJournalTable = msh.getNext();
                    }
                    break;
                case tableNum(WMSJournalTable):
                    //Stampa
                    msh.parmDatasource(this.args().record().dataSource());

                    subType = PALDC_OPC_PrintSubType::WMSJournalTableLPS;
                    wmsJournalTable   = msh.getFirst();
                    while(wmsJournalTable.RecId)
                    {
                        strMultiSelect += strFmt("%1§%2@", wmsJournalTable.RecId, reLabelCopies.realValue());
                        wmsJournalTable = msh.getNext();
                    }
                    break;
                default:
                    //Stampa articolo singolo
                    subType = PALDC_OPC_PrintSubType::PrintByItemLPS;
                    strMultiSelect = strFmt("%1§%2§%3§%4§%5§%6§%7§%8§%9§%10§%11§%12§%13§%14,"
                                                , this.formatStringForCmdParm(seItemId.text())
                                                , this.formatStringForCmdParm(seItemName.text())
                                                , this.formatStringForCmdParm(seInventBatchId.text())
                                                , this.formatStringForCmdParm(sePbmProjectInventId.text())
                                                , this.formatStringForCmdParm(seWMSLocationId.text())
                                                , this.formatStringForCmdParm(seLogisticsAddressCountryRegionId.text())
                                                , reInventQty.realValue()
                                                , reLabelCopies.realValue()
                                                , this.formatStringForCmdParm(seVendAccount.text())
                                                , this.formatStringForCmdParm(sePackingSlipId.text())
                                                , date2StrXpp(deDate.dateValue())
                                                , this.formatStringForCmdParm(sePurchUnit.text())
                                                , this.formatStringForCmdParm(sePurchId.text())
                                                , this.formatStringForCmdParm(seProdId.text())
                                              );
                    break;
            }
            if(strMultiSelect)
            {
                strMultiSelect = subStr(strMultiSelect, 0, strLen(strMultiSelect) -1);
                recId = this.args().record().RecId;

                // Bindello Articolo - A6
                if (cbxA6Badge.checked())
                {
                    printArgs.parmEnum(PALDC_OPC_PrintType::InventTableBadge);
                    resultList.addEnd(element.runOPC(recId                                                          // recId
                                    , printArgs                                                                     // printArgd
                                    , "Bindello Articolo - A6"                                                      // objectId
                                    , strFmt('%1†0‽%2', strMultiSelect, reA6BadgeCopies.realValue())                // optionalStr1
                                    , ""                                                                            // optionalStr2
                                    , reA6BadgeCopies.realValue()                                                   // nOfCopies
                                    , false                                                                         // optionalBoolean1
                                    , false                                                                         // optionalBoolean2
                                    , PALDC_OPC_PrintSubType::A6Badge                                               // subType
                                    ));
                }

                // Bindello Articolo - A5
                if (cbxA5Badge.checked())
                {
                    printArgs.parmEnum(PALDC_OPC_PrintType::InventTableBadge);
                    resultList.addEnd(element.runOPC(recId                                                          // recId
                                    , printArgs                                                                     // printArgd
                                    , "Bindello Articolo - A5"                                                      // objectId
                                    , strFmt('%1†0‽%2', strMultiSelect, reA5BadgeCopies.realValue())                // optionalStr1
                                    , ""                                                                            // optionalStr2
                                    , reA5BadgeCopies.realValue()                                                   // nOfCopies
                                    , false                                                                         // optionalBoolean1
                                    , false                                                                         // optionalBoolean2
                                    , PALDC_OPC_PrintSubType::A5Badge                                               // subType
                                    ));
                }

                // Bindello Articolo - A4
                if (cbxA4Badge.checked())
                {
                    printArgs.parmEnum(PALDC_OPC_PrintType::InventTableBadge);

                    resultList.addEnd(element.runOPC(recId                                                          // recId
                                    , printArgs                                                                     // printArgd
                                    , "Bindello Articolo - A4"                                                      // objectId
                                    , strFmt('%1†0‽%2', strMultiSelect, reA4BadgeCopies.realValue())                // optionalStr1
                                    , ""                                                                            // optionalStr2
                                    , reA4BadgeCopies.realValue()                                                   // nOfCopies
                                    , false                                                                         // optionalBoolean1
                                    , false                                                                         // optionalBoolean2
                                    , PALDC_OPC_PrintSubType::A4Badge                                               // subType
                                    ));
                }

                // Ettichette
                if (cbxLabel.checked())
                {
                    printArgs.parmEnum(PALDC_OPC_PrintType::LabelPrinterSystem);
                    printArgs.parm(strFmt("%1", PALDC_OPC_PrintTypes::find(printArgs.parmEnum(), subType).RecId));

                    resultList.addEnd(element.runOPC(recId          // recId
                                    , printArgs                     // printArgd
                                    , "Label Printer System"        // objectId
                                    , strMultiSelect                // optionalStr1
                                    , ""                            // optionalStr2
                                    , reLabelCopies.realValue()     // nOfCopies
                                    , false                         // optionalBoolean1
                                    , false                         // optionalBoolean2
                                    , subType                       // subType
                                    ));
                }
            }
            else
            {
                throw error("Not implemented");
            }
            break;

        default:
            throw error("Not implemented");
    }

    super();

    resultIterator = new ListIterator(resultList);
    while(resultIterator.more())
    {
        PALDC_OfficePrinterClient::printPortal(resultIterator.value());
        resultIterator.next();
    }

    this.close();
}