Екатерина, что Вы имеете в виду под шаблоном для импорта объектов из Конфигурации? Речь о выгрузке схем или данных в Excel? Приведите ссылку или скриншот, как раньше было.
вот тут ссылка на окошко старого интерфейса /0/ViewPage.aspx?Id=c2af7f54-07df-4670-9c2b-af2497d3231f
добраться из старой конфигурации можно так:
Было бы не плохо вставить эту кнопку "Скачать шаблон" в новый мастер импорта, который по адресу /0/Nui/ViewModule.aspx?vm=FileImportWizard#FileImportModule/FileImportStartPage/f0a9cd02-5a19-4a4b-9e6e-7505bd509247
Спасибо, теперь понял, о чём Вы. В новой конфигурации нет кнопки «настройки», поскольку она была не частью старой конфигурации, а частью старого 5.Х-интерфейса вообще, была видима в любом разделе. А в 7.17 старый интерфейс окончательно убрали, а с ней и кнопку настройки, и окно старого импорта, и кнопку скачивания в нём. В новом интерфейсе свой экран настроек, «Дизайнер системы».
В академию по поводу неактуального абзаца сообщил.
Сложность в использовании функциональности импорта из Excel о том, что нет возможности скачать шаблон файла для загрузки данных объекта была зарегистрирована ещё при запуске нового UI импорта из Excel, но пока ничего не планировали. Приоритетность реализации зависит от количества запросов по этой теме.
Новый импорт, в отличие от старого, позволяет загружать из файла с произвольными названиями колонок, вручную задавая им соответствие полям в базе.
Как обходной вариант, можно просто вывести в реестре раздела нужные колонки и скачать файл по действию «Экспорт в Excel», а затем его открыть и оставить только «шапку».
А зачем каждый раз его выгружать, если грузите данные одного и того же вида? Если шаблон раз скачан, его файл можно сохранить и далее использовать, наполняя данными.
Не, идея не в этом. Шаблон выгружается согласно доработанной объектное модели.(он не статичен) Т.о. добавляем в объект все нужные поля и справочники, выгружаем шаблон и отдаем для наполнения. А так как у всех модели данных разные, то и выгрузка шаблонов - регулярна.
С выгрузкой по действию «Экспорт в Excel» тоже есть свои нюансы. Так например списочное представление позволяет вывести только 24 колонки. Можно конечно в плиточном вывести все необходимые колонки. Тогда Экспорт в Excel выгрузит все что надо. Но Выгрузка шаблона позволяла выгрузить сразу всю объектную модель данных без настройки реестра записей, да еще и с указанием обязательности полей
В таком случае ожидайте реализации идеи по добавлению скачивания шаблона в новый импорт.
Или самостоятельно сделать БП с логикой, взятой из DownloadTemplateMenuItemClickScriptTaskExecute схемы ImportSettingsPage и адаптированной под сохранение файла где-то в базе.
Или написать веб-сервис, куда параметром передают название схемы, а возвращают файл.
Нынешняя логика этой кнопки такая:
publicvirtualbool DownloadTemplateMenuItemClickScriptTaskExecute(ProcessExecutingContext context){
Page.BaseMessagePanel.Clear();if(string.IsNullOrEmpty(SchemaName)){
Page.BaseMessagePanel.AddMessage(WarrningMessage, UnableSelectObjectMessage, MessageType.Warning, true);returntrue;}
Page.Response.ClearHeaders();
Page.Response.ClearContent();
string fileName = SchemaName;
var instance = UserConnection.EntitySchemaManager.GetInstanceByName(SchemaName);if(instance != null){
fileName = instance.Caption.ToString();}
Page.Response.ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";if(HttpContext.Current.Request.Browser.Browser=="IE"){
string fileNameEnc = HttpUtility.UrlPathEncode(fileName);
Page.Response.AddHeader("Content-Disposition", "attachment; filename=\""+ fileNameEnc +".xlsx\"");}else{
Page.Response.AddHeader("Content-Disposition", "attachment; filename="+ fileName +".xlsx");}
List<double> columnWidthsList =new List<double>();using(MemoryStream stream =new MemoryStream()){using(SpreadsheetDocument spreadsheetDocument = SpreadsheetDocument.Create(stream, SpreadsheetDocumentType.Workbook)){// Add a WorkbookPart to the document.
var workbookpart = spreadsheetDocument.AddWorkbookPart();
workbookpart.Workbook=new OpenXmlSpreadsheet.Workbook();// Add a WorksheetPart to the WorkbookPart.
var worksheetPart = workbookpart.AddNewPart<WorksheetPart>();
var workbookStylesPart = workbookpart.AddNewPart<WorkbookStylesPart>();
worksheetPart.Worksheet=new OpenXmlSpreadsheet.Worksheet(new OpenXmlSpreadsheet.SheetData());// Add Sheets to the Workbook.
OpenXmlSpreadsheet.Sheets sheets = spreadsheetDocument.WorkbookPart.Workbook.AppendChild<OpenXmlSpreadsheet.Sheets>(new OpenXmlSpreadsheet.Sheets());// Append a new worksheet and associate it with the workbook.
string relationshipId = spreadsheetDocument.WorkbookPart.GetIdOfPart(worksheetPart);
string sheetName = fileName;
OpenXmlSpreadsheet.Sheet sheet =new OpenXmlSpreadsheet.Sheet(){
Id = relationshipId,
SheetId =1,
Name = sheetName
};
sheets.Append(sheet);
OpenXmlSpreadsheet.Worksheet worksheet =new OpenXmlSpreadsheet.Worksheet();
OpenXmlSpreadsheet.SheetData sheetData =new OpenXmlSpreadsheet.SheetData();
OpenXmlSpreadsheet.Row row =new OpenXmlSpreadsheet.Row();
OpenXmlSpreadsheet.Cell currentCell;int columnCount =0;
var entitySchema = UserConnection.EntitySchemaManager.GetInstanceByName(SchemaName);
foreach (EntitySchemaColumn column in entitySchema.Columns){if(!column.DefValue.IsSystemValue&&(column.UsageType!= EntitySchemaColumnUsageType.Advanced)&&(column.UsageType!= EntitySchemaColumnUsageType.None)&&!column.Name.Equals("ProcessListeners")&&!(column.DataValueType is ImageDataValueType)&&!(column.DataValueType is ImageLookupDataValueType)){
currentCell =new OpenXmlSpreadsheet.Cell();
currentCell.DataType= OpenXmlSpreadsheet.CellValues.String;if(column.RequirementType== EntitySchemaColumnRequirementType.ApplicationLevel|| column.RequirementType== EntitySchemaColumnRequirementType.DBLevel){
currentCell.StyleIndex=3;}else{
currentCell.StyleIndex=4;}
columnWidthsList.Add(CalculateWidth(column.Caption.Value));
currentCell.CellValue=new OpenXmlSpreadsheet.CellValue(column.Caption.Value);
row.AppendChild(currentCell);}}
sheetData.Append(row);
row =new OpenXmlSpreadsheet.Row();for(int i=0;i<columnWidthsList.Count; i++){
currentCell =new OpenXmlSpreadsheet.Cell();
currentCell.DataType= OpenXmlSpreadsheet.CellValues.String;
currentCell.StyleIndex=5;
row.AppendChild(currentCell);}
sheetData.Append(row);//Adding columns and specifeing width
OpenXmlSpreadsheet.Columns columns =new OpenXmlSpreadsheet.Columns();
uint j =1;
foreach (var w in columnWidthsList){
columns.Append(CreateColumnData(j, w));
j++;}
worksheet.Append(columns);//--
worksheet.Append(sheetData);
workbookStylesPart.Stylesheet= CreateStyleSheet();
worksheetPart.Worksheet= worksheet;
spreadsheetDocument.Close();
stream.Seek(0, SeekOrigin.Begin);
byte[] dataArray = stream.ToArray();
Page.Response.BinaryWrite(dataArray);
Page.Response.End();}}returntrue;}