Dialog Field Lookups with Multi-Select Capability in Dynamics 365


Dynamics 365 Finance and Operations uygulamalarında, kullanıcıların veri girişi sırasında seçim yapmalarını kolaylaştırmak için dialog alanları sıkça kullanılır. Ancak, standart dialog alanlarındaki lookup'lar genellikle tek seçimle sınırlıdır. Bu yazıda, bir dialog alanına çoklu seçim özelliği eklemek için nasıl bir yöntem kullanabileceğinizi adım adım açıklayacağız.
Kullanılacak Yöntem: SysLookupMultiSelectGrid
SysLookupMultiSelectGrid
sınıfı, Dynamics 365'te çoklu seçim yapılabilir bir grid oluşturmak için kullanılır. Bu sınıfı, dialog'un bir alanında çoklu seçim sağlayan bir lookup ile entegre edeceğiz.
Adım 1: Dialog Alanını Tanımlama
Dialog alanını oluşturmak için bir Dialog
nesnesi kullanılır. Aşağıda, bir dialog'un nasıl oluşturulacağı ve bir alanın lookup özelliğinin nasıl geçersiz kılınacağı gösterilmiştir:
private boolean dialog()
{
Dialog dialog = new Dialog("Personelleri ekle");
DialogField field = dialog.addField(extendedTypeStr(String500), "Personel");
field.registerOverrideMethod(methodStr(FormStringControl, lookup),
methodStr(BCResponsibleAddMultiLine, lookupPerson), this);
if(dialog.run())
{
if (!field.value())
throw warning("Personelleri seçiniz.");
dialogValue = field.value();
return true;
}
return false;
}
Yukarıdaki kodda:
Dialog
nesnesi ile bir dialog penceresi oluşturuluyor.registerOverrideMethod
kullanılarak, ilgili alanınlookup
metodu geçersiz kılınıyor ve kendilookupPerson
metodumuz ile değiştiriliyor.
Adım 2: Çoklu Seçim Lookup'ını Oluşturma
Dialog alanına çoklu seçim özelliği eklemek için SysLookupMultiSelectGrid
sınıfını kullanacağız. İşte örnek kod:
public void lookupPerson(FormStringControl _formControl)
{
Query query = new Query();
QueryBuildDataSource queryBuildDataSource = query.addDataSource(tableNum(HcmWorker));
queryBuildDataSource.addSelectionField(fieldNum(HcmWorker, Person));
container Person;
SysLookupMultiSelectGrid::lookup(query,_formControl,_formControl,_formControl, Person);
}
Bu metotta:
Query
nesnesi ile HcmWorker tablosundan veriler alınıyor.SysLookupMultiSelectGrid::lookup
metodu, verilen sorgu ile çoklu seçim yapılabilir bir grid oluşturuyor.
Adım 3: Seçimlerin İşlenmesi
Kullanıcının yaptığı seçimler, dialog kapandıktan sonra işlenmelidir. Aşağıdaki kodda, seçilen değerlerin nasıl işleneceği gösterilmiştir:
private void run()
{
if(this.validate() && this.dialog())
{
BCResponsible bcResponsibleNew;
RecId person;
List strlist = new List(Types::Int64);
strlist = strSplit(dialogValue, ";");
ListIterator it = new ListIterator(strlist);
ttsbegin;
while (it.more())
{
person = it.value();
bcResponsibleNew.clear();
bcResponsibleNew.Number = record.Number;
bcResponsibleNew.PersonnelHcm = HcmWorker::findByPerson(person).RecId;
bcResponsibleNew.insert();
it.next();
}
ttscommit;
info(strFmt("Personeller oluşturuldu."));
}
}
Bu kodda:
strSplit
ile dialog alanından alınan değerler ayrıştırılıyor.Her bir seçim işlenerek, ilgili tabloya kayıt ekleniyor.
Sonuç
Bu yöntem ile Dynamics 365 uygulamalarında dialog alanlarında çoklu seçim yapabilen bir lookup oluşturabilirsiniz. SysLookupMultiSelectGrid
sınıfı, kullanıcılara esnek ve kullanıcı dostu bir deneyim sunarak, iş süreçlerinizi hızlandırabilir.
Umarım bu yazı, Dynamics 365 projelerinizde çoklu seçim özellikleri eklemek için size ilham verir! 😊
Tam Kod
class BCResponsibleAddMultiLine
{
BCTable record;
str dialogValue;
public void lookupPerson(FormStringControl _formControl)
{
Query query = new Query();
QueryBuildDataSource queryBuildDataSource = query.addDataSource(tableNum(HcmWorker));
queryBuildDataSource.addSelectionField(fieldNum(HcmWorker, Person));
container Person;
SysLookupMultiSelectGrid::lookup(query,_formControl,_formControl,_formControl, Person);
}
private boolean dialog()
{
Dialog dialog = new Dialog("Personelleri ekle");
DialogField field = dialog.addField(extendedTypeStr(String500), "Personel");
field.registerOverrideMethod(methodStr(FormStringControl, lookup),
methodStr(BCResponsibleAddMultiLine, lookupPerson), this);
if(dialog.run())
{
if (!field.value())
throw warning("Personelleri seçiniz.");
dialogValue = field.value();
return true;
}
return false;
}
private void run()
{
if(this.validate() && this.dialog())
{
BCResponsible bcResponsibleNew;
RecId person;
List strlist = new List(Types::Int64);
strlist = strSplit(dialogValue, ";");
ListIterator it = new ListIterator(strlist);
ttsbegin;
while (it.more())
{
person = it.value();
bcResponsibleNew.clear();
bcResponsibleNew.Number = record.Number;
bcResponsibleNew.PersonnelHcm = HcmWorker::findByPerson(person).RecId;
bcResponsibleNew.insert();
it.next();
}
ttscommit;
info(strFmt("Personeller oluşturuldu."));
}
}
private boolean validate()
{
boolean isValid = true;
return isValid;
}
public BCTable parmRecord(BCTable _record = record)
{
record = _record;
return record;
}
public void new()
{
}
public static BCResponsibleAddMultiLine construct()
{
return new BCResponsibleAddMultiLine();
}
public static void main(Args _args)
{
if (! _args || ! _args.dataset() || ! _args.record() ||
_args.record().TableId != tablenum(BCTable))
{
throw error(Error::missingRecord(funcname()));
}
BCResponsibleAddMultiLine process = BCResponsibleAddMultiLine::construct();
process.parmRecord(_args.record());
process.run();
}
}
Subscribe to my newsletter
Read articles from Bayram ÇETİN directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by

Bayram ÇETİN
Bayram ÇETİN
Senior Dynamics 365 Developer