Еще пример. Класс SubledgerJournalizerProjectExtension,
X++:
protected ProjEmplTrans createProjHourTrans(Container _projectActualHeaderContainer, SourceDocumentLineItem _sourceDocumentLineItem, ...)
{
ProjEmplTrans projEmplTrans;
PSAComponentGroupAssignment psaComponentGroupAssignment;
projEmplTrans.clear();
#declareProjectActualHeaderContainerVariablesMacro
#projectActualHeaderContainerMacro = _projectActualHeaderContainer;
projEmplTrans.ProjId = actualProjectId;
projEmplTrans.CategoryId = actualCategoryId;
projEmplTrans.ActivityNumber = actualActivityNumber;
projEmplTrans.LinePropertyId = actualLinePropertyId;
Два макроса в коде выглядят так:
X++:
#localmacro.declareProjectActualHeaderContainerVariablesMacro
RefRecId actualSourceDocumentLine;
DataAreaId actualProjectDataAreaId;
ProjId actualProjectId;
ProjCategoryId actualCategoryId;
smmActivityNumber actualActivityNumber;
ProjLinePropertyId actualLinePropertyId;
CurrencyCode actualTransactionCostCurrency;
CurrencyCode actualTransactionSalesCurrency;
CurrencyCode accountingCurrency;
ProjTaxGroup actualTaxGroupId;
ProjTaxItemGroup actualTaxItemGroupId;
DimensionDefault actualDefaultDimension;
Qty actualQuantity;
AmountCur actualTransactionCurrencyCostAmount;
AmountMST actualAccountingCurrencyCostAmount;
AmountCur actualTransactionCurrencySalesAmount;
AmountMST actualAccountingCurrencySalesAmount;
#endmacro
#localmacro.projectActualHeaderContainerMacro
[
actualSourceDocumentLine,
actualProjectDataAreaId,
actualProjectId,
actualCategoryId,
actualActivityNumber,
actualLinePropertyId,
actualTransactionCostCurrency,
actualTransactionSalesCurrency,
accountingCurrency,
actualTaxGroupId,
actualTaxItemGroupId,
actualDefaultDimension,
actualQuantity,
actualTransactionCurrencyCostAmount,
actualAccountingCurrencyCostAmount,
actualTransactionCurrencySalesAmount,
actualAccountingCurrencySalesAmount
]
#endmacro
Т.е. в методе createProjHourTrans первый параметр _projectActualHeaderContainer -- это, по сути, 17 параметров. Если изменить макросы, то список параметров в createProjHourTrans вроде как не изменился, возможно не будет считаться за breaking change, и может по-тихому сломать расширение, изменяющее значение одного из элементов в контейнере.
И в этом классе такой метод не один.