65.9K
CodeProject 正在变化。 阅读更多。
Home

如何在 CRM 3.0 中创建任务

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.56/5 (3投票s)

2007 年 11 月 20 日

CPOL

4分钟阅读

viewsIcon

40857

如何创建 Microsoft CRM 3.0 中的任务

引言

我最近被指派将数据从 ACT! 迁移到 Microsoft CRM 3.0。数据包括导入所有当前和历史活动。

在 CRM 3.0 中,所有任务、电子邮件、约会...都归类为活动。为了有效地导入数据,我需要了解 CRM 3.0 Web 服务任务对象中的每个字段代表什么。

我将在本文中解释每个字段。

背景

为了最大限度地利用本文,您需要了解 CRM 3.0 Web 服务的工作原理。

请查阅 MSDN 上的 Microsoft CRM 3.0 文档。它非常详细,将帮助您入门。

在本文中,我假设您已导入 Web 服务。

Using the Code

首先,您需要做的是创建任务对象。

task t = new task(); 

设置 CreatedOn 属性。以编程方式创建任何 CRM 对象时,您需要为非字符串属性类型创建新实例。

CRM 提供自己的自定义对象,对于 DateTime 对象,请创建新的 CrmDateTime 实例,然后访问属性的值。

*** 请注意,CRM 会修改日期到不同的标准时区以存储在数据库中,这仅在通过 API 或用户界面插入数据时发生,因此如果您的日期不同,请不要惊慌。

如果您的任务有优先级,请使用以下代码

t.prioritycode = new PickList();
t.prioritycode.Value = Convert.ToInt32("0");

列表框使用 PickList 对象进行处理。确保您拥有 CRM 中的相应值。

您必须在您的列表和 CRM 列表框之间进行映射。如果数据不存在,请通过 CRM 界面添加,并且不要忘记发布您的更改,否则 API 将抛出异常。大多数活动对象都需要主题。请注意主题数据的长度。任务主题限制为 150 个字符,它也会在第一个换行符处截断。如果您不进行此测试,调试起来会很困难,因为 API 报告的唯一错误是“通用 SQL 错误”。

在 ACT! 中没有主题行,因此我需要将尾随文本导入到 description 属性中。

t.subject = "my first task";
t.description = "my first task description"

当然,您可以在过去、现在或未来创建任务。这由以下代码行处理

t.scheduledstart = new CrmDateTime();
t.scheduledstart.Value = DateTime.Now.ToString();

使用“scheduledend”属性设置活动的结束时间,此项不是必需的。

t.scheduledend = new CrmDateTime();
t.scheduledend.Value = DateTime.Now.ToString();

以下属性是必需的,并将在下文中进行更详细的解释。

regardingobjectids 是 Lookup 类型。

t.regardingobjectid = new Lookup();
t.regardingobjectid.name = "my name";
t.regardingobjectid.type = "type of object";
t.regardingobjectid.Value = new Guid("");

name 属性不言自明;它是创建对象的用户的名称。type 更复杂,您需要提供 CRM 中指定的实体名称。用户所对应的 type 是“systemuser”。API 的作者为我们提供了一个 enum 类,其中包含所有实体名称及其类型代码。

这将返回 string systemuser”。

EntityName.systemuser.ToString();

这将返回类型代码(在大多数情况下您并不真正需要它)。

Convert.ToInt32(EntityName.systemuser).ToString();

Value 属性是 GUID 类型;所有主键都存储为唯一标识符。

RegardingobjectID 非常重要但不是必需的。如果您想将活动与客户、订单...或任何配置为接受活动的实体相关联,则需要设置此属性。

ownerid 属性类似于 Lookup ,它们共享相同的字段。用 Owner 对象替换 Lookup 对象。

t.ownerid = new Owner(); 
t.ownerid.name = "my name"; 
t.ownerid.type = "type of object"; 
t.ownerid.Value = new Guid("");

owner 通常是 User 类型,但也可以是 Queue

如果您需要设置任务的持续时间,请使用以下属性。持续时间以分钟为单位存储为整数。

t.scheduleddurationminutes = new CrmNumber();
t.scheduleddurationminutes.Value = 45;

在服务器上实际创建任务很简单。需要一个 CrmService 对象的实例。

***This is for .NET 2.0***
CrmService service = new CrmService();
service.Credentials = System.Net.CredentialCache.DefaultCredentials;

当您创建新实体时,CRM 将返回一个新的 GUID

如果出于任何原因创建失败,API 将抛出 SoapException ,实际的错误消息将位于 Detail.InnerText 属性中。

Guid newTaskID = new Guid();

try
{
newTaskID = service.Create(t);
}
catch(System.Web.Services.Protocols.SoapException ex)
{
string strMessage = ex.Detail.InnerText;
}

如果任务是历史活动,那么您需要使用 SetStateTaskRequest 对象将其设置为已完成,以请求 CRM 关闭该活动,每种活动类型都有自己的 SetState 类。

SetStateTaskRequest tr = new SetStateTaskRequest();
tr.EntityId = newTaskID;
tr.TaskState = new TaskState();tr.TaskState = TaskState.Completed //or Canceled,Open;

tr.TaskStatus = -1 //set this to -1 so that CRM can decide the appropriate status.
service.Execute(tr);

就是这么简单。

祝您愉快!

Oshri Cohen www.nuvoit.com

© . All rights reserved.