İçeriğe geç

Dynamics 365 F&O – Enum Etiketlerine SQL Sorgusu ile Erişmek

dynamics 365 f&o enums

Daha önce bu yazımda Dynamics AX 2012 de enum etiketlerine SQL üzerinden nasıl ulaşabileceğimizden bahsetmiştim. Bu yazıda aynı işlemi D365 F&O’da nasıl yaparız onu anlatacağım. Yapacağımız bu işlem ile enum’ın değerlerini ve etiketlerini bir tabloya yazacağız. Böylece SQL sorgularında enum etiketlerini çağırabileceğiz. Bu sayede:

  • Data entity’lerde enum’ın etiketini sabit bir dil kodunda dönebiliriz.
  • Union query kullanan view’larınız varsa birbirinden farklı enumların olduğu alanları normalde birleştiremessiniz. Fakat enum’ın string etiketlerini union ile tek kolonda birleştirip gösterebiliriz.

D365 F&O da standart olarak gelen SRSAnalysisEnums isimli bir tablo bulunuyor. Bu tabloda bazı sistem enum’larının etiketleri mevcut. Fakat içinde her enum yok. Göstereceğim yöntem ile istediğiniz herhangi bir enum’ı istediğiniz dil kodu bazında bu tabloya ekleyeceğiz.

Nasıl Yapılır

Aşağıdaki sınıfı kendi projenize ekleyin ve çalıştırın.

// Created by: Güven Şahin - guvensahin.com
class GvnEnumLabelGenerator extends RunBaseBatch
{
    DialogField dlgEnumName;
    DialogField dlgLanguageId;

    SRSEnumName enumName;
    LanguageId  languageId;


    public Object dialog()
    {
        Dialog      dialog = super();
   
        dialog.caption(GvnEnumLabelGenerator::description());
        dlgEnumName = dialog.addField(extendedTypeStr(SRSEnumName));
        dlgLanguageId = dialog.addFieldValue(extendedTypeStr(LanguageId), CompanyInfo::languageId());
   
        return dialog;
    }

    public boolean getFromDialog()
    {
        enumName = dlgEnumName.value();
        languageId = dlgLanguageId.value();
   
        return super();
    }

    public void run()
    {
        SRSAnalysisEnums    SRSAnalysisEnums;
        DictEnum            currentEnum = new DictEnum(enumName2Id(enumName));

        if (currentEnum == null)
        {
            throw error(strfmt("%1 enum bulunamadı.", enumName));
        }

        ttsbegin;
            
        delete_from SRSAnalysisEnums
        where SRSAnalysisEnums.EnumName == enumName
            && SRSAnalysisEnums.LanguageId == languageId;
            

        LabelId labelId;
        SRSEnumLabel label;

        for (int x = 0; x < currentEnum.values(); x++)
        {
            labelId = currentEnum.index2LabelId(x);
            label = SysLabel::labelId2String(labelId, languageId);

            SRSAnalysisEnums.clear();
            SRSAnalysisEnums.EnumName       = enumName;
            SRSAnalysisEnums.EnumItemName   = currentEnum.index2Symbol(x);
            SRSAnalysisEnums.EnumItemValue  = currentEnum.index2Value(x);
            SRSAnalysisEnums.LanguageId     = languageId;
            SRSAnalysisEnums.EnumItemLabel  = label;
            SRSAnalysisEnums.insert();
        }

        ttscommit;

        Info(strFmt("%1 - %2 için tamamlandı.", enumName, languageId));
    }

    public static ClassDescription description()
    {
        return "Enum etiketlerini tabloya aktar";
    }

    public boolean runsImpersonated()
    {
        return true; // on server
    }

    public static void main(Args _args)
    {
        GvnEnumLabelGenerator GvnEnumLabelGenerator = new GvnEnumLabelGenerator();

        if (GvnEnumLabelGenerator.prompt())
        {
            GvnEnumLabelGenerator.run();
        }
    }
}

Dialog sizden enum adı ve dil kodu isteyecek. Tamam dedikten sonra değerler SRSAnalysisEnums tablosunda oluşmuş olacaktır. Artık bu tabloyu sorgularınıza dahil ederek kullanabilirsiniz.

Son Olarak

Tüm yapılacaklar bu kadardı.

D365 F&O ile ilgili diğer yazılarıma şuradan, Dynamics AX yazılarıma da buradan bakabilirsiniz.

Hoşçakalın.

Yazıyı Paylaş

“Dynamics 365 F&O – Enum Etiketlerine SQL Sorgusu ile Erişmek” hakkında 1 yorum

  1. Geri bildirim: Dynamics 365 F&O – Union Query ile View Oluşturmak | Güven Şahin

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir