none
Визуальная веб-часть для отчета в sharepoint 2010 foundation RRS feed

  • Вопрос

  • Добрый день! Нужно сделать визуальную веб-часть где будет отображаться отчет в виде таблицы:

    ФИО | Группы | Библиотеки |

    И будет поле для указания по какому пользователю(колонка "ФИО") будет отображаться остальная информация.

    Как сделать такой запрос в визуальной веб-части???

    18 марта 2013 г. 12:17

Ответы

  • Вот код если кому интересно:

    using System;
    using System.ComponentModel;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using Microsoft.SharePoint;
    using Microsoft.SharePoint.WebControls;
    using System.Text;
    using Microsoft.SharePoint.Utilities;
    
    namespace Report.VisualWebPart1
    {
        public partial class VisualWebPart1UserControl : UserControl
        {
            protected void Page_Load(object sender, EventArgs e)
            {}
           // Label zagolovok;
    //string lblName;
    //string lblgroups;
            TextBox lblgroups;
    Table tblAllUsers;
    
    public VisualWebPart1UserControl()
    {}
    
    protected override void CreateChildControls()
    {
        base.CreateChildControls();
    
        tblAllUsers = new Table();
    
       // zagolovok = new Label();
        string lblName;
      //  string lblgroups;
       // lblgroups = new string();
        lblgroups = new TextBox();
        
      //  lblName = new Label();
    
        CreateHeaderRow(); // Will Add a header Row to the Table.
    
        using (SPSite SPSite = new SPSite(SPContext.Current.Site.ID))
        {
            using (SPWeb SPWeb = SPSite.OpenWeb(SPContext.Current.Web.ID))
            {
    
                SPUserCollection AllSPWebUsers = SPContext.Current.Web.AllUsers;
    
                SPGroupCollection AllSPWebGroups = SPContext.Current.Web.Groups;
    
                SPListCollection AllSPWebList = SPContext.Current.Web.Lists;
    
                foreach (SPUser user in AllSPWebUsers)
                {
                    lblName = user.Name;
                    SPGroupCollection webGroups = user.Groups;
                    lblgroups.Text = "";
                    foreach (SPGroup grp in webGroups)
                    {
                        lblgroups.Text = lblgroups.Text + grp.Name + "<br />";
                       // lblgroups.Text = lblgroups.Text + "; ";
                        
                    }
                    lblgroups.TextMode = System.Web.UI.WebControls.TextBoxMode.MultiLine;
                    AddToTable(lblName, lblgroups.Text);
                }
    
    
                this.Controls.Add(tblAllUsers);
            }
        }
    }
    protected void AddToTable(string UserName, string grp)
    {
    TableRow r = new TableRow();
        //r.Font.Size= 15;
    TableCell CellName = new TableCell();
        CellName.Width= 300;
        CellName.Font.Size= 12;
        CellName.Text = UserName;
    r.Cells.Add(CellName);
    
    TableCell CellPermissions = new TableCell();
    //CellPermissions.Wrap = true;
    CellPermissions.Width = 550;
        CellPermissions.Font.Size = 12;
        CellPermissions.Text = grp;
    r.Cells.Add(CellPermissions);
    
    tblAllUsers.Rows.Add(r);
    }
    
    // Create a Header Row for the Output table.
    protected void CreateHeaderRow()
    {
        zagolovok.Text = "Дата отчета: " + DateTime.Now;
        zagolovok.DataBind();
    TableHeaderRow headerRow = new TableHeaderRow();
    headerRow.BackColor = System.Drawing.Color.LightBlue;
       headerRow.Font.Size = 12;
    TableHeaderCell headerTableCell1 = new TableHeaderCell();
    TableHeaderCell headerTableCell2 = new TableHeaderCell();
    headerTableCell1.Text = "Пользователи сайта";
    headerTableCell1.Scope = TableHeaderScope.Column;
    
    headerTableCell2.Text = "Группы";
    headerTableCell2.Scope = TableHeaderScope.Column;
    
    
    headerRow.Cells.Add(headerTableCell1);
    headerRow.Cells.Add(headerTableCell2);
    
    
    
    tblAllUsers.Rows.AddAt(0, headerRow);
    }
    }}

    <asp:Label ID="zagolovok" runat="server" Text=""></asp:Label>

    Так же я сделал еще две веб-части. Одна по пользователям но с полем TextBox для поиска, а другая по группам.


    • Помечено в качестве ответа Ruslan P 27 марта 2013 г. 7:15
    • Изменено Ruslan P 27 марта 2013 г. 7:17
    21 марта 2013 г. 13:57

