Совместное использование нескольких форм в клиентской части Dynamics 365 v9

Я использую https://github.com/delegateas/XrmDefinitelyTyped. Я создал следующий скрипт для формы, которая имеет поле с именем Program Year, Start Date, End Date, Я хотел бы, чтобы это было общим, чтобы в свойствах формы я установил onChange событие для ProgramYear, я могу указать на это TI.Forms.EventHandlers.onProgramYearChange тогда он выполнит скрипт.

Однако, когда я передаю контекст выполнения поля, я не могу получить доступ к контексту выполнения других атрибутов, насколько я знаю, и я не вижу способов получить другие атрибуты Start Date а также End Date, Даже если я брошу form в any здесь нет getAttribute функция определена. Как правильно подойти к этому?

namespace TI.Forms.EventHandlers {
    export function onProgramYearChange(executionContext: Xrm.ExecutionContext<any>) {
        var form = executionContext.getFormContext();

        form.getAttribute("ti_programyear").addOnChange((context) => {
            const updatedProgramYear = context.getEventSource().getValue()[0].name;

            XrmQuery.retrieveMultiple(x => x.ti_program_years)
                .select(x => [x.ti_start_date, x.ti_end_date])
                .filter(x => Filter.equals(x.ti_name, updatedProgramYear))
                .execute(programYears => {
                    const startDateField = form.getAttribute("ti_start_date");
                    const endDateField = form.getAttribute("ti_end_date");

                    if (!startDateField.getValue() && !endDateField.getValue()) {
                        startDateField.setValue(programYears[0].ti_start_date);
                        endDateField.setValue(programYears[0].ti_end_date);
                    } 
                });
        });
    }
}

Можете ли вы получить доступ к другим атрибутам из executeContext атрибута?

1 ответ

Можете ли вы получить доступ к другим атрибутам из executeContext атрибута?

Да, ты можешь. На самом деле CRM передает весь контекст выполнения обработчику событий, когда вы проверяете Pass execution context as the first parameter,

executionContext.getFormContext() предоставит вам весь formcontext похоже на ранее Xrm.Page,

Это то, что мы имеем, когда работаем onChange прикрепляется к форме загрузки. Очищено для краткости.

var standing = formContext.getAttribute("new_standing");

if (standing !== null) {
    standing.addOnChange(this.validateStatusChanged);
}

Ниже приведен собственный вызов веб-API и доступ к formContext из метода обратного вызова.

validateStatusChanged: function (executionContext) {
var formContext = executionContext.getFormContext();

Xrm.WebApi.retrieveMultipleRecords("new_testEntity", query).then(
    function success(result) {
        if (result.entities.length > 0) {
            var limitField = formContext.getAttribute('new_limit');

            if (limitField.getValue() !== 1) {
                limitField.setValue(1);
            }
        }
    },
    function (error) {
        //
    }
);
}
Другие вопросы по тегам