{"id":192506,"date":"2013-09-05T03:53:03","date_gmt":"2013-09-04T23:53:03","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=192506"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=192506","title":{"rendered":"<span class=\"post_title\">\u0414\u0435\u043b\u0430\u0435\u043c \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u043b\u0435\u043d\u0438\u0435 \u0441 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u043c \u0441\u043f\u0438\u0441\u043a\u0430 SharePoint 2010<\/span>"},"content":{"rendered":"<div class=\"content html_format\"> \t\t\t\u041f\u0440\u0438\u043d\u0446\u0438\u043f \u0440\u0430\u0431\u043e\u0442\u044b \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u043b\u0435\u043d\u0438\u044f \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0441\u0442. \u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043f\u0440\u0438 \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u0441\u043f\u0438\u0441\u043a\u0430 \u0432\u0438\u0434\u0438\u0442 \u043a\u043d\u043e\u043f\u043a\u0443 <b>\u041f\u0440\u043e\u0447\u0438\u0442\u0430\u043b<\/b> \u043f\u043e\u0441\u043b\u0435 \u043d\u0430\u0436\u0430\u0442\u0438\u044f \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0434\u0430\u043d\u043d\u044b\u0435 \u043e \u043d\u0435\u043c \u0438 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043d\u0430\u0436\u0430\u0442\u0438\u044f \u043f\u043e\u043f\u0430\u0434\u0430\u044e\u0442 \u0432 \u0434\u0440\u0443\u0433\u043e\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u0433\u0434\u0435 \u0431\u0443\u0434\u0443\u0442 \u0445\u0440\u0430\u043d\u0438\u0442\u0441\u044f. \u042d\u0442\u043e\u0442 \u0441\u043f\u0438\u0441\u043e\u043a \u0431\u0443\u0434\u0435\u0442 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c\u0441\u044f \u043f\u043e\u0441\u043b\u0435 \u0442\u043e\u0433\u043e \u043a\u0430\u043a \u0432\u0435\u0431 \u043f\u0430\u0440\u0442\u0430 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0437\u043c\u0435\u0449\u0435\u043d\u0430 \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435 \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430, \u0430 \u0438\u043c\u044f \u0435\u0433\u043e \u0431\u0443\u0434\u0435\u0442 \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0442\u0430\u043a ReadList_&lt;Guid \u0441\u043f\u0438\u0441\u043a\u0430 \u0434\u043b\u044f \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u043b\u0435\u043d\u0438\u044f&gt;. \u0414\u043b\u044f \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430 \u0441\u043f\u0438\u0441\u043a\u043e\u0432 \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u043b\u0435\u043d\u043d\u044b\u0445 \u0438 \u043d\u0435 \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u043b\u0435\u043d\u043d\u044b\u0445 \u043c\u044b \u043d\u0430\u043f\u0438\u0448\u0435\u043c \u0435\u0449\u0435 \u043e\u0434\u043d\u0443 \u0432\u0435\u0431 \u043f\u0430\u0440\u0442\u0443 \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0440\u0430\u0437\u043c\u0435\u0441\u0442\u0438\u043c \u043d\u0430 \u0444\u043e\u0440\u043c\u0435 \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0441\u043f\u0438\u0441\u043a\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u043c \u0447\u0438\u0442\u0430\u0442\u044c, \u0442\u0430\u043a \u043a\u0430\u043a \u043f\u043e\u0434\u0440\u0430\u0437\u0443\u043c\u0435\u0432\u0430\u0435\u0442\u0441\u044f \u0447\u0442\u043e \u043e\u0431\u044b\u0447\u043d\u044b\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0438 \u043c\u043e\u0433\u0443\u0442 \u043f\u0440\u043e\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0442\u044c, \u043d\u043e \u043d\u0435 \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442.<\/p>\n<p>  \u0412\u043e\u0442 \u043a\u0430\u043a \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0432\u0435\u0431 \u043f\u0430\u0440\u0442\u0430 \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u043b\u0435\u043d\u0438\u0435.<br \/>  \u0414\u043e \u043d\u0430\u0436\u0430\u0442\u0438\u044f \u043d\u0430 \u043a\u043d\u043e\u043f\u043a\u0443:<br \/>  <img decoding=\"async\" src=\"http:\/\/habrastorage.org\/storage3\/a2d\/b72\/94b\/a2db7294be66b4bfa695eb83ae91d206.png\" alt=\"image\"\/><br \/>  <a name=\"habracut\"><\/a><br \/>  \u0418 \u043f\u043e\u0441\u043b\u0435 \u043d\u0430\u0436\u0430\u0442\u0438\u044f:<br \/>  <img decoding=\"async\" src=\"http:\/\/habrastorage.org\/storage3\/8c0\/7ad\/a82\/8c07ada824c6f481ba91954041db782b.png\" alt=\"image\"\/><br \/>  \u0421\u043e\u0437\u0434\u0430\u0435\u043c \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0441\u0430\u043c \u0441\u043f\u0438\u0441\u043e\u043a, \u0441 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u043c\u0438 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0438 \u0434\u043e\u043b\u0436\u043d\u044b \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u0442\u044c\u0441\u044f. \u042f \u043d\u0430\u0437\u0432\u0430\u043b \u0435\u0433\u043e <b>TestReadList<\/b>, \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u043f\u043e\u043b\u0435 <b>Assigned to<\/b> \u0442\u0438\u043f \u043f\u043e\u043b\u044f Person or Group \u0441\u043c\u044b\u0441\u043b \u044d\u0442\u043e\u0433\u043e \u043f\u043e\u043b\u044f \u0441\u0442\u0430\u043d\u0435\u0442 \u044f\u0441\u0435\u043d \u043a\u043e\u0433\u0434\u0430 \u0431\u0443\u0434\u0435\u043c \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0432\u0435\u0431 \u043f\u0430\u0440\u0442\u0443 \u0434\u043b\u044f \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430 \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u043b\u0435\u043d\u043d\u044b\u0445.<br \/>  \u0412 Visual Studio \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u043f\u0443\u0441\u0442\u043e\u0439 \u043f\u0440\u043e\u0435\u043a\u0442 SharePoint2010 <b>SPConfirmReadProject<\/b>.<br \/>  \u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0432 \u043f\u0440\u043e\u0435\u043a\u0442 Visual Web Part \u043d\u0430\u0437\u043e\u0432\u0435\u043c \u0435\u0451 ConfirmWebPart, \u0442\u0430\u043a \u0436\u0435 \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u043a \u043f\u0440\u043e\u0435\u043a\u0442\u0443 \u0441\u0441\u044b\u043b\u043a\u0443 \u043d\u0430 \u043f\u0430\u043f\u043a\u0443 Images SharePoint\u2019a (\u041f\u0440\u0430\u0432\u043e\u0439 \u043a\u043d\u043e\u043f\u043a\u043e\u0439 \u043d\u0430 \u043f\u0440\u043e\u0435\u043a\u0442\u0435. Add-&gt;SharePoint \u201cImages\u201d Mapped Folder) \u043f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u0434\u043e\u0431\u0430\u0432\u044c\u0442\u0435 \u043a \u043f\u0430\u043f\u043a\u0443 Images\\SPConfirmReadProject \u0441\u0432\u043e\u0439 \u0440\u0438\u0441\u0443\u043d\u043e\u043a \u043a\u043d\u043e\u043f\u043a\u0438. \u041e\u043d \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0432 LinkButton.<br \/>  \u0412\u043e\u0442 \u043a\u043e\u0434 <b>ConfirmWebPart.ascx<\/b>  <\/p>\n<pre><code class=\"html\">&lt;table&gt;     &lt;tr&gt;         &lt;td&gt;             &lt;asp:LinkButton ID=&quot;bRead&quot; runat=&quot;server&quot; OnClick=&quot;bRead_Click&quot;&gt;&lt;img src=&quot;..\/_Layouts\/Images\/SPConfirmReadProject\/accept.png&quot; style=&quot;border:0px;&quot;\/&gt;\u041f\u0440\u043e\u0447\u0438\u0442\u0430\u043b&lt;\/asp:LinkButton&gt;         &lt;\/td&gt;     &lt;\/tr&gt;     &lt;tr&gt;         &lt;td&gt;             &lt;asp:Label ID=&quot;lStatus&quot; runat=&quot;server&quot; Text=&quot;&quot;&gt;&lt;\/asp:Label&gt;         &lt;\/td&gt;     &lt;\/tr&gt; &lt;\/table&gt; <\/code><\/pre>\n<p>  \u0422\u0443\u0442 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0451\u043c LinkButton \u0438 Label.<\/p>\n<p>  \u041f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u043a \u043a\u043e\u0434\u0443 ConfirmWebPart.asxc.cs:  <\/p>\n<pre><code class=\"cs\">protected void Page_Load(object sender, EventArgs e)         {             bool isReal = false;             \/\/\u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u0441\u0435\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u043b\u0438 \u0441\u043f\u0438\u0441\u043e\u043a \u0434\u043b\u044f \u0437\u0430\u043f\u0438\u0441\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u043e \u043f\u0440\u043e\u0447\u0442\u0435\u043d\u0438\u0438.             foreach (SPList list in SPContext.Current.Web.Lists)             {                 if (list.Title == &quot;ReadList_&quot; + SPContext.Current.ListId)                 {                     isReal = true;                 }             }             SPList listConfirmReadUser;             \/\/\u0415\u0441\u043b\u0438 \u0441\u0435\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0442\u043e \u043e\u0431\u0440\u0430\u0449\u0430\u0435\u043c\u0441\u044f \u043a \u043d\u0435\u043c\u0443             if (isReal)                 listConfirmReadUser = SPContext.Current.Web.Lists[&quot;ReadList_&quot;+SPContext.Current.ListId];             \/\/\u0415\u0441\u043b\u0438 \u043d\u0435\u0442 \u0442\u043e \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u0435\u0433\u043e             else             {                 SPContext.Current.Web.Lists.Add(&quot;ReadList_&quot; + SPContext.Current.ListId, &quot;&quot;, SPListTemplateType.GenericList);                 listConfirmReadUser = SPContext.Current.Site.RootWeb.Lists[&quot;ReadList_&quot; + SPContext.Current.ListId];                 listConfirmReadUser.Fields.Add(&quot;User&quot;, SPFieldType.User, true);                 listConfirmReadUser.Fields.Add(&quot;Date&quot;, SPFieldType.DateTime, true);                 listConfirmReadUser.Fields.AddLookup(&quot;ListItem&quot;, SPContext.Current.ListId, true);                 listConfirmReadUser.Update();             }             \/\/\u0418 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0438\u0449\u0435\u043c \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0438 \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u0441\u043f\u0438\u0441\u043a\u0430             SPListItemCollection listItems = listConfirmReadUser.Items;             foreach (SPListItem item in listItems)             {                 string user = item[&quot;User&quot;].ToString().Split('#')[1];                 string listItem = item[&quot;ListItem&quot;].ToString().Split('#')[0];                 if ((listItem.Remove(listItem.Length-1) == SPContext.Current.ItemId.ToString())                     && (user.ToString() == SPContext.Current.Web.CurrentUser.Name.ToString()))                 {                     \/\/\u0435\u0441\u043b\u0438 \u043d\u0430\u0445\u043e\u0434\u0438\u043c \u0442\u043e \u043f\u0440\u044f\u0447\u0435\u043c \u043a\u043d\u043e\u043f\u043a\u0443 \u043e\u0441\u0442\u043e\u0432\u043b\u044f\u0435\u043c \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u0435\u043a\u0441\u0442 \u0441 \u0432\u0440\u0435\u043c\u0435\u043d\u0435\u043c \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u043b\u0435\u043d\u0438\u044f.                     bRead.Visible = false;                     lStatus.Text = &quot;\u0412\u044b \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u043b\u0435\u043d\u044b \u0441 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u043e\u043c &quot; + item[&quot;Date&quot;].ToString();                 }             }         }          \/\/\u0410 \u0432\u043e\u0442 \u0442\u0430\u043a \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u043f\u0440\u0438 \u043d\u0430\u0436\u0430\u0442\u0438\u0438 \u043d\u0430 \u043a\u043d\u043e\u043f\u043a\u0443         protected void ConfirmUser()         {             var listConfirmReadUser = SPContext.Current.Site.RootWeb.Lists[&quot;ReadList_&quot; + SPContext.Current.ListId];             SPListItemCollection listItems = listConfirmReadUser.Items;              SPListItem item = listItems.Add();             item[&quot;Date&quot;] = DateTime.Now;             item[&quot;ListItem&quot;] = SPContext.Current.ItemId;             item[&quot;User&quot;] = SPContext.Current.Web.CurrentUser;             item[&quot;Title&quot;] = &quot;\u041e\u0437\u043d\u0430\u043a\u043e\u043c\u043b\u0435\u043d: &quot; + SPContext.Current.Web.CurrentUser.ToString() + &quot; - &quot; + DateTime.Now;             item.Update();              bRead.Visible = false;             lStatus.Text = &quot;\u0412\u044b \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u043b\u0435\u043d\u044b \u0441 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u043e\u043c &quot; + item[&quot;Date&quot;].ToString();         }          protected void bRead_Click(object sender, EventArgs e)         {             ConfirmUser();         } <\/code><\/pre>\n<p>  \u0412\u0441\u0451 \u0442\u0435\u043f\u0435\u0440\u044c \u043c\u043e\u0436\u043d\u043e \u0434\u0435\u043f\u043b\u043e\u0438\u0442\u044c. \u0412\u0435\u0431 \u043f\u0430\u0440\u0442\u0430 \u0440\u0430\u0437\u043c\u0435\u0449\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u0444\u043e\u0440\u043c\u0435 \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430.<br \/>  \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0430 \u0432\u043a\u043b\u0430\u0434\u043a\u0435 \u043b\u0435\u043d\u0442\u044b List \u0432\u044b\u0431\u0435\u0440\u0438\u0442\u0435 Form Web Parts -&gt; Default Display Form \u043a\u0430\u043a \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u043e \u043d\u0430 \u0440\u0438\u0441\u0443\u043d\u043a\u0435.<br \/>  <img decoding=\"async\" src=\"http:\/\/habrastorage.org\/storage3\/3cc\/699\/139\/3cc699139fc7b5c6c8dd43fb7b25281f.png\" alt=\"image\"\/><br \/>  \u0412 \u043e\u043a\u043d\u0435 \u0444\u043e\u0440\u043c\u044b \u043d\u0430\u0436\u043c\u0438\u0442\u0435 Add a Web Part. \u0412 Categories \u0432\u044b\u0431\u0435\u0440\u0435\u043c Custom, \u0430 \u0432 Web Parts \u043d\u0430\u0448\u0443 \u0432\u0435\u0431 \u043f\u0430\u0440\u0442\u0443 \u0443 \u043c\u0435\u043d\u044f \u043e\u043d\u0430 \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f SPConfirmReadProject \u2014 ReadUsersWebPart. \u0416\u043c\u0451\u043c \u043a\u043d\u043e\u043f\u043a\u0443 Add \u0438 Stop Editing.<\/p>\n<p>  \u0412\u043e\u0442 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0438 \u0432\u0441\u0435 \u043f\u043e \u0432\u0435\u0431 \u043f\u0430\u0440\u0442\u0435 \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u043b\u0435\u043d\u0438\u0435.<\/p>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043d\u0430\u043f\u0438\u0448\u0435\u043c \u0432\u0435\u0431 \u043f\u0430\u0440\u0442\u0443 \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430 \u043a\u0442\u043e \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u043b\u0441\u044f, \u0430 \u043a\u0442\u043e \u043d\u0435\u0442.<br \/>  \u0412\u0435\u0431 \u043f\u0430\u0440\u0442\u0430 \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437 2 LinkButton, Label \u0438 GridView.<br \/>  \u0412\u043e\u0442 \u043a\u0430\u043a \u044d\u0442\u043e \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043f\u0440\u0438 \u043d\u0430\u0436\u0430\u0442\u0438\u0438 \u043d\u0430 \u043a\u043d\u043e\u043f\u043a\u0443 \u00ab\u0421 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u043e\u043c \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u043b\u0435\u043d\u044b\u00bb.<br \/>  <img decoding=\"async\" src=\"http:\/\/habrastorage.org\/storage3\/35b\/f7b\/d18\/35bf7bd183681c21bf24e1ebcbef17ae.png\" alt=\"image\"\/><br \/>  \u0422\u0443\u0442 \u0432\u0441\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u043c\u044b \u0442\u0443\u043f\u043e \u043b\u0435\u0437\u0435\u043c \u0432 \u0441\u043f\u0438\u0441\u043e\u043a \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u043b\u0435\u043d\u043d\u044b\u0445 \u0438 \u0432\u044b\u0442\u0430\u0441\u043a\u0438\u0432\u0430\u0435\u043c \u0438\u0445. \u0410 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0435 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0435\u0441\u043b\u0438 \u043c\u044b \u043d\u0430\u0436\u043c\u0435\u043c \u043d\u0430 \u043a\u043d\u043e\u043f\u043a\u0443 \u00ab\u041d\u0435 \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u043b\u0435\u043d\u044b\u00bb.<br \/>  <img decoding=\"async\" src=\"http:\/\/habrastorage.org\/storage3\/20e\/6eb\/754\/20e6eb754c8ea783214553c3a9f131b2.png\" alt=\"image\"\/><br \/>  \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043f\u043e\u043b\u0435 \u00abAssigned to\u00bb \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u044b \u043b\u044e\u0434\u0438 \u0438\\\u0438\u043b\u0438 \u0433\u0440\u0443\u043f\u043f\u044b \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u043e \u0447\u0438\u0442\u0430\u0442\u044c \u044d\u043b\u0435\u043c\u0435\u043d\u0442. \u0414\u043b\u044f \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u044d\u0442\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0438 \u043c\u044b \u0431\u0435\u0440\u0435\u043c \u0441\u043f\u0438\u0441\u043e\u043a \u043b\u044e\u0434\u0435\u0439 \u0438\u0437 \u043f\u043e\u043b\u044f \u00abAssigned to\u00bb \u0438 \u0441\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c \u0435\u0433\u043e \u0441 \u043b\u044e\u0434\u044c\u043c\u0438 \u0438\u0437 \u0441\u043f\u0438\u0441\u043a\u0430 \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0432\u0448\u0438\u0445. \u041f\u0440\u0438\u0441\u0442\u0443\u043f\u0438\u043c.<\/p>\n<p>  \u0414\u043e\u0431\u0430\u0432\u0438\u043c VisualWebPart \u0432 \u043f\u0440\u043e\u0435\u043a\u0442. \u041d\u0430\u0437\u043e\u0432\u0435\u043c \u0435\u0451 <b>ReadUsersWebPart<\/b>.<br \/>  \u0414\u043e\u0431\u0430\u0432\u0438\u043c \u0432 ReadUsersWebPart.ascx  <\/p>\n<pre><code class=\"html\">&lt;table&gt;     &lt;tr&gt;         &lt;td&gt;             &lt;asp:LinkButton ID=&quot;lbRead&quot; runat=&quot;server&quot; OnClick=&quot;lbRead_Click&quot; BorderWidth=&quot;0&quot;&gt;&lt;img src=&quot;..\/_Layouts\/Images\/SPConfirmReadProject\/thumb_up.png&quot; style=&quot;border:0px;&quot;  \/&gt;\u0421 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u043e\u043c \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u043b\u0435\u043d\u044b&lt;\/asp:LinkButton&gt;         &lt;\/td&gt;         &lt;td&gt;             &lt;p&gt;             &lt;\/p&gt;         &lt;\/td&gt;         &lt;td&gt;             &lt;asp:LinkButton ID=&quot;lbUnRead&quot; runat=&quot;server&quot; OnClick=&quot;lbUnRead_Click&quot; BorderWidth=&quot;0&quot;&gt;&lt;img src=&quot;..\/_Layouts\/Images\/SPConfirmReadProject\/thumb_down.png&quot; style=&quot;border:0px;&quot;  \/&gt;\u041d\u0435 \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u043b\u0435\u043d\u044b&lt;\/asp:LinkButton&gt;         &lt;\/td&gt;     &lt;\/tr&gt; &lt;\/table&gt; &lt;p&gt;&lt;\/p&gt; &lt;asp:Label ID=&quot;Label1&quot; runat=&quot;server&quot;&gt;&lt;\/asp:Label&gt; &lt;asp:GridView ID=&quot;gridView&quot; runat=&quot;server&quot; AllowPaging=&quot;True&quot; BackColor=&quot;White&quot;     BorderColor=&quot;#CCCCCC&quot; BorderStyle=&quot;None&quot; BorderWidth=&quot;1px&quot; CellPadding=&quot;4&quot; EnableModelValidation=&quot;True&quot;     ForeColor=&quot;Black&quot; GridLines=&quot;Horizontal&quot;     PageSize=&quot;20&quot;&gt;     &lt;FooterStyle BackColor=&quot;#CCCC99&quot; ForeColor=&quot;Black&quot; \/&gt;     &lt;HeaderStyle BackColor=&quot;#333333&quot; Font-Bold=&quot;True&quot; ForeColor=&quot;White&quot; \/&gt;     &lt;PagerStyle BackColor=&quot;White&quot; ForeColor=&quot;Black&quot; HorizontalAlign=&quot;Right&quot; \/&gt;     &lt;SelectedRowStyle BackColor=&quot;#CC3333&quot; Font-Bold=&quot;True&quot; ForeColor=&quot;White&quot; \/&gt; &lt;\/asp:GridView&gt; <\/code><\/pre>\n<p>  \u0410 \u0432 ReadUsersWebPart.ascx.cs \u0437\u0430\u043f\u0438\u0448\u0435\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435:  <\/p>\n<pre><code class=\"cs\">private SPGroup SearchGroup(string group)         {             SPGroup groupObject = null;             foreach (SPGroup singleGroup in SPContext.Current.Web.Groups)             {                 if (group == singleGroup.Name)                 {                     groupObject = singleGroup;                 }             }             return groupObject;         } \/\/\u0424\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u043c \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u0447\u0438\u0442\u0430\u0432\u0448\u0438\u0445 protected void ReadUsers() {             var table = new DataTable(&quot;ReadList&quot;);             var colFIO = new DataColumn();             colFIO.DataType = System.Type.GetType(&quot;System.String&quot;);             colFIO.ColumnName = &quot;\u0421\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a&quot;;             table.Columns.Add(colFIO);              var colDate = new DataColumn();             colDate.DataType = System.Type.GetType(&quot;System.DateTime&quot;);             colDate.ColumnName = &quot;\u041f\u0440\u043e\u0447\u0438\u0442\u0430\u043b&quot;;             table.Columns.Add(colDate);              string idItem = SPContext.Current.ItemId.ToString();             string idUser = SPContext.Current.Web.CurrentUser.ID.ToString().Split('#')[0].ToString().Replace(&quot;;&quot;,&quot;&quot;);              var listConfirmReadUser = SPContext.Current.Web.Lists[&quot;ReadList_&quot; + SPContext.Current.ListId];             var query = new SPQuery();              string calmQuery = &quot;&lt;Where&gt;&lt;And&gt;&lt;Eq&gt;&lt;FieldRef Name='ListItem' LookupId='true'\/&gt;&lt;Value Type='Lookup'&gt;&quot; + idItem +                                &quot;&lt;\/Value&gt;&lt;\/Eq&gt;&lt;Eq&gt;&lt;FieldRef Name='User' LookupId='true'\/&gt;&lt;Value Type='User'&gt;&quot; + idUser +                                &quot;&lt;\/Value&gt;&lt;\/Eq&gt;&lt;\/And&gt;&lt;\/Where&gt;&quot;;             query.Query = calmQuery;              SPListItemCollection listItems = listConfirmReadUser.GetItems(query);             if (listItems.Count &gt; 0)                 foreach (SPListItem item in listItems)                 {                     DataRow row;                     row = table.NewRow();                     row[&quot;\u0421\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a&quot;] = item[&quot;User&quot;].ToString().Split('#')[1];                     row[&quot;\u041f\u0440\u043e\u0447\u0438\u0442\u0430\u043b&quot;] = item[&quot;Date&quot;];                     table.Rows.Add(row);                 }              Label1.Text = &quot;&quot;;              gridView.DataSource = table;             gridView.DataBind();             if (table.Rows.Count &lt; 1)             {                 Label1.Text = &quot;\u041d\u0438\u043a\u0442\u043e \u043d\u0435 \u0447\u0438\u0442\u0430\u043b \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442.&quot;;             }         }          \/\/\u0424\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u043c \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u043d\u0435 \u0447\u0438\u0442\u0430\u0432\u0448\u0438\u0445 protected void UnReadUsers() {             string idItem = SPContext.Current.ItemId.ToString();             string idUser = SPContext.Current.Web.CurrentUser.ID.ToString().Split('#')[0].ToString().Replace(&quot;;&quot;, &quot;&quot;);             string currentValue = string.Empty;             string FieldName = string.Empty;             try             {                 currentValue = SPContext.Current.Item[&quot;\u041a\u043e\u043c\u0443 \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u043e&quot;].ToString();                 FieldName = &quot;\u041a\u043e\u043c\u0443 \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u043e&quot;;             }             catch             {                 currentValue = SPContext.Current.Item[&quot;Assigned to&quot;].ToString();                 FieldName = &quot;Assigned to&quot;;             }             List&lt;SPUser&gt; listAllUser = new List&lt;SPUser&gt;();             SPFieldUser UsersColumn = (SPFieldUser)SPContext.Current.Fields.GetField(FieldName);             SPFieldUserValueCollection Users = (SPFieldUserValueCollection)UsersColumn.GetFieldValue(SPContext.Current.Item[FieldName].ToString());             foreach (SPFieldUserValue user in Users)             {                 SPGroup group = SearchGroup(user.LookupValue);                 if (group != null)                 {                     SPUserCollection groupUsers = group.Users;                     foreach (SPUser groupUser in groupUsers)                     {                         if (groupUser != null)                             listAllUser.Add(groupUser);                     }                 }                 else                 {                     if (user.User != null)                         listAllUser.Add(user.User);                 }             }              var query = new SPQuery();             string calmQuery = &quot;&lt;Where&gt;&lt;And&gt;&lt;Eq&gt;&lt;FieldRef Name='ListItem' LookupId='true'\/&gt;&lt;Value Type='Lookup'&gt;&quot; + idItem +                                &quot;&lt;\/Value&gt;&lt;\/Eq&gt;&lt;Eq&gt;&lt;FieldRef Name='User' LookupId='true'\/&gt;&lt;Value Type='User'&gt;&quot; + idUser +                                &quot;&lt;\/Value&gt;&lt;\/Eq&gt;&lt;\/And&gt;&lt;\/Where&gt;&quot;;             query.Query = calmQuery;             SPList list = SPContext.Current.Web.Lists[&quot;ReadList_&quot; + SPContext.Current.ListId];             SPListItemCollection listReadUsers = list.GetItems(query);              if (listReadUsers.Count &gt; 0)             {                 List&lt;SPUser&gt; listReadUser = new List&lt;SPUser&gt;();                 foreach (SPListItem item in listReadUsers)                 {                     SPFieldUser UserReadColumn = (SPFieldUser)item.Fields.GetField(&quot;User&quot;);                     SPFieldUserValue ur = (SPFieldUserValue)UserReadColumn.GetFieldValue(item[&quot;User&quot;].ToString());                     listReadUser.Add(ur.User);                 }                  if (listReadUser.Count() &gt; 0)                     foreach (SPUser rUser in listReadUser)                     {                         if (rUser != null)                             listAllUser.RemoveAll(u =&gt; u.ID == rUser.ID);                     }             }             List&lt;SPUser&gt; usd = new List&lt;SPUser&gt;();              foreach (SPUser spUser in listAllUser)             {                 List&lt;SPUser&gt; listUsr = (from u in listAllUser                                         where (u.ID == spUser.ID)                                         select u).ToList();                 if (listUsr.Count() &gt; 1)                 {                     usd.Add(listUsr[0]);                 }             }              foreach (SPUser spUser in usd)             {                 listAllUser.Remove(spUser);             }              var table = new DataTable(&quot;UnReadList&quot;);             var colFIO = new DataColumn();             colFIO.DataType = System.Type.GetType(&quot;System.String&quot;);             colFIO.ColumnName = &quot;\u0421\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a&quot;;             table.Columns.Add(colFIO);             foreach (SPUser spUser in listAllUser)             {                 DataRow row;                 row = table.NewRow();                 row[&quot;\u0421\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a&quot;] = spUser.Name;                 table.Rows.Add(row);             }              Label1.Text = &quot;&quot;;              gridView.DataSource = table;             gridView.DataBind();              if (listAllUser.Count() &lt; 1)             {                 Label1.Text = &quot;\u0414\u043e\u043a\u0443\u043c\u0435\u043d\u0442 \u043f\u0440\u043e\u0447\u0442\u0435\u043d \u0432\u0441\u0435\u043c\u0438 \u0441\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u0430\u043c\u0438.&quot;;             }         }          protected void lbRead_Click(object sender, EventArgs e)         {             ReadUsers();         }  protected void lbUnRead_Click(object sender, EventArgs e)         {             UnReadUsers();         } <\/code><\/pre>\n<p>  \u0414\u0430\u043b\u0435\u0435 \u043c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0440\u0430\u0441\u0441\u044b\u043b\u043a\u0443 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\u043c \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0440\u043e\u043f\u0438\u0441\u0430\u043d\u044b \u0432 \u043f\u043e\u043b\u0435 Assigned to \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e Workflow \u0432 Visual Studio \u0438\u043b\u0438 SharePoint Designer.<\/p>\n<p>  \u041d\u0430\u0434\u0435\u044e\u0441\u044c \u0441\u0442\u0430\u0442\u044c\u044f \u043e\u043a\u0430\u0436\u0435\u0442\u0441\u044f \u0412\u0430\u043c \u043f\u043e\u043b\u0435\u0437\u043d\u043e\u0439. \u0412 \u0441\u043a\u043e\u0440\u043e\u043c \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043d\u0430\u043f\u0438\u0448\u0443 \u043a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u043f\u0435\u0447\u0430\u0442\u0430\u0442\u044c \u044d\u0442\u0438 \u0441\u043f\u0438\u0441\u043a\u0438, \u0430 \u0437\u0430 \u043e\u0434\u043d\u043e \u0438 \u043a\u0430\u043a \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c Workflow \u0440\u0430\u0441\u0441\u044b\u043b\u043a\u0438 \u043f\u043e\u0434 \u044d\u0442\u0443 \u0437\u0430\u0434\u0430\u0447\u0443 \u0432 VS. \t\t\t<\/p>\n<div class=\"clear\"><\/div>\n<\/p><\/div>\n<p> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"http:\/\/habrahabr.ru\/post\/192506\/\"> http:\/\/habrahabr.ru\/post\/192506\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div class=\"content html_format\"> \t\t\t\u041f\u0440\u0438\u043d\u0446\u0438\u043f \u0440\u0430\u0431\u043e\u0442\u044b \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u043b\u0435\u043d\u0438\u044f \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0441\u0442. \u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043f\u0440\u0438 \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u0441\u043f\u0438\u0441\u043a\u0430 \u0432\u0438\u0434\u0438\u0442 \u043a\u043d\u043e\u043f\u043a\u0443 <b>\u041f\u0440\u043e\u0447\u0438\u0442\u0430\u043b<\/b> \u043f\u043e\u0441\u043b\u0435 \u043d\u0430\u0436\u0430\u0442\u0438\u044f \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0434\u0430\u043d\u043d\u044b\u0435 \u043e \u043d\u0435\u043c \u0438 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043d\u0430\u0436\u0430\u0442\u0438\u044f \u043f\u043e\u043f\u0430\u0434\u0430\u044e\u0442 \u0432 \u0434\u0440\u0443\u0433\u043e\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u0433\u0434\u0435 \u0431\u0443\u0434\u0443\u0442 \u0445\u0440\u0430\u043d\u0438\u0442\u0441\u044f. \u042d\u0442\u043e\u0442 \u0441\u043f\u0438\u0441\u043e\u043a \u0431\u0443\u0434\u0435\u0442 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c\u0441\u044f \u043f\u043e\u0441\u043b\u0435 \u0442\u043e\u0433\u043e \u043a\u0430\u043a \u0432\u0435\u0431 \u043f\u0430\u0440\u0442\u0430 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0437\u043c\u0435\u0449\u0435\u043d\u0430 \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435 \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430, \u0430 \u0438\u043c\u044f \u0435\u0433\u043e \u0431\u0443\u0434\u0435\u0442 \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0442\u0430\u043a ReadList_&lt;Guid \u0441\u043f\u0438\u0441\u043a\u0430 \u0434\u043b\u044f \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u043b\u0435\u043d\u0438\u044f&gt;. \u0414\u043b\u044f \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430 \u0441\u043f\u0438\u0441\u043a\u043e\u0432 \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u043b\u0435\u043d\u043d\u044b\u0445 \u0438 \u043d\u0435 \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u043b\u0435\u043d\u043d\u044b\u0445 \u043c\u044b \u043d\u0430\u043f\u0438\u0448\u0435\u043c \u0435\u0449\u0435 \u043e\u0434\u043d\u0443 \u0432\u0435\u0431 \u043f\u0430\u0440\u0442\u0443 \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0440\u0430\u0437\u043c\u0435\u0441\u0442\u0438\u043c \u043d\u0430 \u0444\u043e\u0440\u043c\u0435 \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0441\u043f\u0438\u0441\u043a\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u043c \u0447\u0438\u0442\u0430\u0442\u044c, \u0442\u0430\u043a \u043a\u0430\u043a \u043f\u043e\u0434\u0440\u0430\u0437\u0443\u043c\u0435\u0432\u0430\u0435\u0442\u0441\u044f \u0447\u0442\u043e \u043e\u0431\u044b\u0447\u043d\u044b\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0438 \u043c\u043e\u0433\u0443\u0442 \u043f\u0440\u043e\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0442\u044c, \u043d\u043e \u043d\u0435 \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442.<\/p>\n<p>  \u0412\u043e\u0442 \u043a\u0430\u043a \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0432\u0435\u0431 \u043f\u0430\u0440\u0442\u0430 \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u043b\u0435\u043d\u0438\u0435.<br \/>  \u0414\u043e \u043d\u0430\u0436\u0430\u0442\u0438\u044f \u043d\u0430 \u043a\u043d\u043e\u043f\u043a\u0443:<br \/>  <img decoding=\"async\" src=\"http:\/\/habrastorage.org\/storage3\/a2d\/b72\/94b\/a2db7294be66b4bfa695eb83ae91d206.png\" alt=\"image\"\/>  <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-192506","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/192506","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=192506"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/192506\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=192506"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=192506"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=192506"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}