Creating Post with Dynamics CRM Web API

2019-03-27 23:20发布

问题:

A Post entity (https://msdn.microsoft.com/en-us/library/mt607553.aspx) cannot be created using Dynamics CRM 2016 Online Web API.

This payload should create a post on POST /api/data/v8.1/posts

{
    "text": "Test Single Post",
    "source": 1,
    "type": 7
}

(source 1 is an auto post, type 7 is a status post)

But it returns:

{
    "error":
    {
        "code":"",
        "message":"An unexpected error occurred.",
        "innererror"
        {
            "message":"An unexpected error occurred..."
        }
    }
}

Submitting the same payload with only "text" fails too.

Notice that the Post entity does not have single-valued navigation properties (https://msdn.microsoft.com/en-us/library/mt607553.aspx#bkmk_SingleValuedNavigationProperties) that will allow me to set the related entity (contact, account, etc).

For example, Creating a Task entity (https://msdn.microsoft.com/en-us/library/mt607619.aspx) works fine on 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"
}

It seems to me that Post should expose something like regardingobjectid_contact_post@odata.bind, but it does not.

For context, this is how to create a Post via the SOAP endpoint and the SDK:

var result = Client.getOrganizationService().Create(new Post
{
    Text = post.text,
    RegardingObjectId = new EntityReference(
        entityName,
        Guid.Parse(post.regarding_guid)
    )
});

Does anyone have a working example of a Post created via the Web API? Is this an omission in the Dynamics CRM Web API?

It doesn't look like this is listed in the limitations: https://msdn.microsoft.com/en-us/library/mt628816.aspx

UPDATE

It appears that the postregarding entity is where the link should be created to contact/account. This can be demonstrated by querying:

/posts?$filter=postregardingid/regardingobjectid_contact/contactid eq <someguid>

However, a "deep insert" like so does not work:

{
    "text":"sometext",
    "postregardingid": 
         {
             "regardingobjectid_contact@odata.bind":"/contacts(someguid)"
         }
}

The response is

Cannot create child entities before parent entity.

回答1:

Nowhere it's mentioned like Post (activity feed) cannot be created using webapi. In fact it's not listed as crm webapi limitation like you pointed out.

Also on comparison, _regardingobjectid_value lookup property of post is different from activitypointer. Single valued navigation property too.

Out of curiosity, My investigation moved towards the Partner - post_PostRegardings

Only thing making sense - postregarding is strictly internal use. This could be the reason for all such behavior. This is my theory per v8.2 today(Aug 12 2017)

Description: Represents which object an activity feed post is regarding. For internal use only.
Entity Set path:[organization URI]/api/data/v8.2/postregardings
Base Type: crmbaseentity EntityType
Display Name: Post Regarding
Primary Key: postregardingid

Ref: https://msdn.microsoft.com/en-us/library/mt608103.aspx