Ax 2012: How to add TWO links between two datasources in X++ Query

In my Customization I need to get the From warehouse and To warehouse transaction from the Inventory Transfer Journal.

for this i need to relate  InventJournalTrans and InventTransOrigin tables with InventTransId and ToInventTransId, But here InventTransId is a direct relation, but if i use this relation then i can get only the From warehouse information. The linking is like the below

qbds1.relations(true);
qbds1.addLink(fieldnum(InventJournalTrans,InventTransId),fieldnum(InventTransOrigin,InventTransId));

but i can’t make two relations like

qbds1.relations(true);
qbds1.addLink(fieldnum(InventJournalTrans,InventTransId),fieldnum(InventTransOrigin,InventTransId));qbds1.addLink(fieldnum(InventJournalTrans,ToInventTransId),fieldnum(InventTransOrigin,InventTransId));

so i code like Range setting in X++ query.

CODE: JOB

static void GetFromAndToWarehouse(Args _args)
{
InventJournalTable inventJournalTable;
InventJournalTrans inventJournalTrans;
InventTransOrigin inventTransOrigin;
InventTrans inventTrans;
InventDim inventDim;

Query query;
QueryBuildDataSource qbds,qbds1,qbds2;
QueryBuildRange qbr,qbr1;
QueryRun queryRun;

query=new Query();

qbds=query.addDataSource(tableNum(InventJournalTrans));
qbr = qbds.addRange(fieldNum(InventJournalTrans, JournalId));
qbr.value(queryValue(“00081”));

qbds1 = qbds.addDataSource(tableNum(InventTransOrigin));
qbr1 = qbds1.addRange(fieldNum(InventTransOrigin, InventTransId));
qbr1.value(strFmt(“((%1.INVENTTRANSID == %2.INVENTTRANSID) || (%1.INVENTTRANSID == %2.TOINVENTTRANSID))”,qbds1.name(), qbds.name()));

qbds2=qbds1.addDataSource(tableNum(InventTrans));
qbds2.joinMode(JoinMode::InnerJoin);
qbds2.relations(true);

queryRun = new QueryRun(query);

while (queryRun.next())
{
inventTrans = queryRun.get(tableNum(InventTrans));
inventDim = InventDim::find(inventTrans.InventDimId);
info(strFmt(“%1”,inventDim.InventLocationId));
}

}

 

How to Get Financial Dimensions for a particular Customer using X++ code in Ax 2012

TWO Ways:

Way 1:

static void GetFinancialDimensionValue(Args _args)
{
CustTable custTable ;
DimensionAttributeValueSet DimensionAttributeValueSet;
DimensionAttributeValueSetItem DimensionAttributeValueSetItem;
DimensionAttributeValue DimensionAttributeValue;
DimensionAttribute DimensionAttribute;

while select * from custTable
where custTable .AccountNum == “CU0000001″
join RecId from DimensionAttributeValueSet
where DimensionAttributeValueSet.RecId == custTable .DefaultDimension
join RecId, DisplayValue from DimensionAttributeValueSetItem
where DimensionAttributeValueSetItem.DimensionAttributeValueSet == DimensionAttributeValueSet.RecId
join RecId from DimensionAttributeValue
where DimensionAttributeValue.RecId == DimensionAttributeValueSetItem.DimensionAttributeValue
join RecId, Name from DimensionAttribute
where DimensionAttribute.RecId == DimensionAttributeValue.DimensionAttribute
{
info(DimensionAttribute.Name+”—-“+ DimensionAttributeValueSetItem.DisplayValue);
}
}

Way 2:

static void GetFinancialDimensionValue1(Args _args)
{
CustTable custTable = CustTable::find(“CU0000001”);
DimensionAttributeValueSetStorage dimStorage;
Counter i;

dimStorage = DimensionAttributeValueSetStorage::find(custTable.DefaultDimension);

for (i=1 ; i<= dimStorage.elements() ; i++)
{

//if you want particular Dimension then put if condition like this
//if(strFmt(“%1″,DimensionAttribute::find(dimStorage.getAttributeByIndex(i)).Name)==”Specialty”)
// {
info(strFmt(“%1 = %2”, DimensionAttribute::find(dimStorage.getAttributeByIndex(i)).Name,
dimStorage.getDisplayValueByIndex(i)));
//}
}

}

 

Ax 2012 Create file name with Date time stamp

static void createFileNameWithDateTimeStamp(Args _args)
{
   int time;
str s;
time = timenow();

s = date2Str
( today(),
  321,
  DateDay::Digits2,
  DateSeperator::None,
  DateMonth::Digits2,
  DateSeperator::None,
  DateYear::Digits4
);

s = s + "_" +
    num2str0(time div 3600, 2,0,0,0) + "_" +
    num2str0(time mod 3600 div 60, 2,0,0,0) + "_" +
    num2str0(time mod 3600 mod 60, 2,0,0,0);

info(s);
}