我们在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
此问题与我通过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
我在CRM中构建了一个自定义操作,我需要通过它的WebAPI来解决这个问题.自定义操作已激活,我在创建CRM时没有出现任何错误.
我尝试从VB.NET应用程序调用此操作,如:
Dim httpch As New HttpClientHandler
Dim requestUri As String = "contacts(1fcfd54a-15d3-e611-80dc-0050569ea396)/Microsoft.Dynamics.CRM.new_addnotetocontact"
httpch.Credentials = New NetworkCredential("username", "password", "domain")
Dim httpClient As New HttpClient(httpch)
httpClient.BaseAddress = New Uri(CRMWebApiUri)
httpClient.Timeout = New TimeSpan(0, 2, 0)
httpClient.DefaultRequestHeaders.Add("OData-MaxVersion", "4.0")
httpClient.DefaultRequestHeaders.Add("OData-Version", "4.0")
httpClient.DefaultRequestHeaders.Add("Prefer", "odata.include-annotations='OData.Community.Display.V1.FormattedValue'")
httpClient.DefaultRequestHeaders.Accept.Add(New MediaTypeWithQualityHeaderValue("application/json"))
Dim jsonNote As JObject = New JObject(New JProperty("NoteTitle", "'Mails have been deleted'"), New JProperty("NoteText", "This contacts SmarterMail data has been deleted due to inactivity"))
Dim postData = New StringContent(jsonNote.ToString(), Encoding.UTF8, "application/json")
Dim retrieveContactResponse As HttpResponseMessage = httpClient.PostAsync(requestUri, postData).Result …
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
我正在使用Dynamic Web Api和Simple OData.我需要为链接实体添加新记录.
我使用下面的代码片段并参考https://github.com/object/Simple.OData.Client/wiki/Adding-entries-with-links上的文档
var newContactData = await _oDataClient
.For<Contacts>()
.Set(new
{
firstname = contactData.ContatDetails.firstname,
lastname = contactData.ContatDetails.lastname,
emailaddress1 = contactData.ContatDetails.emailaddress1
})
.InsertEntryAsync(true);
var newContactLink = await _oDataClient.For<New_project_contactses>()
.Set(new
{
_new_contact_project_name_new_value = contactData.ContatDetailsLink._new_contact_project_name_new_value,
new_project_contactsid = new Guid("0eb46b24-21a2-e611-80eb-c4346bc5b2d4"),
new_contact_type = contactData.ContatDetailsLink.new_contact_type,
})
.InsertEntryAsync(resultRequired: true);
Run Code Online (Sandbox Code Playgroud)
我正在例外
CRM不支持直接更新实体引用属性,而是使用导航属性代替S.
dynamics-crm simple.odata simple.odata.client dynamics-crm-webapi
我正在尝试通过api在Dynamics CRM中创建价格级别对象。
在创建价格水平对象(价格列表)时,我还想创建带有所谓的深层插入但至今没有成功的产品价格水平(价格列表项目)。
我正在遵循本指南。
产品价格水平具有集合值的导航属性,称为price_level_product_price_levels
如果我遵循本教程,则需要撰写以下请求
[POST] /pricelevels
Run Code Online (Sandbox Code Playgroud)
授权标头设置正确,内容主体为:
{
"name": "MA - 2019W24",
"paymentmethodcode": 1,
"price_level_product_price_levels": [{
"quantitysellingcode": 1,
"amount": 89,
"amount_base": 89,
"pricingmethodcode": 1,
"productid@odata.bind": "/products(ef43bf1f-e605-e911-a818-000d3a2cd4e8)",
"uomid@odata.bind": "/uoms(942b3c4c-e405-e911-a818-000d3a2cd4e8)"
}
]
}
Run Code Online (Sandbox Code Playgroud)
响应中的错误消息是:
具有ID的价格级别= c0184273-ed8c-e911-a83b-000d3a2dd73b不存在
UUID随每个请求而变化。响应中包含的stacktrace为:
at Microsoft.Crm.Extensibility.OrganizationSdkServiceInternal.CreateInternal(Entity entity, InvocationContext invocationContext, CallerOriginToken callerOriginToken, WebServiceType serviceType, Boolean checkAdminMode, Dictionary`2 optionalParameters)
at Microsoft.Crm.Extensibility.OData.CrmODataExecutionContext.CreateOrganizationResponse(Entity entity)
at Microsoft.Crm.Extensibility.OData.CrmODataServiceDataProvider.CreateEdmEntity(CrmODataExecutionContext context, String edmEntityName, EdmEntityObject entityObject, Boolean isUpsert)
at Microsoft.Crm.Extensibility.OData.EntityController.PostEntitySetImplementation(String& entitySetName, EdmEntityObject entityObject)
at Microsoft.PowerApps.CoreFramework.ActivityLoggerExtensions.Execute[TResult](ILogger logger, EventId eventId, ActivityType activityType, …
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
无法使用Dynamics CRM 2016 Online Web API创建Post实体(https://msdn.microsoft.com/en-us/library/mt607553.aspx).
此有效负载应创建一个帖子 POST /api/data/v8.1/posts
{
"text": "Test Single Post",
"source": 1,
"type": 7
}
Run Code Online (Sandbox Code Playgroud)
(来源1是自动发布,类型7是状态发布)
但它返回:
{
"error":
{
"code":"",
"message":"An unexpected error occurred.",
"innererror"
{
"message":"An unexpected error occurred..."
}
}
}
Run Code Online (Sandbox Code Playgroud)
仅使用"text"提交相同的有效负载也会失败.
请注意,Post实体没有单值导航属性(https://msdn.microsoft.com/en-us/library/mt607553.aspx#bkmk_SingleValuedNavigationProperties),这将允许我设置相关实体(联系人,帐户,等等).
例如,创建任务实体(https://msdn.microsoft.com/en-us/library/mt607619.aspx)可以正常工作POST /api/data/v8.1/tasks
{
"subject": "Test Single Task",
"description": "Test One Description of Task",
"regardingobjectid_contact_task@odata.bind": "/contacts(<someguid>)",
"scheduledend": "2016-07-21T12:11:19.4875892Z"
}
Run Code Online (Sandbox Code Playgroud)
在我看来,Post应该暴露类似的东西regardingobjectid_contact_post@odata.bind
,但事实并非如此.
对于上下文,这是通过SOAP端点和SDK创建Post的方法:
var result = Client.getOrganizationService().Create(new Post
{
Text = post.text,
RegardingObjectId = …
Run Code Online (Sandbox Code Playgroud) dynamics-crm odata dynamics-crm-online dynamics-crm-webapi microsoft-dynamics-webapi
在一个Joomla应用程序我得到一个用户信息如下,然后我需要保存用户信息通过自己的REST API的动态365数据库中的联系人.
$user = JFactory::getUser();
$username = $user->username;
$name = $user->name;
Run Code Online (Sandbox Code Playgroud)
我环顾周围的Web API和REST API像动态文档这个和这个,但他们没有提供有用的信息,我怎么能调用API来添加新的联系人.:目前,我通过这个网址连接365动态Web应用程序http://example.com:8088/mysite/api/data/v8.2.链接的帖子也讨论了REST API,但只是查询.我正在寻找一种使用REST API将数据发布到Dynamics CRM的方法.
php joomla microsoft-dynamics dynamics-crm dynamics-crm-webapi
我需要从 Javascript 调用操作流程。我的操作接受 2 个输入参数和 1 个输出参数。下面是我的Action的截图
我的表单中有一个文本字段,在其
onChange
事件中我调用此 CallAction 方法。下面是 JavaScript
function CallAction() {
var actionName = "taqi_getPrice";
var actionParameters = {
"base": "USD",
"TotalPrice": "200"
};
var actionResponse = activateCustomAction(actionName, actionParameters);
}
function activateCustomAction(actionName, actionParams) {
var req = new XMLHttpRequest();
req.open("POST", Xrm.Page.context.getClientUrl() + "/api/data/v9.0/taqi_getPrice", false);
req.setRequestHeader("OData-MaxVersion", "4.0");
req.setRequestHeader("OData-Version", "4.0");
req.setRequestHeader("Accept", "application/json");
req.setRequestHeader("Content-Type", "application/json; charset=utf-8");
req.onreadystatechange = function () {
if (this.readyState === 4) {
req.onreadystatechange = null;
if (this.status === 200) {
var results = JSON.parse(this.response); …
Run Code Online (Sandbox Code Playgroud) javascript microsoft-dynamics action dynamics-crm dynamics-crm-webapi
dynamics-crm ×9
odata ×3
crm ×2
javascript ×2
action ×1
c# ×1
dynamics-365 ×1
java ×1
joomla ×1
php ×1
simple.odata ×1
vb.net ×1