_loopApproval = 4; while(_approvalQueue < conLen(approvalsName)) { //conPeek(approvalsName,_approvalQueue) _approvalQueue++; _BudgetEntriesHeaderTMP.setFieldValue(strFmt("%1%2","ApprovalsName",_loopApproval),strFmt("%1",conPeek(approvalsName,_approvalQueue))); _loopApproval++; }
Month: March 2015
fix budget exceeded still can submit Ledger Journal WorkFlow , ledgerJournalCheckPost
on class LedgerJournalWFApprSubmitToWF \ main
//add by fanddy, fix Bugs exceed budget still can submit on 30/03/2015 LedgerJournalCheckPost ledgerJournalCheckPost; FormDataSource fds; //end add by fanddy Debug::assert(tableId == tableNum(LedgerJournalTable)); Debug::assert(recId != 0); // The method has not been called correctly. if (tableId != tableNum(LedgerJournalTable) || recId == 0) { throw error(strFmt("@SYS19306", funcName())); } //add by fanddy, fix Bugs exceed budget still can submit on 30/03/2015 else { ledgerJournalCheckPost= ledgerJournalCheckPost::newLedgerJournalTable(ledgerJournalTable,NoYes::No,NoYes::Yes); ledgerJournalCheckPost.run(); if(!ledgerJournalCheckPost.getParmCheckJournalTID()) { throw error("Can't submit this journal"); } //refresh form dataSource , fix error when submit must restore form dataSource fds = args.record().dataSource(); fds.research(true); fds.refresh(); } //end add by fanddy
i did some modify on class LedgerJournalCheckPost for returning checkJournal result.
on LedgerJournalCheckPost\run method
//edited by fanddy checkResultTID = this.checkJournal();
set default dimension value
public static RecId getNewDefaultDimension(RecId defaultDimension, Name dimName, str 255 dimValue) { container c; RecId newdefaultDimension; int i; ; c = AxdDimensionUtil::getDimensionAttributeValueSetValue(defaultDimension); i = conFind(c, dimName); if (!i && !dimValue) return defaultDimension; if (i) { c = conDel(c, i+1, 1); c = conDel(c, i, 1); } if (dimValue) { c += dimName; c += dimValue; } c = conDel(c, 1, 1); c = conIns(c, 1, conLen(c) / 2); newdefaultDimension = AxdDimensionUtil::getDimensionAttributeValueSetId(c); return newdefaultDimension; }
get dimension name , return container
public static container getDimensionName() { DimensionAttribute dimAttr; DimensionAttributeSetItem dimAttrSetItem; DimensionEnumeration dimensionSetId; DimensionAttributeValue dimAttributeValue; container DimensionName; dimensionSetId = DimensionCache::getDimensionAttributeSetForLedger(); while select dimAttr order by Name where dimAttr.Type != DimensionAttributeType::MainAccount join RecId from dimAttrSetItem where dimAttrSetItem.DimensionAttribute == dimAttr.RecId && dimAttrSetItem.DimensionAttributeSet == dimensionSetId { dimensionName += dimAttr.Name; } return DimensionName; }
Custom Number Sequence Reference Example
1. Create new field as picture below
2. Go to the form, right click and choose restore to reload new field we added before. On the field method, add code below
public Common lookupReference(FormReferenceControl _formReferenceControl) { return NumberSequenceTable::lookupReference(_formReferenceControl); }
3. Add reference group for the field at the form as picture below , and you are done.
4. Just run the form for testing.
Custom lookup example 2
public void lookup() { // super(); SysTableLookup sysTableLookup = SysTableLookup::newParameters(tablenum(SalesTable), this); Query query = new Query(); QueryBuildDataSource qbds,qbds2,qbds3; qbds = query.addDataSource(tablenum(SalesTable)); qbds.addOrderByField(fieldNum(SalesTable,SalesId)); qbds.addOrderByField(fieldNum(SalesTable,SalesName)); qbds.addOrderByField(fieldNum(SalesTable,SalesType)); qbds.addOrderByField(fieldNum(SalesTable,CustAccount)); qbds.addGroupByField(fieldNum(SalesTable,SalesId)); qbds.addGroupByField(fieldNum(SalesTable,SalesName)); qbds.addGroupByField(fieldNum(SalesTable,SalesType)); qbds.addGroupByField(fieldNum(SalesTable,CustAccount)); qbds2 = qbds.addDataSource(tableNum(TECDeliveryOrderTable)); qbds2.joinMode(JoinMode::NoExistsJoin); qbds2.relations(false); qbds2.addLink(fieldNum(SalesTable,SalesId),fieldNum(TECDeliveryOrderTable,TIDUnlockSalesId)); qbds3 = qbds.addDataSource(tableNum(SalesLine)); qbds3.joinMode(JoinMode::InnerJoin); qbds3.relations(false); qbds3.addLink(fieldNum(SalesTable,SalesId),fieldNum(SalesLine,SalesId)); qbds3.addRange(fieldNum(SalesLine,ItemId)).value(InventParameters::find().TIDItemIdServices); sysTableLookup.addLookupfield(fieldnum(SalesTable, SalesId),true); sysTableLookup.addLookupfield(fieldNum(SalesTable,SalesName)); sysTableLookup.addLookupfield(fieldNum(SalesTable,SalesType)); sysTableLookup.addLookupfield(fieldNum(SalesTable,CustAccount)); sysTableLookup.addLookupMethod("customerName"); sysTableLookup.parmQuery(query); sysTableLookup.performFormLookup(); }
Modify AOT items properties via code x++
TreeNode objTreeNode; objTreeNode = TreeNode::findNode(@"\Menu Items\Display\"); if (objTreeNode) { objTreeNode = objTreeNode.AOTfirstChild(); /* change objTreeNode object properties */ while (objTreeNode) { objTreeNode.AOTsetProperties("PROPERTIES\n ViewUserLicense #" + 'TASK' + "\n MaintainUserLicense #" + 'TASK' + "\n ENDPROPERTIES\n"); objTreeNode.AOTsave(); objTreeNode = objTreeNode.AOTnextSibling(); } }
source : http://dotnetxperience.blogspot.com/2012/10/modify-aot-items-from-code-ax-2012.html
Job example using COMVariant
static void TIDF_UploadUnitConversion(Args _args) { //coded by fanddy // for upload Unit Conversion Purpose SysExcelApplication application; SysExcelWorkbooks workbooks; SysExcelWorkbook workbook; SysExcelWorksheets worksheets; SysExcelWorksheet worksheet; SysExcelCells cells; SysExcelCell cell; COMVariantType type; int row; UnitOfMeasureConversion UnitOfMeasureConversion; //table's field data ItemId itemid; UnitOfMeasureSymbol unitTo; unitOfMeasureSymbol unitFrom; Factor factor; Filename fileName = 'C:\\#TECTURA#\\Master Data\\UploadFormula\\UnitConversionrev4.xlsx'; int loop; int lastSerial = 1; application = SysExcelApplication::construct(); workbooks = application.workbooks(); try { workbooks.open(fileName); } catch { throw error(strFmt("File: %1 cannot be opened", fileName)); } workbook = workbooks.item(1); worksheets = workbook.worksheets(); worksheet = worksheets.itemFromNum(1); cells = worksheet.cells(); row = 2; type = cells.item(row, 1).value().variantType(); ttsBegin; while (type != COMVariantType::VT_EMPTY) { itemid = cells.item(row, 1).value().bStr(); unitFrom = cells.item(row, 2).value().bStr(); unitTo = cells.item(row, 3).value().bStr(); factor = cells.item(row, 4).value().double(); UnitOfMeasureConversion.clear(); UnitOfMeasureConversion.Product = EcoResProduct::findByProductNumber(itemid).RecId; UnitOfMeasureConversion.FromUnitOfMeasure = UnitOfMeasure::findBySymbol(unitFrom).RecId; UnitOfMeasureConversion.ToUnitOfMeasure = UnitOfMeasure::findBySymbol(unitTo).RecId; UnitOfMeasureConversion.Factor = factor; UnitOfMeasureConversion.Numerator = 1; UnitOfMeasureConversion.Denominator = 1; UnitOfMeasureConversion.insert(); row++; type = cells.item(row, 1).value().variantType(); } ttsCommit; application.quit(); info(strFmt('Upload Success')); }
find current active Company Accounting Currency
static void findCompanyAccountingCurrency(Args _args) { info(Ledger::find(Ledger::current()).AccountingCurrency); }