close

 

QueryRange

Range for string
Range for integer
Range for enum
Range for date
Range for All dates
Range for date Time
Range with strfmt
Range with strfmt and field T.X = T.Y
RangeStatus
QueryRangeConcat
Range A = "X" or A = "Y"
FindRange
Find or create range
List of the ranges
Add range on the same field x times
Range with fieldName2Id
Range with fieldName2Id
Note


Range for string

	QueryBuildDataSource 	qbds;
	queryBuildRange			qbr;
	;
	qbds = this.query().dataSourceTable(tablenum(SalesQuotationTable));
	qbds.clearRanges();
	qbdr = qbds.addRange(fieldnum(SalesLine, PlanModelId));

	//STRING
	qbds.addRange(fieldnum(SalesLine, PlanModelId)).value(SysQuery::valueEmptyString()); // = value('=""');
	qbds.addRange(fieldnum(SalesLine, PlanModelId)).value('!=""');
	qbds.addRange(fieldnum(SalesLine, PlanModelId)).value('1');
	qbds.addRange(fieldnum(SalesLine, PlanModelId)).value(queryValue('!=' + planModel.PlanModelId));

	queryBuildRange = queryBuildDataSource.addRange(fieldnum(WMSLocation, SPLCustAccount));
	queryBuildRange.value('=""');				-> SPLCUSTAccount=''  -> ((SPLCUSTAccount=''))
	queryBuildRange.value(SysQuery::valueEmptyString());	-> SPLCUSTAccount=''  -> ((SPLCUSTAccount=''))
	queryBuildRange.value(queryValue(''));			-> SPLCUSTAccount=''  -> ((SPLCUSTAccount=''))

	queryBuildRange.value('!=""');  			-> !SPLCUSTAccount='' -> ((!SPLCUSTAccount=''))

	queryBuildRange.value('');	-> ATTENTION : THE Range is not added to the query !!!!!!!!!!
	
	//-> To initialize the range, the range is not took in the query (= value('') ?) 
	//value(""); is good also for integer and date.
	queryBuildRange.value("");	-> To initialize the range, the range is not took in the query.

//Range LIKE => value("*AA*")
    if (SearchText)
    {
        SearchText = "*" + SearchText + "*";
        if (ServiceSearchType == SPLWasteServiceSearchType::ServiceOrder)
        {
            qbds.addRange(fieldNum(SMAServiceOrderTable,serviceOrderId)).value(SearchText);
        }
        else if (ServiceSearchType == SPLWasteServiceSearchType::Customer)
        {
            qbds.addRange(fieldNum(SMAServiceOrderTable,CustAccount)).value(SearchText);
        }
    }
	-> range "*SearchText*" = LIKE
	
	


Range for integer

	qbds.addRange(fieldNum(SalesLine, SalesQty)).value(queryValue('>0'));
	qbds.addRange(fieldNum(SalesLine, SalesQty)).value('>0');

	note for integer : (value('>0') == value(queryValue('>0')))


Range for enum

	qbds.addRange(fieldnum(SalesQuotationTable, QuotationStatus)).value(queryValue(SalesQuotationStatus::Created));
	qbds.addRange(fieldnum(SalesQuotationTable, QuotationStatus)).value(queryValue('!=' + enum2str(SalesQuotationStatus::Created)));

	//ENUM - the different way to write a value for an enum.
	qbds.addRange(fieldnum(SalesQuotationTable, QuotationStatus)).value(enum2str(SalesQuotationStatus::Created));
	qbds.addRange(fieldnum(SalesQuotationTable, QuotationStatus)).value(enum2value(SalesQuotationStatus::Created));  //to check
	qbds.addRange(fieldnum(SalesQuotationTable, QuotationStatus)).value(SysQuery::value(SalesQuotationStatus::Created));
	qbds.addRange(fieldnum(SalesQuotationTable, QuotationStatus)).value(queryValue(SalesQuotationStatus::Created));
	
	//example code to add list of codes
	public void executeQuery()
	{
		qbrWMSPickingRouteType.value(element.strRangePickingRoutesTypes());
		super();
	}	
	public str strRangePickingRoutesTypes()
	{
		str                 selectionStr = '';
		if (showWMS)
		{
			selectionStr +=enum2str(WMSShipmentType::ConsolidatedPick);
		}
		if (!selectionStr || (showPick && showWMS))
		{
			return enum2str(WMSShipmentType::ConsolidatedPick) + ',' + enum2str(WMSShipmentType::OrderPick);
		}
		return selectionStr;
	}	
	
	statusRange = queryBuildDataSource.addRange(fieldNum(WMSTransport, ExpeditionStatus));
    statusRange.value(strFmt('%1',  enum2Value(WMSExpeditionStatus::Activated)));


