Как создать представление данных в Sharepoint с данными из запроса на соединение? - PullRequest
5 голосов
/ 22 января 2009

У меня 3 списка в Sharepoint.

Я хочу создать представление данных, которое представляет собой объединение 3 таблиц.

Таблица 1 объединена с таблицей 2 в FieldA Таблица 2 соединена с Таблицей 3 в FieldB

В Table1 есть повторяющиеся значения в FieldA, поэтому мне нужно вернуть только одно значение для объединения с Table2.

В Access мой запрос выглядит так: ВЫБЕРИТЕ DISTINCT WRK_InputWorkOrders.WorkOrder, Production1. [Part Number], Production1. [Work Order], Production1.Location, StationItems.Station, Production1.Description, Production1.Revision, WRK_InputWorkOrders.Status FROM StationItems INNER JOIN (WRK_InputWorkOrders INNER JOIN Production1 ON WRK_InputWorkOrders.WorkOrder = Production1. [Рабочий заказ]) ON StationItems.Item = Production1. [Номер детали] ГДЕ (((WRK_InputWorkOrders.Status) <> "закрыто"));

Есть ли способ написать sql-подобные запросы для dataviews?

У меня есть Sharepoint Designer 2007 и Access.

Цель состоит в том, чтобы получить отчет, который пользователь может просматривать в Internet Explorer. Я пытался использовать этот метод. Но он возвращает дубликаты записей Я нашел это предложение. Предлагает использовать XPath Filter не (@yourvalue = предыдущий-брат :: dfs: YourRepeatingRowName / @ yourvalue)

Но не смог заставить его работать. Я не знаю, что ввести как YourRepeatingRowName

Я нашел эту ссылку. Кто-нибудь знает, можно ли его использовать для такого объединения?

Ответы [ 5 ]

1 голос
/ 24 января 2009

У Microsoft есть видео-демонстрация и запись, которая может быть именно тем, что вы хотите:

Отображение данных из нескольких источников в одном представлении данных http://office.microsoft.com/en-us/sharepointdesigner/HA103511401033.aspx

В Microsoft Office SharePoint Designer 2007 вы можете связать два или более источника данных, которые содержат связанные данные, а затем создать одно представление данных, которое отображает данные из этих связанных источников данных.

1 голос
/ 24 января 2009

Ваш вопрос больше относится к вопросу ADO.NET. К сожалению, в ADO.NET нет простого способа сделать это, поэтому такие компании, как bamboo Solutions, создают свою веб-часть списка рассылки: http://store.bamboosolutions.com/pc-42-1-cross-list-web-part.aspx

В противном случае я бы попытался использовать LINQ для запроса таблиц. Возможно, вам повезет больше.

Вот пример запроса JOIN, предоставленного MS (я изменил только первые две строки DataTable, чтобы представить заполнение DataTable объектом SPListItemCollection)

DataTable orders = spListCol1.ToDataTable();
DataTable details = spListCol2.ToDataTable();

var query =
    from order in orders.AsEnumerable()
    join detail in details.AsEnumerable()
    on order.Field<int>("SalesOrderID") equals
        detail.Field<int>("SalesOrderID")
    where order.Field<bool>("OnlineOrderFlag") == true
    && order.Field<DateTime>("OrderDate").Month == 8
    select new
    {
        SalesOrderID =
            order.Field<int>("SalesOrderID"),
        SalesOrderDetailID =
            detail.Field<int>("SalesOrderDetailID"),
        OrderDate =
            order.Field<DateTime>("OrderDate"),
        ProductID =
            detail.Field<int>("ProductID")
    };

DataTable orderTable = query.CopyToDataTable(); 
0 голосов
/ 28 апреля 2009

Я сделал что-то подобное, но я не смог использовать dataview. Я закончил тем, что написал пользовательскую веб-часть, чтобы сделать это. Подход был:

  1. Используйте объект SPQuery, чтобы получить SPListItemCollection для каждого списка. Используйте запрос CAML, чтобы ограничить возвращаемые элементы.
  2. Используйте метод GetDataTable() объекта SPListItemCollection, чтобы получить объект ADO.NET DataTable для каждого списка.
  3. Добавление таблиц к объекту DataSet.
  4. Создание связей между таблицами.
  5. Визуализируйте данные по своему усмотрению, используя DataList или Repeater или что-то еще.

Вот некоторый код, который показывает широкие штрихи:

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
}
0 голосов
/ 23 января 2009

Я нашел эту третью часть добавления на

Enesys RS Data Extension позволяет запрашивать (извлекать, объединять, объединять, ...) данные из любого списка SharePoint и использовать результат для создания отчетов «Службы Reporting Services» так же, как и для любых других источников данных. http://www.enesyssoftware.com/

Я не могу использовать его, потому что в настоящее время я использую базовую версию Sharepoint, которая использует внутреннюю базу данных.

0 голосов
/ 22 января 2009

вы хотите показать результат запроса в SharePoint Designer? Я считаю, что СПД объединила источники данных. Посмотри на это.

...