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

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.

Sonuç

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.

Originally published at https://guvensahin.com on March 11, 2021.

--

--

Dynamics 365 platformundaki tüm ürünler ile ilgili Türkçe içeriğin bir araya geldiği yayın.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store
Güven Şahin

Güven Şahin

Dynamics 365 F&O | Dynamics AX | Software Developer — guvensahin.com