Dynamics CRM 2011 - 如何使用带有Silverlight的REST端点将记录添加到队列(QueueItem)

时间:2011-11-17 17:16:39

标签: silverlight rest dynamics-crm dynamics-crm-2011

我想将记录分配给Silverlight应用程序中的特定队列。

我显示一个记录列表,用户可以选择一个或多个记录。然后我显示一个队列列表,用户选择要添加这些记录的队列。

我遵循了这个例子:

http://msdn.microsoft.com/en-us/library/gg309558.aspx

我尝试过不同的方式,但从未奏效过。

首先,

我试图创建一个“空”QueueItem :(代码的某些部分缺失,例如这里没有Queue记录,但它并不重要,只是为了向您展示问题)

internal void AddBillingToQueue()
    {
        QueueItem item = new QueueItem();

        context.AddToQueueItemSet(item);

        context.BeginSaveChanges(OnCreateCompleted, item);
    }

    private void OnCreateCompleted(IAsyncResult result)
    {
        QueueItem item = result.AsyncState as QueueItem
        DataServiceResponse response = context.EndSaveChanges(result);

        // Normally, the GUID shouldn't be empty anymore, 
        // but it fails at the EndSaveChanges line.
    }

异常消息表示objecttypecode缺失。所以我再次尝试提供我想要放入队列的对象。

internal void AddBillingToQueue(all_billing billing)
    {
        QueueItem item = new QueueItem();
        item.ObjectId = new EntityReference()
        {
            Name = billing.all_name,
            Id = billing.all_billingId,
            LogicalName = "all_billing"
        }

        context.AddToQueueItemSet(item);

        context.BeginSaveChanges(OnCreateCompleted, item);
    }

    private void OnCreateCompleted(IAsyncResult result)
    {
        QueueItem item = result.AsyncState as QueueItem
        DataServiceResponse response = context.EndSaveChanges(result);

        // again it fails
    }

现在异常消息显示缺少QueueId。所以我尝试提供对队列的引用。

internal void AddBillingToQueue(all_billing billing, Queue queue)
    {
        QueueItem item = new QueueItem();

        item.ObjectId = new EntityReference()
        {
            Name = billing.all_name,
            Id = billing.all_billingId,
            LogicalName = "all_billing"
        }


        item.QueueId = new EntityReference()
        {
            Name = queue.Name,
            Id = queue.QueueId,
            LogicalName = "Queue"
        };

        context.AddToQueueItemSet(item);

        context.BeginSaveChanges(OnCreateCompleted, item);
    }

    private void OnCreateCompleted(IAsyncResult result)
    {
        QueueItem item = result.AsyncState as QueueItem
        DataServiceResponse response = context.EndSaveChanges(result);

        // again it fails
    }

在这里,异常消息就是这个:

<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"yes\"?>
<error xmlns=\"http://schemas.microsoft.com/ado/2007/08/dataservices/metadata\">
<code>-2147217150</code>
<message xml:lang=\"nl-BE\">Queue</message>
</error>

根据此网站(http://www.cub-e.net/post/Microosft-Dynamics-CRM-Error-Code-List.aspx),代码表示:找不到指定的实体。我认为这意味着找不到Queue。

但提供的GUID肯定是正确的,因为它是从相同的上下文中检索的。

因此,如果我提供队列ID,则会失败。如果我不这样做,那就失败了。我错过了什么?有人已经使用QueueItem和REST端点吗?

1 个答案:

答案 0 :(得分:3)

这可能指出了显而易见的,你确实提到并非所有的代码都存在,所以我确实想知道这是否是副作用,但行。

LogicalName = "Queue"

跳出来,因为使用其余端点就实体名称而言区分大小写(即全部小写),因此可能无法找到队列。

除此之外,如果您的应用程序向用户显示队列以分配项目,此点也可能是静音但如果它是实际记录,则无法找到确保有权能够查看队列,添加到队列/分配您试图放入队列的项目。

希望有所帮助。