фактически это продолжнеие темы про генерацию Word документов с помощью VF страниц, но полагаю, что применение Visualforce страниц, возвращающих XML, может быть шире, чем только генерация Word документов.
план был таким: Word документ сохраняется в WORD 2003 XML формате, XML копируется в VF страницу, переменная часть заменяется на соответствующие переменные, а страница - Word документ готова! (т.е. в данном случае не нужно создавать XML динамически в Апексе, так как он служит просто статичным шаблоном-каркасом, размешенным на странице, а контроллера в норме вообще нет, так как используется страндартный).
но не тут то было.
сначала не получается сохранить <?xml ?> declaration:
Error: The processing instruction target matching “[xX][mM][lL]” is not allowed
вот общие варианты решения
http://stackoverflow.com/questions/19889132/error-the-processing-instruction-target-matching-xxmmll-is-not-allowed
но на самом деле в СФ нужно просто увести <?xml ?> declaration в контроллер, например, компонента:
https://developer.salesforce.com/forums/?id=906F000000095FbIAI
но и в таком случае не удастся сохранить например такую разметку:
<w:wordDocument...
<o:DocumentProperties>
тут же спотыкается на
Error: Unknown component w:worddocument
впрочем если убрать Word-вский namespace вроде w: или o: то вроде сохраняется...
Казалось бы такая простая задача, вставить статичный XML в страницу и столько проблем.
что делать?
(1) полность переносить XML в стринговые переменные в контроллер. Ужас, ужас, это просто статичный шаблон, там нет никой динамики.
(2) заменить <?xml ?> declaration и Word-вский namespace на контроллерные переменные... выглядит как корявый "workaround", но может сработает...
может у вас есть варианты получше?
Кладешь шаблон в аттачмент, документ или статик ресурс и пишешь парсер для все этого. Если нужно могу дать детали. Хотя если очень нужно могу поискать парсер 2-хлетней давности
спасибо wilder
вот так получилось вернуть страницей XML из статик ресурса
<apex:page contentType="application/msWord#Test" cache="true" controller="myContrl">{!templateFromStatic}</apex:page>public with sharing class myContrl {public string getTemplateFromStatic() {
return [select id, name, body from StaticResource where name = 'wordTest'][0].body.toString();
}
}
я думаю, что заполнить шаблон информацией можно просто поиском и заменой подстроки. но это для простых документов, а вот если там есть таблица с итерируемыми строками (а не просто для форматирования), то возможно сразу лучше использовать парсер.
ну а если нужен Excel.xml - то там точно только парсер, так что может быть позже обращусь к wilder за ним.
Если не ошибаюсь то DocuSign умеет это делать. Так что может проще купить?
вся суть автоматизации бизнес процессов заключается в уходе от бумажного или "бумажно-подобного" (как Word документы) документооборота. Все данные должны храниться непосредственно в БД, и посредникам-носителям данных в виде Word документов в норме нет места.
Но иногда все же требуется, когда это исходящий и покидающий навсегда документ.
Так что надеюсь это единичный случай с небольшим business value, так что более серьезные решения не потребуются.
Ну на самом деле мой парсер работает с текстовыми файлами и ему не важно xml это txt.
wilder,
я сохраняю сгенерированный файл формата "XML spreadsheet 2003" в виде аттача к записи, а позже юзеры загружают его себе и открывают.
проблема в том, чтобы заставить пользовательский браузер-систему "определить" файл как Excel документ, и тем самым запусить именно Excel для его обработки.
для этого, я указываю формат '.xls' (хотя этот файл правильнее обозначить как '.xml'):
attachment.name = r.Name+'.xls';
и указываю МЕМО тип:
attachment.ContentType = 'application/vnd.ms-excel';
этот вариант "работает" для меня (но не всегда для пользователей), хотя Excel вначале брыкается, что мол, написали '.xls', а на самом деле это XML...
есть еще один вариант:
attachment.name = r.Name+'.xml';
attachment.ContentType = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet';
Как ты этот вопрос решал?
попробуй application/msexcel и расширение файла xls
Я писал парсер для Доков и использовал просто application/msword и расширение doc, клиент не жаловался.