CRM后期限制 - 清洁方法

时间:2014-11-11 11:22:42

标签: console-application dynamics-crm-2013

我有以下代码,我试图找到更优雅的方法。 activityParty是一个DataCollection。我基本上试图获取电子邮件的收件人列表,可以是用户类型或联系人。

我熟悉早期绑定但在这种情况下必须使用后期绑定。

有更好的方法吗?

var recipientParty = activityParty.Where(x => x.GetAliasedValueOrDefault<OptionSetValue>("ap.participationtypemask").Value == 2).ToList();
var recipientList = new List<string>();

foreach (var to in recipientParty)
{
    if (to.Attributes.Contains("u.internalemailaddress"))
    {
        recipientList.Add(to.GetAliasedValueOrDefault<string>("u.internalemailaddress"));
    }

    if (to.Attributes.Contains("c.emailaddress1"))
    {
        recipientList.Add(to.GetAliasedValueOrDefault<string>("c.emailaddress1"));
    }
}

2 个答案:

答案 0 :(得分:0)

试试这个:

using (var serviceContext = new OrganizationServiceContext(this.OrganizationService)) // if you are writing custom code activity
//using (var serviceContext = new OrganizationServiceContext(localContext.OrganizationService)) // if you are writing plugin
{
    var activityPartySet = serviceContext.CreateQuery<ActivityParty>();
    var activityParties = activityPartySet.Where(
                                ap => ap.PartyId != null && 
                                ap.ParticipationTypeMask != null && 
                                ap.ParticipationTypeMask.Value == 2).ToList();

    var userSet = serviceContext.CreateQuery<SystemUser>();
    var contactSet = serviceContext.CreateQuery<Contact>();
    var recipientList = new List<string>();
    foreach (var ap in activityParties)
    {
        var partyRef = ap.PartyId;
        if (partyRef.LogicalName == SystemUser.EntityLogicalName)
        {
            var user = (from u in userSet
                        where u.Id == partyRef.Id
                        select new SystemUser
                        {
                            InternalEMailAddress = u.InternalEMailAddress
                        }).FirstOrDefault();

            if (user != null)
                recipientList.Add(user.InternalEMailAddress);
        }
        else if (partyRef.LogicalName == Contact.EntityLogicalName)
        {
            var contact = (from c in contactSet
                           where c.Id == partyRef.Id
                           select new Contact
                           {
                                EMailAddress1 = c.EMailAddress1
                           }).FirstOrDefault();

             if (contact != null)
                 recipientList.Add(contact.EMailAddress1);
         }
     }
 }

希望它有所帮助!

答案 1 :(得分:0)

查看AddressUsed实体的ActivityParty属性。它应该包含电子邮件地址,无论哪个实体是参与方的来源。

因此,在您的代码中,您可以使用to.AddressUsed代替整个{...}语句。