Ошибка: неизвестное имя свойства документа Word
Обновлено: 24.11.2024
В этой записи блога обсуждается подход к выполнению одного из требований, связанных с уведомлениями SAP и созданием задач.
Проще говоря, если я объясню, что такое уведомление SAP и задачи, то это то, что уведомление — это набор задач, который содержит предопределенные функции, которые должны выполняться каждой из них, теперь, чтобы активировать задачу, ее необходимо выпустить для дальнейшей обработки.
Теперь давайте обсудим, каково было требование и какой подход я использовал для его выполнения.
Требование
Требование состояло в том, чтобы создать уведомление через транзакцию IW51, а затем создать соответствующие ему задачи, после чего пользователь откроет вкладку задач, где он/она увидит все создаваемые задачи и одновременно по своему выбору выпустит несколько или все задачи.
Как только пользователь отпускает задачу в фоновом режиме, необходимо создать текстовый документ с динамическими и статическими данными с логотипом клиента и прикрепить к той же задаче.
Подход
Теперь, глядя на требование, можно выделить несколько основных моментов, вокруг которых строится остальная часть решения.
a) Динамическое создание документа Word, содержащего динамические и статические данные.
b) Прикрепление сгенерированного документа Word к выпущенной задаче.
c) Наконец, запуск двух вышеуказанных шагов в комбинации, как только задача уведомления будет выпущена.
a) Динамическое создание документа Word, содержащего динамические и статические данные.
RTF или форматированный текстовый файл был создан корпорацией Майкрософт, и, как следует из названия, он богат форматированием, стилями и т. д. чем обычный текстовый файл. Лучшее в RTF (расширение файла: .rtf) заключается в том, что при сохранении в формате «.doc» или «.docx» он будет без проблем преобразован в указанный формат.
Для создания RTF-файла мы можем использовать любой текстовый процессор (не в нашем случае) или использовать RTF-код (RTF-код состоит из обычного текста, команд, escape-последовательности и групп: обычный текст содержит семь бит (US ASCII) символы, кроме \, . ) в коде ABAP, когда мы объединяем данные во внутренней таблице, с помощью которой должен быть создан файл.
ПРИМЕЧАНИЕ. Поскольку мы используем какой-то код (код RTF), поэтому для его отображения требуется программа/программное обеспечение. Здесь не о чем беспокоиться, MS Word, OpenOffice или любой другой текстовый редактор окажет нам эту услугу.
Для этого требования я использую статический текст, хранящийся в SE61, как общий текст. Но в нем есть оговорка, что я написал код RTF по мере необходимости в самом тексте, так что при вызове в ABAP у нас будет все во внутренней таблице. На мой взгляд, в случае динамического текста с определенным шаблоном мы можем использовать тот же метод, но оставить некий уникальный заполнитель, который можно легко заменить, изменив саму таблицу в коде, если для этой строки существует заполнитель.
Пусть ZSCM_TEXT_MVTMSG является общим текстом, созданным с использованием TCODE редактирования документов (SE61). Ниже приведены данные:
Это может показаться беспорядком, но это не так.
Давайте расшифруем приведенный выше текст, состоящий из данных и RTF-кода:
- < – отмечает начало документа, свойства и т. д.
- RTF — представляет формат файла, аналогичный формату HTML или XML.
- ANSI — кодировка символов
- <\pard \qc — отмечает начало абзаца с выравниванием по центру (qc используется для выравнивания по центру).
- \pict\pngblip – pict означает, что мы собираемся добавить изображение в наш документ, а pngblip означает, что оно имеет тип png.
- Длинный абзац, который кажется набором случайных чисел и букв, на самом деле является изображением в шестнадцатеричном коде. Вы можете легко преобразовать любое изображение или файл в шестнадцатеричный формат с помощью онлайн-инструментов. Я предоставлю ссылки в конце.
- \par > — указывает на конец абзаца. В нашем случае мы заканчиваем выровненный по центру абзац, содержащий изображение.
- <\line>– для перевода строки. Это похоже на
html. - – выделить текст, находящийся в этих скобках, жирным шрифтом.
Код ABAP:
Мы можем использовать приведенный выше FM, чтобы наш текст находился во внутренней таблице lt_lines, и, используя это, мы можем манипулировать им по мере необходимости, чтобы включить динамический текст. В конце концов, мы можем использовать эту внутреннюю таблицу, чтобы загрузить файл в нашу систему или поделиться им по электронной почте через ABAP и т. д., сохраняя формат/расширение как «.doc»/«.docx»/«.rtf».
Ниже приведен снимок экрана с окончательным результатом, полученным путем загрузки вышеуказанной внутренней таблицы в систему с использованием расширения «.doc»:
b) Прикрепление сгенерированного документа Word к выпущенной задаче.
Это фрагмент кода, показывающий используемые переменные и значения, передаваемые каждой из них, т. е.e (lv_qmnum — номер уведомления, lv_manum — номер задачи, gc_doc_file_name — имя файла).
Вот полный код для справки:
Примечание. В приведенном выше коде ** означает, что вам необходимо указать здесь собственное имя созданной переменной.
C) Наконец, запуск двух вышеуказанных шагов в комбинации, как только задача уведомления будет выпущена.
После того, как все будет готово, остается только найти место, где должна выполняться комбинация двух вышеуказанных шагов, как только задача уведомления будет выпущена.
То же самое я обнаружил, что как только вы выпускаете событие выпуска задачи бизнес-объекта, QMSM получает триггер, поэтому после этого я реализовал следующие шаги:
- Создал пользовательскую задачу в PFTC.
- Добавлен новый метод в расширенный бизнес-объект QMSM, который я создал как Z.
- Прикрепите метод внутри задачи, который включает в себя указанный выше код.
- Теперь в Задаче есть вкладка, называемая триггерным событием, где я указал метод Выпуск бизнес-объекта QMSM (так что это делает эту Задачу инициируемой только для события Выпуск бизнес-объекта QMSM)
- После этого активируйте задачу, и все готово.
Заключение
Используя эту запись в блоге, разработчик может сгенерировать текстовый файл со статическими и динамическими данными с помощью предопределенного шаблона, хотя я показал решение в виде требования, но одно и то же решение является универсальным и может применяться в различных требованиях. , и самое приятное то, что у вас есть универсальные параметры стиля и форматирования с легкостью добавления изображения.
При просмотре PDF-файла вы можете получить информацию о нем, например заголовок, используемые шрифты и настройки безопасности. Часть этой информации задается человеком, создавшим документ, а часть создается автоматически.
В Acrobat вы можете изменить любую информацию, которая может быть установлена создателем документа, если только файл не был сохранен с настройками безопасности, запрещающими изменения.
Свойства документа
Показывает основную информацию о документе. Название, автор, тема и ключевые слова могут быть установлены пользователем, создавшим документ в исходном приложении, таком как Word или InDesign, или пользователем, создавшим PDF-файл. Вы можете искать эти элементы описания, чтобы найти определенные документы. Раздел «Ключевые слова» может быть особенно полезен для сужения поиска.
Обратите внимание, что многие поисковые системы используют заголовок для описания документа в списке результатов поиска. Если у PDF-файла нет заголовка, вместо него в списке результатов отображается имя файла. Название файла не обязательно совпадает с его именем.
В области «Дополнительно» отображается версия PDF, размер страницы, количество страниц, наличие тегов в документе и включен ли для него режим быстрого веб-просмотра. (Размер первой страницы сообщается в файлах PDF или портфолио PDF, содержащих несколько размеров страниц.) Эта информация генерируется автоматически и не может быть изменена.
Описывает, какие изменения и функции разрешены в PDF-файле. Если к файлу PDF был применен пароль, сертификат или политика безопасности, этот метод будет указан здесь.
Список шрифтов и типов шрифтов, используемых в исходном документе, а также шрифтов, типов шрифтов и кодировок, использованных для отображения исходных шрифтов.
Если используются замещающие шрифты, и вас не устраивает их внешний вид, вы можете установить исходные шрифты в своей системе или попросить создателя документа воссоздать документ со встроенными в него исходными шрифтами. р>
Исходный вид (только Acrobat)
Описывает внешний вид PDF-файла при его открытии. Это включает в себя начальный размер окна, номер открывающейся страницы и уровень увеличения, а также отображение закладок, эскизов, панели инструментов и строки меню. Вы можете изменить любой из этих параметров, чтобы управлять тем, как документ будет отображаться при следующем открытии. Вы также можете создать код JavaScript, который запускается при просмотре страницы, открытии документа и т. д.
Пользовательский (только Acrobat)
Позволяет добавить в документ свойства документа.
Список параметров PDF, предустановок диалогового окна печати и параметров чтения для документа.
В настройках PDF для Acrobat можно задать базовый унифицированный указатель ресурсов (URL) для веб-ссылок в документе. Указание базового URL-адреса упрощает управление веб-ссылками на другие веб-сайты. Если URL-адрес другого сайта изменится, вы можете просто изменить базовый URL-адрес, и вам не придется редактировать каждую отдельную веб-ссылку, которая ссылается на этот сайт. Базовый URL-адрес не используется, если ссылка содержит полный URL-адрес.
Вы также можете связать индексный файл каталога (PDX) с PDF. При поиске PDF-файла с помощью окна «Поиск PDF» также выполняется поиск всех PDF-файлов, проиндексированных указанным файлом PDX.
Вы можете включить в документ информацию о допечатной подготовке, например треппинг.Вы можете определить стили печати для документа, которые предварительно заполняют диалоговое окно «Печать» значениями, специфичными для документа. Вы также можете установить параметры чтения, которые определяют, как PDF-файл читается программой чтения с экрана или другим вспомогательным устройством.
Вы можете добавить ключевые слова в свойства документа PDF, которые другие люди могут использовать в утилите поиска для поиска PDF-файла.
В следующем примере кода показано, как выполнить итерацию по всему документу Word и удалить абзац с определенным стилем.
В следующем примере кода представлены вспомогательные методы для приведенного выше кода.
В следующем примере кода представлены вспомогательные методы для приведенного выше кода.
В следующем примере кода показано, как выполнить итерацию по всему абзацу и изменить гиперссылку (Hyperlink)Uri и конкретный текст (WTextRange) на другой.
В следующем примере кода представлены вспомогательные методы для приведенного выше кода.
В следующем примере кода представлены вспомогательные методы для приведенного выше кода.
В следующем примере кода представлены вспомогательные методы для приведенного выше кода.
Клонирование документа Word
Вы можете создать полную копию документа Word, используя метод Clone класса WordDocument. Вы можете прочитать шаблон документа из файловой системы или потока и создать несколько копий документа, клонировав его. Это повышает производительность создания документов, поскольку нет необходимости каждый раз читать документ Word.
Вы также можете создать глубокую копию таких элементов документа, как разделы, абзацы, таблицы, текст, изображение, OleObject, фигуры, текстовые поля и т. д. В следующем примере кода показано, как клонировать раздел и сохранять каждый клонированный раздел как документ Word.
Объединение документов Word
Вы можете объединить несколько документов Word в один документ Word, используя возможности DocIO по импорту содержимого из одного документа в другой. Импортированное содержимое добавляется в конец документа. В следующем примере кода показано, как импортировать содержимое из исходного документа в конечный документ, к которому добавляется содержимое.
В результирующем документе импортированное содержимое начинается с новой страницы, за которой следует существующее содержимое в целевом документе. Это поведение по умолчанию.
Если вам требуется добавить содержимое с той же страницы, а не начинать с новой страницы, вам необходимо установить код разрыва первого раздела исходного документа как NoBreak. В следующем примере кода показан импорт содержимого с той же страницы.
Ведение информации о стиле импортированного списка
В следующем примере кода показано, как сохранить информацию об импортированных стилях списков в документе Word при клонировании и объединении нескольких документов Word.
Печать документа Word
Изначально вы должны отобразить страницы в виде изображений, как показано ниже
Вы можете указать параметры принтера и параметры страницы с помощью класса PrintDocument. Событие PrintDocument.PrintPage должно быть обработано для компоновки документа для печати.
В следующем примере кода показано, как распечатать страницы документа Word, которые были преобразованы в изображение:
В следующем примере кода представлены вспомогательные методы для приведенного выше кода.
Вы можете скачать полные рабочие образцы кода отсюда.
Работа со стилями
Стиль – это предопределенный набор свойств таблицы, нумерации, абзаца и символа, которые можно применять к областям в документе. DocIO предоставляет следующие функции, связанные со стилями.
- Доступ к существующим стилям в документе Word и их изменение.
- Создать новый стиль абзаца.
- Применить встроенные стили.
Доступ к стилям
Стили абзацев и символов, присутствующие в существующем документе, доступны через свойство Styles класса WordDocument.
В следующем примере кода показано, как получить доступ к стилю и обновить такие свойства стиля, как цвет текста и отступ первой строки.
Создание нового стиля абзаца
Вы можете создать новый стиль абзаца с помощью метода WordDocument.AddParagraphStyle и применить его с помощью метода ApplyStyle класса WParagraph.
Применение встроенных стилей
DocIO предоставляет набор предустановленных стилей. Вы можете применить эти предопределенные стили, как показано в следующем примере кода.
Удалить стили
Вы можете удалить стили, присутствующие в существующем документе, с помощью метода Remove.
В следующем примере кода показано, как удалить стиль из документа Word.
Работа со свойствами документа Word
Свойства документа, также называемые метаданными, представляют собой сведения о файле, которые описывают или идентифицируют его. Вы также можете определить дополнительные настраиваемые свойства документа для документов, используя свойства документа DocIO, которые классифицируются как две категории.
- Встроенные свойства документа – включают такие сведения, как заголовок, имя автора, тема и ключевые слова, определяющие тему или содержание документа.
- Пользовательские свойства документа — определяет пользовательские свойства документа.
Встроенные свойства документа
Встроенные свойства документа Word представлены свойством BuiltinDocumentProperties класса WordDocument. В следующем примере кода показано, как получить доступ к встроенным свойствам документа и изменить их.
Обновление количества слов
Вы можете обновить количество абзацев, слов и символов в существующем документе Word или документе, созданном с нуля.
В следующем примере кода показано, как обновить количество слов в существующем текстовом документе.
Обновление количества страниц
Вы можете обновить количество страниц в существующем документе Word или документе, созданном с нуля, передав значение true для API UpdateWordCount(performLayout).
В следующем примере кода показано, как обновить количество страниц в существующем документе Word.
Добавление настраиваемых свойств документа
Вы добавляете новые настраиваемые свойства документа с помощью метода Add класса CustomProperties. В следующем примере кода показано, как добавить новые настраиваемые свойства документа.
Доступ и изменение пользовательских свойств документа
Вы можете получить доступ к существующему свойству документа и изменить его, как показано в следующем примере кода.
Работа со свойствами типа контента
Свойства типа контента относятся к метаданным, хранящимся в документе Word, таким как имя автора, тема и компания. DocIO представляет метаданные с экземпляром MetaProperty, и вы можете получить к нему доступ в документе Word (DOCX, WordML) с помощью коллекции ContentTypeProperties класса WordDocument.
На следующих снимках экрана показано свойство типа контента во входном документе Word.
ПРИМЕЧАНИЕ
Вы можете использовать свойства типа контента только в документах, сохраненных в формате DOCX или WordML.
Доступ к свойствам типа контента и их изменение
Вы можете получить доступ и изменить значение существующих метаданных в документе Word (DOCX, WordML).
В следующем примере кода показано, как получить доступ и изменить значение существующих метаданных в документе Word.
В бизнес-среде нередко распечатывают несколько копий документа. Иногда бывает полезно пронумеровать копии. Например, первая копия будет иметь (возможно, в верхнем или нижнем колонтитуле) текст «Копия 1», а вторая — «Копия 2», сколько бы копий у вас ни было.
Конечно, один из вариантов — распечатать отдельные копии документа, внося изменения в номер копии между каждой печатью. Это становится утомительным, очень быстро. Вы также можете использовать поле последовательной нумерации (как обсуждалось в других WordTips) и сделать количество копий равным тому, что вам нужно напечатать. Таким образом, если вам нужно напечатать 25 копий, вы можете просто скопировать весь документ (включая поле последовательной нумерации), переместиться в конец документа и вставить его еще 24 раза. Однако это приводит к довольно большому общему документу, и есть более простые способы решения проблемы.
Возможно, самым простым решением этой проблемы (за исключением использования макроса) является простое использование возможностей Word для слияния писем. Вы должны использовать простой источник данных, содержащий номера, которые вы хотите присвоить каждой копии. Затем поместите поле слияния в соответствующее место в нашем документе и запустите слияние. Каждая копия будет содержать желаемый номер копии. Дополнительным преимуществом использования этого подхода является то, что вы можете использовать дополнительную информацию при слиянии по мере необходимости. Например, если каждая копия документа была назначена определенному человеку, вы можете просто добавить еще одно поле данных в свой источник данных, содержащее имя человека, который получит копию. Затем вы также можете печатать имя этого человека в каждом объединенном документе.
При желании вы можете использовать макрос для распечатки пронумерованных копий. Например, следующий макрос запрашивает, сколько копий вы хотите распечатать, а также начальный номер копии. (Это очень удобно, если вы печатаете 25 копий, а затем кто-то просит вас напечатать вторую партию из 10 экземпляров, пронумерованных от 26 до 35.) Макрос также сохраняет последний номер копии между сеансами, так что он используется по умолчанию. при следующем запуске макроса.
Чтобы использовать этот макрос, вам нужно сделать еще две вещи. Во-первых, вам нужно указать в вашем документе, где вы хотите, чтобы номер копии появился. В том месте, где оно должно быть напечатано, просто вставьте следующее поле (помните, что вы вставляете скобки поля, нажимая Ctrl+F9):
Второе, что вам нужно сделать, это убедиться, что Word настроен так, что он обновляет поля при печати. Теперь, когда вы запускаете макрос, вас спрашивают, сколько копий печатать и какой начальный номер использовать. Переменная документа обновляется, и печатается одна копия документа. Эти шаги повторяются столько раз, сколько вы выбрали для печати.
К сожалению, это решение для работы с макросами не работает во всех версиях Word. Например, если вы поместите поле DOCVARIABLE в заголовок документа Word 97, а затем распечатаете документ, Word немедленно выйдет из строя.
Как это обойти? Просто используйте другой подход. (Word — ничто, если не гибкий.) Следующий макрос работает во всех современных версиях Word. Это вариант предыдущего, основанный на использовании настраиваемых свойств документа вместо переменных документа.
Чтобы использовать этот макрос, вам нужно сделать еще две вещи. Во-первых, вам нужно указать в вашем документе, где вы хотите, чтобы номер копии появился. В том месте, где оно должно быть напечатано, просто вставьте следующее поле (помните, что вы вставляете скобки поля, нажимая Ctrl+F9):
При первой вставке поля может появиться сообщение об ошибке, возвращаемое полем, например "Ошибка! Неизвестное имя свойства документа". Не волнуйтесь; это исчезнет и будет заменено правильным номером копии после запуска макроса.
Второе, что вам нужно сделать, это убедиться, что Word настроен так, что он обновляет поля при печати. Теперь, когда вы запускаете макрос, вас спрашивают, сколько копий печатать и какой начальный номер использовать. Переменная документа обновляется, и печатается одна копия документа. Эти шаги повторяются столько раз, сколько вы выбрали для печати.
Если вы хотите узнать, как использовать макросы, описанные на этой странице (или на любой другой странице на сайтах WordTips), я подготовил специальную страницу, содержащую полезную информацию. Нажмите здесь, чтобы открыть эту специальную страницу в новой вкладке браузера.
Биография автора
На его счету более 50 научно-популярных книг и множество журнальных статей. Аллен Уайатт является всемирно признанным автором. Он является президентом Sharon Parq Associates, компании, предоставляющей компьютерные и издательские услуги. Узнайте больше об Аллене.
Читайте также: