container, set, map
Container
container con;
UserGroupInfo userGroupInfo;
while select userGroupInfo
order by Id desc
{
con += [[userGroupInfo.Id, userGroupInfo.Name]];
}
return con;
Container conNull
container ContPackageContainerId;
;
ContPackageContainerId = conNull();
Container peek
container ContPackageContainerId;
int iCont;
;
ContPackageContainerId = conNull();
ContPackageContainerId = SPLProdFinishedLocalization::PackageContainerIdList(salesLine);
for (iCont = 1; iCont <= conLen(ContPackageContainerId); iCont++)
{
SPLProdFinishedLocalization.PackageContainerId = conpeek(ContPackageContainerId,iCont);
}
Container replace at a position
static void conPokeExample(Args _arg)
{
container c1 = ["item1", "item2", "item3"];
c1 = conPoke(c1, 2, "item2_new");
//-> C1 = ["item1", "item2_new", "item3"];
}
str to container
str2con -> transform str to con
ex :
//Call report with parm str
if (SPLhebPickingFormat && markingLabel && existTransfer)
{
markingArgs = new Args();
markingArgs.record(wmsPickingRoute);
strStatus = (showRegistered ? "1" : "0") + "," + (showActivated ? "1" : "0") + "," + (showStarted ? "1" : "0") + "," + (showPicked ? "1" : "0") + "," +
(showStaged ? "1" : "0") + "," + (showLoaded ? "1" : "0") + "," + (showCanceled ? "1" : "0") + "," + (showCompleted ? "1" : "0");
markingArgs.parm(strStatus);
markingMf = new MenuFunction(menuItemOutputStr(SPLBasicItemReportRouteId), MenuItemType::Output);
markingReport = markingMf.create(markingArgs);
markingReport.report().interactive(false);
markingReport.run(true);
}
//Report read the str
boolean showRegistered, showActivated, showStarted, showPicked, showStaged, showLoaded, showCanceled, showCompleted;
switch (element.args().dataset())
{
case tablenum(wmsPickingRoute):
wmsPickingRoute = element.args().record();
//curJournalId = inventJournalTrans.JournalId;
showStatusStr = element.args().parm();
[showRegistered, showActivated, showStarted, showPicked, showStaged, showLoaded, showCanceled, showCompleted] = str2con(showStatusStr);
break;
default:
throw error("@SPL2194");
}
Probleme with function string to container;
Ex
costCenters = "001,002";
cont = str2cont(costCenters ,","); - "1","2" - It remove the 0 !
Solution :
List listCostCenter;
str costCenters = "001,002";
;
listCostCenter = new List(Types::String);
listCostCenter = StrSplit(costCenters,','); //"001","002"
Set:List of values
//Set : List of values
Set SPLwmsLocationIdSet;
SPLwmsLocationIdSet = new Set(Types::String);
SPLwmsLocationIdSet.add(wmsLocation.wMSLocationId);
if (!SPLwmsLocationIdSet || SPLwmsLocationIdSet.elements() == 0)
return;
se = SPLwmsLocationIdSet.getEnumerator();
while (se.moveNext())
{
wmsLocation = se.current();
}
SetEnumerator se;
se = wmsShipmentIdSet.getEnumerator();
while (se.moveNext())
{
wmsShipment = WMSShipment::find(se.current());
if (wmsShipment.PackingType == WMSPackingType::Order)
{
this.sumBy(AccountOrder::None);
break;
}
}
Set:Search on a value
Set PackageContainerIdSet; //Set of string;
SetEnumerator se;
PackageContainerIdSet = new Set(Types::String);
if (!PackageContainerIdSet.in(SPLProdFinishedLocalization.PackageContainerId))
{
PackageContainerIdSet.add(SPLProdFinishedLocalization.PackageContainerId);
}
...
if (PackageContainerIdSet && PackageContainerIdSet.elements() != 0)
{
se = PackageContainerIdSet.getEnumerator();
while (se.moveNext())
{
PackageContainerId = se.current();
//We check if this package is already count.
Map
// We can use MapIterator (more and next) or getEnumerator (just moveNext)
//new MapIterator
MapIterator mi;
Map mapLineDisc;
;
mapLineDisc = new Map(Types::String,Types::Container);
mi = new MapIterator(mapLineDisc);
mi.begin();
while (mi.more())
{
lineDisc = mi.key();
[qtyLine,qtyTable] = mi.value();
mi.next();
}
//getEnumerator
MapEnumerator me;
me = _mapCustRecId.getEnumerator();
while (me.moveNext())
{
itemId = me.currentKey();
contQtyId = me.currentValue();
salesQty = conpeek(contQtyId,1);
salesLine.clear();
}
//
mapLineDisc = new Map(Types::String,Types::Container);
if (!mapLineDisc.exists(SPLReplacementLine.LineDisc))
{
qtyLine = SPLReplacementLine.Qty * salesLine.SalesQty;
qtyTable = SPLReplacementTable.Qty * salesLine.SalesQty;
mapLineDisc.insert(SPLReplacementLine.LineDisc,[qtyLine,qtyTable]);
}
else
{
[qtyLine,qtyTable] = mapLineDisc.lookup(SPLReplacementLine.LineDisc);
qtyLine += SPLReplacementLine.Qty * salesLine.SalesQty;
qtyTable += SPLReplacementTable.Qty * salesLine.SalesQty;
mapLineDisc.remove(SPLReplacementLine.LineDisc);
mapLineDisc.insert(SPLReplacementLine.LineDisc,[qtyLine,qtyTable]);
}
//insert
Common tradeRecord;
Map mapTradeRecord = new Map(typeId2Type(typeid(recId)), Types::Record);
// In AX2012 = new Map(typeName2Type(extendedTypeStr(RecId)), Types::Record);
for (tradeRecord = tradeRecord_ds.getFirst(true) ? tradeRecord_ds.getFirst(true) : tradeRecord_ds.cursor(); tradeRecord; tradeRecord = tradeRecord_ds.getNext())
{
mapTradeRecord.insert(tradeRecord.RecId,tradeRecord);
}
//MapIterator
mapReceipt = new Map(Types::Container,Types::Real);
mapReceipt.insert([inventTrans.InventRefTransId,receipt.InventDimId,receipt.StatusReceipt],qty);
MapIterator mi;
mi = new MapIterator(mapReceipt);
mi.begin();
while (mi.more())
{
[refTransId,inventDimIdReceipt,statusReceipt] = mi.key();
qty = mi.value();
mi.next();
}
//example
static void JobIteratePrinters2(Args _args)
{
SysPrintOptions sysPrintOptions;
Map _printerMap;
MapIterator mapIterator;
PrinterName printerName;
PrinterName displayPrinterName;
ClassRunMode classRunMode;
;
sysPrintOptions = new SysPrintOptions();
sysPrintOptions.buildPrinterMap();
_printerMap = sysPrintOptions.getPrinterMap();
if (_printerMap.elements())
{
mapIterator = new MapIterator(_printerMap);
mapIterator.begin();
while (mapIterator.more())
{
[printerName, classRunMode, displayPrinterName] = mapIterator.value();
// device.add(displayPrinterName);
print displayPrinterName;
mapIterator.next();
}
}
// for (i=1; i X= numberOfPrinters; i++)
// {
// tmpPrinterName = printJobSettings.getPrinter(i);
// print tmpPrinterName; //the same as displayPrinterNaprinterMapme.
// classRunMode = printJobSettings.getRunOn(i);
// displayPrinterName = '';
// displayPrinterName = SysPrintOptions::getPrinterName(classRunMode, tmpPrinterName);
// print displayPrinterName;
//
// }
pause;
}
//=== Map RecId ===
Map lineMessage;
lineMessage = new Map(typeId2Type(typeid(recId)), Types::Integer);
if (!lineMessage.exists(priceDiscTable.RecId))
lineMessage.insert(priceDiscTable.RecId,element.checkLines(priceDiscTable));
if (lineMessage.lookup(priceDiscTable.RecId) != -1 && inventDimParmPriceWarning.toString())
warningText.text(strfmt("@SYS70190",inventDimParmPriceWarning.toString()));
lineMessage.remove(priceDiscTable.RecId);
if (!lineMessage.exists(_priceDiscTable.RecId))
lineMessage.insert(_priceDiscTable.RecId,element.checkLines(_priceDiscTable));
return lineMessage.lookup(_priceDiscTable.RecId);
//=== Map Record ===
client static container getFormRecord(FormDataSource tradeRecord_ds)
{
Common tradeRecord;
Map mapTradeRecord = new Map(typeId2Type(typeid(recId)), Types::Record);
for (tradeRecord = tradeRecord_ds.getFirst(true) ? tradeRecord_ds.getFirst(true) : tradeRecord_ds.cursor(); tradeRecord; tradeRecord = tradeRecord_ds.getNext())
{
mapTradeRecord.insert(tradeRecord.RecId,tradeRecord);
}
return mapTradeRecord.pack();
}
//=== Map Container ===
if (! mapReceipt)
mapReceipt = new Map(Types::Container,Types::Real);
if (qty)
{
mapReceipt.insert([inventTrans.InventRefTransId,receipt.InventDimId,receipt.StatusReceipt],qty);
}
if (mapReceipt)
{
mi = new MapIterator(mapReceipt);
mi.begin();
while (mi.more())
{
[refTransId,inventDimIdReceipt,statusReceipt] = mi.key();
qty = mi.value();
inventDimReceipt = InventDim::find(inventDimIdReceipt);
}
}
//Example of map with key with + : ex class : InventReleaseOrderPickingForm
//In this example we stock it in a map to avoid to find the stock if we find it before.
//Declaration :
Map qtyPhysicalInventMap; //Key : itemId+inventdimId, Value : qty physical available
protected InventQty findQtyPhysicalInvent(ItemId _itemId, InventDim _inventDim)
{
InventQty qtyPhysicalInvent;
InventDimParm inventDimParm;
if (!qtyPhysicalInventMap)
{
qtyPhysicalInventMap = new Map(Types::String, Types::Real);
}
if (qtyPhysicalInventMap.exists(_itemId + _inventDim.InventDimId))
{
qtyPhysicalInvent = qtyPhysicalInventMap.lookup(_itemId + _inventDim.InventDimId);
}
else
{
inventDimParm.initFromInventDim(_inventDim);
qtyPhysicalInvent = InventOnhand::newParameters(_itemId,_inventDim, inventDimParm).physicalInvent();
qtyPhysicalInventMap.insert(_itemId + _inventDim.InventDimId, qtyPhysicalInvent);
}
return qtyPhysicalInvent;
}
Map with value container - Remove - insert
// to update the container = value of the map we need to do remove insert of the updated value.
WMSPickingRoute localWMSPickingRoute;
Map SPLContPerCompMap = new Map(Types::String,Types::Container);
container SplRouteIdCont;
List SPLlistPerComp = new List(Types::String);
for (localWMSPickingRoute = wmsPickingRoute_ds.getFirst(true) ? wmsPickingRoute_ds.getFirst(true) : wmsPickingRoute_ds.cursor(); localWMSPickingRoute.RecId; localWMSPickingRoute = wmsPickingRoute_ds.getNext())
{
if (SPLContPerCompMap.exists(localWMSPickingRoute.dataAreaId))
{
SplRouteIdCont = SPLContPerCompMap.lookup(localWMSPickingRoute.dataAreaId);
SplRouteIdCont += [localWMSPickingRoute.PickingRouteID];
SPLContPerCompMap.remove(localWMSPickingRoute.dataAreaId);
SPLContPerCompMap.insert(localWMSPickingRoute.dataAreaId,SplRouteIdCont);
}
else
SPLContPerCompMap.insert(localWMSPickingRoute.dataAreaId,[localWMSPickingRoute.PickingRouteID]);
}
//example to fill a list from a map with container .
container SplRouteIdCont;
MapIterator SPLmi;
SPLCompany SPLCompany;
int iCont;
SPLmi = new MapIterator(SPLContPerCompMap);
SPLmi.begin();
while (SPLmi.more())
{
SPLCompany = SPLmi.key();
SplRouteIdCont = conNull();
SplRouteIdCont = SPLmi.value();
SPLlistPerComp = new List(Types::String);
for (iCont = 1; iCont X= conLen(SplRouteIdCont); iCont++)
{
SPLlistPerComp.addEnd(conpeek(SplRouteIdCont,iCont));
}
changeCompany(SPLCompany)
{
WMSPickingRoute::finishMulti(SPLlistPerComp.pack());//Note - this is not in a single tts, so some routes might be posted and others fail
wmsDeliverPickedItems::checkDeliverPickedItems(localWMSPickingRoute.PickingRouteID,SPLlistPerComp.pack());
}
SPLmi.next();
}
}
cont
Map created from container
// example in MRP : Planned order, the column "Mark" is a map.
// when we call a class the class read the map of the caller form ex : ReqTransPoMarkChangeStatus
ReqTransFormPO reqTransForm;
container conReqTransMark;
MapIterator mi;
ReqTrans reqTransMark;
ReqTrans reqTrans;
ReqPO reqPO;
Map mapReqTransMark;
;
//We keep the caller : in the caller there is the map object
ReqTransFormPO reqTransForm = args.caller().reqTransForm();
//the map is copied into a container
[conReqTransMark] = reqTransForm.parmChangeTypePack();
if (! this.countMarkedElements())
return;
mapReqTransMark = new Map(typeId2Type(typeid(recId)), Types::Record);
//the map is created from a container.
mapReqTransMark = Map::create(conReqTransMark);
...
reqTransForm.initMapReqTransMark(connull());
container parmChangeTypePack()
{
this.markCurrent();
return [this.mapReqTransMark().pack()];
}
public Integer countMarkedElements()
{
if (!conReqTransMark)
return 0;
return Map::create(conReqTransMark).elements();
}
public void initMapReqTransMark(container _con = connull())
{
mapReqTransMark = (_con) ? Map::create(_con) : new Map(typeId2Type(typeid(recId)), Types::Record);
}
RecordInsertList
RecordSortedList recordSortedList;
;
recordSortedList = new RecordSortedList(tablenum(CustInvoiceJour));
recordSortedList.sortOrder(this.formLetterSorting(fieldnum(CustInvoiceJour, RecId));
//============================================================================//
//SorOrder give the field on with we want to test the duplicate. Here RecId. Seems to me that we need at least one field.
//============================================================================//
//journalList.ins(custInvoiceJourLocal,true); true : ?. // I don't know the difference between true and false
RecordInsertList recordInsertSalesParmSubTable;
recordInsertSalesParmSubTable = new RecordInsertList(tablenum(SalesParmSubTable));
recordInsertSalesParmSubTable.add(salesParmSubTable);
recordInsertSalesParmTable.insertDatabase();
//Form : custInvoiceJournal button print copy.
void clicked()
{
CustInvoiceJour custInvoiceJourLocal;
Args args = new Args();
//
RecordSortedList journalList = SalesFormLetter::construct(DocumentStatus::Invoice).newJournalList();
//
;
// args.caller(this); Does this have to be set?
for (custInvoiceJourLocal = custInvoiceJour_ds.getFirst(true) ? custInvoiceJour_ds.getFirst(true) : custInvoiceJour;
custInvoiceJourLocal;
custInvoiceJourLocal = custInvoiceJour_ds.getNext())
{
//
//Invoice copy pressed don't print original invoice
if (isILFeature && !CustInvoiceJour::findRecId(custInvoiceJourLocal.RecId).OriginalPrinted_IL)
{
warning(strfmt ("@GIL106",
custInvoiceJourLocal.InvoiceId,
custInvoiceJourLocal.InvoiceDate));//Invoice (number %1, date %2) will not be printed. The Original should be printed first
continue;
}
journalList.ins(custInvoiceJourLocal);
}
journalList.first(custInvoiceJourLocal);
while (custInvoiceJourLocal)
{
//
args.record(custInvoiceJourLocal);
if (custInvoiceJourLocal.SalesId)
{
// Sales order invoice
new MenuFunction(menuitemoutputstr(SalesInvoiceCopy), MenuItemType::Output).run(args);
}
else
{
// Free text invoice
new MenuFunction(menuitemoutputstr(FreeTextInvoiceCopy), MenuItemType::Output).run(args);
}
//
if (! journalList.next(custInvoiceJourLocal))
break;
//
}
}
//function newJournalList();
public RecordSortedList newJournalList()
{
RecordSortedList recordSortedList;
;
recordSortedList = new RecordSortedList(tablenum(CustInvoiceJour));
recordSortedList.sortOrderFromContainer(this.formLetterSorting(tablenum(CustInvoiceJour), fieldnum(CustInvoiceJour, RecId)));
return recordSortedList;
}
//autre example =======
void fillPrivateLabelForInventTable()
{
RecordSortedList recordListReqPO;
;
recordListReqPO = new RecordSortedList(tablenum(ReqPO));
recordListReqPO.sortOrder(fieldnum(ReqPO, RecId));
ttsbegin;
mi = new MapIterator(mapReqTransMark);
mi.begin();
while (mi.more())
{
....
recordListReqPO.ins(reqPO);
mi.next();
}
if (recordListReqPO)
{
reqPO.clear();
recordListReqPO.first(reqPO);
while (reqPO)
{
reqPO.selectForUpdate(true);
reqPO.delete();
if (! recordListReqPO.next(reqPO))
break;
}
}
reqTransForm.initMapReqTransMark(connull());
ttscommit;
//another example : read the DS, and put it in a RecordSortedList
static void main(Args args)
{
BankPromissoryNoteDocumentCancel bankPromissoryNoteDocumentCancel;
LedgerJournalTrans ledgerJournalTrans;
RecordSortedList ledgerJournalTransList = new RecordSortedList(tablenum(LedgerJournalTrans));
FormDataSource formDS;
;
if (! args || args.dataset() != tablenum(LedgerJournalTrans))
{
throw error(Error::missingRecord(funcname()));
}
ledgerJournalTransList.sortOrder(fieldnum(LedgerJournalTrans, RecId));
formDS = args.record().dataSource();
for (ledgerJournalTrans = formDS.getFirst(true)
? formDS.getFirst(true)
: args.record(); ledgerJournalTrans; ledgerJournalTrans=formDS.getNext())
{
ledgerJournalTransList.ins(ledgerJournalTrans);
}
bankPromissoryNoteDocumentCancel = new BankPromissoryNoteDocumentCancel();
bankPromissoryNoteDocumentCancel.parmLedgerJournalTransList(ledgerJournalTransList);
if (bankPromissoryNoteDocumentCancel.prompt())
{
bankPromissoryNoteDocumentCancel.run();
}
}
List
//Form WMSPickingRegistration
public void pickAllLines()
{
List list = new List(Types::String);
WMSPickingRoute localWMSPickingRoute;
for (localWMSPickingRoute = wmsPickingRoute_ds.getFirst(true) ? wmsPickingRoute_ds.getFirst(true) : wmsPickingRoute_ds.cursor(); localWMSPickingRoute.RecId; localWMSPickingRoute = wmsPickingRoute_ds.getNext())
{
list.addEnd(localWMSPickingRoute.PickingRouteID);
}
WMSPickingRoute::finishMulti(list.pack());//Note - this is not in a single tts, so some routes might be posted and others fail
wmsDeliverPickedItems::checkDeliverPickedItems(localWMSPickingRoute.PickingRouteID,list.pack());
//done to clear all selected
element.createSelectedLinesMap();
wmsPickingRoute_DS.research(); //maybe some are finished and not ready for pick
wmsPickingRoute_DS.refresh();
wmsOrderTrans_DS.research();
element.refreshCallerDatasource();
}
//Example List Enumerator
List enumerator
static client container getClassNames()
{
List extendedBy;
ListEnumerator le;
extendedBy = dictClass.extendedBy();
le = extendedBy.getEnumerator();
while (le.moveNext())
{
curClass = new SysDictClass(le.current());
}
}
//=============================================================
server static public void finishMulti(container _packedList)
{
#OCCRetryCount
List pickingRouteIdList;
ListEnumerator le;
WMSPickingRoute wmsPickingRoute;
if (!_packedList)
{
return;
}
pickingRouteIdList = List::create(_packedList);
if (!pickingRouteIdList || pickingRouteIdList.elements() == 0)
{
return;
}
le = pickingRouteIdList.getEnumerator();
while (le.moveNext())
{
ttsbegin;
wmsPickingRoute = WMSPickingRoute::find(le.current(),true);
if (wmsPickingRoute.RecId)
{
wmsPickingRoute.finish();
}
else
{
checkFailed(strFmt("@SYS103909",le.current()));
}
ttscommit;
}
}
Array
//In the macro :#SPLPsCodes
#define.NumberOfTurbins(14)
real splStandardTurbinGasArray[#numberOfTurbins];
[splStandardTurbinGasArray,splStandardTurbinDieselArray] = splTurbCapacity::standardTurbinArray();
//
static container standardTurbinArray()
{
SPLTurbinStandard splTurbinStandard;
int i;
#SPLPsCodes
real splStandardTurbinGazArray[#numberOfTurbins];
real splStandardTurbinDieselArray[#numberOfTurbins];
while select * from splTurbinStandard
{
i = SPLTurbCapacity::turbinId2ArrayNumber(splTurbinStandard.TurbinID);
if (i)
{
splStandardTurbinGazArray[i] = splTurbinStandard.StandardTurbinGaz;
splStandardTurbinDieselArray[i] = splTurbinStandard.StandardTurbinDiesel;
}
}
return [splStandardTurbinGazArray,splStandardTurbinDieselArray];
}
//another example
real DegradationArray[#numberOfTurbins];
//
[DegradationArray] = splTurbCapacity::degradation(this.datetime);
//
static container degradation(SPLPsDate _DateTime)
{
SPLTurbinStandard splTurbinStandard;
SPLPsTurbHours SPLPsTurbHours;
int i;
date dateMonth;
#SPLPsCodes
real degradationArray[#numberOfTurbins];
dateMonth = FcsDateTimeAPI::convertToDateLocal(_DateTime);
dateMonth = dateStartMth(dateMonth);
while select splTurbinStandard
{
i = SPLTurbCapacity::turbinId2ArrayNumber(splTurbinStandard.TurbinID);
if (i)
{
SPLPsTurbHours = SPLPsTurbHours::Find(dateMonth,splTurbinStandard.TurbinID);
/*
if (!SPLPsTurbHours)
{
info(strFmt("@SPL2034",splTurbinStandard.TurbinID));
}
*/
degradationArray[i] = SPLPsCorrDegradation::CalcDegr(splTurbinStandard.TurbinID,SPLPsTurbHours.Hours) ;
}
}
return [degradationArray];
}
// how to use : this.FactorArray[i] = tempCorr * DegradationArray[i];