Совместное использование нескольких форм в клиентской части 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) {
//
}
);
}