Dynamics 365Online 使用Xrm.WebApi.online.execute执行自定义Action

     D365V9以后引入了新的API,其中比较Nice的是给我们封装了WebApi,不需要我们再去写request了,本篇要分享的是如何使用SDK中的Xrm.WebApi.online.execute来执行自定义的Entity类型的Action。

     Docs中对execute执行Action是有示例的,比如下面的sample,但是这是global的Action,可以看到红框中的boundParameter(关于参数的含义可以自己看docs,很简单,这里就不做阐述了)是null

     那Entity的类型的该怎么构建,docs的示例中没有,那只能自己琢磨了。

     先来看下我定义的Action,很简单就一个参数

   再来看下这条Action在metadata中的显示,会发现多了一个Name为entity的输入参数,因为这是Entity类型的Action,所以得把Entity传入

     看下具体的代码,getMetadata中的boundParameter的值是entity,parameterTypes即是你的输入参数,在我定义的projectId的基础上增加了一个entity,而这个entity的赋值方式搞对了就很简单了,entityType的值即是上面metadata中红框中的,其他的参数的说明还是看docs吧

var projectJs = window.ProjectJs || {};
(
    function () {
    this.SendSurvey = function (executionContext) {
            var projectId = executionContext.data.entity.getId().replace('{', '').replace('}', '');
            var sendSurvey = new projectJs.sendSurveyMail(projectId);
            Xrm.WebApi.online.execute(sendSurvey).then(function (res) {
                if (res.ok) {
                    Xrm.Navigation.openAlertDialog({ text: "Send Successfully"});
                }
            }, function (res) {

            });
        };
        projectJs.sendSurveyMail = function (projectId) {
            this.projectId = projectId;
            this.entity = { entityType: "msdyn_project", id: this.projectId};
        };
        projectJs.sendSurveyMail.prototype.getMetadata = function () {
           return{
                boundParameter: "entity",
                parameterTypes: {
                    "entity": {
                        typeName: "mscrm.msdyn_project",
                        structuralProperty: 5
                    },
                    "projectId": {
                        "typeName": "Edm.String",
                        "structuralProperty": 1 // Primitive  Type
                    }
                },
                operationType: 0, // This is an action. Use '1' for functions and '2' for CRUD
                operationName: "sfdhl_ProjectServiceSendSurveyEmail"
};
};
    }
).call(projectJs);

   最后看下执行的结果,成功调用

    

`Xrm.Navigation.navigateTo` 是 Dynamics 365 for CRM (现在称为 Microsoft Dynamics 365) 或者 Dynamics NAV 的 API 函数,用于导航至应用程序内的某个特定页面、实体记录或其他功能区域。 ### 使用 `Xrm.Navigation.navigateTo` 进行最大化 在 Dynamics 365 应用中,通过 `Xrm.Navigation.navigateTo` 可以实现在应用内打开某个页面或实体记录,并将其设置为全屏模式。这通常涉及到以下几个步骤: 1. **识别目标**:首先确定您想要导航到的具体位置,例如某个实体列表页、创建新记录页或者是查看现有记录详情页。每个页面都有其对应的 URL 格式和参数配置。 2. **构造参数**:为了成功导航并最大化显示指定页面,需要构建正确的 URL 参数组合。参数可能包括页面标识符 (`id`)、操作类型 (`actionType`) 等。对于最大化显示,关键在于如何将页面加载为全屏模式。 - **示例参数**:`newUrl: "entityPage?entityName=YourEntity&entityId=YOUR_ENTITY_ID", actionType: NavigationActionType.FullScreen` 其中,`entityPage` 指定了导航到的是实体页面,`entityName` 和 `entityId` 分别对应了目标实体的名称和 ID。`NavigationActionType.FullScreen` 表明希望此页面以全屏模式打开。 3. **触发导航**:最后,通过 `Xrm.Navigation.navigateTo` 调用上述构造的参数集合,即可实现从当前页面无缝过渡到指定的目标页面并保持全屏状态。 ```javascript // 假设已知 entityName 和 entityId var newUrl = "entityPage?entityName=" + encodeURIComponent('YourEntity') + "&entityId=" + YOUR_ENTITY_ID; var actionType = NavigationActionType.FullScreen; Xrm.Navigation.navigateTo(newUrl, actionType); ``` ### 相关问题: 1. 在 Dynamics 365 中如何自定义导航链接以实现更复杂的功能? 2. 如何在 Dynamics 365 应用程序中实现响应式设计,以适应不同设备屏幕尺寸? 3. Dynamics 365 中的导航系统支持哪些类型的页面跳转?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值