16 Haziran 2016 Perşembe

Display alan

Formun içinde olmayan bir alanı farklı bir tablodan display yöntemiyle çekebiliriz.

Örneğin, Açık sipariş satırlarına "İş akışı durumu"'nu getirmemiz istendi.




display WFDummiesWorkflowState dispWFDummiesWorkflowState()
{
    return SalesTable::find(this.SalesId).WFDummiesWorkflowState; // SalesTable’daki SalesId alanı      ile SalesLine’daki SalesId alanıyla süzüyorsun(SalesTable::find(this.SalesId) ).
}

Kodu tablonun Metods  kısmına yazıyoruz.



Daha sonra yazdığımız metodu formda bulunan gride sürükleyip bırakıyoruz.



Gride sürükleyip bıraktığımız alanın DataSource'unu seçiyoruz.



Alan formumuza bu şekide gelmiş oluyor.


15 Haziran 2016 Çarşamba

Dynamic Ax Kodla iş akışı yönlendirmesi

İş akışlarını kod ile yönlendirebilirsiniz.

static void WorkFlowReAssign(Args _args)
{
    WorkflowTrackingStatusTable     trackingStatusTable;
    WorkflowWorkItemTable           workItemTable;
    WorkflowTrackingTable           trackingTable;
    WorkflowTrackingCommentTable    trackingCommentTable;
    WorkflowTrackingArgumentTable   trackingArgumentTable;
    UserId                          newUserId = "akblt"; // Yönlendirilecek olan kişi
    ;

    while select trackingStatusTable where trackingStatusTable.TrackingStatus == WorkflowTrackingStatus::Pending &&
                                           trackingStatusTable.InstanceNumber == "MAA1453" // Örnek kodu
    {
        ttsbegin;
        info(strfmt("%1 - %2", trackingStatusTable.ConfigurationName, trackingStatusTable.InstanceNumber));

        select forupdate workItemTable where workItemTable.RefRecId   == trackingStatusTable.ContextRecId &&
                                   workItemTable.RefTableId    == trackingStatusTable.ContextTableId &&
                                   workItemTable.CompanyId  == trackingStatusTable.ContextCompanyId &&
                                   workItemTable.Status     == WorkflowWorkItemStatus::Pending;

        WorkflowWorkItem::delegateWorkItem(workItemTable.Id, newUserId, "");// birine yetki devretmek için

        select forupdate trackingTable where trackingTable.WorkItemActivityInstanceId == workItemTable.ActivityId;

        select forupdate trackingCommentTable where trackingCommentTable.TrackingId == trackingTable.TrackingId;

        select forupdate trackingArgumentTable where trackingArgumentTable.TrackingId == trackingTable.TrackingId && trackingArgumentTable.DataType == "WorkflowUser";

        info(strfmt("%1 - %2 - %3 - %4", workItemTable.UserId, workItemTable.Subject, workItemTable.Description, workItemTable.SubWorkflowId));
        ttscommit;
    }
}

3 Haziran 2016 Cuma

Satınalma siparişi iptali


Satınalma siparişinin iptal edilmesi istenirse size aşağıdaki kod yardımcı olacak;

static void PurchTableCancel()
{
    PurchTable  PurchTable;
    PurchLine   PurchLine;
    InventTrans InventTrans;
    ;
    ttsbegin;

    select forupdate PurchTable
        where PurchTable.PurchId == "MAA00051615";

    PurchTable.PurchStatus  = PurchStatus::Canceled;
    PurchTable.PurchPoolId = "İptal";
    PurchTable.update();

    while select forupdate PurchLine
        where   PurchLine.PurchId   == PurchTable.PurchId
    {
        InventTrans = InventTrans::findTransId(PurchLine.InventTransId, true);
        InventTrans.StatusReceipt = StatusReceipt::Ordered;//Açık sipariş
        InventTrans.DatePhysical = datenull();
        InventTrans.VoucherPhysical ="";
        InventTrans.CostAmountPhysical = 0;
        InventTrans.CostAmountSecCurPhysical_TR = 0;
        InventTrans.update();

        PurchLine.PurchStatus = PurchStatus::Canceled;//Açık sipariş
        PurchLine.ReturnStatus = ReturnStatusLine::None;
        PurchLine.RemainPurchPhysical = 1;
        PurchLine.RemainInventPhysical = 1;
        PurchLine.RemainPurchFinancial = 0;
        PurchLine.RemainInventFinancial = 0;

        PurchLine.PurchStatus = PurchStatus::Canceled;
        PurchLine.doUpdate();
    }
    ttscommit;
    info("bitti");
}

