What makes a good Dynamics AX Project Manager?
Source : http://www.cognitive-group.com
Archive for Temmuz, 2013
Merhaba
Bu bilgi görseli (infographic) veri depolama aşamalarını gösteriyor. Teknolojinin bu kadar hızla değiştiğini görmek insanı şaşırtıyor. Buluttan sonra bakalım daha neler göreceğiz.
Source : http://blog.systemsadvisers.com
Selamlar.
Merhaba
Vergi kimlik numarasının bir algoritması var. Bu algoritma sayesinde girilen numaranın geçerli olup olmadığını tespit edebilirsiniz. Bu kontrolü yapacak bir fonksiyona ihtiyacım vardı. İnternette farklı dillerde yazılmış bir çok örnek buldum ancak X++ ile yazılmış bulamadım. Global sınıfına vergiKimlikNoValidation_FD adında bir metot yazdım.
// FD : Vergi kimlik no doğrulama private boolean vergiKimlikNoValidation_FD(int64 kno) { int lastDigit; int total = 0; int i ; int j = 1000000000; int dig; int v1 , v11; ; if (strLen(int2str(kno)) != 10) return false; lastDigit = kno mod 10; for (i = 9; i >= 1; i--) { dig = (kno div j) mod 10 ; j = j / 10 ; if (dig < 0) return false; v1 = ((dig + i) mod 10); v11 = (v1 * power(2, i)) mod 9; if (v1 != 0 && v11 == 0) v11 = 9; total += v11; } if (total mod 10 == 0) total = 0; else total = (10 - (total mod 10)); if (total == lastDigit) return true; else return false; }
Selamlar.
Hi,
As you know with Dynamics AX 2012, you have to create a product first and then release to the product to companies. You can release which company do you want. In my company there is a request to release product all companies automaticly. I have some research and found good post and methods about it. I wrote a class named SECReleaseProductForAllCompanies and make it MenuItemButton as you can see below.
Let see methods of class now.
Class decleration;
// FD Relaese products for all companies class SECReleaseProductForAllCompanies { EcoResProductDisplayProductNumber productNumber; EcoResProduct ecoResProduct; }
Main method; Gets all the selected records and calls run.
public static void main(Args args) { SECReleaseProductForAllCompanies releaseProductForAllCompanies; ecoResProduct EcoResProduct; FormDataSource fdsEcoResProduct; ; fdsEcoResProduct = args.record().dataSource(); for (EcoResProduct = fdsEcoResProduct.getFirst(true) ? fdsEcoResProduct.getFirst(true) : fdsEcoResProduct.cursor(); EcoResProduct; EcoResProduct = fdsEcoResProduct.getnext()) { releaseProductForAllCompanies = new SECReleaseProductForAllCompanies(); releaseProductForAllCompanies.parmProductNumber(ecoResProduct.DisplayProductNumber); releaseProductForAllCompanies.run(); info(strfmt("%1 %2 product successfully released to all companies. ", EcoResProduct.productNumber() , EcoResProduct.productName() )); } }
Parm method;
public EcoResProductDisplayProductNumber parmProductNumber( EcoResProductDisplayProductNumber _productNumber = productNumber) { productNumber = _productNumber; return productNumber; }
Run method;
private void run() { ; this.releaseProduct(); }
Release method; You can use EcoResProductReleaseManagerBase::releaseProduct() static method instead of this.
private void releaseProduct() { InventTable inventTable; InventTableModule inventTableModule; NumberSequenceTable numberSequenceTable; ItemId itemId; InventItemSetupSupplyType inventItemSetupSupplyType; CompanyInfo companyInfo; EcoResStorageDimensionGroupProduct ecoResStorageDimensionGroupProduct; EcoResTrackingDimensionGroupProduct ecoResTrackingDimensionGroupProduct; EcoResStorageDimensionGroupItem ecoResStorageDimensionGroupItem; EcoResTrackingDimensionGroupItem ecoResTrackingDimensionGroupItem; ; select firstOnly ecoResProduct where EcoResProduct.DisplayProductNumber == productNumber; while select companyInfo where companyInfo.DataArea != "DAT" { changecompany (companyInfo.DataArea) { ttsBegin; inventTable = null; inventTableModule = null; inventItemSetupSupplyType = null; ecoResStorageDimensionGroupProduct = null; ecoResTrackingDimensionGroupProduct = null; ecoResStorageDimensionGroupItem = null; ecoResTrackingDimensionGroupItem = null; numberSequenceTable = InventParameters::numRefItemId().numberSequenceTable(); if (!numberSequenceTable.RecId || numberSequenceTable.Manual) { itemId = ecoResProduct.productNumber(); } else { itemId = NumberSeq::newGetNumFromId(numberSequenceTable.RecId).num(); } inventTable.initValue(); inventTable.initFromEcoResProduct(ecoResProduct); inventTable.ItemId = ItemId; inventTable.NameAlias = ecoResProduct.SearchName; inventTable.insert(true); inventTableModule.initValue(); inventTableModule.ItemId = inventTable.ItemId; inventTableModule.ModuleType = ModuleInventPurchSales::Invent; inventTableModule.insert(); inventTableModule.initValue(); inventTableModule.ItemId = inventTable.ItemId; inventTableModule.ModuleType = ModuleInventPurchSales::Purch; inventTableModule.insert(); inventTableModule.initValue(); inventTableModule.ItemId = inventTable.ItemId; inventTableModule.ModuleType = ModuleInventPurchSales::Sales; inventTableModule.insert(); InventItemLocation::createDefault(inventTable.ItemId); inventItemSetupSupplyType.initValue(); inventItemSetupSupplyType.ItemId = inventTable.ItemId; inventItemSetupSupplyType.ItemDataAreaId = inventTable.DataAreaId; inventItemSetupSupplyType.insert(); ecoResStorageDimensionGroupProduct = EcoResStorageDimensionGroupProduct::findByProduct(ecoResProduct.RecId); ecoResTrackingDimensionGroupProduct = EcoResTrackingDimensionGroupProduct::findByProduct(ecoResProduct.RecId); if (ecoResStorageDimensionGroupProduct.RecId) { ecoResStorageDimensionGroupItem.ItemDataAreaId = inventTable.DataAreaId; ecoResStorageDimensionGroupItem.ItemId = inventTable.ItemId; ecoResStorageDimensionGroupItem.StorageDimensionGroup = ecoResStorageDimensionGroupProduct.StorageDimensionGroup; ecoResStorageDimensionGroupItem.insert(); } if (ecoResTrackingDimensionGroupProduct.RecId) { ecoResTrackingDimensionGroupItem.ItemDataAreaId = inventTable.DataAreaId; ecoResTrackingDimensionGroupItem.ItemId = inventTable.ItemId; ecoResTrackingDimensionGroupItem.TrackingDimensionGroup = ecoResTrackingDimensionGroupProduct.TrackingDimensionGroup; ecoResTrackingDimensionGroupItem.insert(); } ttsCommit; } } }
You can download class from here.
Thanks Sreenath Reddy G. for methods.
Until next time.
Merhaba
Ax 2012 ile finansal boyut yapısının tamamen değiştiğini daha önce ifade etmiştim. Bu değişiklik bize bazı durumlarda fazladan yazılım yükü oluşturuyor. Bunlardan biride bir boyuttaki belli bir boyutun değerini kod ile değiştirmek. Şöyle örnekleyeyim.
Bir müşteriniz var ve departman boyutunda 0026 yazıyor. Siz bunu 0030 ile değiştirmek istiyorsunuz.
Ax 2009 ‘da
custTable.Dimension[2] = “0030″; gibi basit bir kod ile bunu yapabilirdiniz.
Ax 2012 ‘de ise şöyle bir metoda ihtiyacınız var;
static void FD_ChangeDimValue(Args _args) { CustTable custTable; DimensionAttributeValueSetStorage dimensionStorage; DimensionAttribute deparmentDimensionAttribute; DimensionAttributeValue newDepartmentValue; ; ttsBegin; // Müşteri seçiliyor custTable = CustTable::findRecId(22565423201,true); // Değiştirelecek boyut seçiliyor deparmentDimensionAttribute = DimensionAttribute::findByName("Department"); // Değiştirilecek boyut için değer seçiliyor. newDepartmentValue = DimensionAttributeValue::findByDimensionAttributeAndValue(deparmentDimensionAttribute, "0030"); dimensionStorage = DimensionAttributeValueSetStorage::find(CustTable.DefaultDimension); dimensionStorage.addItem(newDepartmentValue); CustTable.DefaultDimension = dimensionStorage.save(); CustTable.update(); ttscommit; }
Selamlar.
Merhaba arkadaşlar,
Birlikte çalışmak üzere bir yazılım uzmanı arayışımız var. Bütün sorularınız için benimle irtibata geçebilirsiniz. İlan şöyle:
Firma bünyesindeki bulunan tüm sistemler ve müşteri istekleri için yazılımlar geliştirmek,
Varolan yada geliştirilecek olan yazılımların desteğini vermek,
Firma bünyesinde kullanılan Dyanmics Ax ERP sistemine destek vermek,
Proje takımlarında yer alarak, tanımlanan rol ve sorumluluklara uygun çalışmak.
Selamlar.