我们在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
反对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
}}
记录是成功创建的,但是在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",
}
登录面板后,我看到了新的记录.我可以通过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",
  ....
}
我想做的下一件事是添加与该联系人关联的注释记录.按照指南我打电话:
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)'
}
但它返回400错误:
未声明的属性"contact",其在有效内容中仅包含属性注释,但在有效内容中未找到属性值.在OData中,只有声明的导航属性和声明的命名流可以表示为没有值的属性.
我打电话的时候:
POST [organization URI]/api/data/annotations
Content-Type: application/json; charset=utf-8
Accept: application/json
{
    "notetext": "TEST",
}
创建了新实体,但没有与联系人的关系.
如何正确撰写此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 …我使用以下命令在新窗口中打开了一个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");`
但这是失败的.我已逐步跟踪到该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);
我正在例外
CRM不支持直接更新实体引用属性,而是使用导航属性代替S.
dynamics-crm simple.odata simple.odata.client dynamics-crm-webapi
我正在尝试通过api在Dynamics CRM中创建价格级别对象。
在创建价格水平对象(价格列表)时,我还想创建带有所谓的深层插入但至今没有成功的产品价格水平(价格列表项目)。
我正在遵循本指南。
产品价格水平具有集合值的导航属性,称为price_level_product_price_levels
如果我遵循本教程,则需要撰写以下请求
[POST] /pricelevels
授权标头设置正确,内容主体为:
{
    "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)"
        }
    ]
}
响应中的错误消息是:
具有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, …我正在尝试从新的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
并回应:
{
"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 , …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
}
(来源1是自动发布,类型7是状态发布)
但它返回:
{
    "error":
    {
        "code":"",
        "message":"An unexpected error occurred.",
        "innererror"
        {
            "message":"An unexpected error occurred..."
        }
    }
}
仅使用"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"
}
在我看来,Post应该暴露类似的东西regardingobjectid_contact_post@odata.bind,但事实并非如此.
对于上下文,这是通过SOAP端点和SDK创建Post的方法:
var result = Client.getOrganizationService().Create(new Post
{
    Text = post.text,
    RegardingObjectId = …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;
我环顾周围的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); …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