Archive for Temmuz, 2013

What makes a good Dynamics AX Project Manager?

Source : http://www.cognitive-group.com

EVOLUTION OF THE IT PRO

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.

X++ ile Vergi Kimlik Numarası kontrolü nasıl yapılır

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.

How to release products to all companies.

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.

How to Replace a Financial Dimension in Default Dimensions [Dynamics AX 2012]

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.

İş ilanı: .net yazılım uzmanı

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:

  • Tercihen Üniversitelerin Bilgisayar Mühendisliği veya ilgili bölümlerinden mezun olan,
  • Yazılım geliştirme konusunda minimum 3 yıl deneyimli,
  • NET platformu ve C# diline hakim, Nesne yönelik programlamaya ve tasarım konusunda bilgili
  • Çok katmanlı ve dağıtık uygulamalar konusunda bilgisi olan,
  • ASP.NET, WF4, WCF, WPF, Windows Form, Windows Service’ler , Web servisleri hakkında bilgili,
  • Entity Framework, XPO ya da benzer ORM deneyimi olan,
  • SQL Server (T-SQL) geliştirme konusunda deneyimli,
  • Teknik döküman okuyabilecek derecede ingilizce bilen,
  • Erkek adaylar için askerliğini tamamlamış,
  • MS-Office programlarını kullanabilen,
  • Takipçi, iş disiplinine sahip ve yeni iş süreçlerini öğrenmek için motive,
  • Kendi sektöründe teknolojik gelişmeleri takip eden ve geliştirici öneriler sunan,
  • Takım çalışmasına yatkın, esnek ve yoğun çalışma ortamına uyum sağlayabilecek,
  • Üst seviyede analitik düşünme ve analiz etme yeteneği olan

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.