Вступление
I. "Родной" sapgui
II. SAPGui for java
III. Postscript-печать по-русски
IV. SAPVim, или unix way productivity tools
A. Файлы окружения для sapgui-40B-2.i386.rpm
C. Adobe Glyph List для русской кодировки cp1251
D. PatchA -- заплатка для Abap lists
E. PatchB -- заплатка для SapScript
V. Планы на будущее и так далее
Вступление
Я описываю на собственном опыте использование линукса для работы с
клиентской частью SAP R/3. На серверной стороне SAP R/3 линукс
работает успешно и без нареканий (правда, не у меня -- мы используем
HP-UX). Однако приоритет для SAP AG в клиентской части -- windows, и
решения для линукс вызывают много вопросов у пользователей.
Цель -- помочь саперам-линуксоидам с настройками программ и решением
типичных проблем. Помимо sapgui также описываются настройки печати на
Postscript-принтеры с кириллическими символами.
Рассматриваемый системный ландшафт: система DEV, запущенная на сервере
sapr3.
В решении проблем по изложенным темам участвовали:
* Владимир Вязовцев -- прислал мне настройки для sapgui-40B-2, с
которым я поначалу возиться не хотел
* Антон Коваленко -- подсказал, как надо подправить postscript,
чтобы поставить в соответствие русским кодам afii-символы
* Иван Шмыков -- настраивал sapgui for java
* Александр из Карлсруэ -- прислал sapvim
"Родной" sapgui
Родной ты наш, motiff-ный клиент .. Как жаль, что твоя история
наполовину закончилась с 40B-2 .. Однако выкидывать я его не стал:
* Он лёгкий и быстрый
* Только он (под линуксом) умеет показывать предварительный просмотр
созданных формуляров (SAPScript)
Очень жаль, но пока я не сумел заставить его показывать SAPgraphic
(хотя /usr/sap/bin/gmupx запускается) и даже начинает что-то
показывать.
Итак, скачанный sapgui-40B-2.i386.rpm устанавливаем и начинаем
настраивать. У нас появился /usr/sap, в котором делаем нечто вроде
(часть файлов появится самостоятельно):
./DEV
./DEV/D00
./DEV/D00/work
./DEV/SYS
./DEV/SYS/exe
./DEV/SYS/exe/run
./DEV/SYS/global
./DEV/SYS/global/netscape
./DEV/SYS/profile
./DEV/SYS/profile/DEFAULT.PFL
./bin
./bin/DEV
./bin/gmupx
./bin/lgtst
./bin/sapgui
/usr/sap/DEV -- это каталог с параметрами системы DEV, /usr/bin/DEV --
запускаемый файл системы DEV. Настройте файлы так, как написано в
приложении, настройте iso8859-5 шрифты xfs -- и у вас должно
заработать (запускайте /usr/sap/bin/DEV).
SAPGui for java
Это новомодный "универсальный" gui. Он частично кроссплатформенный
(библиотеки и sapgraphic компилируются под линукс в виде .so),
достаточно капризный, достаточно усечённый, но будущее за ним.
Несмотря на то, что SAP AG рекомендует _для гуя_ IBM Java 2-13 и выше
(для Download Manager они, наоборот, требуют Sun JVM) -- в моих
условиях IBM'овские джавы глючили по-чёрному. И шрифты корёжат, и
фокус ввода теряют, и вдруг подвисают на несколько секунд.. В общем,
сейчас у меня j2se-1.4-blackdown (ветка Sun jvm), которой я вполне
доволен. Работает стабильно, и ладно.
Итак, вы установили jvm и PlatinGUI-Linux-620r8.jarПосле этого я
рекомендую создать файл /usr/sap/bin/platingui (см.приложение). Пути к
jvm и PlatinGUI указывайте в нём. Я рекомендую не модифицировать
/usr/sap/SAPGUI for Java/6.20rev8/bin/guilogon вообще ни капельки,
потому что уже имел печальный опыт -- после удаления строки "unset
LANG" часть элементов управления (TreeControl, например) перестала
работать. Я грешил на glibc, kernel, jvm, и т.д. (потому что как раз
переехал с ASPLinux где это прокатывало на ALM 2.2), а оказалось, что
саповские элементы управления завязаны на локаль причудливым образом.
Итак, запускайте /usr/sap/bin/platingui, он должен работать. Кириллица
в SAPGraphics у вас скорее всего не появится сразу, потому что шрифт
fixed отдаваемый xfs стоит не первым в списке (iso8859-1, а не
iso8859-5). Шаманьте настройками /etc/X11/fs/config, это весьма
безрадостное дело, но иного выхода пока нет. У меня появилась часть
надписей (которая шрифтом fixed), остальные -- нет (Courier).
Postscript-печать по-русски
Помимо тыканья в кнопочки и менюшечки надо и печатать. До прихода
линукса на мой десктоп мы пользовались только SAPlpd windows frontend
printer. Русская печать на постскрипт-принтеры не работала. Когда я
работал с НТ4, я ставил себе Acrobat PDF printer по умолчанию и
работал через него (физическая печать на бумагу из R/3 мне нужна редко
-- в основном, мне проще отлаживать формуляры и списки через файлы
изображений).
Для начала вы должны примерно представлять себе протоколы печати в
Unix-системах. Я сделал всё на lpr/lpd и cups системах печати.
Предварительно настройте печать без SAP R/3 и отладьте её (например, с
помощью ghostscript, gv, open office).
Создание типа устройства. Идём в /nSPAD, там включаем "полное
администрирование". Заходим в "типы устройств" и копируем определение
принтера POSTSCPT в ZPST1251 (вы должны скопировать и тип устройства,
и форматы, и операторы управления печатью). Затем проставьте набор
знаков 1504 в три поля ввода.
Создание принтеров. В той же транзакции SPAD заходим в "устройства
вывода". Здесь вам необходимо определиться, какой метод печати вы
будете использовать:
* L -- если принтер существует на сервере приложений, на котором
запущена система DEV
* F -- если принтер существует на presentation сервере (то есть на
вашем sapgui, с которого вы работаете).
Я рекомендую использовать оба эти механизма одновременно (или как
минимум -- L), потому что это удобнее отлаживать и проверять.
Настройка принтера с L-доступом. Здесь вам не обойтись без
администратора и, возможно, shell-доступа к серверу приложений. Как
это сделано на моём HP-UX 11:
% lpshut
% lpadmin -pkuw1 -v/dev/null -mrmodel -orm192.168.1.6 -orpfile
% lpadmin -php4050 -v/dev/null -mrmodel -orm192.168.1.6 -orphp4050
% touch /tmp/kuw3
% lpadmin -pkuw3 -v/tmp/kuw3 -mpostscript
% enable kuw1
% accept kuw1
% enable kuw3
% accept kuw3
% enable hp4050
% accept hp4050
% lpsched
(Всю премудрость по администрированию принтеров очень подробно описали
Эви Немет и товарищи в "UNIX administration handbook")
Данные команды создают 3 принтера:
* kuw1 (печатает на машину 192.168.1.6 на принтер file через
интерфейс rmodel)
* hp4050 (печатает на машину 192.168.1.6 на принтер hp4050 через
интерфейс rmodel)
* kuw3 (печатает в локальный файл /tmp/kuw2 через интерфейс
postscript)
Для чего так много? Исключительно для отладки. Содержимое /tmp/kuw3
помогло мне понять -- работает ли печать L-методом вообще и какое
содержимое postscript-файла выдаёт R/3.
Что касается остальных принтеров: на моей рабочей машине 192.168.1.6
подняты cups и cups-lpd, созданы 2 принтера: file (печатает в
локальный файл) и hp4050 (печатает на принтер). Печать на hp4050
окольным путём (через cups) необязательно, мне так проще управлять
настройками принтера и рулить очередью.
Теперь настраиваем со стороны SAP R/3: создаём те же принтеры, что и
на сервере приложений. А именно:
* принтер kuw1 (тип устройства ZPST1251, хост sapr3, принтер kuw1,
метод доступа L)
* принтер hp4050 (тип устройства ZPST1251, хост sapr3, принтер
hp4050, метод доступа L)
* принтер kuw3 (тип устройства ZPST1251, хост sapr3, принтер kuw3,
метод доступа L)
После этого можете пробовать выводить на печать abap lists (через
SE38, например) и sapscripts (через SE71 -> Утилиты -> Тестовая
печать). На этом этапе вы должны добиться печати содержимого (вместо
русских букв будут выводиться умляуты -- по-крайней мере, для версии
40B). Повторюсь, проще всего убедиться в этом для принтера kuw3
контролем файла /tmp/kuw3 и утилитой lpstat.
Заработало для kuw3 -- проверьте для ваших "локальных" принтеров kuw1
и hp4050. Начинаем разбираться с умляутами. В общем, проблема в том,
что SAP R/3 выводит нормальные восьмибитные русские символы (в нашем
случае -- в саповской кодировке 1504, что соответствует
microsoft-1251), но делает для них неправильные ссылки в шрифтах
SAPvector (abap lists) или SAPcodes (sapscript). Наиболее правильный
способ -- подправить шрифты для нашего типа устройства ZPST1251 (в
транзакции SE73). Я нашёл этот способ уже после решения проблемы
способом подмены определений символов. Итак, мы построим фильтр на
стороне сервера приложений DEV таким образом, чтобы заменять
определения шрифта. Я написал примитивный sh-скрипт /tmp/ps1251.sh:
#!/bin/sh
#$1 is filename of print task
echo $1 >>/tmp/print.list
/usr/bin/fgrep -q '/SAPvector' $1 >/dev/null 2>&1
if [ "$?" = "0" ]; then
/usr/bin/patch $1 /tmp/patchA >/dev/null 2>&1
/usr/bin/rm -f $1.orig
fi
/usr/bin/fgrep -q '/SAPcodes' $1 >/dev/null 2>&1
if [ "$?" = "0" ]; then
/usr/bin/patch $1 /tmp/patchB >/dev/null 2>&1
/usr/bin/rm -f $1.orig
fi
Принцип работы следующий: в /tmp/print.list попадают названия файлов
печати (удобно для отладки). Если в файле $1 есть строка '/SAPvector',
то мы предполагаем что это abap list и патчим его лекарством из
/tmp/patchA. Если этот постскрипт содержит '/SAPcodes' -- то патчим из
/tmp/patchB (смотри приложения). Исходным материалом служит Adobe
Glyph List, в котором прописано соответствие символов с кодами 128-255
кодировки cp1251 и картой символов postscript. Чтобы этот скрипт
/tmp/ps1251.sh был задействован сервером приложений, вы должны вызвать
его либо подправив пареметр rspo/host_spool/print выбранного профиля
для устройства вывода (уровень SAP R/3), либо напрямую в
скрипте-интерфейсе вывода принтера (уровень сервера приложений). Мне
было проще пойти вторым путём (поскольку в первом случае надо
перезапускать сервер R/3, что очень коряво в рабочее время). Итак, для
второго способа находим интерфейс принтера. В моём случае это файлы
/etc/lp/interface/{hp4050,kuw1,kuw3}. Для интерфейса rmodel (принтеры
hp4050 и kuw1) я вставил:
/tmp/ps1251.sh $1
перед командой
/usr/sbin/rlp -I$requestid $BSDC $BSDJ $BSDT $BSDi $BSD1 $BSD2
$BSD3 $BSD4 $BSDw $BSDformat $BSDh $1
Надеюсь, смысл понятен -- пропатчить постскриптовский код перед
отправкой его на удалённый принтер. Пробуем -- русские символы должны
появиться.
Второй способ печати (менее болезненный для сервера приложений и
вашего системного администратора) - вывод на печать F-способом (печать
на хосте внешнего интерфейса). Снова заходим в "типы устройств" и
создаём принтер FRPS (Frontend postscript), в котором указываем тип
устройства ZPST1251, принтер хоста file (saplpd для windows использует
имя __DEFAULT) и метод доступа "F". Печать умляутов должна работать.
Здесь по идее я должен был рассказать, как я заставил свой локальный
CUPS патчить умляуты, но -- мне это пока не удалось. Вносить изменения
в CUPS потруднее, чем в lpr/lpd. Можно написать System V interface
script и использовать его в lpadmin на линуксе (параметр -i в lpadmin
вместо ppd-определения), однако работающего решения я пока не добился
(некогда -- пока более насущно разобраться с sapgraphics). Если кто-то
решит эту проблему -- с благодарностью документирую для широкой
публики.
SAPVim, или unix way productivity tools
(Здесь я изложу настройки для vim/saprfc, чтобы вы могли работать с
abap sources из vim'a.)
Приложение A. Файлы окружения для sapgui-40B-2.i386.rpm
Здесь опять-таки часть лишнего. Смотрите в транзакции RZ10..RZ11 и
думайте, что из этого действительно необходимо. Файл отражает мои
эксперименты с настройками, но он рабочий.
Имя файла: .SAPTxxxxxxxYYY, где xxxxx -- имя пользователя, YYY --
XServerVendor. Известные мне системы поступают так:
* Мой ALT Master 2.2 XFree 4.2.1 "из коробки" -- ~/.SAPTkuznecovALT
* Мой предыдущий ASP Linux 7.2 XFree 4.1 "из коробки" --
~/.SAPTkuznecov
* Red Hat (версию системы и иксов не знаю) Виктора Вязовцева --
~/.SAPTroot
Приложение B. SAPGui for Java
Содержание
/usr/sap/bin/platingui
/usr/sap/bin/platingui
#!/bin/sh
cd '/usr/sap/SAPGUI for Java/6.20rev8/bin'
export SAP_CODEPAGE=1500
export SAPSYSTEM=00
export SAPSYSTEMNAME=DEV
server=sapr3
port=3200
PLATIN_JAVA=/usr/lib/j2se1.4-blackdown/jre/bin/java PLATIN_JAVA_VER=1.4 ./guilo
gon
Приложение C. Adobe Glyph List для русской кодировки cp1251
Смещения (см. первую строку патча) действительны для моих условий. В
случае несоответствий вы должны самостоятельно получить патч
последовательностью действий:
# имеем постскрипт в файле /tmp/kuw3.
# копируем /tmp/kuw3 в /tmp/kuw3.new
% diff /tmp/kuw3 /tmp/kuw3.new > /tmp/patchA
1. Работа с sapgraphic из-под sapgui for java по-русски
2. Патч для постскрипта на уровне cups
3. Безпатчевый вывод русского посткрипта (правильные AFM в транзакции
SE73)
Также заслуживают интереса вопросы: saprfc-модуль для php4, sap2cups
by Axel Schwarzer, может что-то ещё. Пишите на kuznecov@blok-caf.ru
или в fido7.ru.sap-r3 -- обсудим.
1263 Прочтений • [SAP R/3 GUI под Linux (linux x gui java)] [08.05.2012] [Комментариев: 0]