Posts Tagged ‘ Query

Prompt ekranından girilen kriterleri başka bir query’e aktarmak

Merhaba

Prompt ekranı bir query için kriter girme, sıralama ve gruplama gibi farklı işlemleri yapabileceğiniz çok esnek bir uygulamadır. Özellikle rapor ve formlarda çok kullanılan bu ekranı her ax kullanıcısının çok iyi bilmesi gerekir. Bizim bu yazıdaki konumuz Prompt ekranında herhangi bir veri kaynağı için dinamik olarak girilen kriterleri tespit edip başka bir query’e aktarmaktır.

Bunu şöyle bir jobta deneyebiliriz:


static void GetQueryPromtRangeValues(Args _args)
{
CustTable               CustTable;
CustTable               CustTable2;
int                     counter;

Query                   q;
QueryRun                qRun;
QueryBuildRange         qbr;
QueryBuildDataSource    qbds;

Query                   q2;
QueryRun                qRun2;
QueryBuildDataSource    qbds2;

QueryBuildRange         qbrGet;
QueryBuildDataSource    qbdsGet;

;
// Birinci Query
q       = new Query();
qbds    = q.addDataSource(TableNum(CustTable));
qRun    = new QueryRun(q);
// İkinci Query
q2       = new Query();
qbds2    = q2.addDataSource(TableNum(CustTable));

if(qRun.prompt())
{
// CustTable veri kaynağı için girilen kriterleri buluyoruz
qbdsGet = qRun.query().dataSourceTable(TableNum(CustTable));
counter = qbdsGet.rangeCount(); // Kaç adet kriter girilmiş tespit ettik
// Girilen kriterleri bir döngü kullanarak ikinci query ye ekliyoruz
while(counter >0)
{
qbrGet = qbdsGet.range(counter);
info(strfmt("%1 : %2 ",counter , qbrGet.value() ));
qbds2.addRange(qbrGet.field()).value(qbrGet.value());
counter--;
}

setPrefix("Asıl Query ile ");
while(qRun.next())
{
CustTable = qRun.get(TableNum(CustTable));
info(strfmt("%1 : %2 ", CustTable.AccountNum,CustTable.Name ));
}
}

// ikinci query için QueryRun oluşturuyoruz.
// Aynı kriterlerin eklendiğini promt ekranında görebiliyoruz
qRun2    = new QueryRun(q2);

setPrefix("İkinci Query ile ");
if(qRun2.prompt())
{
while(qRun2.next())
{
CustTable2 = qRun2.get(TableNum(CustTable));
info(strfmt("%1 : %2 ", CustTable2.AccountNum,CustTable2.Name ));
}
}
}

Selamlar.

ExistsJoin ve NotExistJoin ile Lookup yazmak

Merhaba

Şöyle bir istek olsun.  Seçilecek vergi numarası ne müşteri nede satıcı tablosunda kullanılmış olsun. Bu gibi bir istekte notexistjoin kullanabiliriz. Eğer müşteride veya satıcıda  kullanılanlar listelensin denseydi existjoin kullanacaktık.