Insert / Delete metodu

Adres defterine ilçe eklenmesi istenirse aşağıdaki job'la bunu yapabilirsiniz.

static void MAATestTableInsertAdress(Args _args)
{
    AddressCounty  AddressCounty;

    ttsBegin;

    AddressCounty.CountryRegionId= "Türkiye";
    AddressCounty.StateId= "Zonguldak";
    AddressCounty.CountyId  = "Ereğli";
    AddressCounty.insert();
    ttsCommit;
    info("bitti");
}



Bir tabloya kodla kayıt eklemek için insert metodunu kullanabilirsiniz.

static void MAATestTableInsert(Args _args)
{
    NumberSequenceReference  NumberSequenceReference;

    ttsBegin;

    NumberSequenceReference.NumberSequence= "IsTakipNo";
    NumberSequenceReference.WizardHighest= 999999;
    NumberSequenceReference.DataTypeId  = 30308;
    NumberSequenceReference.doInsert();
    ttsCommit;
    info("bitti");
}


Bir tablodan kayıt silmek için de delete metodunu kullanabilirsiniz;

static void MAATestDelete (Args _args)
{
    NumberSequenceTable NumberSequenceTable;

        ttsBegin;
        select firstOnly NumberSequenceTable
        where NumberSequenceTable.NumberSequence == "ETGM_303"; //delete edilecek kayıdı bulmak için şartlar belirtilir.
        if(NumberSequenceTable)
        {
            NumberSequenceTable.doDelete();
        }
        ttsCommit;
        info("bitti");
}


Update Methods

Bir tablodaki alanı başka bir tablodaki aynı alanla güncelleme istenirse aşağıdaki metod size yardımcı olacak.

Örneğin CustTable'daki SalesDistrictId alanlanlarını ForecastSales'daki SalesDistrictId alanıyla güncellenmesi istendiğinde bu jobs yardımıyla çözüme ulaşabilirsiniz.


//CustTable'daki SalesDistrictId alanlarını ForecastSales'daki SalesDistrictId alanlarıyla birbirine eşler.

static void MAA_UpdateForecastSales(Args _args)
{
      ForecastSales        forecastSales;
      CustTable            custTable;
    ;

    ttsBegin;

    while select custTable // Tabloyu elimize alıyoruz. bu tablo SalesDistrictId alanı çekilecek olan tablo.
           where custTable.SalesDistrictId != "" // şart yazıyoruz. "CustTable'daki SalesDistrictId alanı boş olmayanlar"
    {
        while select forupdate forecastSales // güncellenecek olan tablo
           where forecastSales.CustAccountId == custTable.AccountNum // CustTable'daki AccountNum'ı forecastSales'daki CustAccountId'siyle eşit olanlar
       {
            if  (forecastSales.SalesDistrictId  != "")
            {
                 forecastSales.SalesDistrictId = custTable.SalesDistrictId; // custTable'daki SalesDistrictId alanlarının hepsini forecastSales'daki aynı alanla eşitle.
                 forecastSales.update();
                 info(strfmt("%1", forecastSales.SalesDistrictId));
            }
        }
    }

    info("Bitti");

    ttsCommit;

}

2 Haziran 2016 Perşembe

Update Methods

Kendi oluşturduğum örnek bir tablodaki alanda matematiksel işlem yaptırarak güncelleme yapmak için aşağıdaki metodu inceleyebilirsiniz.

static void MAA_TestMali(Args _args)
{
    TestMali   TestMali;
    ;

    ttsbegin;

    while select forupdate TestMali
        where TestMali.AccountNum LIKE "MAA00*"
        &&    TestMali.createdBy=='akb' // tablodaki kaydı oluşturan kişinin ax kullanıcısı

    {

       if(TestMali)
       TestMali.amount = ((12+405)*254)*1002;
       TestMali.update();
       info(strfmt("%1",   TestMali.amount));
    }

    info ("tamamlandı");
    ttscommit;
}


Tablodaki bir satırda birden fazla alanın güncellenmesi isteniyorsa size, aşağıdaki kod yardımcı olacak.

