2011-11-16 55 views
3

我正在制作一个插件,触发自定义活动SMS的创建消息。 这些插件将使用第三方短信服务提供商发送实际的短信。如何从插件中的PartyList获取联系人指导?

因此,我需要获取SMS活动“收件人”字段中每个联系人的手机号码。这是一个类型:PartyList的字段。

我目前使用下面的代码:

EntityCollection Recipients; 
Entity entity = (Entity) context.InputParameters["Target"]; 

IOrganizationServiceFactory serviceFactory = (IOrganizationServiceFactory)serviceProvider.GetService(typeof(IOrganizationServiceFactory)); 
IOrganizationService service = serviceFactory.CreateOrganizationService(context.UserId); 

Content = entity.GetAttributeValue<String>("subject"); 
Recipients = entity.GetAttributeValue<EntityCollection>("to"); 

for (int i = 0; i < Recipients.Entities.Count; i++) 
{ 
    Entity ent= Recipients[i]; 

    string number = ent["MobilePhone"].ToString();  
} 

但是这是行不通的,我觉得耳鼻喉科变量不包含任何属性。

我试过用ActivityParty编码,但也没有运气。

我希望有人能帮助我。

谢谢!

回答

6

这里是如何我终于做到了:

EntityCollection Recipients; 
Entity entity = (Entity) context.InputParameters["Target"]; 

IOrganizationServiceFactory serviceFactory 
    = (IOrganizationServiceFactory)serviceProvider.GetService(
    typeof(IOrganizationServiceFactory)); 
IOrganizationService service = serviceFactory 
    .CreateOrganizationService(context.UserId); 

Content = entity.GetAttributeValue<String>("subject"); 
Recipients = entity.GetAttributeValue<EntityCollection>("to"); 

for (int i = 0; i < Recipients.Entities.Count; i++) 
{ 
    ActivityParty ap = Recipients[i].ToEntity<ActivityParty>(); 
    String contactid = ap.PartyId.Id.ToString(); 
    Contact c = (Contact) service.Retrieve(
    Contact.EntityLogicalName, 
    ap.PartyId.Id, 
    new ColumnSet(new string[]{ "mobilephone" })); 
    String mobilephone = c.MobilePhone; 
    ... 
} 
+0

我在我的插件中使用早期绑定类型,并以同样的方式获取电子邮件的To字段存在问题。如下所示将代码更改为延迟绑定也解决了我的问题。 – Sal

+0

hi @ThdK,你可以发布你的插件所有的代码? –

6

RecipientsActivityParty的列表,而不是联系人,帐户,...。 因此一定要仔细阅读其PartyId

EntityReference partyId = ent.GetAttributeValue<EntityReference>("partyid"); 

有了这个信息,你必须寻找它referecend本partyID记录。这可能是一个联系人,账户,systemuser,... 你会得到这个信息低谷

var partyType = partyId.LogicalName; 

然后你可以检索记录本记录,以阅读次数。

+0

感谢您的答复。我试过使用ActivityParty。但它从来没有工作。我需要在代码中更改什么? 1. ActivityParty收件人; (或ActivityParty [])? 2. Recipients = entity.GetAttributeValue (“to”); (或ActivityParty [])? 当我这样做时,我会得到一个错误,我无法将EntityCollection投入到ActivityParty中。 当我使用entitycollection类型,并将集合中的每个对象转换为activityparty时出现错误:“无法将类型为'Microsoft.Xrm.Sdk.Entity'的对象转换为键入'ActivityParty'。” 我还在做什么错? – ThdK

相关问题