Показать сообщение отдельно
Старый 10.04.2017, 13:11   #1  
Blog bot is offline
Blog bot
Участник
 
25,646 / 848 (80) +++++++
Регистрация: 28.10.2006
dynamicsaxhints: Specifics of update_recordset crossCompany in AX 2012
Источник: http://dynamicsaxhints.blogspot.com/...recordset.html
==============

Have you ever tried to run update_recordset crossCompany statement?
Yes, it is possible. There are only 5 methods in standard AX code with such statement, but it can be very useful for data update jobs in multi company environment.

Tables:
TaxTransGeneralJournalAccountEntry.moveTaxForeignKeyToTaxTrans()
RetailLoyaltyConflictCard.migrateConflictCards()

Classes:
ReqDemPlanForecastChangeTracker.applyAllChanges()
ReleaseUpdateDB63_HRMMinor.updatePositionForecastBudgetAcctLine()
ReleaseUpdateDB63_HRMMinor.updatePositionForecastCompGroupRefPoint()

You must disable update method, database log and alerts, otherwise compiler will throw an error, for example:
transTable.skipDataMethods(true);
transTable.skipDatabaseLog(true);
transTable.skipEvents(true);
update_recordSet crossCompany transTable
setting loyaltyCardId = conflictCard.NewCardNumber
where transTable.loyaltyCardId == conflictCard.CardNumber
&& transTable.dataAreaId == conflictCard.Company;
If you are still not convinced, then there is another example below.
static void updateRecordSetCrossCompany(Args _args)
{
CustTable custTable;
PaymTermId oldPaymTermId = 'Net10', newPaymTermId = 'Net11';

// original state
while select crossCompany dataAreaId, count(RecId) from custTable
group by custTable.dataAreaId
where custTable.PaymTermId == oldPaymTermId
{
info(strFmt('Original: company %1 has %2
customers with PaymTermId %3.'
,
custTable.dataAreaId, custTable.recId, oldPaymTermId));
}

// update
custTable.skipDatabaseLog(true);
custTable.skipDataMethods(true);
custTable.skipEvents(true);

update_recordSet crossCompany custTable
setting PaymTermId = newPaymTermId
where custTable.PaymTermId == oldPaymTermId;

// new state
while select crossCompany dataAreaId, count(RecId) from custTable
group by custTable.dataAreaId
where custTable.PaymTermId == newPaymTermId
{
info(strFmt('New: company %1 has %2 customers with PaymTermId %3.',
custTable.dataAreaId, custTable.recId, newPaymTermId));
}
}
The job results are:



Источник: http://dynamicsaxhints.blogspot.com/...recordset.html
__________________
Расскажите о новых и интересных блогах по Microsoft Dynamics, напишите личное сообщение администратору.