我正在努力从控制台应用程序访问Dynamics 2016 CRM OData Web API.
我们安装了Dynamics CRM 2016,配置了基于声明的身份验证,并使用AD FS v3.0.
我的理解是控制台应用程序(或Web应用程序)应该能够使用Windows集成身份验证(即NTML或Kerberos)访问Web API而无需任何特殊处理......或者OAuth流程在启用时可能会起作用.
对于访问Dynamics"pages"的常规用户,身份验证工作正常(重定向到AD FS登录页面),但访问OData API似乎不起作用(例如:https://crm.domain.org/api/发现/ v8.0 /):
我尝试过的事情:
如果我启用基于声明的身份验证,并通过PowerShell 激活OAuthAdd-PSSnapin Microsoft.Crm.PowerShell ; $ClaimsSettings = Get-CrmSetting -SettingType OAuthClaimsSettings; $ClaimsSettings.Enabled = $true ; Set-CrmSetting -Setting $ClaimsSettings ;.
Windows集成身份验证仍然不起作用,但现在可以使用承载身份验证.我可以使用此代码段检索OAuth端点以生成令牌,并用于AuthenticationContext.AcquireTokenAsync发出令牌,然后在AuthorizationHTTP Header中传递它...但是,无论如何,我都会收到此错误:
Bearer error=invalid_token, error_description
=Error during token validation!, authorization_uri=https://our.adfs.domain.org/adfs/oauth2/authorize, …
我们在2016年使用odata v8.1端点成功模仿用户.
请注意,预期的请求流程是:邮递员 - > LocalHost微服务 - > CRM
来自Postman的工作请求示例- > CRM (直接,无需通过微服务)
Accept:application/json
Content-Type:application/json; charset=utf-8
OData-MaxVersion:4.0
OData-Version:4.0
MSCRMCallerID:d994d6ff-5531-e711-9422-00155dc0d345
Cache-Control:no-cache
Run Code Online (Sandbox Code Playgroud)
反对odata终点: ..../api/data/v8.1/leads
请注意,仅当通过邮递员直接针对odata v8.1端点发出此选项时才会成功.
当试图做同样的事情,让本地运行的服务(邮差 - > LocalHost服务 - > CRM),这失败了,只是忽略??? MSCRMCallerID标头.
在检查从Postman传递给LocalHost微服务的头时,请求,由VS 2017中的调试器检查:
{Method: POST, RequestUri: 'https://.../api/data/v8.1/leads', Version: 1.1, Content: System.Net.Http.StringContent, Headers:
{
OData-Version: 4.0
OData-MaxVersion: 4.0
MSCRMCallerID: D994D6FF-5531-E711-9422-00155DC0D345
Cache-Control: no-cache
Accept: application/json
Content-Type: application/json; charset=utf-8
}}
Run Code Online (Sandbox Code Playgroud)
记录是成功创建的,但是在CreatedBy字段上是服务用户名而不是MSCRMCallerID用户名(d994d6ff-5531-e711-9422-00155dc0d345),并且CreatedOnBehalf字段为空.
我们做错了什么?
我们如何通过我们的服务来模拟这种模仿?
编辑+更多信息
请注意,我相信我已经包含了所有相关信息,但如果我没有,请告诉我在此问题上应该提供的其他输入.
我试过了什么?
c# dynamics-crm azure-service-fabric dynamics-crm-2016 dynamics-crm-webapi
我们希望客户端能够发布到端点,例如:
[Route("Account", Name = "CreateAccount", Order = 1)]
[HttpPost]
public Account CreateAccount([FromBody] Account account)
{
var newAccount = _accountService.CreateAccountEntity(account);
return newAccount;
}
Run Code Online (Sandbox Code Playgroud)
我们知道这可以做到:
POST [Organization URI]/api/data/v8.2/accounts HTTP/1.1
Content-Type: application/json; charset=utf-8
OData-MaxVersion: 4.0
OData-Version: 4.0
Accept: application/json
{
"name": "Sample Account",
"creditonhold": false,
"address1_latitude": 47.639583,
"description": "This is the description of the sample account",
"revenue": 5000000,
"accountcategorycode": 1
}
Run Code Online (Sandbox Code Playgroud)
我们如何向消费者展示每个帖子/放置的要求?
要用不同的词来表达它,如果我需要使用CRM 2016提供的Web API更新自定义或基本实体上的记录,我如何知道创建或更新实体所需的字段?
我计划将我的CRM(内部)2011升级到CRM 2016(内部部署).现在我正在寻找迁移数据的最佳方法.顺便说一下,有很多自定义数据(实体,字段,WF).Microsoft建议逐步升级2011-> 2013-> 2015-> 2016(因为db strucutre显着改变,正如他们所说),但这对我来说不是最好的方式.我想首先进行干净安装,然后将数据从2011年移动到2016年.我所遇到的解决方案是调查新结构,然后编写自定义SQL脚本,这将完成工作.有没有开箱即用的方式?
另一个问题是关于CRM版本.Microsoft提供Dynamics CRM 365(内部部署)和Dynamics CRM 2016(内部部署).有什么不同?我可以发现,当2016年是一次性付款时,365就像是订阅许可证?
TL; DR:
- 从2011年升级到2016年CRM的最佳方式,最佳实践.
- 将数据从2011年迁移到清洁2016 CRM的最佳方式.
- CRM 2016和CRM 365之间的区别(内部,两者)
非常感谢您即将到来的答案.
我正在关注这篇文章,以便在ac#插件中更改我的业务流程流程.我能够将舞台向前推进到下一个舞台,但是当我尝试回到前一阶段时,我收到了一个错误.以下错误是我在Dynamics的UI中收到的错误.当我调试插件时,我收到一个FaultException<OrganizationServiceFault>不包含任何信息的异常.为什么我收到错误?如何修改代码以成功返回业务流程的前一阶段?
Unhandled Exception: System.ServiceModel.FaultException`1[[Microsoft.Xrm.Sdk.OrganizationServiceFault, Microsoft.Xrm.Sdk, Version=8.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35]]: An unexpected error occurred.
Detail: <OrganizationServiceFault xmlns="http://schemas.microsoft.com/xrm/2011/Contracts" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<ActivityId>5df51362-b7c1-4817-a8d0-de2d63b15c17</ActivityId>
<ErrorCode>-2147220970</ErrorCode>
<ErrorDetails xmlns:a="http://schemas.datacontract.org/2004/07/System.Collections.Generic" />
<Message>An unexpected error occurred.</Message>
<Timestamp>2018-07-19T18:55:42.6625925Z</Timestamp>
<ExceptionSource i:nil="true" />
<InnerFault>
<ActivityId>5df51362-b7c1-4817-a8d0-de2d63b15c17</ActivityId>
<ErrorCode>-2147220970</ErrorCode>
<ErrorDetails xmlns:a="http://schemas.datacontract.org/2004/07/System.Collections.Generic" />
<Message>System.NullReferenceException: Microsoft Dynamics CRM has experienced an error. Reference number for administrators or support: #0D309052</Message>
<Timestamp>2018-07-19T18:55:42.6625925Z</Timestamp>
<ExceptionSource i:nil="true" />
<InnerFault i:nil="true" />
<OriginalException i:nil="true" />
<TraceText i:nil="true" />
</InnerFault>
<OriginalException i:nil="true" />
<TraceText i:nil="true" />
</OrganizationServiceFault>
Run Code Online (Sandbox Code Playgroud)
if (localContext == …Run Code Online (Sandbox Code Playgroud) c# plugins microsoft-dynamics dynamics-crm dynamics-crm-2016
我正在尝试从asp.net Web Project连接内部Dynamic CRM 2016.我正在使用CrmServiceClient方法与Active Directory身份验证模式.
我得到以下异常.
{"无法从程序集'Microsoft.IdentityModel.Clients.ActiveDirectory,Version = 3.10.0.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35'加载类型'Microsoft.IdentityModel.Clients.ActiveDirectory.PromptBehavior'.":"Microsoft.IdentityModel. Clients.ActiveDirectory.PromptBehavior"}
new CrmServiceClient(
new System.Net.NetworkCredential("adminuser", "pass", "domain"),
Microsoft.Xrm.Tooling.Connector.AuthenticationType.AD,
"http://sample.com", "4466", "DEV", useUniqueInstance:false,
useSsl:false)
Run Code Online (Sandbox Code Playgroud)
也尝试过这个
new CrmServiceClient(ConfigurationManager.ConnectionStrings["CRM_CONN"].ConnectionString)
Run Code Online (Sandbox Code Playgroud) 我们在CRM 2016 SP1中遇到了奇怪的行为.当我们在完整网址的帮助下打开一些实体然后转到自定义网页资源页面(通过网站地图(网络资源,网址等)添加)时,我们的功能区突然消失.请在下面观看GIF.
你有任何想法如何解决它?
UPDATE
引入的GIF的结果状态如下:
更新2
站点地图自定义部件(SubArea,ID ="nav_pipeline"):
<SiteMap IntroducedVersion="7.0.0.0">
<Area Id="SFA" ResourceId="Area_Sales" DescriptionResourceId="Sales_Description" Icon="/_imgs/sales_24x24.gif" ShowGroups="true" IntroducedVersion="7.0.0.0">
<Group Id="MyWork" ResourceId="Group_MyWork" DescriptionResourceId="My_Work_Description" ToolTipResourseId="My_Work_ToolTip" IntroducedVersion="7.0.0.0">
<SubArea Id="nav_dashboards" ResourceId="Homepage_Dashboards" DescriptionResourceId="Dashboards_Description" ToolTipResourseId="Dashboards_ToolTip" Icon="/_imgs/area/18_home.gif" Url="/workplace/home_dashboards.aspx" GetStartedPanePath="Dashboards_Web_User_Visor.html" GetStartedPanePathAdmin="Dashboards_Web_Admin_Visor.html" GetStartedPanePathOutlook="Dashboards_Outlook_User_Visor.html" GetStartedPanePathAdminOutlook="Dashboards_Outlook_Admin_Visor.html" DefaultDashboard="2701de60-8f2a-48a4-8262-4a35ca7441fa" IntroducedVersion="7.0.0.0" />
<SubArea Id="nav_personalwall" ResourceId="Whats_New_Label" DescriptionResourceId="Whats_New_Description" ToolTipResourseId="Whats_New_ToolTip" Icon="$webresource:msdyn_/Images/Wall_16.png" OutlookShortcutIcon="$webresource:msdyn_/Images/Wall_16.png" AvailableOffline="false" Url="$webresource:msdyn_/PersonalWall.htm?data=HideUserProfile%3D0" GetStartedPanePath="Dashboards_Web_User_Visor.html" GetStartedPanePathAdmin="Dashboards_Web_Admin_Visor.html" GetStartedPanePathOutlook="Dashboards_Outlook_User_Visor.html" GetStartedPanePathAdminOutlook="Dashboards_Outlook_Admin_Visor.html" IntroducedVersion="7.0.0.0">
<Privilege Entity="post" Privilege="Read" />
</SubArea>
<SubArea Id="nav_activities" DescriptionResourceId="Activities_SubArea_Description" ToolTipResourseId="Activities_SubArea_ToolTip" Url="/_root/homepage.aspx?etc=4200" Entity="activitypointer" GetStartedPanePath="Activities_Web_User_Visor.html" GetStartedPanePathAdmin="Activities_Web_Admin_Visor.html" GetStartedPanePathOutlook="Activities_Outlook_User_Visor.html" GetStartedPanePathAdminOutlook="Activities_Outlook_Admin_Visor.html" IntroducedVersion="7.0.0.0" />
<SubArea Icon="$webresource:msdyn_/Images/likeIcon.png" Id="nav_pipeline" Url="$webresource:msdyn_/FirstRunContent.1033.htm" Description="Pipeline View" Title="Pipeline" AvailableOffline="false" PassParams="false" Client="Web" /> …Run Code Online (Sandbox Code Playgroud) 我正在尝试从新的REST API中检索多个数据,但我有一个奇怪的问题.如果我在集合上使用$ expand,那么它就不起作用.
请求是:
GET [Oranization URL]/api/data/v8.0/accounts?$expand=contact_customer_accounts HTTP/1.1
Accept: application/json
Content-Type: application/json; charset=utf-8
OData-MaxVersion: 4.0
OData-Version: 4.0
Run Code Online (Sandbox Code Playgroud)
并回应:
{
"error": {
"code": "",
"message": "Expansion of navigation properties isn\u2019t supported on entity collections.",
"innererror": {
"message": "Expansion of navigation properties isn\u2019t supported on entity collections.",
"type": "Microsoft.Crm.CrmHttpException",
"stacktrace": " at Microsoft.Crm.Extensibility.OData.CrmODataUtilities.ThrowIfSelectClauseHasNavigationProperty(SelectExpandClause selectExpandClause, Boolean isCalledFromEntitySet)\r\n at Microsoft.Crm.Extensibility.OData.CrmODataServiceDataProvider.RetrieveEdmEntityCollection(CrmODataExecutionContext context, String entityCollectionName, ODataQueryOptions queryOptions)\r\n at Microsoft.Crm.Extensibility.OData.EntityController.GetEntitySetInternal(String entitySetName, String castEntityName, CrmODataExecutionContext context, CrmEdmEntityObjectCollection crmEdmEntityObjectCollection, ODataQueryOptions queryOptions)\r\n at Microsoft.Crm.Extensibility.OData.EntityController.GetEntitySet(String entitySetName)\r\n at lambda_method(Closure , …Run Code Online (Sandbox Code Playgroud) crm odata dynamics-crm-online dynamics-crm-2016 dynamics-crm-webapi
参考未回答的问题:
401-使用REST API动态CRM与Azure AD进行未经授权的身份验证
和
Dynamics CRM Online 2016 - 守护程序/服务器应用程序Azure AD身份验证错误到Web Api
和
具有客户端凭据OAuth流的Dynamics CRM 2016 Online Rest API
我需要在天蓝云中的Web服务和Dynamics CRM Online 2016之间进行通信,而无需任何登录屏幕!该服务将有一个REST api,可以触发CRM上的CRUD操作(我也将实现身份验证)
我认为这称为"机密客户端"或"守护程序服务器"或只是"服务器到服务器"
我在Azure AD中正确设置了我的服务("委托权限=在线访问动态作为组织用户",没有其他选项)
我在VS中创建了一个ASP.NET WEB API项目,它在Azure中创建了我的WebService,并在CRM的Azure AD中创建了"应用程序".
我的代码看起来像这样(请忽略EntityType和returnValue):
public class WolfController : ApiController
{
private static readonly string Tenant = "xxxxx.onmicrosoft.com";
private static readonly string ClientId = "dxxx53-42xx-43bc-b14e-c1e84b62752d";
private static readonly string Password = "j+t/DXjn4PMVAHSvZGd5sptGxxxxxxxxxr5Ki8KU="; // client secret, valid for one or two years
private static readonly string ResourceId = "https://tenantname-naospreview.crm.dynamics.com/";
public static async Task<AuthenticationResult> …Run Code Online (Sandbox Code Playgroud) 随着CRM Dynamics 365的发布,微软已经正式弃用2011年的肥皂终端,并正在积极推动他们的Web Api.
已弃用的Microsoft Dynamics CRM 2011端点
我想知道的是,这会如何影响我与CRM的关系.
目前,我使用Tooling库使用CrmServiceClient类和连接字符串创建OrganizationServiceProxy的实例.这是否必须改变,因为我有数十万行代码都引用IOrganizationService.
任何帮助,将不胜感激