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.
Geri bildirim: Dynamics 365 F&O – Union Query ile View Oluşturmak | Güven Şahin