一直在用几个墙撞到我的头上,所以希望一些CRM/Dynamics专家可以帮我一臂之力!
我正在尝试以编程方式从我们的Dynamics CRM实例中获取数据,在Node支持的Express应用程序中使用一组管理凭据.此Express应用程序托管在托管CRM的网络之外的单独服务器上.然后,应用程序将请求,处理并将CRM数据提供给任何已访问的用户(由应用程序中的角色/权限控制),这意味着最终用户只需登录Express应用程序,而无需登录通过ADFS,以便应用程序访问CRM实例.
我们的CRM设置是一个配置为面向互联网(IFD)的内部部署服务器.这使用Active Directory联合身份验证服务.我们的Web应用程序代理服务器在网络的外围运行联合服务,与内部网络上的ADFS服务器进行通信.ADFS对从网络外部(从Internet)连接到内部AD的用户进行身份验证.经过身份验证后,代理允许用户连接到CRM.
我们的本地活动目录与Azure AD同步,因为我们有混合部署.任何O365服务(在线交换,共享点等)都在后台使用Azure AD.我们同步Active目录,因此我们只需要在一个地方管理用户.
CRM有一个端点,例如https://my.crm.endpoint,我在Azure门户中注册了一个应用程序(称为CRM App),主页设置为CRM端点https://my.crm.endpoint.
问题是否将应用程序的主页设置为https://my.crm.endpoint足以将其"链接"到我们的内部CRM实例?
我编写了一个脚本(crm.js),它使用它的应用程序ID 成功请求在Azure门户中注册的CRM应用程序的访问令牌.
示例令牌
eyJ0dWNyIjoiMSIsImlkcCI6Imh0dHBzOi8vc3RzLndpbmRvd3MubmV0LzE5ZTk1...
Run Code Online (Sandbox Code Playgroud)
然后,我使用持票令牌尝试通过通常的端点从Dynamics获取一些联系人:https://my.crm.endpoint/api/data/v8.2/contacts?$ select = fullname,contactid
这失败了,我收到一条401 Unauthorised错误消息.
问题任何人都可以建议问题是什么?和/或提供有关如何连接Web应用程序(在我的案例中为Express)的详细信息,以便对使用ADFS的内部部署服务器(IFD)上运行的Dynamics CRM进行身份验证请求?
crm.js
let util = require('util');
let request = require("request");
let test = {
username: '<my.email@address.com>',
password: '<my_password>',
app_id: '<app_id>',
secret: '<secret>',
authenticate_url: 'https://login.microsoftonline.com/<tenant_id>/oauth2/token',
crm_url: 'https://<my.crm.endpoint>'
};
function CRM() { }
CRM.prototype.authenticate = function () {
return new Promise((resolve, reject) => { …Run Code Online (Sandbox Code Playgroud) microsoft-dynamics adfs dynamics-crm node.js azure-active-directory
此问题与我通过API调用的Microsoft Dynamics CRM 2015有关.
我创建联系实体:
POST [organization URI]/api/data/contacts
Content-Type: application/json; charset=utf-8
Accept: application/json
{
"emailaddress1": "myemail@example.com",
}
Run Code Online (Sandbox Code Playgroud)
登录面板后,我看到了新的记录.我可以通过API调用它:
[organization URI]/api/data/contacts(f76e4e7c-ea61-e511-80fd-3863bb342b00)
{
"@odata.context":"[organization URI]/api/data/$metadata#contacts/$entity",
"@odata.etag":"W/\"460199\"",
...
"contactid":"f76e4e7c-ea61-e511-80fd-3863bb342b00",
"emailaddress1":"myemail@example.com",
....
}
Run Code Online (Sandbox Code Playgroud)
我想做的下一件事是添加与该联系人关联的注释记录.按照指南我打电话:
POST [organization URI]/api/data/annotations
Content-Type: application/json; charset=utf-8
Accept: application/json
{
"notetext": "TEST",
'contact@odata.bind': 'contacts(f76e4e7c-ea61-e511-80fd-3863bb342b00)'
}
Run Code Online (Sandbox Code Playgroud)
但它返回400错误:
未声明的属性"contact",其在有效内容中仅包含属性注释,但在有效内容中未找到属性值.在OData中,只有声明的导航属性和声明的命名流可以表示为没有值的属性.
我打电话的时候:
POST [organization URI]/api/data/annotations
Content-Type: application/json; charset=utf-8
Accept: application/json
{
"notetext": "TEST",
}
Run Code Online (Sandbox Code Playgroud)
创建了新实体,但没有与联系人的关系.
如何正确撰写此POST请求?我在这里错过了什么?我猜想,那contact@odata.bind应该呈现有些不同,我试过contactid@odata.bind,object@odata.bind,objectid@odata.bind-但没有效果.
有任何想法吗?
microsoft-dynamics dynamics-crm odata dynamics-crm-webapi microsoft-dynamics-webapi
每当我点击机会来定制它
窗口波纹管打开
看来自定义窗口正在尝试打开一个活动窗口,它应该打开一个机会图表窗口.显示的唯一错误是"无效的用户授权传递给平台的用户身份验证无效",并且调试窗口中没有错误.
注意:
---更新1 ---
回应@ConorGallagher
是机会图表还是特定图表?
这是所有机会图表.他们中没有人会打开.
您是否尝试过打开开发人员工具并检查网络以查看究竟是什么失败了?
我有,开发人员工具不会发现任何错误.
或者使用fiddler做分析并找出究竟是什么失败?
当我点击图表时,这就是我从小提琴手那里得到的:
生产和开发之间是否存在不同的加密设置?
两者之间的加密设置相同.
开发组织是生产数据库副本还是新安装?
开发组织是在现场升级之前正在进行的生产的副本.
当您直接登录到服务器并尝试自定义图表时,是否会发生这种情况?
它发生在PC上,直接发生在服务器上.
---更新2 ---
回应@ConorGallagher
我在开发人员工具的网络选项卡上预计会出现401(或某些http错误).您可以仔细检查该标签只是为了看.
我也会,但网络选项卡中的所有内容都是200.除了第一个是302.请参阅fiddler输出贝娄v.
回应@Pawel Gradecki
1)您不应该检查开发人员工具是否有脚本错误,将选项卡切换到"网络"并检查那里的任何HTTP错误.
请参阅上面的snapshoot到我网络窗口的@ConorGallagher ^.
你也没有在fiddler上启用HTTPS解密,所以你的日志不是很有意义,你应该首先启用它,然后重新检查fiddler
我在这里道歉是启用了解密的小提琴输出:
这更有帮助.页面似乎无法找到源地图(404),然后重定向到错误页面(302).我不确定它是否重定向,因为它无法找到源地图或因为其他一些错误.
2)检查服务器跟踪日志,他们可以显示一些可用于故障排除的其他信息
4)您可以打开一些工作图表设计器(例如帐户)并复制完整的URL并将其粘贴到单独的窗口.对机会图表执行相同操作(将其复制并粘贴到单独的窗口).如果仍然没有为Opportunity工作比较两个URL,请尝试稍微使用它们(交换一些查询字符串参数).
我玩了网址
现在,如果我将网址更改为:
https://crmcanada-dev.url.com/main.aspx?appSolutionId=%7bFD140AAF-4DF4-11DD-BD17-0019B9312238%7d&extraqs=etc%3d 3%26id%3d%7bA3A9EE47-5093-DE11-97D4-00155DA3B01E%图7d&网页类型= vizdesigner#665349499
(因为1是Company对象,3是机会对象).我仍然被重定向到无效的用户页面.
记得仔细检查服务器Trace,因为它可以告诉你一些有意义的东西.如果你有什么东西,请把它贴在这里,这样我们也可以看一下.
见上面链接^.
我想到了另一个想法 - 尝试备份您的组织数据库,以不同的名称还原它,以不同的名称导入它(因此您应该在DEV上有一个单独的组织).有时在组织导入期间会出现错误,这些错误不会阻止导入本身,但会导致CRM的某些奇怪行为.检查此重新导入的组织是否存在同样的问题.
这将是最后的手段.
microsoft-dynamics authorization crm dynamics-crm dynamics-crm-365
任何人都可以帮我在文本字段中显示一个optionset字段值..?我想检索在optionset中选择的值,并使用插件在文本字段中显示相同的值.我在"case"实体的"update"上写这个插件...
我想在AX POS零售登录模块中进行自定义.而不是输入操作员ID和密码,我可以从外部读取并传递给具有操作员ID和密码的POS吗?
此致,Rassal
在将CRM 2013内部升级到CRM365之后,插件问题开始出现.每次我尝试从插件使用IOrganizationService进行任何操作时都会出错.此问题仅在多服务器安装时发生,它在CRM 2013版本上没有出现.它也不会出现在CRM365的单服务器安装上.
Unhandled Exception: System.ServiceModel.FaultException`1[[Microsoft.Xrm.Sdk.OrganizationServiceFault, Microsoft.Xrm.Sdk, Version=8.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35]]: System.Web.HttpUnhandledException: Microsoft Dynamics CRM has experienced an error. Reference number for administrators or support: #52BFF7F3Detail:
<OrganizationServiceFault xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.microsoft.com/xrm/2011/Contracts">
<ActivityId>c291f3ee-3bfe-4c0d-a631-9b7e70c19add</ActivityId>
<ErrorCode>-2147220970</ErrorCode>
<ErrorDetails xmlns:d2p1="http://schemas.datacontract.org/2004/07/System.Collections.Generic" />
<Message>System.Web.HttpUnhandledException: Microsoft Dynamics CRM has experienced an error. Reference number for administrators or support: #52BFF7F3</Message>
<Timestamp>2017-03-13T12:14:25.2768854Z</Timestamp>
<ExceptionSource i:nil="true" />
<InnerFault>
<ActivityId>c291f3ee-3bfe-4c0d-a631-9b7e70c19add</ActivityId>
<ErrorCode>-2147220891</ErrorCode>
<ErrorDetails xmlns:d3p1="http://schemas.datacontract.org/2004/07/System.Collections.Generic" />
<Message>callManagerInfo</Message>
<Timestamp>2017-03-13T12:14:25.2768854Z</Timestamp>
<ExceptionSource i:nil="true" />
<InnerFault i:nil="true" />
<OriginalException i:nil="true" />
<TraceText>
[PluginsMerged: Core.Plugins.ReadAuditLogPlugin]
[b381844a-41b5-e611-b605-0050568c2255: Core.Plugins.ReadAuditLogPlugin: RetrieveMultiple of account]
Entered …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
我正在关注这篇文章,以便在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
我有一个名为new_trexmail的实体,其中包含一个名为new_contextline的字符串属性.
我正在尝试获取一个实体列表,其中new_contextlineis在定义的列表中.
以下代码失败并显示错误: NotSupportedException: Invalid 'where' condition. An entity member is invoking an invalid property or method.
string[] test = new[]{"aaa", "hhh"};
var query = from n in New_trexmailSet
where test.Contains(n.New_contextline)
select n;
Run Code Online (Sandbox Code Playgroud)
我理解为什么会抛出这个错误,但我想知道是否可以使用XRM进行IN子句的等效.
如果可能的话,我该如何让XRM执行SELECT * FROM new_trexmail WHERE new_contextline in ('aaa', 'hhh')?
谢谢,
大卫
我正在尝试将Microsoft Dynamics Online与我的网站集成.但是,我正在努力寻找一种通过API(无论是REST还是SOAP)使用PHP进行身份验证的好方法.大多数示例使用Microsoft CRM SDK(在.NET中)进行身份验证.但是,我的网站基于PHP,我想知道如何访问Microsoft Dynamics API(REST和/或SOAP).
有没有人知道通过PHP使用Microsoft动态API进行身份验证的合适方法?
dynamics-crm ×7
c# ×3
crm ×3
plugins ×2
adfs ×1
axapta ×1
dynamics-365 ×1
javascript ×1
linq ×1
node.js ×1
odata ×1
php ×1
rest ×1
soap ×1