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.
16 Haziran 2016 Perşembe
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;
}
}
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
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 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");
}
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;
}
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)
&& 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."
Kaydol:
Kayıtlar (Atom)
Total ciro
static void MAA_SalesTableTotal(Args _args) { SalesTable SalesTable; utcDateTime dateTime; dateTime ...
-
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öne...
-
Veri Filtreleme CTRL+F Geçerli alanı filtrelemek için kullanılır. Ekran açılır. Hangi alan üzerine tıklandı ise o alan için filtreleme k...