У меня возникла проблема с API-интерфейсом telerik sitefinity. Я пытаюсь создать сертификаты PDF в бэкэнде и опубликовать их в библиотеке документов. Вот мой код того, как я создаю и публикую сертификаты.
byte[] byteArray = reportViewer.LocalReport.Render("PDF", null, out mimeType, out encoding, out fileNameExtension, out streamids, out warnings);
var documentLibraryList = SitefinityHelper.GetDocumentLibraries();
string certificationLibraryTitle = ConfigurationManager.AppSettings["CertificationLibrary"].ToString().ToUpper();
DocumentLibrary certLibrary = null;
//Make sure the parent library exists before doing anything else.
foreach (DocumentLibrary library in documentLibraryList)
{
if (library.Title.ToUpper() == certificationLibraryTitle.ToUpper())
{
certLibrary = library;
break;
}
}
//If not null, good to create the pdf cert, but need to check for previous ones.
if (certLibrary != null)
{
try
{
string pdfCertificationTitle = currentUser.UserName + "_"+ "Certification_" + moduleViewModel.ExamID.ToString();
UserCertifications previousCertifcationRecord = certBo.GetUserCertificationByTitle(pdfCertificationTitle);
if (previousCertifcationRecord == null)
{
//No previous record exists, create the new record.
MemoryStream memStream = new MemoryStream(byteArray);
Guid documentID = Guid.NewGuid();
string format = ".pdf";
LibrariesManager librariesManager = LibrariesManager.GetManager();
Document pdfDocument = librariesManager.CreateDocument(documentID);
DocumentLibrary parentLibrary = librariesManager.GetDocumentLibraries().Where(d => d.Id == certLibrary.Id).SingleOrDefault();
pdfDocument.Parent = parentLibrary;
pdfDocument.Title = pdfCertificationTitle;
pdfDocument.DateCreated = DateTime.UtcNow;
pdfDocument.PublicationDate = DateTime.UtcNow;
pdfDocument.LastModified = DateTime.UtcNow;
pdfDocument.UrlName = Regex.Replace(pdfCertificationTitle.ToLower(), @"[^\w\-\!\$\'\(\)\=\@\d_]+", "-");
librariesManager.RecompileAndValidateUrls(pdfDocument);
librariesManager.Upload(pdfDocument, memStream, format);
librariesManager.SaveChanges();
var bag = new Dictionary<string, string>();
bag.Add("ContentType", typeof(Document).FullName);
WorkflowManager.MessageWorkflow(documentID, typeof(Document), null, "Publish", false, bag);
string fullUrl = SitefinityHelper.GetDocumentUrl(pdfCertificationTitle);
//Save the certification to the DB.
certBo.InsertNewUserCertification(pdfCertificationTitle, fullUrl, currentUser.UserID);
}
}
catch (Exception ex)
{
ExceptionManager.LogException(this, ex);
}
}
Сообщение об исключении, с которым я сталкиваюсь:
Telerik.Sitefinity.Libraries.Model.DocumentLibrary, Telerik.Sitefinity.Model не был предоставлен ManageDocument в документе для участников с идентификаторами
Однако это исключение возникает только тогда, когда я пытаюсь создать и опубликовать документ в формате PDF, когда я вошел в систему как пользователь, не являющийся администратором/не серверной частью. Когда я вхожу в систему как бэкэнд-пользователь, этот код выполняется просто отлично. Я считаю, что должен быть способ установить разрешение, чтобы предоставить пользователям, не являющимся бэкэнд, надлежащие полномочия для создания документов, но я просто не знаю, как это сделать, и поиск в Google не дал многого. Если бы кто-нибудь мог помочь, я был бы очень признателен.
Это использует Sitefinity версии 6.2