【问题标题】:Mark an appointment as Scheduled in CRM 2011在 CRM 2011 中将约会标记为已安排
【发布时间】:2011-07-21 19:02:23
【问题描述】:

我有一个 Silverlight 应用程序可以创建约会,但由于它没有标记为“已安排”,它不会显示在日历中。我为此使用了 SOAP 服务,下面是一些示例代码,它会在单击按钮时触发创建约会,但它不会显示在日历中:

TestCommand = new RelayCommand(() =>
{
    var soapCtx = ServiceHelper.GetSingletonSoapService();
    var activityId = Guid.NewGuid();
    var appt = new Entity()
    {
        Id = activityId,
        LogicalName = "appointment"
    };

    appt["activityid"] = activityId;
    appt["scheduledstart"] = DateTime.Now.Date;
    appt["scheduledend"] = DateTime.Now.Date.AddHours(1);
    appt["description"] = "Test 1 2 3";
    appt["subject"] = "Test Command Button Appointment";
    appt["location"] = "Location 1 2 3";

    soapCtx.BeginCreate(appt, ar =>
        {
            var response = soapCtx.EndCreate(ar);                                           
            var bookRequest = new OrganizationRequest();

            bookRequest.RequestName = "Book";
            bookRequest["Target"] = appt;
            soapCtx.BeginExecute(bookRequest, 
                new AsyncCallback(OnBookRequestedCompleted), soapCtx);

        }, null);                

});

void OnBookRequestedCompleted(IAsyncResult ar)
{
    var soapCtx = (IOrganizationService)ar.AsyncState;
    var response = soapCtx.EndExecute(ar);      
}

我在 OnBookRequestedCompleted 方法中不断收到“NotFound”异常。有没有其他方法可以做到这一点?

【问题讨论】:

  • 对不起,如果我很厚,但您肯定只需要在创建记录时将 statusreason 设置为“Scheduled”吗?
  • @AdamV 你试过这个吗?我记得这样做过,但没有效果。我相信更改约会状态是一个单独的请求的原因是因为它会进行一些验证以查看是否存在任何冲突,如果确实发现任何冲突,它将报告它们并且您可以根据需要处理它们。

标签: dynamics-crm-2011


【解决方案1】:

使用 Fiddler 调试您的 HTTP 请求/响应,这将为您提供有关“未找到”异常的详细信息。

【讨论】:

    【解决方案2】:

    您不应设置 BookRequest 返回的 ActivityId 字段。如果 BookResponse.ValidationResult.ValidationSuccess == true, apptId = BookResponse.ValidationResult.ActivityId

    您需要使用 BookRequest 返回的 id 调用 SetStateRequest 以将状态设置为 Scheduled

    例如:

                    SetStateRequest state = new SetStateRequest();
                    state.State = new OptionSetValue(3);   // Scheduled
                    state.Status = new OptionSetValue(5);  // Busy
                    state.EntityMoniker = new EntityReference("appointment", apptId);
                    SetStateResponse stateSet = (SetStateResponse)this.orgService.Execute(state);
    

    【讨论】:

      猜你喜欢
      • 2011-12-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多