2011-09-15 17 views
5

CRM2011 SDK'mdan bazılarını kullanmak için CRM4.0 eklentilerimi dönüştürüyorum. LINQ ile Erken Bağlı kurumlar için çalışmaya başladım ve bir problemle karşılaştım.CRM 2011 - Biçimlendirilmiş varlıklardan Biçimlendirilmiş Değerleri Geri Alma

Bir OptionSetValue öğesinin biçimlendirilmiş değerini birleşik bir varlıkta almaya çalışıyorum. this MSDN SDK Query Example görüntülendikten sonra, birincil varlık için biçimlendirilmiş değerleri almayı başardım, ancak bunu birleştirilmiş bir öğeye dönüştürmeyi başaramıyorum.

Aşağıdaki kod, elde etmeye çalıştığım şeyin bir örneğidir. SDK örneğinden kodu kullanarak başladım. düzeltilmiş genelinde

var query_join8 = (from a in sContext.AccountSet 
        join c in sContext.ContactSet 
         on a.PrimaryContactId.Id equals c.ContactId 
         into gr 
        from c_joined in gr.DefaultIfEmpty() 
        select new 
           { 
            contact_name = c_joined.FullName, 
            account_name = a.Name, 
            account_addresstypecode = a.Address1_AddressTypeCode, 
            account_addresstypename = a.FormattedValues.ContainsKey("address1_addresstypecode") ? a.FormattedValues["address1_addresstypecode"] : null, 
            account_formattedValues = a.FormattedValues, 
            contact_addresstypecode = c_joined.Address1_AddressTypeCode, 
            contact_addresstypename = c_joined.FormattedValues.ContainsKey("address1_addresstypecode") ? c_joined.FormattedValues["address1_addresstypecode"] : null, 
            contact_formattedValues = c_joined.FormattedValues, 
           }).ToArray(); 

account_formattedValues ​​ve gelecek account_addresstypename ve o verilere erişebilir, ama nedense contact_formattedValues ​​öğe Boş koleksiyon içerir ve böylece contact_addresstypename boş.

Bunu yanlış mı yapıyorum yoksa bir şey özledim mi? Bunu nasıl başarabilecek ya da bilen var mı? Herhangi bir yardım büyük beğeni topluyor.

cevap

8

LINQ sorgu sağlayıcısında biçimlendirilmiş değerlerin ilk varlığı takip eden varlıklar için düzgün uygulanmadığı bir hata var. QueryExpression API'sinin (LINQ sağlayıcısının kullandığı), sorguları birleştirmeyi nasıl ele aldığıyla ilgilidir. Bunu, ilk/birincil varlıktaki (teknik olarak tek varlık) tüm öznitelikleri ve biçimlendirilmiş değerleri bir araya getirerek yapar. Daha sonra bu değerleri kategorize etmek için bir dizi "link aliases" kullanır. Bunu, eksik FormattedValues'e yönelik bir geçici çözüm olarak kullanabiliriz.

var acs = 
    from a in context.AccountSet 
    join c in context.ContactSet on a.PrimaryContactId.Id equals c.ContactId 
    into gr 
    from c_joined in gr.DefaultIfEmpty() 
    select new 
    { 
     account_addresstypecode = a.Address1_AddressTypeCode, 
     account_addresstypename = a.FormattedValues["address1_addresstypecode"], 
     contact_addresstypecode = c_joined.Address1_AddressTypeCode, 
     contact_addresstypename = a.FormattedValues["c_0.address1_addresstypecode"], 
     a.FormattedValues 
    }; 

foreach (var ac in acs) 
{ 
    foreach (var pair in ac.FormattedValues) 
    { 
     Console.WriteLine("{0} {1}", pair.Key, pair.Value); 
    } 
} 

Bildirimi tüm etiket değerleri "a" parametresi çekilir, zor kısmı dayalı dinamik olarak oluşturulan dize olan takma/önek değeri (birincil olmayan varlıklar için) ne bilmektir varlık kümesi parametresinin adı "c" ve bir sayaç değeri. Bu, birincil varlığın Biçimlendirilmiş Değerlerini boşaltma yoluyla denetlenebilir.

+0

Mükemmel, bu benim için çalıştı! –

İlgili konular