#c# #.net #.net-3.5 #sharepoint-2010
#c# #.net #.net-3.5 #sharepoint-2010
Вопрос:
я разрабатываю интерфейс для извлечения файла из sharepoint. у меня есть следующий способ загрузить документ:
public bool UploadDocument(string document)
{
if (String.IsNullOrEmpty(Path.GetFullPath(document)))
{
return false;
}
var site = GetNewDataContext(SiteUrl);
try
{
using (var clientContext = GetNewContext())
{
var uploadLocation = string.Format("{0}{1}/{2}", SiteUrl, Helpers.ListNames.RequestedDocuments, Path.GetFileName(document));
//Get Document List
var documentslist = clientContext.Web.Lists.GetByTitle(Helpers.ListNames.RequestedDocuments);
var fileCreationInformation = new FileCreationInformation
{
Content = System.IO.File.ReadAllBytes(document), //Assign to content byte[] i.e. documentStream
Overwrite = true, //Allow owerwrite of document
Url = uploadLocation //Upload URL
};
var uploadFile = documentslist.RootFolder.Files.Add(fileCreationInformation);
uploadFile.ListItemAllFields.Update();
clientContext.ExecuteQuery();
}
site.SubmitChanges(ConflictMode.FailOnFirstConflict, true);
}
catch (Exception exception)
{
throw new ApplicationException(exception.Message);
}
return true;
}
Однако мой следующий шаг — применить пользовательское разрешение.. я нашел несколько блогов в Интернете, которые демонстрируют, как это сделать:
http://howtosharepoint.blogspot.com/2010/10/programmatically-add-delete-modify-item.html
- Возможно ли установить разрешение в процессе загрузки?
- насколько я понимаю, при загрузке файла он наследует разрешения из списка, в который он загружен.
- мой текущий метод загрузки возвращает ListItem.. Возможно ли преобразовать ListItem в SPListItem? Причина возврата SPListItem связана с блогом, который я опубликовал выше.. похоже, SPListItem содержит информацию о разрешении, которая мне нужна [для разрыва и применения нового разрешения к].
мой метод загрузки возвращает ListItem.. как я могу сделать это как разделяемый элемент
private static ListItemCollection GetListItemCollectionFromSp(string documentListName, string name, string value, string type, int rowLimit)
{
ListItemCollection listItems = null;
using (var ctx = GetNewContext())
{
var documentsList = ctx.Web.Lists.GetByTitle(documentListName);
var camlQuery = new CamlQuery
{
ViewXml =
@"<View>
<Query>
<Where>
<Eq>
<FieldRef Name='" name @"'/>
<Value Type='" type "'>" value @"</Value>
</Eq>
</Where>
<RowLimit>" rowLimit @"</RowLimit>
</Query>
</View>"
};
listItems = documentsList.GetItems(camlQuery);
ctx.Load(documentsList);
ctx.Load(listItems,
items => items.IncludeWithDefaultProperties(
item => item.DisplayName));
ctx.ExecuteQuery();
}
return listItems;
}
заранее спасибо
Ответ №1:
Похоже, вы пытаетесь настроить разрешения на уровне элемента в библиотеке документов. Поправьте меня, если я ошибаюсь.
Во-первых, вы должны прекратить наследование разрешений с родительского сайта. Затем вы можете создать рабочий процесс и позволить ему запускаться при загрузке документа. Проще разработать рабочий процесс для настройки разрешений на уровне элемента, чем делать это в коде. Обслуживание также было бы простым.