2013-08-01 33 views
8

Có cách nào để tạo truy vấn đó không?Tìm kiếm nâng cao - kết hợp entitie liên quan với OR

enter image description here

Tôi cần dữ liệu từ Địa chỉ và Liên hệ Địa chỉ, thông thường tôi chỉ có thể kết hợp chúng bằng cách Combine OR nhưng không phải trong trường hợp này.

Tôi đoán rằng tôi phải viết plugin mới với phương thức PreExecute(), nhận truy vấn, phân tích cú pháp dữ liệu và sau đó sử dụng địa chỉ bằng tay HOẶC có cách nào khác?

+0

Bạn đang cố gắng chỉ tạo chế độ xem hoặc bạn đang cố truy cập dữ liệu thông qua SDK? – Daryl

+0

Không quan trọng. Tôi chỉ cần hiển thị dữ liệu cho người dùng trong chế độ xem. Tôi đã quan tâm đến khả năng hệ thống đại diện cho nhà phát triển. Và phát hiện ra rằng cách duy nhất để làm điều đó - viết một plugin. –

Trả lời

2

Tôi đã giải quyết được sự cố.

  • Tạo plugin để xác thực trước với phương pháp Execute() và phương pháp phân tích dữ liệu .
  • Trong chế độ xem thực thể, hãy thêm một số trường với GUID.
  • Nếu plugin tìm thấy guid trong chế độ xem của bạn, nó sẽ nhận được truy vấn fetchxml cho thực thể của bạn và thực thể truy vấn thứ hai khác sẽ hiển thị chế độ xem mặc định.
  • Dữ liệu phân tích cú pháp cho những gì bạn muốn hiển thị cho người dùng.
  • Đăng ký plugin của bạn.
  • Lợi nhuận.

PS Tôi sẽ thêm nguồn vào một hoặc hai ngày sau khi tái cấu trúc và phê duyệt từ khách hàng.

Edit:

Trước hết - y cần tạo mới GUID và thêm lĩnh vực chuỗi để xem với guid đó để xem (Nó là tốt hơn để ẩn nó từ người sử dụng). Tạo plugin với RetrieveMultiple hành động và Post xác nhận (trong Pre hành động mà bạn có thể bị mất những thay đổi của bạn)

Trong plugin: phương pháp chính RetrieveMultiple đó sẽ nhận được bối cảnh và dịch vụ từ Mà bạn sẽ mất truy vấn, sau đó bạn cần có được fetchXml và kiểm tra nếu có GUID của bạn.

  string fetchXml = string.Empty; 
      var query = context.InputParameters["Query"] as QueryExpression; 
      var fetchQuery = context.InputParameters["Query"] as FetchExpression; 

       if (query == null) 
       { 
        if (fetchQuery == null) 
        { 
        return; 
        } 
       fetchXml = fetchQuery.Query; 
       } 

       // Convert query to a fetch expression for processing and apply filter 
       else 
       { 
        fetchXml = 
         ((QueryExpressionToFetchXmlResponse) 
          service.Execute(new QueryExpressionToFetchXmlRequest {Query = query})).FetchXml; 
       } 

       if (fetchXml.Contains(OpportunityFilterGuid)) 
      { 
        ApplyFilter(context, service, query); 
       } 
      } 

Trong phương pháp ApllyFilter của bạn, bạn cần: truy vấn

  1. Nhận từ người dùng (ông có thể thêm một số fileds mới).

  2. Xóa trường của bạn bằng GUID.

  3. Thực hiện truy vấn.

  4. Xóa các tệp đã gửi, có thể xung đột với tuyên bố OR của bạn.

  5. Thêm link-entity để truy vấn.

  6. Thực hiện truy vấn.

  7. Thêm đối tượng đã nhận từ truy vấn thứ hai đến trước.

  8. Sử dụng LINQ chọn các đối tượng không được lặp lại.

    collectionOne.Entities.GroupBy(oppId => oppId.Id).Select(opp => opp.First()) 
    
  9. Gửi dữ liệu đó cho khách hàng.

2

Tôi không biết cách nào để thực hiện việc trên.

Thay vì viết plugin, tôi sẽ làm báo cáo.

Cách đơn giản nhất mà tôi có thể nghĩ là thực hiện fetchXML của bạn mà không cần bộ lọc như vậy.

<fetch version="1.0" output-format="xml-platform" mapping="logical" distinct="true"> 
    <entity name="account"> 
    <attribute name="name" /> 
    <attribute name="primarycontactid" /> 
    <attribute name="telephone1" /> 
    <attribute name="accountid" /> 
    <attribute name="address1_city" /> 
    <order attribute="name" descending="false" /> 
    <link-entity name="contact" from="parentcustomerid" to="accountid" alias="ac"> 
     <attribute name="address1_city" /> 
    </link-entity> 
    </entity> 
</fetch> 

Sau đó chuyển đổi visibilty hàng trong báo cáo của bạn sử dụng

=Fields!address1_city.Value="Sydney" Or Fields!ac_address1_city.Value="Sydney" 

Rõ ràng, bạn có thể thay thế Sydney với một Parameter

+0

Tôi cần thực hiện điều đó cho một trong các chế độ xem thực thể. Vì vậy, như tôi gues, bạn đưa ra ý tưởng tốt đẹp nhưng không cho tôi. Vâng? –

+0

Việc sửa lỗi ở trên sẽ không giúp bạn với chế độ xem thực thể. Lấy làm tiếc. – Campey

0

một cách đơn giản, không có cách nào để làm những gì bạn đang yêu cầu thông qua tiên tiến tìm thấy.

Truy vấn mẫu bạn đưa lên sẽ chỉ hiển thị cho bạn Tài khoản trong đó Danh sách liên hệ được liên kết có địa chỉ khớp nhau (cũng như rõ ràng Tài khoản có khớp địa chỉ). Khi bạn kết hợp một thực thể khác trong Tìm kiếm Nâng cao, bạn sẽ chỉ thấy các phụ huynh có các bản ghi được liên kết - không có khả năng làm (những gì có hiệu quả) một phép nối ngoài.

Tùy chọn duy nhất của bạn thực sự là xây dựng thứ gì đó trong Silverlight hoặc HTML và thêm nó dưới dạng tài nguyên web - một khi bên trong mã đó bạn có thể hiển thị bất kỳ thứ gì bạn muốn. Như những người khác đã đề xuất, điều này là có thể trong một báo cáo.

+0

Không có gì là không thể trong lập trình. Luôn có cách giải quyết. –

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