FormHasMethod extension in D365FO
Every developer who has started working on D365FO faces this issue that when we create a method in the form of Extension
For verification of method exists or not in the run time, we can use Global::formHasMethod but it does not work with form extensions
So I advise everyone to use the below code is working...
Source Link
using System.Object;
using Microsoft.Dynamics.Ax.Xpp;
using System.Reflection;
[ExtensionOf(classStr(Global))]
final class Global_Extension
{
static boolean formHasMethod(FormRun _fromRun, IdentifierName _methodName)
{
boolean flag= next formHasMethod(_fromRun, _methodName);
if (flag==true)
{
flag= Global::VerifyformExtensionHasMethod(_fromRun, _methodName);
}
return ret;
}
private static boolean VerifyformExtensionHasMethod(FormRun _formRun, IdentifierName _methodName)
{
try
{
System.Object[] extensions =
ExtensionClassSupport::GetExtensionsOnType(_formRun.GetType(), true);
if (extensions)
{
System.Type formExtensionType;
MethodInfo mInfo;
var
bindingFlags = BindingFlags::Public | BindingFlags::Static |
BindingFlags::IgnoreCase;
for (int i = 0; i < extensions.Length; i++)
{
formExtensionType=
extensions.GetValue(i);
var info = formExtensionType.GetMethods(bindingFlags);
for (int J = 0; J < info .get_Length(); J++)
{
mInfo= info .getValue(J);
if (mInfo.Name ==
_methodName)
{
return true;
}
}
}
}
}
catch (Exception::CLRError)
{
error(CLRInterop::getLastException().ToString());
}
return false;
}
}