我有一个需要与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) 我使用以下命令在新窗口中打开了一个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的代码
Run Code Online (Sandbox Code Playgroud)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()] },
由于某种原因,该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
我已经编写了以下代码来获取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获取令牌时收到以下错误.
我不知道我错过了什么.请帮忙!
我尝试了租户未授权的解决方案,但没有任何效果.
谢谢!
我正在尝试学习 Dynamics 365,但试用https://trials.dynamics.com/时间不够长。对于沙盒风格的环境,我还有什么其他选择可以让我学习 Dynamics,理想情况下是比 30 天长得多的东西,或者如果我必须付费,则不会花费我一条胳膊和一条腿的东西。
是否有以下选项(最好不付费),希望我能获得更长时间的试用:
使用本地 hyper-v 服务器自行安装和配置 Dynamics 365
使用 1 年 Azure 试用版自行安装和配置 Dynamics 365
一个 docker 解决方案,它为 Dynamics 365 的 1 年 Azure 试用预先配置了一切
我还没有考虑过的任何其他解决方案?
如果上述任何选项都是可能的,将非常感谢有关如何配置这些选项的详细说明。
"有没有关于Dynamics SDK与.NET Core兼容的信息?这个库是我们完全进入.NET Core的最后一个障碍.谢谢你"
^我对支持水平感到好奇,听起来合作伙伴也热衷于在他们的解决方案中使用它.
c# microsoft-dynamics dynamics-crm asp.net-core dynamics-365
是否可以通过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项目运行。
我正在创建一个插件来调用网络服务。我需要序列化和反序列化 Json 对象。所以,我需要 Newtonsoft.Json。我正在尝试在 Visual Studio 2015 中使用 ILMerge.MSBuild.Task 和 ILMerge 合并来自 NewtonSoft.Json 的 dll 和我的应用程序 dll。
我在互联网上寻找解决方案,但找不到任何解决方案。
精简版
当构建管道被触发时,构建管道任务之一将获取最新文件,并且必须在当前运行管道的 git 存储库中添加/更新它。我试图通过使用命令行任务来做到这一点,但由于不是 git 存储库而失败
fatal: not a git repository (or any of the parent directories): .git
Run Code Online (Sandbox Code Playgroud)
长版
我试图实现动态 365 实例的解决方案打包和解包过程。所以构建管道有以下任务
从 Dynamics 365 导出解决方案并将其存储在 $(build.binariesdirectory) 中
解压解决方案 zip 文件并存储在 $(Build.Repository.LocalPath) 中,即添加/更新现有文件
提交文件并将文件推送到当前管道存储库的命令行任务
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
这就解决了。为可能遇到此问题的任何人在下面放置两个潜在的修复程序。关于这个错误的文档非常稀少,我从多个帖子中收集了一些零碎的东西。
修复 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 提供的替代解决方案。
在我们的开发环境中导入组织时,这是成功的。
希望这对同一条船上的任何人都有帮助!
我正在云中使用 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 - …
dynamics-365 ×10
dynamics-crm ×8
c# ×3
.net-6.0 ×1
.net-core ×1
adal ×1
adfs ×1
asp.net-core ×1
azure ×1
azure-devops ×1
command-line ×1
crm ×1
dataverse ×1
github ×1
ilmerge ×1
javascript ×1
json.net ×1
plugins ×1
token ×1