2011-09-15 34 views
5

Tôi đã chuyển đổi một số plugin CRM4.0 của mình để sử dụng SDK CRM2011. Tôi chỉ mới bắt đầu làm việc với LINQ cho các thực thể sớm ràng buộc và đã gặp một vấn đề.CRM 2011 - Truy xuất các định dạng được định dạng từ thực thể được kết hợp

Tôi đang cố gắng lấy giá trị được định dạng của OptionSetValue trong thực thể được kết hợp. Sau khi xem xét this MSDN SDK Query Example, tôi đã quản lý để truy xuất các giá trị được định dạng cho thực thể chính, nhưng dường như không thể dịch các giá trị đó sang thực thể được kết hợp.

Mã dưới đây là mẫu của những gì tôi đang cố gắng đạt được. Tôi bắt đầu bằng cách sử dụng mã từ ví dụ SDK.

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(); 

Các account_formattedValues ​​và account_addresstypename đi qua chỉnh sửa và tôi có quyền truy cập vào dữ liệu đó, nhưng vì lý do nào contact_formattedValues ​​mục chứa một bộ sưu tập sản phẩm nào, và do đó contact_addresstypename là null.

Tôi có làm điều này không chính xác hoặc tôi đã bỏ lỡ điều gì đó không? Có ai đã có thể hoặc biết cách đạt được điều này? Bất kỳ trợ giúp nào cũng được đánh giá rất cao.

Trả lời

8

Có lỗi trong nhà cung cấp truy vấn LINQ nơi các giá trị được định dạng không được áp dụng đúng cho các thực thể theo sau thực thể đầu tiên. Nó liên quan đến cách API QueryExpression (mà nhà cung cấp LINQ sử dụng) xử lý các truy vấn tham gia. Nó làm như vậy bằng cách gộp tất cả các thuộc tính và các giá trị được định dạng trong thực thể đầu tiên/chính (về mặt kỹ thuật là thực thể duy nhất). Sau đó, nó sử dụng một tập hợp "link aliases" để phân loại các giá trị này. Chúng ta có thể khai thác điều này như một cách giải quyết cho FormattedValues ​​còn thiếu.

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); 
    } 
} 

Thông báo tất cả các giá trị nhãn được kéo từ "a" tham số, một phần khó khăn là biết những gì giá trị bí danh/tiền tố là (đối với các tổ chức phi chính) mà là một chuỗi động tạo ra dựa trên tên của tham số bộ thực thể, "c" và giá trị bộ đếm. Điều này có thể được kiểm tra bằng cách bán FormattedValues ​​của thực thể chính.

+0

Tuyệt vời, điều này đã làm việc cho tôi! –

Các vấn đề liên quan