client static void lookupETGVATNum (FormStringControl ctrl, Common common)
{
    SysTableLookup          sysTableLookup = SysTableLookup::newParameters(tablenum(TaxVATNumTable), ctrl);
    Query                   query = new Query();
    QueryBuildDataSource    queryBuildDataSource = query.addDataSource(tablenum(TaxVATNumTable));
    QueryBuildRange         queryBuildRange = queryBuildDataSource.addRange(fieldnum(TaxVATNumTable, CountryRegionId));
    QueryBuildDataSource    qdbs;
    ;

// CustTable müşteri tablosunda olmayanları getiriyoruz
    qdbs  = queryBuildDataSource.addDataSource(tablenum(CustTable));
    qdbs.addLink(fieldnum(TaxVATNumTable , vatNum ),fieldnum(CustTable , vatNum ));
    qdbs.joinMode(joinmode::NoExistsJoin);

Read more

Axaptada forma kodla çoklu range eklemek

Merhaba

Bir araç isteği geliştirmesi yaptığımızı düşünelim. Araç isteklerinin listelendiği bir form yapıyoruz.
Burada kişi bu formu açtığında kendi kayıtları ve kendisine bağlı olan pozisyondaki personelinin kayıtları görünsün istiyoruz.

init motudundan çağırabileceğimiz addrange metodumuz şöyle olabilir.

void addRange()
{

HRPPartyPositionTableRelationship HRPPartyPosition;
HRPPartyPositionTableRelationship HRPPartyPosition2;
QueryBuildRange rangeReqOwner;
emplId emplId;
str filterReqOwner;

;rangeReqOwner = VehicleRequest_ds.query().dataSourceTable(tablenum(VehicleRequest)).addRange(fieldNum(VehicleRequest, ReqOwner)); // range tanımlıyoruz

Read more

Query ile yapamadığınız bir join’i nasıl yapabilirsiniz?

Merhaba

BankAccountTable’ı lookup da açtırmak istiyoruz. Kriterlerimiz şöyle.

Lookupta  BankAccountTable.AssignedBankTransType alanı boş olanlar ve BankTransType.BankTransType   <>  BankAccountTable.AssignedBankTransType

İlişkisiyle  BankTransType’ın BankTransType.ExchangeNoteDocType’ı Çek ve senetten farklı olan kayıtlar isteniyor.

Query’de   bu join’in nasıl yapılacağını bulamadım.  Bu sebepten  temp tablo kullanmaya  karar verdim.  while select kullanarak temptabloyu doldurup.

Sonra lookup için query’ı yazdım.

Axaptada joinlerle ilgili bir makaleyi ilerki zamanlarda yayınlayacağım.

Örenk metod şöyledir.

 

static client void lookupPortfolioPromissory(FormStringControl _ctrl, CurrencyCode _filterStr)
{
    SysTableLookup                sysTableLookup = SysTableLookup::newParameters(tablenum(tmpBankAccountTable),_ctrl);
    Query                                     query = new Query();

Read more

Axapta’da arama metodu örneği

Merhaba

8 arama sahası ve 5 farklı tablo içeren bir arama formu istendiğinde nasıl bir metod yazabileceğinizin bir örneğini paylaşıyorum.

Hangi sahanın dolu olacağı belli olmayan ve kombinasyonun çok fazla olduğu bu durumda öncelikle en çok kriter girilebilecek

olan ana tabloyu alıp döngü içinde diğerlerinin varlığı kontrol etmek mantıklı.

Kriterlere uyan bir kayıt olursa bunun bir container a dolduruyoruz.

public Container simpleSearch(  BorAXEmplId  _boraxEmplId

                                ,EMplId _emplId

                                ,HRMIdentificationNumber _number

                                ,EmplName _name

                                ,HrmLastName _lastName

                                ,Birthdate _birthDate

                                ,NameTwenty _birthPlace

                                ,Email _email)

{

Read more

Lookup’ta join ile query yazmak

Merhaba

Axapta  formlarında bir alanın lookup metodunu ezmek zorunda kalabilirsiniz.

Örneğimizde bir lookup metedu var.  join ile query yazılıp kriter veriliyor.
static client void lookupPortfolioPromissory(FormStringControl _ctrl, CurrencyCode _filterStr)// para birimine göre farklı gelsin
{
    SysTableLookup          sysTableLookup = SysTableLookup::newParameters(tablenum(BankAccountTable),_ctrl);
    Query                   query = new Query();
    QueryBuildDataSource    queryBuildDataSource = query.addDataSource(tablenum(BankAccountTable)); // birinci tablomuz
    QueryBuildDataSource    qdbs;
    ;

Read more

Query & Dialog Örnekleri 6

Merhaba

static void Query6(Args _args)
{
    CustTable   cust;
    CustTrans   custTrans;

    Query                   q = new Query();
    QueryRun                qr;
    QueryBuildDataSource    qbdsCustTable;
    QueryBuildDataSource    qdbsCustTrans;
    QueryBuildRange         qbrCurrency;
    QueryBuildRange         qbrRiskAmount;
    CurrencyCode            currency;
    Amount                  riskAmount;

    dialog                  d = new Dialog(“Müşteriler”);
    dialogField             dfCurrency;
    dialogField             dfRiskAmount;

    ;
    //Dialog
    dfCurrency = d.addField(typeId(CurrencyCode));
    dfRiskAmount = d.addField(typeId(Amount), “Max risk tutarı :”);

    if(d.run())
    {
        //getFromDialog
        currency    = dfCurrency.value();
        riskAmount  = dfRiskAmount.value();

Read more

Query & Dialog Örnekleri 5

Merhaba

static void query5(Args _args)
{
    CustTable   cust;

    Query                   q = new Query();
    QueryRun                qr;
    QueryBuildDataSource    qbdsCustTable;
    QueryBuildRange         qbrCurrency;
    QueryBuildRange         qbrRiskAmount;
    CurrencyCode            currency;
    Amount                  riskAmount;

    dialog                  d = new Dialog(“Müşteriler”);
    dialogField             dfCurrency;
    dialogField             dfRiskAmount;

    ;
    //Dialog
    dfCurrency = d.addField(typeId(CurrencyCode));
    dfRiskAmount = d.addField(typeId(Amount), “Max risk tutarı :”);

    if(d.run())
    {
        //getFromDialog
        currency    = dfCurrency.value();
        riskAmount  = dfRiskAmount.value();

Read more

Query & Dialog Örnekleri 4

Merhaba

static void query4(Args _args)
{
    CustTable   cust;

    Query                   q = new Query();
    QueryRun                qr;
    QueryBuildDataSource    qbdsCustTable;
    QueryBuildRange         qbrCurrency;
    CurrencyCode            currency;
    dialog                  d = new Dialog(“Müşteriler”);
    dialogField             dfCurrency;
    ;
    dfCurrency = d.addField(typeId(CurrencyCode));
    if(d.run())
    {

Read more

Query & Dialog Örnekleri 3

Merhaba

static void query3(Args _args)
{
    CustTable   cust;

    Query                   q = new Query();
    QueryRun                qr;
    CurrencyCode            currency;
    ;
    currency = “USD”;
    warning(“select ile”);
    while select cust
        where cust.Currency == currency
    {
        info(strFmt(“%1″, cust.Name));
    }

Read more

Page 1 of 3123