Announcements
No record found.
Hi everyone,
I'm trying to enable searching by multiple fields in a lookup in Dynamics 365 Finance and Operations, but I can't get it to work as expected.
Currently, the lookup only searches by the YuklemeYeriKoduStr field, but I also want it to search by the YuklemeYeriAdi field. I’ve tried using resolveAmbiguousReference and setting both fields, but the lookup still only filters by the first one.
YuklemeYeriKoduStr
YuklemeYeriAdi
resolveAmbiguousReference
Here is the relevant part of my code for the data field:
[DataField] class YuklemeYeriKoduStr { /// <summary> /// /// </summary> /// <param name = "_formControl"></param> /// <returns></returns> public str resolveAmbiguousReference(FormControl _formControl) { return FormControlAmbiguousReferenceResolver::resolveAmbiguousReferenceForControl ( _formControl, true, AbsoluteFieldBinding::construct(fieldStr(YuklemeYeri, YuklemeYeriKoduStr),tableStr(YuklemeYeri)), AbsoluteFieldBinding::construct(fieldStr(YuklemeYeri, YuklemeYeriAdi),tableStr(YuklemeYeri))); } /// <summary> /// /// </summary> /// <param name = "_formControl"></param> /// <param name = "_filterStr"></param> public void lookup(FormControl _formControl, str _filterStr) { new InventLookup(_formControl, new Query(), formStr(YuklemeYeriLookup)).run(); } }
[Form] public class YuklemeYeriLookup extends FormRun { public void run() { FormStringControl lookupHostControl = SysTableLookup::getCallerStringControl(this.args()); boolean isFiltered = SysTableLookup::filterLookupPreRun(lookupHostControl, YuklemeYeri_YuklemeYeriKoduStr, YuklemeYeri_ds); super(); SysTableLookup::filterLookupPostRun( isFiltered, lookupHostControl.text(), YuklemeYeri_YuklemeYeriKoduStr, YuklemeYeri_ds, new FormControlAmbiguousReferenceResolver(lookupHostControl), YuklemeYeri_YuklemeYeriAdi ); } }
public void run() { FormStringControl formStringControl = SysTableLookup::getCallerControl(element.args()) as FormStringControl; boolean filterLookup; canClose = true; if (formStringControl) { filterLookup = SysTableLookup::filterLookupPreRun(formStringControl, assetTable_AssetId, assetTable_ds); super(); SysTableLookup::filterLookupPostRunEx( filterLookup, formStringControl.text(), assetTable_AssetId, assetTable_ds, AssetDataInteractorFactory::useExistingOrCreateResolver(formStringControl), assetTable_Name); } else { super(); } }
Thanks for your response.
[Control("String")] class IhracatDosyaBilgileri_SevkYeriKoduStr { public void lookup() { SevkYeri::lookupSevkYeri(this); } }
public static void lookupSevkYeri( FormControl _ctrl) { Args args; FormRun formRun; FormStringControl formStringControl; args = new Args(); args.name(formStr(SevkYeriLookup)); args.caller(_ctrl); formRun = classfactory.formRunClass(args); formRun.init(); if (_ctrl is FormStringControl) { formStringControl = _ctrl as FormStringControl; formStringControl.performFormLookup(formRun); } else { throw error(Error::wrongUseOfFunction(funcName())); } }
[Form] public class SevkYeriLookup extends FormRun { boolean canClose; /// <summary> /// /// </summary> /// <returns></returns> public boolean canClose() { boolean ret; ret = super() && canClose; return ret; } /// <summary> /// /// </summary> public void init() { super(); element.selectMode(SevkYeri_SevkYeriKoduStr); } public void run() { FormStringControl callerControl = SysTableLookup::getCallerControl(element.args()) as FormStringControl; boolean filterLookup; canClose = true; if (callerControl) { filterLookup = SysTableLookup::filterLookupPreRun(callerControl, SevkYeri_SevkYeriKoduStr, SevkYeri_ds); super(); SysTableLookup::filterLookupPostRunEx( filterLookup, callerControl.text(), SevkYeri_SevkYeriKoduStr, SevkYeri_ds, new FormControlAmbiguousReferenceResolver( callerControl, AbsoluteFieldBinding::construct(fieldStr(SevkYeri, SevkYeriKoduStr), tableStr(SevkYeri)), AbsoluteFieldBinding::construct(fieldStr(SevkYeri, SevkYeriAdi), tableStr(SevkYeri)) ), SevkYeri_SevkYeriAdi); } else { super(); } } }
Hi Ahmet,
Thanks for sharing your code and explanation. To enable searching by multiple fields in a lookup in D365FO, your approach using resolveAmbiguousReference is on the right track. However, the lookup behavior also depends on how the filtering is applied in the lookup form itself.
In your YuklemeYeriLookup form, you're currently filtering only by YuklemeYeriKoduStr. To support multiple fields, you can enhance the filtering logic by including both YuklemeYeriKoduStr and YuklemeYeriAdi in the pre-run and post-run filtering steps.
YuklemeYeriLookup
Here’s a suggestion:
filterLookupPostRun
WHERE
LIKE
Additionally, make sure that the FormControlAmbiguousReferenceResolver is correctly configured to resolve both fields, and that the lookup form’s data source supports filtering on both columns.
FormControlAmbiguousReferenceResolver
Please verify if this response was helpful.
Thanks and best regards, Daniele Note: This response was prepared with support from Copilot to ensure clarity and completeness.
Under review
Thank you for your reply! To ensure a great experience for everyone, your content is awaiting approval by our Community Managers. Please check back later.
Congratulations to our 2026 Super Stars!
We are thrilled to have these Champions in our Community!
These are the community rock stars!
Stay up to date on forum activity by subscribing.
Giorgio Bonacorsi 658
André Arnaud de Cal... 468 Super User 2026 Season 1
Syed Haris Shah 333 Super User 2026 Season 1