Dynamics 365 js中调用action

第一种

js 

var json = {};
json["EntityId"] = Xrm.Page.data.entity.getId();
json["EntityName"] = Xrm.Page.data.entity.getEntityName();
json["UserId"] = Xrm.Page.context.getUserId();
json["Name"] = "1";
var params = {};
params["json"] = JSON.stringify(json);
var request = {};
request["action"] = "ew_OutboundDeliveryAction";
request["params"] = params;
PostAction(request, function (data) {
    var res = JSON.parse(data.value);
    if (res.code == 0) {
        alert(res.msg);
        Xrm.Page.data.save().then(function () { parent.window.location.reload(); });
    } else {
        alert(res.msg);
    }
}, function (err) {
    alert(err.message);
});

    /**
 * @param {any} data 参数
 * @param {any} callback 成功返回方法
 * @param {any} errorcallback 失败返回方法
 */
function PostAction(data, callback, errorcallback, async = false) {
    var requestURL = Xrm.Page.context.prependOrgName("/api/data/v9.0/" + data.action);
    var req = new XMLHttpRequest()
    req.open("post", encodeURI(requestURL), async);
    req.setRequestHeader("Accept", "application/json");
    req.setRequestHeader("Content-Type", "application/json; charset=utf-8");
    req.setRequestHeader("OData-MaxVersion", "4.0");
    req.setRequestHeader("OData-Version", "4.0");
    req.onreadystatechange = function () {
        if (this.readyState == 4) {
            if (this.status == 200) {
                callback(JSON.parse(this.responseText));
            } else {
                errorcallback(JSON.parse(this.responseText));
            }
        }
    };
    req.send(window.JSON.stringify(data.params));
}

C#

using Microsoft.Xrm.Sdk;
using Microsoft.Xrm.Sdk.Query;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Ride.Crm.Order
{
    public class Order : IPlugin
    {
        public void Execute(IServiceProvider serviceProvider)
        {
            IPluginExecutionContext context = (IPluginExecutionContext)serviceProvider.GetService(typeof(IPluginExecutionContext));
            IOrganizationServiceFactory serviceFactory = (IOrganizationServiceFactory)serviceProvider.GetService(typeof(IOrganizationServiceFactory));
            IOrganizationService serviceAdmin = serviceFactory.CreateOrganizationService(null);
            IOrganizationService service = serviceFactory.CreateOrganizationService(context.UserId);
            if (context.Depth > 2) return;
            try
            {
                string jsons = context.InputParameters["json"] as string;
                var json = JsonConvert.DeserializeObject<Josn>(jsons);
                var entity = serviceAdmin.Retrieve(json.EntityName, json.EntityId, new ColumnSet(true));
                var value = "Success";
                switch (json.Name)
                {
                    case "1"://
                        Entity entity1 = new Entity(entity.LogicalName, entity.Id);
                        entity1["status"] = new OptionSetValue(20);
                        service.Update(entity1);
                        break;
                }

                context.OutputParameters["value"] = JsonConvert.SerializeObject(new { code = 0, msg = value });
            }
            catch (Exception ex)
            {
                context.OutputParameters["value"] = JsonConvert.SerializeObject(new { code = -1, msg = ex.Message });
                throw new Exception(ex.Message);
            }
        }
        public class Josn
        {
            public Guid UserId { get; set; }
            public Guid EntityId { get; set; }
            public string EntityName { get; set; }
            public string Name { get; set; }
        }
    }
}

第二种

js

let url = Xrm.Page.context.getClientUrl() + "/api/data/v9.1/new_DOCX";
let data = {
    json: Xrm.Page.data.entity.getId().replace('{', '').replace('}', '')//实体id;
};
let res = window.YWRequest(url, JSON.stringify(data), 'post');
if (res.value) {
     alert("成功");
} else {
    alert("失败");
}


/**
 * Ajax请求
 * @param {*} url 
 * @param {*} data 
 * @param {*} type 
 */
function YWRequest(url, data = null, type = "get", async = false) {
    let response;
    $.ajax({
        url: url,
        type: type,
        dataType: "json",
        data: data,
        async: async, // 同步
        contentType: "application/json; charset=utf-8",
        success: function (res) {
            response = res;
        }, error: function (error) {
            console.error(error.responseJSON.error.message);
        }
    });
    return response;
}

C#

public void Execute(IServiceProvider serviceProvider)
{
    IPluginExecutionContext context = (IPluginExecutionContext)serviceProvider.GetService(typeof(IPluginExecutionContext));
    IOrganizationServiceFactory serviceFactory = (IOrganizationServiceFactory)serviceProvider.GetService(typeof(IOrganizationServiceFactory));
    IOrganizationService serviceAdmin = serviceFactory.CreateOrganizationService(null);
    IOrganizationService service = serviceFactory.CreateOrganizationService(context.UserId);
    if (context.Depth > 2) return;
    try
    {

        string json = context.InputParameters["json"] as string;
        var entity = serviceAdmin.Retrieve("xxx", Guid.Parse(json), new ColumnSet(true));
        
        context.OutputParameters["value"] = "";
        
    }
    catch (Exception ex)
    {
        context.OutputParameters["value"] = ex.Message;
    }
}
        private class EntityJosn
        {
            /// <summary>
            /// 当前用户id
            /// </summary>
            public Guid UserId { get; set; }
            /// <summary>
            /// 实体id
            /// </summary>
            public Guid EntityId { get; set; }
            /// <summary>
            /// 实体名
            /// </summary>
            public string EntityName { get; set; }
        }

第三种

js

var entityId = Xrm.Page.data.entity.getId().replace("{", "").replace("}", "");
var parameters = {
    "Type": "xxxx",
    "Data": entityId
};
RequestAction("ew_QuoteApplicationAction", parameters, true, function (res)
{
    //var data = JSON.parse(res);
    console.log(res);
});



/**
 * 执行Action
 * @param {any} actionName  Action名字
 * @param {any} data        参数
 * @param {any} async       同步异步
 * @param {any} success     成功执行方法
 * @param {any} fail        失败执行方法
 */
function RequestAction(actionName, data, async, success)
{
    var request = {
        actionName: actionName,
        parameters: data
    };

    var options = {
        async: async
    };
    Xrm.WebApi.online.execute(request, options).then(success, function (res)
    {
        console.error(res);
    });
}

C#

public void Execute(IServiceProvider serviceProvider)
{
    IPluginExecutionContext context = (IPluginExecutionContext)serviceProvider.GetService(typeof(IPluginExecutionContext));
    IOrganizationServiceFactory serviceFactory = (IOrganizationServiceFactory)serviceProvider.GetService(typeof(IOrganizationServiceFactory));
    IOrganizationService serviceAdmin = serviceFactory.CreateOrganizationService(null);
    IOrganizationService service = serviceFactory.CreateOrganizationService(context.UserId);
    if (context.Depth > 2) return;
    try
    {

        string json = context.InputParameters["json"] as string;
        var entity = serviceAdmin.Retrieve("xxxxx", Guid.Parse(json), new ColumnSet(true));
        
        context.OutputParameters["value"] = "";
        
    }
    catch (Exception ex)
    {
        context.OutputParameters["value"] = ex.Message;
    }
}
        private class EntityJosn
        {
            /// <summary>
            /// 当前用户id
            /// </summary>
            public Guid UserId { get; set; }
            /// <summary>
            /// 实体id
            /// </summary>
            public Guid EntityId { get; set; }
            /// <summary>
            /// 实体名
            /// </summary>
            public string EntityName { get; set; }
        }

`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、付费专栏及课程。

余额充值