Комментарии можно оставлять "здесь"
1. Как в ЛЮБОЙ существующий список добавить (зарегистрировать) форму без SharePoint Designer и создания фичи в Visual Studio. Производная задача: в нескольких списках использовать одну форму, которая физически находится в одном месте.
а) Берём готовую форму (например, ApplicationPage2.aspx) и необходимые библиотеки для неё
б) Сохраняем форму среди решений SharePoint, например в какой-то уже нами написанной фиче: TEMPLATE\FEATURES\blog_Feature1\ListDefinition1
в) добавляем в GAC библиотеку
г) открываем БД с контентом, делаем запрос
3. В форме представления скрыть ссылку "Добавить элемент (Add New)"
Применить стиль.
Это чтобы убрать из веб-части представления.
1. Как в ЛЮБОЙ существующий список добавить (зарегистрировать) форму без SharePoint Designer и создания фичи в Visual Studio. Производная задача: в нескольких списках использовать одну форму, которая физически находится в одном месте.
а) Берём готовую форму (например, ApplicationPage2.aspx) и необходимые библиотеки для неё
б) Сохраняем форму среди решений SharePoint, например в какой-то уже нами написанной фиче: TEMPLATE\FEATURES\blog_Feature1\ListDefinition1
в) добавляем в GAC библиотеку
г) открываем БД с контентом, делаем запрос
SELECT
* FROM [dbo].[AllDocs] where DirName like '%Lists/[название из URL]%'
д) Копируем строчку с LeafName равной DispForm.aspx
е) Меняем поля ID (случайно другое), LeafName (в нашем случаи ApplicationPage2.aspx), SetupPath (FEATURES\blog_Feature1\ListDefinition1\ApplicationPage2.aspx) на нам соответсвующие
ж) В таблицу AllDocs добавляем отредактированные значения
з) Проверяем доступность формы по адресу [название сервера]/Lists/[Название из URL]/\ApplicationPage2.aspx
2. Выполнить код с привилегиями администратора.
SPSecurity.RunWithElevatedPrivileges(delegate()
{
using
(SPSite site = new
SPSite(SPContext.Current.Site.Url))
{
using (SPWeb web =
site.OpenWeb(SPContext.Current.Web.ServerRelativeUrl))
{
// необходимый код
}
}
});
3. В форме представления скрыть ссылку "Добавить элемент (Add New)"
Применить стиль.
<style>
td.ms-addnew { display:none; }
</style>Это чтобы убрать из веб-части представления.
<style>
#Ribbon\.ListItem\.New\.NewListItem-Large
{display: none !important;}
</style>
Это чтобы убрать из риббона.
Чтобы это не применить для всех списков, например из главной страницы, стоит применять его в форме представления или через Дизайнер или в разметке своей формы.
Есть и другой способ - это сделать тулбар представления равным "None":
т.е. в схеме будет:
Есть и другой способ - это сделать тулбар представления равным "None":
т.е. в схеме будет:
<Views>
<View BaseViewID="1" …
<Toolbar Type="None" >
Но в этом случаи не будут отображаться кастомные кнопки на риббоне, а только минимально стандартные.
4. Как сменить значения в "Моих параметрах" пользователя.
Значения лежат в системном списке "Список сведений о пользователях". Фактически всё сводится к редактированию полей записей как с обычным списком.
Пример изменения картинки в параметрах текущего пользователя.
Другие поля списка:
"JobTitle", "Department", "SipAddress", "MobilePhone", "Title", "Notes", "Picture", "FirstName", "LastName", "WorkPhone", "UserName", "WebSite", "SPSResponsibility", "Office"
5. Как добавить файл в корень приложения SharePoint
Для этого необходимо добавить в свой проект "Пустой элемент" и в его папку (где лежит файл Elements.xml) добавить свой необходимый файл (например file.txt). Для файла в свойствах установим тип развёртывания равным ElementFile.
Отредактируем Elements.xml
После активации фичи проверяем http://servername/file.txt
6. Как сделать PostBack из своего скрипта
12. Как установить адрес стартовой страницы
19 Как закрыть текущее окно без подтверждения пользователя
Если не хотим добавлять по шаблону, который установлен по умолчанию, а использовать свой, то можно сделать следующее:
<xsl:variable name="CurYear" select="ddwrt:FormatDateTime(string(@NewsDate) ,1049 ,'yyyy')" />
<div style="margin:5px;float:left;">
<b><xsl:value-of select="$CurYear" /> </b>
</div>
<div style="margin:5px;float:left;">
<xsl:call-template name="Month">
<xsl:with-param name="CurYear" select="$CurYear"/>
</xsl:call-template>
</div>
</xsl:for-each>
Комментарии можно оставлять "здесь"
4. Как сменить значения в "Моих параметрах" пользователя.
Значения лежат в системном списке "Список сведений о пользователях". Фактически всё сводится к редактированию полей записей как с обычным списком.
Пример изменения картинки в параметрах текущего пользователя.
SPUser
user = web.CurrentUser;
SPListItem
userInfo = web.SiteUserInfoList.GetItemById(user.ID);
userInfo["Picture"]
= "http://server/Style%20Library/defaultFoto.jpg,
Фото ";
userInfo.Update();
Другие поля списка:
"JobTitle", "Department", "SipAddress", "MobilePhone", "Title", "Notes", "Picture", "FirstName", "LastName", "WorkPhone", "UserName", "WebSite", "SPSResponsibility", "Office"
5. Как добавить файл в корень приложения SharePoint
Для этого необходимо добавить в свой проект "Пустой элемент" и в его папку (где лежит файл Elements.xml) добавить свой необходимый файл (например file.txt). Для файла в свойствах установим тип развёртывания равным ElementFile.
Отредактируем Elements.xml
<?xml version="1.0" encoding="utf-8"?>
<Elements xmlns="http://schemas.microsoft.com/sharepoint/">
<Module Name="emptyElement">
<File Path="emptyElement\file.txt" Url="file.txt" />
</Module>
</Elements>
После активации фичи проверяем http://servername/file.txt
6. Как сделать PostBack из своего скрипта
document.getElementById("<%=
hiddenField.ClientID %>").value
= (new Date()).getTime(); //Изменяем значение в элементе
__doPostBack('<%=
hiddenField.UniqueID %>',
''); //Делаем PostBack
7. Как отправить электронное сообщение пользователю
string title = string.Format("Новое сообщение");
string boby = string.Format("<HTML>Появилось новое сообщение<br><a href=\"http://{0}{1}\">Ссылка</a><br></HTML>",
SPContext.Current.Site.HostName + ":" + SPContext.Current.Site.Port, SPContext.Current.Web.ServerRelativeUrl);
StringDictionary headers = new StringDictionary();
headers.Add("to", "user@....ru");
headers.Add("subject", title);
headers.Add("content-type", "text/html");
SPUtility.SendEmail(SPContext.Current.Web, headers, boby);
8. Как программно добавить веб-часть представления списка (xsltListViewWebPart)
8. Как программно добавить веб-часть представления списка (xsltListViewWebPart)
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
SPList list = SPContext.Current.Web.Lists.TryGetList("Контактный лица");
XsltListViewWebPart xsltListViewWebPart = new XsltListViewWebPart();
xsltListViewWebPart.ID = "wpListView";
xsltListViewWebPart.Title = "1234";
xsltListViewWebPart.ChromeType = System.Web.UI.WebControls.WebParts.PartChromeType.None;
xsltListViewWebPart.WebId = list.ParentWeb.ID;
xsltListViewWebPart.ListName = list.ID.ToString("B").ToUpper();
xsltListViewWebPart.ListId = list.ID;
xsltListViewWebPart.ViewGuid = list.Views["Все лица"].ID.ToString("B").ToUpper();
FilterOperation fltrOp = new FilterOperation();
fltrOp.FilterData = "OwnerGuid";
fltrOp.FilterValue = SPContext.Current.ListItem["GUID"].ToString().Replace("{", "").Replace("}", "");
xsltListViewWebPart.FilterOperations.Add("OwnerGuid", fltrOp);
SetToolbarType(xsltListViewWebPart, "None");
panel.Controls.Add(xsltListViewWebPart);
}
}
public void SetToolbarType(XsltListViewWebPart lvwp, string viewType)
{
try
{
MethodInfo ensureViewMethod = lvwp.GetType().GetMethod("EnsureView", BindingFlags.Instance |BindingFlags.NonPublic);
object[] ensureViewParams = { };
ensureViewMethod.Invoke(lvwp, ensureViewParams);
FieldInfo viewFieldInfo = lvwp.GetType().GetField("view", BindingFlags.NonPublic | BindingFlags.Instance);
SPView view = viewFieldInfo.GetValue(lvwp) as SPView;
Type[] toolbarMethodParamTypes = { Type.GetType("System.String") };
MethodInfo setToolbarTypeMethod = view.GetType().GetMethod("SetToolbarType", BindingFlags.Instance |BindingFlags.NonPublic, null, toolbarMethodParamTypes, null);
object[] setToolbarParam = { viewType }; //set the type here
setToolbarTypeMethod.Invoke(view, setToolbarParam);
view.Update();
}
catch { }
}
9. Узнать путь к папке, где установлен SharePoint
SPUtility.GetGenericSetupPath(string.Empty)
10. Как установить зависимость активации решения (или фичи) от другого решения (фичи).
Необходимо в соответствующем манифесте указать эти зависимости следующим способом
<?xml version="1.0" encoding="utf-8"?>
<Solution xmlns="http://schemas.microsoft.com/sharepoint/">
<ActivationDependencies>
<ActivationDependency SolutionId="cf55bf7c-d15f-4bd5-9155-e9565e10921a" />
</ActivationDependencies>
</Solution>
<?xml version="1.0" encoding="utf-8" ?>
<Feature xmlns="http://schemas.microsoft.com/sharepoint/">
<ActivationDependencies>
<ActivationDependency FeatureId="cf55bf7c-d15f-4bd5-9155-e9565e10921a" />
</ActivationDependencies>
</Feature>
11. Как получить информацию о пользователях из контролера домена (AD)
В проект необходимо добавить сборку System.DirectoryServices.AccountManagement
10. Как установить зависимость активации решения (или фичи) от другого решения (фичи).
Необходимо в соответствующем манифесте указать эти зависимости следующим способом
<?xml version="1.0" encoding="utf-8"?>
<Solution xmlns="http://schemas.microsoft.com/sharepoint/">
<ActivationDependencies>
<ActivationDependency SolutionId="cf55bf7c-d15f-4bd5-9155-e9565e10921a" />
</ActivationDependencies>
</Solution>
<?xml version="1.0" encoding="utf-8" ?>
<Feature xmlns="http://schemas.microsoft.com/sharepoint/">
<ActivationDependencies>
<ActivationDependency FeatureId="cf55bf7c-d15f-4bd5-9155-e9565e10921a" />
</ActivationDependencies>
</Feature>
11. Как получить информацию о пользователях из контролера домена (AD)
В проект необходимо добавить сборку System.DirectoryServices.AccountManagement
PrincipalContext ctx = new
PrincipalContext(ContextType.Domain);
// Если пользователь или группа находятся в домене
// PrincipalContext ctx = new
PrincipalContext(ContextType.Machine); // Если пользователь или группа находятся
на локальной машине
GroupPrincipal group = GroupPrincipal.FindByIdentity(ctx,
"Пользователи"); // Находим необходимую группу
UserPrincipal user = UserPrincipal.FindByIdentity(ctx, "motorin_vv"); //
Находим
необходимую
группу
if
(group != null)
{
List<Principal> groupUsers =
group.GetMembers().ToList(); // Список
пользователей
в
группе
}
12. Как установить адрес стартовой страницы
SPFolder
rootFolder = web.RootFolder;
rootFolder.WelcomePage = "lists/sitepages/default.aspx";
rootFolder.Update();
13. Как создать группу в SharePoint и добавить в неё пользователя
SPGroupCollection collGroups = web.SiteGroups;
13. Как создать группу в SharePoint и добавить в неё пользователя
SPGroupCollection collGroups = web.SiteGroups;
if (!collGroups.Xml.Contains("new
Group"))
collGroups.Add("new Group", web.SiteAdministrators[0], null, "");
SPGroup group = web.SiteGroups["new Group"];
if (group != null)
group.AddUser(user);
14. Как добавить разрешения к списку (сайту, элементу списка)
SPList forumList = web.Lists["Форум"];
15. Как устранить ошибку: Попытка использование прекратившего существование объекта. (Исключение из HRESULT: 0x80030102 (STG_E_REVERTED))
Возникает при добавлении нового элемента списка в момент вызова Update().
Необходимо проверить какие поля в схеме списка имеют значения по умолчанию (<Default>False</Default>). И этим полям обязательно присваивать значения перед вызовом Update().
16. Как сделать редирекс (перенаправление) на другую страницу из code behind
this.Page.Response.Redirect("URL");
17. Как перезапустить пул приложения SharePoint
%windir%\system32\inetsrv\appcmd stop apppool /apppool.name:"SharePoint - 80"
%windir%\system32\inetsrv\appcmd start apppool /apppool.name:"SharePoint - 80"
SPList forumList = web.Lists["Форум"];
forumList.BreakRoleInheritance(true, true);
SPGroup group = web.SiteGroups["Все пользователи"];
SPRoleAssignment roleAssignment = new SPRoleAssignment(group);
SPRoleDefinition roleDefinition =
web.RoleDefinitions["Совместная работа"];
roleAssignment.RoleDefinitionBindings.Add(roleDefinition);
forumList.RoleAssignments.Add(roleAssignment);
forumList.RoleAssignments.Add(roleAssignment);
15. Как устранить ошибку: Попытка использование прекратившего существование объекта. (Исключение из HRESULT: 0x80030102 (STG_E_REVERTED))
Возникает при добавлении нового элемента списка в момент вызова Update().
Необходимо проверить какие поля в схеме списка имеют значения по умолчанию (<Default>False</Default>). И этим полям обязательно присваивать значения перед вызовом Update().
16. Как сделать редирекс (перенаправление) на другую страницу из code behind
this.Page.Response.Redirect("URL");
17. Как перезапустить пул приложения SharePoint
%windir%\system32\inetsrv\appcmd stop apppool /apppool.name:"SharePoint - 80"
%windir%\system32\inetsrv\appcmd start apppool /apppool.name:"SharePoint - 80"
18. Открыть почтовый клиент из JavaScript
function
SendEmail() {
var addresses = "mymail@mymail.ru";
var body = "body";
var subject = "subject"
var href = "mailto:" +
addresses + "?" + "subject=" + subject + "&" + "body="
+ body;
var wndMail;
wndMail =
window.open(href, "_blank", "scrollbars=yes,resizable=yes,width=10,height=10");
if (wndMail) {
wndMail.close();
}
}
19 Как закрыть текущее окно без подтверждения пользователя
<script type='text/javascript'> window.open('', '_self', ''); window.close();</script>
20. Как вывести Alert сообщение пользователю из Code-Behind
if (!ClientScript.IsStartupScriptRegistered("alert"))
{
Page.ClientScript.RegisterStartupScript(this.GetType(),
"Message", string.Format("alert('{0}');",
msg), true);
}
21. Как добавить в библиотеку вики-страницу
string
strUrl = string.Format("/SitePages/news_{0:yyyy_MM_dd_HH_mm_ss}.aspx",
DateTime.Now);
SPList
list = web.Lists["Страницы сайта"];
SPListItem
itemWiki = list.RootFolder.Files.Add(strUrl, SPTemplateFileType.WikiPage).Item;
itemWiki.UpdateOverwriteVersion();
Если не хотим добавлять по шаблону, который установлен по умолчанию, а использовать свой, то можно сделать следующее:
SPFile templateFile = web.GetFile(web.Url + "/defaultWiki.aspx");
byte[]
binTemplateFile = templateFile.OpenBinary();
SPListItem
itemWiki = list.RootFolder.Files.Add(strUrl, binTemplateFile, false).Item;
22. Как переместить файл в списке в другую папку в списке
SPListItem item = list.GetItemById(4);
SPFile itemFile = web.GetFile(item.Url);
string updatedUrl = "Lists/moving/folder2/4_.000";
itemFile.MoveTo(updatedUrl);
23. Как сделать группировку в XSL преобразовании
Приведён пример группировки по году данных из списка по полю NewsDate
<xsl:for-each select="dsQueryResponse/Rows/Row[not(ddwrt:FormatDateTime(string(@NewsDate) ,1049 ,'yyyy')= ddwrt:FormatDateTime(string(following-sibling::Row/@NewsDate) ,1049 ,'yyyy'))]"><xsl:variable name="CurYear" select="ddwrt:FormatDateTime(string(@NewsDate) ,1049 ,'yyyy')" />
<div style="margin:5px;float:left;">
<b><xsl:value-of select="$CurYear" /> </b>
</div>
<div style="margin:5px;float:left;">
<xsl:call-template name="Month">
<xsl:with-param name="CurYear" select="$CurYear"/>
</xsl:call-template>
</div>
</xsl:for-each>
Комментариев нет:
Отправить комментарий