2009-01-22 26 views
5

Tôi có 3 Danh sách trong Sharepoint.Làm thế nào để tạo một dataview Trong Sharepoint với dữ liệu từ một truy vấn tham gia?

Tôi muốn tạo một dataview tham gia 3 bảng.

Table1 được tham gia với Table2 trên FieldA Bảng 2 được gia nhập vào Table3 trên FieldB

Table1 có giá trị trùng lặp trong FieldA vì vậy tôi cần phải chỉ trả lại một giá trị để tham gia với Table2.

Trong Access truy vấn của tôi trông như thế này:.. CHỌN WRK_InputWorkOrders.WorkOrder DISTINCT, Production1 [Part Number], Production1 [Làm việc theo thứ tự], Production1.Location, StationItems.Station, Production1.Description, Production1.Revision, WRK_InputWorkOrders .Status FROM StationItems INNER JOIN (WRK_InputWorkOrders INNER JOIN sản xuất1 ON WRK_InputWorkOrders.WorkOrder = Production1. [Work Order]) ON StationItems.Item = Production1. [Part Number] WHERE (((WRK_InputWorkOrders.Status) <> "đóng"));

Có cách nào để viết truy vấn giống như sql cho dataview không?

Tôi có Sharepoint Designer 2007 và Access.

Mục tiêu là nhận báo cáo mà người dùng có thể xem trong Internet Explorer. Tôi đã thử sử dụng phương pháp this. Nhưng nó trả về các bản ghi trùng lặp Tôi đã tìm thấy đề xuất this. Nó cho thấy sử dụng một bộ lọc XPath không (@yourvalue = trước-sibling :: dfs: YourRepeatingRowName/@ yourvalue)

Nhưng không thể làm cho nó hoạt động. Tôi không biết phải nhập gì vào YourRepeatingRowName

Tôi tìm thấy liên kết this. Có ai biết nếu nó có thể được sử dụng để thực hiện một tham gia như vậy?

Trả lời

0

bạn muốn hiển thị kết quả truy vấn trong SharePoint Designer? Tôi tin rằng, SPD đã hợp nhất các nguồn dữ liệu. Nhìn kìa.

+0

Tôi đã thử bằng cách sử dụng datasources sáp nhập sử dụng thông tin từ http://office.microsoft.com/en-us/sharepointdesigner/HA100991441033.aspx Phương pháp này thực hiện một phép nối tạo ra một tập dữ liệu rất lớn. Hiệu suất cũng rất chậm. một bảng có 20.000 hàng. – user24912

+0

Đó là sự thật ... nếu bạn di chuyển dữ liệu vào cơ sở dữ liệu SQL, bạn có thể có số lượt xem để đạt được điều này .. tôi hy vọng tôi có ý nghĩa :) – Muhammedh

0

tôi thấy phần thứ ba tiện ích này trên

Enesys RS dữ liệu mở rộng cho phép bạn truy vấn (lấy, tham gia, sáp nhập, ...) dữ liệu từ bất kỳ danh sách SharePoint và sử dụng kết quả để xây dựng "Reporting Services" báo cáo như bạn sẽ làm với bất kỳ nguồn dữ liệu nào khác. http://www.enesyssoftware.com/

Tôi không thể sử dụng vì tôi hiện đang chạy phiên bản Sharepoint cơ bản sử dụng cơ sở dữ liệu nội bộ.

1

Câu hỏi của bạn có nhiều câu hỏi về ADO.NET hơn. Thật không may ADO.NET không có cách nào dễ dàng để làm điều này, đó là lý do tại sao các công ty như tre Solutions xây dựng danh sách của họ trên Web: http://store.bamboosolutions.com/pc-42-1-cross-list-web-part.aspx

Nếu không, tôi sẽ cố gắng sử dụng LINQ để truy vấn bảng. Bạn có thể có thêm may mắn làm điều đó.

Dưới đây là một ví dụ của một truy vấn THAM GIA cung cấp bởi MS (tôi chỉ thay đổi hai dòng DataTable đầu tiên đại diện điền một DataTable với một đối tượng SPListItemCollection)

1

Microsoft có một bản demo video và một writeup rằng có thể chỉ là những gì bạn muốn:

hiển thị dữ liệu từ nhiều nguồn khác nhau trong một dữ liệu Xem đơn http://office.microsoft.com/en-us/sharepointdesigner/HA103511401033.aspx

Với Microsoft Office SharePoint Designer 2007, bạn có thể liên kết hai hoặc nhiều nguồn dữ liệu chứa dữ liệu có liên quan và sau đó tạo một Chế độ xem dữ liệu duy nhất hiển thị dữ liệu từ các nguồn dữ liệu được liên kết đó.

+0

Tác phẩm này ngoại trừ một bản ghi trùng lặp. Thông tin không hiển thị cách trả về các bản ghi DISTINCT. – user24912

+0

Liên kết này đã chết (không ngạc nhiên sau 8 năm). – Dan

0

Tôi đã thực hiện một cái gì đó như thế này, nhưng tôi đã không thể sử dụng một dataview. Tôi đã kết thúc viết một phần web tùy chỉnh để làm điều đó. Cách tiếp cận là:

  1. sử dụng đối tượng SPQuery để nhận SPListItemCollection cho mỗi danh sách. Sử dụng truy vấn CAML để hạn chế các mục được trả về.
  2. Sử dụng phương pháp của đối tượng GetDataTable() để truy xuất đối tượng ADO.NET DataTable cho từng danh sách.
  3. Thêm bảng vào đối tượng DataSet.
  4. Tạo mối quan hệ giữa các bảng. Tuy nhiên, hãy sử dụng DataList hoặc Repeater hoặc bất kỳ dữ liệu nào.

Dưới đây là một số mã cho thấy các nét rộng:

protected DataTable GetDataTableFromQuery(string camlQry, SPList theList) { 
    SPQuery listQry = new SPQuery(); 
    listQry.Query = camlQry; 
    SPListItemCollection listItems = theList.GetItems(listQry); 
    return listItems.GetDataTable(); 
} 

protected void BuildDataSet() { 
    // get SPList objects for the lists in questions ... left as an exercise for the dev -- call them list1, list2, and list3 
    string camlQry = "the CAML necessary to retreive the ites from list1"; 
    DataTable table1 = GetDataTable(camlQry, list1); 
    table1.TableName = "Table1"; 
    camlQry = "the CAML necessary to retreive the ites from list2"; 
    DataTable table2 = GetDataTable(camlQry, list2); 
    table1.TableName = "Table2"; 
    camlQry = "the CAML necessary to retreive the ites from list3"; 
    DataTable table3 = GetDataTable(camlQry, list3); 
    table1.TableName = "Table3"; 

    // now build the DataSet 
    DataSet ds = new DataSet(); 
    ds.Tables.Add(table1); 
    ds.Tables.Add(table2); 
    ds.Tables.Add(table3); 
    ds.Relations.Add("Table1_2", ds.Tables["Table1"].Columns["FieldA"], ds.Tables["Table2"].Columns["FieldA"]); 
    ds.Relations.Add("Table2_3", ds.Tables["Table2"].Columns["FieldB"], ds.Tables["Table3"].Columns["FieldB"]); 

    // now you can do something with these, like store them in the web part class and bind them to repeaters in the web part's Render() method 
} 
Các vấn đề liên quan