Most of us are familiar with Macros. Unfortunately, they are seldom used to their potential.
From MSDN,
A macro is a variable known to the precompiler. The variable can have a value that is a sequence of characters, but it is not required to have a value. The #define directive tells the precompiler to create the macro variable, including an optional value. The #if directive tests whether the variable is defined, and optionally, whether it has a specific value.
static void SimpleDefineIfJob(Args _args)
{
str sTest = "Initial value.";
;
#define.MyMacro // MyMacro is now defined.
#if.MyMacro
sTest = "Yes, MyMacro is defined.";
info(sTest);
#endif
// Notice the non-code sentence line causes no X++ compiler error,
// because the X++ compiler never sees it.
#ifnot.MyMacro
The X++ compiler would reject this sentence.
sTest = "No, MyMacro is not defined.";
info(sTest);
#endif
}
Again from MSDN,
The #localmacro directive is a good choice when you want a macro to have a value that is several lines long, or when your macro value contains a closing parenthesis. The #localmacro directive is a good choice when you want your macro value to be lines of X++ or SQL code.
One particular use i found is when you want to suppress or replace particular where clauses from a select statement. #localmacro works wonderfully.
static void LocalMacroInSelect(Args _args)
{
VendTable vendTable;
boolean showAllRecords = false;
#localmacro.WhileLoopFilter
while select firstOnly10 vendTable
%1
{
info(vendTable.accountNum);
}
#endmacro
if (showAllRecords)
{
#WhileLoopFilter(where vendTable.blocked == CustVendorBlocked::All)
}
else
{
#WhileLoopFilter(where vendTable.blocked == CustVendorBlocked::Payment)
}
}
No comments:
Post a Comment