我正在使用https://github.com/delegateas/XrmDefinitelyTyped。我为一个表单创建了以下脚本,该表单有一个名为Program Year,Start Date,End Date的字段。我希望这是通用的,这样如果在表单属性中,我为ProgramYear设置了一个onChange事件,我可以将它指向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);
}
});
});
}
}是否可以从属性的executionContext访问其他属性?
发布于 2018-08-24 23:45:20
是否可以从属性的executionContext访问其他属性?
是的你可以。事实上,当您检查Pass execution context as the first parameter时,CRM会将整个执行上下文传递给事件处理程序。
executionContext.getFormContext()将为您提供与早期Xrm.Page类似的完整formcontext。
当onChange附加到表单加载时,这就是我们所做的工作。为简洁起见进行了清理。
var standing = formContext.getAttribute("new_standing");
if (standing !== null) {
standing.addOnChange(this.validateStatusChanged);
}下面是本机web 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) {
//
}
);
}https://stackoverflow.com/questions/51995184
复制相似问题