Все ответы

  • А отчет в excel или представление списка не подойдет?

    про запросы http://habrahabr.ru/post/82787/

    • Предложено в качестве ответа Andrey_S1 18 марта 2013 г. 16:46
    • Отменено предложение в качестве ответа Ruslan P 20 марта 2013 г. 7:28
    18 марта 2013 г. 13:21
  • Хотелось бы сделать в визуальной части.
    18 марта 2013 г. 13:25
  • Ссылка выше, еще есть Linq to SharePoint.
    • Изменено Andrey_S1 18 марта 2013 г. 16:46
    18 марта 2013 г. 16:45
  • Я сделал веб-часть и в ней сделал таблицу с полями | ФИО | Группы | Библиотеки | и в этих полях отображается необходимая инфа. А вот как мне сделать поле для ввода фамилии пользователя по которому будет отображаться информация в этих колонках таблицы???
    19 марта 2013 г. 9:08
  • мне кажется я не совсем понял задачу, но хотел предложить такой вариант:

    если положить на страницу  и соеденить две веб части

    1. веб-часть фильтр тестов

    2. представление данных (к примеру  Data Form Web Part)

    соеденить можно передавая фильтры (необходимо будет вводить полное имя пользователя) или передавая параметры (настроить фильтр пользователь содержит "параметр")


    19 марта 2013 г. 9:29
    Модератор
  • мне кажется я не совсем понял задачу, но хотел предложить такой вариант:

    если положить на страницу  и соеденить две веб части

    1. веб-часть фильтр тестов

    2. представление данных (к примеру  Data Form Web Part)

    соеденить можно передавая фильтры (необходимо будет вводить полное имя пользователя) или передавая параметры (настроить фильтр пользователь содержит "параметр")


    А есть пример этих веб-частей?
    19 марта 2013 г. 11:56
  • что именно Вы хотите увидеть?

    как это выглядит в итоге или как настроить то что  я описал?

    19 марта 2013 г. 12:07
    Модератор
  • что именно Вы хотите увидеть?

    как это выглядит в итоге или как настроить то что  я описал?

    Хотелось бы знать как настроить то что Вы описали.
    19 марта 2013 г. 12:59
  • посмотрите статью Соединение веб-части фильтра с веб-частью "Представление списка"

    если решите передавать параметры, то делать нужно через дизайнер

    будут вопросы обращайтесь. 


    19 марта 2013 г. 13:29
    Модератор
  • Я сделал веб-часть тестовою по текущему пользователю:

    code behind:

    using System;
    using System.ComponentModel;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using Microsoft.SharePoint;
    using Microsoft.SharePoint.WebControls;
    using System.Text;
    using Microsoft.SharePoint.Utilities;
    
    namespace Report.VisualWebPart1
    {
        public partial class VisualWebPart1UserControl : UserControl
        {
            protected void Page_Load(object sender, EventArgs e)
            {
                if (!IsPostBack)
                {
                    using (SPSite site = new SPSite("http://test:83/"))
                    {
                        using (SPWeb web = site.OpenWeb())
                        {
                            SPListCollection lists = web.Lists;
                            lists.ListsForCurrentUser = true;
                            foreach (SPList lst in lists)
                            {
                                if (lst.BaseType == SPBaseType.DocumentLibrary)
                                {
                                    
                                    //Response.Write("- " + lst.Title + "<br/>");
                                  //  SPListCollection AllSPWebList = SPContext.Current.Web.Lists;
                                    // SPWebCollection webCollection = web.GetSubwebsForCurrentUser();
                                    string currUser = web.CurrentUser.Name;
                                    SPUser currentUser = web.CurrentUser;
                                    SPGroupCollection webGroups = currentUser.Groups;
                                    //SPListCollection userlist = web.CurrentUser;
                                   //SPUserCollection alluser = web.AllUsers;
                                    
    
                                    TextBox1.Text = currUser;
                                    TextBox1.DataBind();
                                    CheckBoxList1.DataSource = webGroups;
                                    CheckBoxList1.DataBind();
                                    CheckBoxList3.DataSource = lists;
                                    CheckBoxList3.DataBind();
                                }
                            }
                        }
                    }
                }
            }
        }
    }

    Как сделать поле для ввода ФИО пользователя по которому будет выводиться вся инфа в таблице????


    • Изменено Ruslan P 20 марта 2013 г. 14:52
    20 марта 2013 г. 14:46
  • Если делать, как описано выше с 2 вебчастями то не нужно кода, это стандартные вебчасти. (это правильный вариант)

    Если вы хотите свою писать, то поле для ввода у вас есть TextBox1, если вы про поле SharePoint PioplePicker, то вот

    http://sharepoint.stackexchange.com/questions/49332/how-can-i-use-the-sharepoint-people-picker-control-in-my-custom-web-part

    https://www.google.ru/webhp?sourceid=chrome-instant&ion=1&ie=UTF-8#hl=ru&newwindow=1&sclient=psy-ab&q=sharepoint+people+picker+control&oq=sharepoint++picker+control&gs_l=hp.3.1.0j0i7i30l2j0i7i10i30.2985.2985.3.4442.1.1.0.0.0.0.140.140.0j1.1.0...0.0...1c.1.7.psy-ab.7TpPzM_wptE&pbx=1&bav=on.2,or.r_cp.r_qf.&bvm=bv.44011176,d.bGE&fp=1a09ef8944fe6c26&ion=1&biw=1846&bih=1019


    20 марта 2013 г. 15:21
  • Если делать, как описано выше с 2 вебчастями то не нужно кода, это стандартные вебчасти. (это правильный вариант)

    Если вы хотите свою писать, то поле для ввода у вас есть TextBox1, если вы про поле SharePoint PioplePicker, то вот

    http://sharepoint.stackexchange.com/questions/49332/how-can-i-use-the-sharepoint-people-picker-control-in-my-custom-web-part

    https://www.google.ru/webhp?sourceid=chrome-instant&ion=1&ie=UTF-8#hl=ru&newwindow=1&sclient=psy-ab&q=sharepoint+people+picker+control&oq=sharepoint++picker+control&gs_l=hp.3.1.0j0i7i30l2j0i7i10i30.2985.2985.3.4442.1.1.0.0.0.0.140.140.0j1.1.0...0.0...1c.1.7.psy-ab.7TpPzM_wptE&pbx=1&bav=on.2,or.r_cp.r_qf.&bvm=bv.44011176,d.bGE&fp=1a09ef8944fe6c26&ion=1&biw=1846&bih=1019


    А те стандартные веб-части про которые Вы говорите они есть в foundation?
    20 марта 2013 г. 15:28
  • да есть
    20 марта 2013 г. 16:20
  • А как мне взять из TextBox после нажатия кнопки имя пользователя и заполнить таблицу по примеру:

    ФИО              | Группы                        | Библиотеки |

    Иванов И.И.     Админы сайта                 Общие доки     

                            Маркетинговый отдел     Библиотека 1

                            И т.д.                               Библиотека 2

    21 марта 2013 г. 9:22
  • Вот код если кому интересно:

    using System;
    using System.ComponentModel;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using Microsoft.SharePoint;
    using Microsoft.SharePoint.WebControls;
    using System.Text;
    using Microsoft.SharePoint.Utilities;
    
    namespace Report.VisualWebPart1
    {
        public partial class VisualWebPart1UserControl : UserControl
        {
            protected void Page_Load(object sender, EventArgs e)
            {}
           // Label zagolovok;
    //string lblName;
    //string lblgroups;
            TextBox lblgroups;
    Table tblAllUsers;
    
    public VisualWebPart1UserControl()
    {}
    
    protected override void CreateChildControls()
    {
        base.CreateChildControls();
    
        tblAllUsers = new Table();
    
       // zagolovok = new Label();
        string lblName;
      //  string lblgroups;
       // lblgroups = new string();
        lblgroups = new TextBox();
        
      //  lblName = new Label();
    
        CreateHeaderRow(); // Will Add a header Row to the Table.
    
        using (SPSite SPSite = new SPSite(SPContext.Current.Site.ID))
        {
            using (SPWeb SPWeb = SPSite.OpenWeb(SPContext.Current.Web.ID))
            {
    
                SPUserCollection AllSPWebUsers = SPContext.Current.Web.AllUsers;
    
                SPGroupCollection AllSPWebGroups = SPContext.Current.Web.Groups;
    
                SPListCollection AllSPWebList = SPContext.Current.Web.Lists;
    
                foreach (SPUser user in AllSPWebUsers)
                {
                    lblName = user.Name;
                    SPGroupCollection webGroups = user.Groups;
                    lblgroups.Text = "";
                    foreach (SPGroup grp in webGroups)
                    {
                        lblgroups.Text = lblgroups.Text + grp.Name + "<br />";
                       // lblgroups.Text = lblgroups.Text + "; ";
                        
                    }
                    lblgroups.TextMode = System.Web.UI.WebControls.TextBoxMode.MultiLine;
                    AddToTable(lblName, lblgroups.Text);
                }
    
    
                this.Controls.Add(tblAllUsers);
            }
        }
    }
    protected void AddToTable(string UserName, string grp)
    {
    TableRow r = new TableRow();
        //r.Font.Size= 15;
    TableCell CellName = new TableCell();
        CellName.Width= 300;
        CellName.Font.Size= 12;
        CellName.Text = UserName;
    r.Cells.Add(CellName);
    
    TableCell CellPermissions = new TableCell();
    //CellPermissions.Wrap = true;
    CellPermissions.Width = 550;
        CellPermissions.Font.Size = 12;
        CellPermissions.Text = grp;
    r.Cells.Add(CellPermissions);
    
    tblAllUsers.Rows.Add(r);
    }
    
    // Create a Header Row for the Output table.
    protected void CreateHeaderRow()
    {
        zagolovok.Text = "Дата отчета: " + DateTime.Now;
        zagolovok.DataBind();
    TableHeaderRow headerRow = new TableHeaderRow();
    headerRow.BackColor = System.Drawing.Color.LightBlue;
       headerRow.Font.Size = 12;
    TableHeaderCell headerTableCell1 = new TableHeaderCell();
    TableHeaderCell headerTableCell2 = new TableHeaderCell();
    headerTableCell1.Text = "Пользователи сайта";
    headerTableCell1.Scope = TableHeaderScope.Column;
    
    headerTableCell2.Text = "Группы";
    headerTableCell2.Scope = TableHeaderScope.Column;
    
    
    headerRow.Cells.Add(headerTableCell1);
    headerRow.Cells.Add(headerTableCell2);
    
    
    
    tblAllUsers.Rows.AddAt(0, headerRow);
    }
    }}

    <asp:Label ID="zagolovok" runat="server" Text=""></asp:Label>

    Так же я сделал еще две веб-части. Одна по пользователям но с полем TextBox для поиска, а другая по группам.


    • Помечено в качестве ответа Ruslan P 27 марта 2013 г. 7:15
    • Изменено Ruslan P 27 марта 2013 г. 7:17
    21 марта 2013 г. 13:57
  • посмотрите Sharepoint Permissions Manager, возможно будет полезно...
    21 марта 2013 г. 16:09
    Модератор
  • Все я сделал свой собственный отчет по такому принципу как я хотел. Всем спасибо за помощь.
    22 марта 2013 г. 14:20