static void MAATestUpdate4(Args _args)
{
    PurchLine  PurchLine;

    ttsBegin;

      select firstOnly forUpdate PurchLine
        where PurchLine.PurchId=="MAA001453"; // Tablodaki satırı seçiyoruz (şartımızı belirliyoruz)
           && PurchLine.ItemId  LIKE  "A00*" // A00 ile başlayanlar (şartımızı belirliyoruz)

        if(PurchLine)
            {
                PurchLine.ShipperName        = "Mehmet Ali Akbulut"; // Güncellenecek alanlar
                PurchLine.ShipperTaxOffice   = "Kütahya"; // Güncellenecek alanlar
                PurchLine.ShipperTCNO        = "145312991571"; // Güncellenecek alanlar
                PurchLine.doUpdate();
            }

    ttsCommit;

    info("bitti");
}


Update / Insert / Delete Methods


Herhangi bir tablonun satırındaki bir alanda güncelleme istenirse bu metod kullanılanilir.

// bir satırda güncelleme yapılmak için kullanılır.
 static void MAATestUpdate(Args _args)
{
         NumberSequenceTable NumberSequenceTable;
 
  ttsBegin;

     select firstOnly forUpdate NumberSequenceTable
     where NumberSequenceTable.NumberSequence == "ETGM_303"; //şart

     if(NumberSequenceTable)
  {
     NumberSequenceTable.NumberSequence ="303";            

     NumberSequenceTable.doUpdate(); // alanı her şartta günceller.
  }

ttsCommit; info("bitti");
}

Güncellenecek alanın tipine göre, (enum, date vs.) update metodunda küçük değişiklikler yapmak gerekiyor.

Örneğin güncellenecek alanın tipi tarih(date) ise;

 {
                PriceDiscTable.ToDate= mkDate(31,12,2014);  //güncellenmesini istediğimiz alan
                PriceDiscTable.doUpdate();
  }


Güncellenecek alanın tipi enum ise;

 {
              SalesTable.SalesStatus = SalesStatus::Canceled;
              SalesTable.doUpdate();
 }


Dynamics Ax (Axapta) Nedir?


Dynamics Ax Microsoft’un orta ve büyük ölçekli işletmelerin ihtiyaçlarını karşılamak için tasarladığı temel iş çözümüdür. Veritabanı yönetim sistemi üzerinde çalışan, kendine özgü X++ dilinde geliştirilmiş ve arayüzleri Microsoft Office uygulamalarına çok benzediği için kullanımına alışılması çok kolay olan açık kaynak kodlu bir ERP sistemidir.

Teknolojik altyapısı ve çok katmanlı mimarisi ile Dynamics Ax ERP arenasının güçlü oyuncularından birisidir. Aynı zamanda iş ihtiyaçlarını en ince detaylarına kadar karşılanmasını sağlayan esnek bir yapıya sahiptir. Kendine özgü olan X++ geliştirme dili ile partnerlar ve müşteriler kendine özel geliştirmeler yaparak ek fonksiyonlar veya modüller geliştirebilirler.

Dynamics Ax kullanıcıların bilgisayarına bir masaüstü uygulaması olarak kurulur. Ek bir kullanıcı adı ve şifreye gereksinim duymadan kullanıcılar sisteme Windows hesapları ile girebilirler. Web den sisteme erişmek isteyen kullanıcılar için ise Enterprise Portal geliştirilmiştir. Enterprise portal ile kullanıcılar bir internet tarayıcısı ile sisteme erişerek işlemlerini gerçekleştirebilirler.

Açık kaynak kodlu yapısı ile Dynamics Ax üzerinde herhangi bir formun kaynak koduna ve diğer nesnelerine ulaşılabilir. Aynı zamanda formlar üzerindeki verilerin hangi tablolarda tutulduğu bilgisine erişilebilir. Tablolar arasındaki ilişkiler de açık olarak belirtilmiştir. Bu sayede Report Builder gibi araçlar sayesinde T-SQL komutlarını kullanarak kolayca rapor hazırlanabilir. Veritabanında depolanmış olan verilerin raporlar aracılığıyla sunulmasıyla işletme süreçleri yöneticiler tarafından en ince ayrıntısına kadar izlenilebilir. Alıntıdır.

(Kaynak : axaptanedir.com)

Dynamics Ax

           

Özetle Dynamics AX, tedarikten ==> sevkiyata kadar tüm verilerin koordineli bir şekilde kaydının tutulmasıdır.

Öğrendiğim bilgileri paylaşmak için bloğu oluşturdum. Yararlı olması dileğiyle.

"Bilgi paylaştıkça çoğalır."

Total ciro

static void MAA_SalesTableTotal(Args _args) { SalesTable SalesTable; utcDateTime dateTime; dateTime ...