标签: dynamics-365

将WebApp授权给ADFS以访问Dynamics CRM Web API

我有一个需要与Dynamic CRM 365 Web API对话的Web应用程序.动态CRM在ADFS上配置为依赖方.服务器是Windows Server 2016,一切都是内部部署,而不是Azure.

我为获取有效令牌所做的工作如下:

1)在ADFS中,转到应用程序组并添加新的服务器应用程序,获取ClientID并为我的Web应用程序生成客户机密钥.

在此输入图像描述

2)在Active Directory中添加新的用户webAppUser

3)在CRM中使用应用程序ID 将此用户添加为应用程序用户 ID,这是我在将Web应用程序注册到ADFS时之前获得的ClientID.还创建了一个具有实体帐户完全权限的新角色,并将此角色分配给此应用程序用户

4)我正在使用以下代码来检索承载令牌并将其添加到我的HttpClient Authorization标头中.

public class CrmWebApiClient
{
    private HttpClient _httpClient;

    public CrmWebApiClient()
    {
        _httpClient = new HttpClient();
        _httpClient.BaseAddress = new Uri("https://crmbaseaddress.com");            
    }

    internal async Task Initialize()
    {
        try
        {               
            var authority = "https://adfsServerUrl/adfs/";
            var authContext = new AuthenticationContext(authority,false);
            var credentials = new ClientCredential(clientID,clientSecret);

            var authResult = await authContext.AcquireTokenAsync("https://crmbaseaddress.com", credentials);

            _httpClient.DefaultRequestHeaders.Authorization =
                new AuthenticationHeaderValue("Bearer", authResult.AccessToken);
        }
        catch (Exception ex)
        {
            var error = ex;
        } …
Run Code Online (Sandbox Code Playgroud)

authorization adfs token dynamics-crm dynamics-365

14
推荐指数
1
解决办法
2070
查看次数

在新窗口中打开Web资源中使用Xrm.WebApi方法

我使用以下命令在新窗口中打开了一个HTML Web资源:

Xrm.Navigation.openWebResource(webResource, windowOptions, data);

这是一个HTML Web资源,它正在加载ClientObject

<script type="text/javascript" src="../../../ClientGlobalContext.js.aspx" ></script>

然后我有一些试图检索的JavaScript Contact

var contactId = "8553DA63-11C9-E711-A824-000D3AE0CB84";
var promise = Xrm.WebApi.retrieveRecord("contact", contactId, "$select=contactid,firstname,lastname");`
Run Code Online (Sandbox Code Playgroud)

但这是失败的.我已逐步跟踪到该Xrm.WebApi方法,并发现错误是在它尝试解析"contact"为a时Set Name

来自Global.ashx的代码

getEntitySetName: function(logicalName) {
    Mscrm.Utilities.addTelemetryLog("Xrm.Utility.getEntitySetName");
    var $v_0 = window.ENTITY_SET_NAMES || window.top.ENTITY_SET_NAMES;
    if (IsNull(this.$5H_1) && !isNullOrEmptyString($v_0))
        this.$5H_1 = JSON.parse($v_0);
    return this.$5H_1[logicalName.toLowerCase()]
},
Run Code Online (Sandbox Code Playgroud)

由于某种原因,该window.ENTITY_SET_NAMES对象为null,因此发生错误(空引用)

我已经尝试将我的Web资源嵌入到CRM页面中,并且代码可以正常工作.问题似乎是通过网络资源启动时 Xrm.Navigation.openWebResource

有没有人试图Xrm.WebApi在打开的网络资源的上下文中使用Xrm.Navigation.openWebResource?或者是否有人知道检索数据是否还需要其他步骤?


更新

ENTITY_SET_NAMES初始化main.aspx.我尝试将我的自定义Web资源直接嵌入到新的Main Form部分,该retrieveRecord方法可行.

只有在通过新页面运行Web资源时,这才会出现问题 Xrm.Navigation.openWebResource


更新2 - 对Aron的回应 …

javascript microsoft-dynamics dynamics-crm dynamics-crm-webapi dynamics-365

8
推荐指数
2
解决办法
2534
查看次数

错误:未找到租户授权.如果租户没有有效订阅,则可能会发生这种情况

我已经编写了以下代码来获取CRM的令牌.

class Program
{
    private const string username = "richa@azuretraining112.onmicrosoft.com";
    private const string password = "Pa$$w0rd";
    private const string serviceURL = "https://azuretraining112.crm8.dynamics.com";
    private const string applicationID = "89a70b76-3a71-481f-8755-a7aa97c59c35";
    private const string redirectURL = "https://localhost1";
    private const string authorityURI = "https://login.microsoftonline.com/1d54ea41-cd25-488f-812c-c078e6114065/oauth2/authorize";
    private static AuthenticationResult authResult = null;


    private static void Main(string[] args)
    {
        var credentials = new UserPasswordCredential(username, password);
        var context = new AuthenticationContext(authorityURI);
        authResult = context.AcquireTokenAsync(serviceURL, applicationID, credentials).Result;
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,在运行代码时,我在尝试使用AcquireTokenAsync获取令牌时收到以下错误.

大段引用

我已使用应用程序ID添加了应用程序用户: 在此输入图像描述

我不知道我错过了什么.请帮忙!

我尝试了租户未授权的解决方案,但没有任何效果.

谢谢!

c# dynamics-crm azure adal dynamics-365

7
推荐指数
1
解决办法
929
查看次数

适用于 Dynamics 365 的沙盒

我正在尝试学习 Dynamics 365,但试用https://trials.dynamics.com/时间不够长。对于沙盒风格的环境,我还有什么其他选择可以让我学习 Dynamics,理想情况下是比 30 天长得多的东西,或者如果我必须付费,则不会花费我一条胳膊和一条腿的东西。

是否有以下选项(最好不付费),希望我能获得更长时间的试用:

  1. 使用本地 hyper-v 服务器自行安装和配置 Dynamics 365

  2. 使用 1 年 Azure 试用版自行安装和配置 Dynamics 365

  3. 一个 docker 解决方案,它为 Dynamics 365 的 1 年 Azure 试用预先配置了一切

  4. 我还没有考虑过的任何其他解决方案?

如果上述任何选项都是可能的,将非常感谢有关如何配置这些选项的详细说明。

microsoft-dynamics dynamics-crm dynamics-365

7
推荐指数
1
解决办法
1089
查看次数

适用于.NET Core的Dynamics CRM SDK

MattHoffmann在MSDN上提出的一个很好的问题.

"有没有关于Dynamics SDK与.NET Core兼容的信息?这个库是我们完全进入.NET Core的最后一个障碍.谢谢你"

^我对支持水平感到好奇,听起来合作伙伴也热衷于在他们的解决方案中使用它.

c# microsoft-dynamics dynamics-crm asp.net-core dynamics-365

6
推荐指数
0
解决办法
969
查看次数

结合使用Dynamics CRM SDK和.NET Core

是否可以通过Dynamics SDK从.NET Core应用程序连接到Dynamics CRM 365?还是应该使用Web Api?

我读过这是可能的,但是当我从.NET Core类库引用SDK并尝试连接时,出现错误:

System.IO.FileNotFoundException: 'Could not load file or assembly 'System.Web.Services..
Run Code Online (Sandbox Code Playgroud)

似乎.NET Core不支持此DLL: 如何在Asp.net Core中使用soap Web服务?

我的代码是这样的:

 new Microsoft.Xrm.Tooling.Connector.CrmServiceClient(connectionString);
Run Code Online (Sandbox Code Playgroud)

我可以成功地使其从.NET Framework项目运行。

microsoft-dynamics dynamics-crm .net-core dynamics-365

6
推荐指数
2
解决办法
4445
查看次数

合并 Newtonsoft.Json 时出现 System.OutOfMemoryException

我正在创建一个插件来调用网络服务。我需要序列化和反序列化 Json 对象。所以,我需要 Newtonsoft.Json。我正在尝试在 Visual Studio 2015 中使用 ILMerge.MSBuild.Task 和 ILMerge 合并来自 NewtonSoft.Json 的 dll 和我的应用程序 dll。

我收到以下错误: 在此处输入图片说明

我在互联网上寻找解决方案,但找不到任何解决方案。

plugins ilmerge dynamics-crm json.net dynamics-365

5
推荐指数
1
解决办法
1748
查看次数

如何从 Azure DevOps Pipeline Dynamics 365 CE 添加/更新 git 存储库中的文件

精简版

当构建管道被触发时,构建管道任务之一将获取最新文件,并且必须在当前运行管道的 git 存储库中添加/更新它。我试图通过使用命令行任务来做到这一点,但由于不是 git 存储库而失败

fatal: not a git repository (or any of the parent directories): .git
Run Code Online (Sandbox Code Playgroud)

长版

我试图实现动态 365 实例的解决方案打包和解包过程。所以构建管道有以下任务

  1. 从 Dynamics 365 导出解决方案并将其存储在 $(build.binariesdirectory) 中

  2. 解压解决方案 zip 文件并存储在 $(Build.Repository.LocalPath) 中,即添加/更新现有文件

  3. 提交文件并将文件推送到当前管道存储库的命令行任务

ECHO "Setting git config..."
git config --global user.email "xxx@xyz.com"
git config --global user.name "Admin"

ECHO "CHECK GIT STATUS..."
git status

ECHO "GIT ADD..."
git add -A

ECHO "CHECK GIT STATUS..."
git status

ECHO "Commiting the changes..."
git commit -m "Latest Customizations updated"

ECHO "Pushing the changes..." …
Run Code Online (Sandbox Code Playgroud)

command-line github azure-devops azure-pipelines dynamics-365

5
推荐指数
1
解决办法
5758
查看次数

8.2 到 9.0.13 失败:“'Attribute' 元数据实体不包含 Name = 'autonumberformat' 的元数据属性”

这就解决了。为可能遇到此问题的任何人在下面放置两个潜在的修复程序。关于这个错误的文档非常稀少,我从多个帖子中收集了一些零碎的东西。

修复 1:

从 8.2.x 升级到高于 9.0.8 的任何版本都会导致此错误。开始从 8.2.3 到 9.0.8 的迁移,然后从那里升级到最新版本。

在用户向 Microsoft 提交票证的论坛上找到了此修复程序,Microsoft 回来说,不支持从 8.2.3 升级到高于 9.0.8 的任何版本。不知道为什么最新的更新不包含针对此升级限制的修复程序,但是,嘿,那是 Microsoft。

修复 2:

注释掉 ServerRelease.xml 中的以下代码段(路径:\Program Files\Dynamics 365\LangPacks(LanguagepackID)\Xrm\sql\9\ServerRelease.xml)。不建议这样做,但这是 Microsoft 提供的替代解决方案。

注释掉的区域截图

在我们的开发环境中导入组织时,这是成功的。

希望这对同一条船上的任何人都有帮助!

crm dynamics-crm dynamics-365

5
推荐指数
0
解决办法
671
查看次数

在 .NET 6 上通过 C# 代码访问 DataVerse 数据并对其运行 SQL 语句(Azure Function)

我正在云中使用 Dynamics365 CE。我正在尝试运行一些相当复杂的查询,这些查询是我作为 SQL 脚本构建的(使用 XrmToolBox 的精彩“SQL-4-CDS”插件)。

现在我知道我可以通过 TDS 端点连接到 Dataverse 数据存储(如果启用 - 在我的情况下),并且从 SSMS 中,它工作得很好:

Server Name    = myorg.crm4.dynamics.com,5558
Authentication = Azure Active Directory - Password
User Name      = my company e-mail
Run Code Online (Sandbox Code Playgroud)

我可以连接到 Dataverse,并运行我的查询 - 一切都很棒。

现在我想对我正在编写的 C# 代码(在 .NET 6 上运行)执行相同的操作,最终应该成为一个 Azure 函数 - 所以它是一个“服务器到服务器”,后面 -场景,没有交互式登录上下文的场景。

可以使用此连接字符串通过 TDS 端点连接到 Dataverse - 只要我以交互方式运行应用程序 - 就像我一样,在我的用户上下文中:

Server=myorg.crm4.dynamics.com,5558;Authentication=Active Directory Password;Database=my_dbname;User Id=my_email;Password=my_pwd;
Run Code Online (Sandbox Code Playgroud)

但是,这不适用于服务器到服务器“守护程序”样式的设置。

由于我使用 .NET 6(用于 Azure 函数),并且由于我想运行一些自定义 SQL 语句,因此我无法使用“CRM XRM 客户端”工具(带有类IOrganizationService) - 我需要直接使用 ADO.NET - …

c# azure-functions dynamics-365 dataverse .net-6.0

5
推荐指数
1
解决办法
1484
查看次数