首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Dynamics 365客户端v9中跨多个表单共享行为

在Dynamics 365客户端v9中跨多个表单共享行为
EN

Stack Overflow用户
提问于 2018-08-24 06:37:37
回答 1查看 367关注 0票数 1

我正在使用https://github.com/delegateas/XrmDefinitelyTyped。我为一个表单创建了以下脚本,该表单有一个名为Program YearStart DateEnd Date的字段。我希望这是通用的,这样如果在表单属性中,我为ProgramYear设置了一个onChange事件,我可以将它指向TI.Forms.EventHandlers.onProgramYearChange,然后它将执行脚本。

但是,当我传递字段的执行上下文时,就我所知,我不能访问其他属性的执行上下文,也看不到任何方法来获取Start DateEnd Date的其他属性。即使我将form转换为any,也没有定义getAttribute函数。解决这个问题的正确方法是什么?

代码语言:javascript
复制
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访问其他属性?

EN

回答 1

Stack Overflow用户

发布于 2018-08-24 23:45:20

是否可以从属性的executionContext访问其他属性?

是的你可以。事实上,当您检查Pass execution context as the first parameter时,CRM会将整个执行上下文传递给事件处理程序。

executionContext.getFormContext()将为您提供与早期Xrm.Page类似的完整formcontext

onChange附加到表单加载时,这就是我们所做的工作。为简洁起见进行了清理。

代码语言:javascript
复制
var standing = formContext.getAttribute("new_standing");

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

下面是本机web api调用&从成功的回调方法访问formContext。

代码语言:javascript
复制
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) {
        //
    }
);
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51995184

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档