D365 Обновление условия в методе

У меня есть вкладка Области, которая содержит сетку с некоторыми вычислениями. Эти расчеты зависят от выбранной области. Ситуация следующая: у одного объекта может быть несколько областей, и когда я открываю вкладку «Области», он рассчитывается хорошо, но когда в объекте я меняю Area с одного на другой, значение в расчетах остается с предыдущего. Другими словами: он не обновляется. Я использую этот код:

[Control("TabPage")]
class TabLineAreaGroup
{
    public void pageActivated()
    {
        PMCContractArea contractArea;
        AmountMST sumContractArea;

        super();

        pmcContractLine_ds.readCommonAreas(pmcContractLine);
        h1_h2.realValue(pmcContractLine_ds.h1_h2(pmcContractLine));
        efa.realValue(pmcContractLine_ds.efa(pmcContractLine));
        bfa.realValue(pmcContractLine_ds.bfa(pmcContractLine));
        mfa.realValue(pmcContractLine_ds.mfa(pmcContractLine));
        sumArea.realValue(h1_h2.realValue() + efa.realValue() + bfa.realValue() + mfa.realValue());

        while select AreaSelector, sum(RentalValue)
            from contractArea
            group by AreaSelector
            where contractArea.ContractId == pmcContract.ContractId
                && contractArea.RentalObjectId == pmcContractLine.RentalObjectId
        {
            sumContractArea += contractArea.RentalValue;
            switch (contractArea.AreaSelector)
            {
                case PMEAreaSelector::CommonAreaBuilding :
                    contractAreaBFA.realValue(contractArea.RentalValue);
                    break;
                case PMEAreaSelector::CommonAreaSection :
                    contractAreaEFA.realValue(contractArea.RentalValue);
                    break;
                case PMEAreaSelector::PrimaryArea, PMEAreaSelector::SecondaryArea :
                    contractAreaH1_H2.realValue(contractArea.RentalValue);
                    break;
                case PMEAreaSelector::CommonAreaFixed :
                    contractAreaMFA.realValue(contractArea.RentalValue);
                    break;
            }
        }
        contractAreaSum.realValue(sumContractArea);
    }

}

Что мне нужно добавить в этот код, так что при изменении области для обновления вычислений в сетке?


person DarthCSharper    schedule 08.05.2019    source источник


Ответы (1)


Для Dynamics 365 Microsoft иногда не рекомендует методы и не обновляет документацию или оставляет методы доступными, но не реализовала их.

Для D365, вероятно, вам понадобится использовать метод обработчика событий в элементе управления Tab.

Ниже приведен пример, в котором я только что создал form с парой _3 _ + _ 4_ и источником данных CustGroup

/// <summary>
///
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
[FormControlEventHandler(formControlStr(TestForm, FormTabControl1), FormControlEventType::TabChanged)]
public static void FormTabControl1_OnTabChanged(FormControl sender, FormControlEventArgs e)
{
    // You can interact with FormRun
    FormRun                             formRun                             = sender.formRun();

    // You can interact with the actual control (from event handler)
    FormTabControl                      formTabControl                      = sender is FormTabControl ? sender as FormTabControl : null;

    // You can get events
    FormTabControlTabChangedEventArgs   formTabControlTabChangedEventArgs   = e is FormTabControlTabChangedEventArgs ? e as FormTabControlTabChangedEventArgs : null;

    // You can interact with the tab pages
    if (formTabControl && formTabControlTabChangedEventArgs)
    {
        FormControl         fc = formTabControl.controlNum(formTabControlTabChangedEventArgs.oldTab());
        FormTabPageControl  tabPageOld = formTabControl.controlNum(formTabControlTabChangedEventArgs.oldTab());
        FormTabPageControl  tabPageNew = formTabControl.controlNum(formTabControlTabChangedEventArgs.newTab());

        info(strFmt("Tab changed from %1 to %2", tabPageOld.caption(), tabPageNew.caption()));
    }

    // You can interact with datasources
    FormDataSource fdsCustGroup = formRun.dataHelper().FindDataSource('CustGroup');
}
person Alex Kwitny    schedule 08.05.2019
comment
Оки. Но что делать с этим обработчиком событий? Как контролировать изменения / обновления? - person DarthCSharper; 09.05.2019
comment
@DarthCSharper - см. Мой обновленный образец кода в ответе. Вы можете делать с мероприятием все, что хотите. - person Alex Kwitny; 09.05.2019