Range for date

qbds.addRange(fieldnum(SalesLine, ShippingDateConfirmed)).value(queryValue(dateNull()));
qbds.addRange(fieldnum(SalesLine, ShippingDateConfirmed)).value(queryValue('!0'));
qbds.addRange(fieldnum(SalesLine, ShippingDateConfirmed)).value(queryValue('>0'));
reconciledDate.value('>' + queryValue(dateNull()));

reconciledDate.value(''); ? = reconciledDate.value(queryValue(dateNull()));


qbds.addRange(fieldnum(SalesLine, ShippingDateConfirmed)).value(queryRange(_startDateStart, _startDateEnd));
qbds.addRange(fieldnum(SalesLine, ShippingDateConfirmed)).value(queryValue(_fromDate) + '..' + queryValue(_toDate));

--> (periodStart .. periodEnd)
criteriaStartDate.value(queryRange(period.PeriodStart,period.PeriodEnd));

--> (dateNull or (aujourd'hui et max)).
queryBuildRange.value(queryValue(dateNull()) + ',' + queryRange(today(), dateMax()));

FromDate            fromDate;
ToDate              toDate;
qbr.value(queryValue(fromDate)+ '..'+ queryValue(toDate));


//Range : EndDate = Null OR EndDate >= DateJour : (we need to define 2 times the QueryBuildRange)
queryBuildRangeDate = queryBuildDataSource1.addRange(fieldNum(SMAAgreementTable,EndDate));
queryBuildRangeDate.value(queryValue(dateNull()));
queryBuildRangeDate = queryBuildDataSource1.addRange(fieldNum(SMAAgreementTable,EndDate));
queryBuildRangeDate.value(queryRange(systemDateGet(),dateMax())); 


Range for All dates

//This example show with date how to use the null date. 
//If null date and we want to see all the lines we need to write qbrDate.value('');
public class FormRun extends ObjectRun
{
    date                            dateSearch;
    QueryBuildRange                 qbrDate;
}
//Init of the form
public void init()
{
    dateSearch      = systemDateGet() + 1;
    super();
    DateHeader.dateValue(dateSearch);
}
//Init of the DS
public void init()
{
    QueryBuildDataSource    qbds;
    super();
    qbds = this.query().dataSourceTable(tablenum(SPLDailyBID));
    qbrDate = qbds.addRange(fieldNum(SPLDailyBID,BIDDate));
    qbrDate.value(QueryValue(dateSearch));
}
//Modified of the field Date
public boolean modified()
{
    boolean ret;
    ret = super();

    if (this.dateValue())
    {
        qbrDate.value(QueryValue(this.dateValue()));
    }
    else
    {
        qbrDate.value('');
    }
    SPLDailyBID_ds.executeQuery();
    return ret;
}


Range for date Time

class SMAServiceFunctionLine
protected void setQueryDatePeriod()
{
    QueryBuildDataSource    qbds;
    QueryBuildRange         qbr;
    utcdatetime             dateFrom;
    utcdatetime             dateTo;

    qbds = queryRun.query().dataSourceTable(tableNum(SMAServiceOrderTable));
    dateFrom = DateTimeUtil::newDateTime(periodFromDate, 0);
    dateTo = DateTimeUtil::newDateTime(periodToDate, 0);
    // Add 1 day to get inclusive range
    dateTo = DateTimeUtil::addDays(dateTo, 1);

    if (periodFromDate && periodToDate)
    {
        qbr = qbds.addRange(fieldNum(SMAServiceOrderTable, ServiceDateTime));
        qbr.value(strFmt('((%1 >= %2) && (%3 < %4))',
            fieldStr(SMAServiceOrderTable, ServiceDateTime), DateTimeUtil::toStr(dateFrom),
            fieldStr(SMAServiceOrderTable, ServiceDateTime), DateTimeUtil::toStr(dateTo)));
    }
    else if (periodFromDate)
    {
        qbr = qbds.addRange(fieldNum(SMAServiceOrderTable, ServiceDateTime));
        qbr.value(strFmt('(%1 >= %2)',
            fieldStr(SMAServiceOrderTable, ServiceDateTime), DateTimeUtil::toStr(dateFrom)));
    }
}


Range with strfmt

//example 1
	queryBuildRange = queryBuildDataSource.addRange(fieldnum(WMSPickingRoute, ExpeditionStatus));
	queryBuildRange.value(enum2Value(WMSExpeditionStatus::Activated));
	queryBuildRange.status(RangeStatus::Locked);

	queryBuildRange = queryBuildDataSource.addRange(fieldnum(WMSPickingRoute, ExpeditionStatus));
	queryRange = strfmt('((' + fieldstr(WMSPickingRoute, ExpeditionStatus) + ' == WMSExpeditionStatus::Started) && ('+ fieldstr(WMSPickingRoute, Operator) + ' == "%1"))', _emplId);
	queryBuildRange.value(queryRange);
	queryBuildRange.status(RangeStatus::Locked);

	((expeditionStatus = 3) OR
	-> (((ExpeditionStatus == WMSExpeditionStatus) && (Operator == "0110"))))

//example 2
	queryBuildRange = queryBuildDataSource.addRange(fieldnum(WMSPickingRoute, ExpeditionStatus));
	queryBuildRange.value(enum2Value(WMSExpeditionStatus::Activated));
	queryBuildRange.status(RangeStatus::Locked);

	queryBuildRange = queryBuildDataSource.addRange(fieldnum(WMSPickingRoute, ExpeditionStatus));
	queryRange = strfmt('((' + fieldstr(WMSPickingRoute, ExpeditionStatus) + ' == WMSExpeditionStatus::Started) && ('+ fieldstr(WMSPickingRoute, Operator) + ' == "%1"))', _emplId);
	queryBuildRange.value(queryRange);
	queryBuildRange.status(RangeStatus::Locked);

	((expeditionStatus = 3) OR
	-> (((ExpeditionStatus == WMSExpeditionStatus) && (Operator == "0110"))))

//example 3
	queryBuildRange.value(strFmt('((%1 == %2) || ((%1 == %3) && (%4 == "%5")))',
	fieldStr(InventTable, ItemType),
	any2int(ItemType::Service),
	any2int(ItemType::Item),
	fieldStr(InventTable, ProjCategoryId),
	queryValue("Spares")));

	if (inventTableModule.LineDisc)
	{
		qbr = qBuild.addRange(fieldnum(LPLSalesDealLine,ItemCode));
				strQuery = strFmt('((%1 == %2) && (%3 == "%4"))',
				fieldStr(LPLSalesDealLine, ItemCode),
				any2int(LPLTableGroupBrandBgAll::All),
				fieldStr(LPLSalesDealLine, ItemRelation),
				"");                                                       <---use "" and not SysQuery::valueEmptyString()
		qbr.value(strQuery);
	}
	
//example 4
Query hideReturnReservationLine(Query _query)
{
	QueryBuildRange      qbrHideReservationLine;
	QueryBuildDataSource qbdsSalesLine = _query.dataSourceTable(tablenum(SalesLine));
	int                  statusAwaiting = ReturnStatusLine::Awaiting;
	;

	qbrHideReservationLine = qbdsSalesLine.addRange(fieldnum(SalesLine, ReturnStatus));
	qbrHideReservationLine.value(strfmt('((%1.%4 != %5) || (%1.%2 < %3)&&(%1.%4 == %5))',
	qbdsSalesLine.name(),//%1
	fieldstr(SalesLine, ExpectedRetQty),//%2
	0, //%3
	fieldstr(SalesLine, ReturnStatus), //%4
	statusAwaiting)); //%5
	qbrHideReservationLine.status(RangeStatus::Hidden);

	return _query;
}


Range with strfmt and field T.X = T.Y

	&&  (vendTrans.TransType     == LedgerTransType::Payment ||
		(vendTrans.Correct == NoYes::Yes && vendTrans.TransType == LedgerTransType::Vend  &&
		(vendtrans.BPLAdvPayment == '' || (vendTrans.LastSettleVoucher == vendtrans.BPLAdvPayment && vendtrans.BPLAdvPayment != ''))))

    qbdsVendTrans	= qbdsLedgerTrans.addDataSource(tablenum(VendTrans),"VendTrans"); //Here "Vendtrans" because if not : qbdsVendTrans.name() -> vendTrans_1 !
    qbrTransType 	= qbdsVendTrans.addRange(fieldnum(VendTrans, TransType));
    qbrTransType.value(strfmt('( (%1.%2 == %6) || ( (%1.%3 = %7) && (%1.%2 == %8) && ( (%1.%4 == %9) || ( (%1.%5 == %1.%4) && (%1.%4 != %9) ))))',
    qbdsVendTrans.name(),                       //%1
    fieldstr(VendTrans, TransType),             //%2
    fieldstr(VendTrans, Correct),               //%3
    fieldstr(VendTrans, BPLAdvPayment),         //%4
    fieldstr(VendTrans, LastSettleVoucher),     //%5
    any2int(LedgerTransType::Payment),          //%6
    any2int(NoYes::Yes),                        //%7
    any2int(LedgerTransType::Vend),             //%8
    SysQuery::valueEmptyString()));             //%9   // (%1.%4 == %9) -> VendTrans.BPLAdvPayment == ""  //I check SysQuery::valueEmptyString() this is good.


RangeStatus

	QueryBuildRange         qbr;
	;
	qbr = queryBuildDataSource.addRange(fieldnum(Address, Address));
	qbr.value(queryExpression);
	qbr.status(RangeStatus::Hidden);// - RangeStatus::Hidden - RangeStatus::Locked


QueryRangeConcat

	//1)
	queryBuildRange.value(queryRangeConcat(SysQuery::value(InventQuarantineStatus::Created), SysQuery::value(InventQuarantineStatus::ReportedFinished)));
	//2)
	str	queryRange = '';

	queryRange = queryRangeConcat(queryRange,queryValue(TaxDirection::IncomingTax));
	queryRange = queryRangeConcat(queryRange,queryValue(TaxDirection::TaxExemptPurchase));
	queryRange = queryRangeConcat(queryRange,queryValue(TaxDirection::OutgoingTax));
	queryRange = queryRangeConcat(queryRange,queryValue(TaxDirection::TaxExemptSales));
	queryBDS.addRange(fieldnum(TaxTrans, TaxDirection)).value(queryRange);

	range = queryRangeConcat('',StatusIssue::ReservPhysical);
	range = queryRangeConcat(range,StatusIssue::ReservOrdered);
	range = queryRangeConcat(range,StatusIssue::OnOrder);
	range = queryRangeConcat(range,StatusIssue::QuotationIssue);
	qbds_InventTrans2.addRange(fieldnum(InventTrans,StatusIssue)).value(range);

	//3)
	queryBuildDataSource.addRange(fieldnum(WMSOrderTrans,OrderType)).value(Global::queryRangeConcat(queryValue(WMSOrderType::OrderPick),WMSOrderType::Output));
	-> ((orderType = 3 OR orderType = 0))

	//4     rangeStatus = queryRangeConcat(queryNotValue(WMSShipmentStatus::Shipped),queryNotValue(WMSShipmentStatus::Canceled));
	-> ((NOT (status = 9)) AND NOT (status = 3)))


Range A = "X" or A = "Y"

	qbr = queryLoc.dataSourceTable(tablenum(WMSLocation)).findRange(fieldnum(WMSLocation, WMSLocationId));

	-> qbr         = wMSLocationId = N'A00' or wMSLocationId = N'A01' OR wMSLocationId = N'A02'
	-> rangeWMSLoc = "A00,A01,A02"
	qbr.value(rangeWMSLoc) -> ((wMSLocationId = N'A00' or wMSLocationId = N'A01' OR wMSLocationId = N'A02'))

	qbr = queryLoc.dataSourceTable(tablenum(WMSLocation)).findRange(fieldnum(WMSLocation, WMSLocationId));
	qbr.value("A00");
	qbr = queryLoc.dataSourceTable(tablenum(WMSLocation)).findRange(fieldnum(WMSLocation, WMSLocationId));
	qbr.value("A01");
	qbr = queryLoc.dataSourceTable(tablenum(WMSLocation)).findRange(fieldnum(WMSLocation, WMSLocationId));
	qbr.value("A02");
	-> ((wMSLocationId = N'A00' or wMSLocationId = N'A01' OR wMSLocationId = N'A02')) 


FindRange

	range rangeWMSLoc;
	;
	qbr = queryLoc.dataSourceTable(tablenum(WMSLocation)).findRange(fieldnum(WMSLocation, WMSLocationId));
	if (qbr)
	   rangeWMSLoc = qbr.value();


Find or create range

    qbrWMSPickingRouteType = SysQuery::findOrCreateRange(qbdsWMSPickingRoute,fieldnum(WMSPickingRoute,ShipmentType));


List of the range

	int                     cnt, i;
	QueryBuildRange         qbr;
	Query                   queryFreeText;
	QueryBuildDataSource    qdbsFreeText;

	queryFreeText = new Query();
	qdbsFreeText  = queryFreeText.addDataSource(tableNum(VendInvoiceJour));

	cnt = qr.query().dataSourceTable(tablenum(VendInvoiceJour)).rangeCount();

	for (i=1 ; i<=cnt; i++)
	{
		qbr = qr.query().dataSourceTable(tablenum(VendInvoiceJour)).range(i);
		qdbsFreeText.addRange(qbr.field()).value(qbr.value());
	}



Add range on the same field x times

//AddRange on the same field x times.
public void linkActive()
{
    SalesTable          localSalesTable;
    InventTransferTable localInventTransferTable;
    SalesLine           localSalesLine;

    if (salesTable_ds)
    {
        this.query().dataSourceTable(tablenum(WMSPickingRouteLink)).clearDynalinks();
        this.query().dataSourceTable(tablenum(WMSPickingRouteLink)).clearRanges();

        for (localSalesTable = salesTable_ds.getFirst(true) ? salesTable_ds.getFirst(true) : salesTable_ds.cursor(); localSalesTable; localSalesTable = salesTable_ds.getNext())
        {
            this.query().dataSourceTable(tablenum(WMSPickingRouteLink)).addRange(fieldnum(WMSPickingRouteLink, OrigInventTransRefId)).value(queryValue(localSalesTable.SalesId));
        }
    }
    super();
}


Range with fieldName2Id

// Range using fieldName2id;
   if (HeaderDateMonthYear.dateValue())
    {
        iMonth = MthOfYr(HeaderDateMonthYear.dateValue());
        fieldName = #SMAFormulaFieldMonth + strRFix(int2str(iMonth),2,"0");
        qbdsSPLWasteSMAFormula.addRange(fieldName2id(tableNum(SPLWasteSMAFormula),fieldName)).value(queryValue(NoYes::Yes));
    }
	
	//======getFieldValue ============//
	//in the table I have :
	//Month01
	//Month02
	//Month03 ...
	//#SMAFormulaFieldMonth = "Month"
    for (i = 1; i <= 12; i++)
    {
        MonthValue = this.getFieldValue(#SMAFormulaFieldMonth + strLFix(int2str(i),2,"0"));
        if (MonthValue)
        {
            transDate = mkDate(01,i,iYear);
            return transDate;
        }
    }	
	
// another example class MultiSelectionHelper, called in SMAServiceFunctionLine

multiSelectionHelper.createQueryRanges(qbdsAgreementLine, fieldstr(SMAAgreementLine, AgreementLineNum)); 

public void createQueryRanges(QueryBuildDataSource _queryBuildDataSourece, FieldName _fieldName, FieldName _recordFieldName = _fieldName)
{
    fieldId         datasourceFieldId;
    fieldId         recordFieldId;
    Common          record;

    // currentRecord and currentRecordIdx should be restored before return
    Common          copyOfCurrentRecord     = currentRecord;
    int             copyOfCurrentRecordIdx  = currentRecordIdx;
    ;

    if (!_queryBuildDataSourece)
    {
        throw error("@SYS96323");
    }

    record = this.getFirst();

    if (record)
    {
        datasourceFieldId   = fieldname2id(_queryBuildDataSourece.table(), _fieldName);
        recordFieldId       = fieldname2id(record.TableId, _recordFieldName);

        if (!datasourceFieldId)
        {
            throw error(strFmt("@SYS94058", _fieldName, _queryBuildDataSourece.name()));
        }

        if (!recordFieldId)
        {
            throw error(strFmt("@SYS75684", _recordFieldName, tableid2name(record.TableId)));
        }
    }


    while (record)
    {
        _queryBuildDataSourece.addRange(datasourceFieldId).value(SysQuery::value(record.(recordFieldId)));
        record = this.getNext();
    }

    currentRecord       = copyOfCurrentRecord;
    currentRecordIdx    = copyOfCurrentRecordIdx;
}


Note

	SysQuery::value() = queryValue()
	EX : SysQuery::value(InventQuarantineStatus::Created)  = queryValue(InventQuarantineStatus::Created)

	qbr.value('!=""');   !!!*** qbr.value("!=''"); doesn't work ***!!!
	//QueryValue is used if I write a variable inside the value :
	qbr.value('!=""'); qbr.value(queryValue('!=' + planModel.PlanModelId)); 

 

arrow
arrow
    文章標籤
    dynamic ax D365 addrange
    全站熱搜

    lionlionchopper 發表在 痞客邦 留言(0) 人氣()