вторник, 3 сентября 2013 г.

Добавление нового языка в xlf NWDS на примере казахского\ Adding a new language to xlf NWDS

Ранее я описал проблему с добавлением неподдерживаемого языка в приложения Web Dynpro for Java и невозможность выбора казахского языка в среде NWDS  (http://sakryukin.blogspot.com/2013/06/sap-as-java-adding-new-locale-in-sap-as.html). 

В этой статье расскажу о добавлении языка в среду разработки NWDS. Чтобы получилось как на рисунке:





Для реализации необходимо будет разобрать один jar-файл из плагинов NWDS, который отвечает за интернализацию среды.

1. Нахожу библиотеку sap.com~tc~i18n~s2x~src~impl.jar, ее расположение будет примерно следующим: D:\eclipse\plugins\com.sap.s2x_2.0.0.120824043930\lib\sap.com~tc~i18n~s2x~src~impl.jar

2. Декомпилирую этот архив (конкретно нам нужен один файл - s2xDatatypes.xsd )

3. Создаю Java проект из полученных исходников в eclipse (NWDS, NetBeans, IntelliJ IDEA или где вам привычней работать), это условие необязательно - оно для удобства 



4. Нахожу файл s2xDatatypes.xsd (com\sap\s2x\validation\schema\s2xDatatypes.xsd) и добавляю в него строки:


<xsd:enumeration value="ru"> <xsd:annotation> <xsd:appinfo> <s2xAPI:iniInfo group="langtype" valueInternal="ruRU" valueExternal="Russian"/> </xsd:appinfo> <xsd:documentation>Russian</xsd:documentation> </xsd:annotation> </xsd:enumeration> <xsd:enumeration value="kk"> <xsd:annotation> <xsd:appinfo> <s2xAPI:iniInfo group="langtype" valueInternal="kkKK" valueExternal="Kazakh"/> </xsd:appinfo> <xsd:documentation>Kazakh</xsd:documentation> </xsd:annotation> </xsd:enumeration> <xsd:enumeration value="sk"> <xsd:annotation> <xsd:appinfo> <s2xAPI:iniInfo group="langtype" valueInternal="skSK" valueExternal="Slovakian"/> </xsd:appinfo> <xsd:documentation>Slovakian</xsd:documentation> </xsd:annotation> </xsd:enumeration>

5. Следующим шагом необходимо сделанные изменения собрать в архив. Для этого пишу простой ant-скрипт, следующего содержания:

<project>
    <target name="clean">
        <delete dir="build"/>
    </target>
    <target name="compile">
        <mkdir dir="build/classes"/>
        <copy srcdir="src" destdir="build/classes"/>
    </target>
    <target name="jar">
        <mkdir dir="build/jar"/>
        <jar destfile="build/jar/i18n.jar" basedir="build/classes">
            <manifest>
        <attribute name="Author" value="Sakryukin"/>
        </manifest>
        </jar>
    </target>
    <target name="run">
        <java jar="build/jar/i18n.jar" fork="true"/>
    </target>
</project>

6. Заменяю исходный jar новым и перезапускаю среду

После выполненных действий в среде NWDS будет доступен казахский язык (Kazakh). 

Но при сборке приложения NWDS отбросит файлы локализации kk и в итоговом архиве не удастся увидеть казахский язык. А что поделать - это SAP :)

Как побороть эту последнюю проблему  - опишу в следующей статье.

пятница, 7 июня 2013 г.

UPSERT с использованием Merge (OracleDB) / UPSERT using Merge in Oracle DB

Для чего нужен оператор Merge. Это способ объединения нескольких запросов select, Insert, Update и Delete в один. Подробнее почитать о нем можно на Oracle SQL Reference.

Ранее старался избегать оператора Merge,так как у JDBC драйвера были проблемы  с  LOB полями при использовании Merge. Но какое-то время назад решил попробовать снова, чтобы не писать код на PL\SQL или использовать несколько Statement'ов в java.

Добавление новой локали в приложения SAP AS Java на примере казахского языка \ Adding a new locale in SAP AS Java applications on the example of the Kazakh language


Несколько статей будет посвящено расширению функционала SAP, связанного с интернализацией (i18n) приложений  SAP AS Java, а именно применению недокументированных возможностей. Платформа, которая будет рассматриваться - 7.3(1). С небольшими изменениями приемлемо и для 7.0*

Проблема выявилась, когда возникла необходимость переводить приложения, разработанные для платформы CE (BPM, Web Dynpro), на казахский язык. SAP официально не поддерживает казахскую локаль, поэтому пришлось воспользоваться нетрадиционным программированием.

Конечно же была открыта заявка в SAP Support, так как при использовании описанного способа, могут быть проблемы с техподдержкой. Но навряд ли возникнут проблемы с обновлениями системы, не были затронуты библиотеки времени выполнения, а только времени проектирования и сборки.

среда, 1 мая 2013 г.

Простая сортировка данных в Таблице для Web Dynpro Java 7.3 / simple sorting in a Table for Web Dynpro Java 7.3

Недавно встал вопрос о сортировке данных в таблицах Web Dynpro ( IWDTable ). Интерфейс есть, а реализации - нет.
На SCN'е,  да и на просторах интернета много статей, наглым образом позаимствованных у SAP, но выдаваемых уже от своего имени, все в основном для версии 7.0. Их отличительная черта - это тонны кода, предоставляемого SAP.

Но как оказалось,реализовать сортировку  - намного проще :)

вторник, 5 марта 2013 г.

Добавление казахских шрифтов в SAP Adobe Document Service / Adding kazakh fonts in SAP Adobe Document Service


Возникла проблема при добавлении казахских символов в генерируемые AdobeForms. Делал все как велит SAP, но не работает - отображаются квадратики вместо казахских букв.

Описание решения под катом.


NWDI.Developers permissions

Во время настройки прав доступа в NWDI SAP рекомендует включать группы NWDI.Developers и NWDI.Administrator.

Этих прав зачастую не хватает  и приходится разбираться куда  все-таки пытается получить доступ NWDI и какие полномочия ему для этого нужны

среда, 7 ноября 2012 г.

Добавление Custom Attributes в User Profile в SAP NW EP 7.3


Иногда в профиль пользователя требуется добавить нестандартные поля, которые по тем или иным причинам не были предусмотрены SAP'ом. Несмотря на то, что поля эти SAP не предусмотрел, возможность добавлять свои - сделал.


1. Заходим http://<hostname>:<port>/useradmin
2. Жмем Configuration -> User Admin UI
3. Modify Configuration
4. В поля Administrator-Managed Custom Attributes и Self-Managed Custom Attributes добаляем  необходимые атрибуты в формате Namespace:NameAttribute; (Разделяя их ; )
5. Save All Changes
UME Configuration
UME Configuration


Проверяем на вкладке  Customized Information  в профиле пользователя  должно появиться новое поле.
Customized Information
Customized Information

Работать с этим полем можно так:


IUserFactory usrFact = UMFactory.getUserFactory();
IUserSearchFilter usrFilt = usrFact.getUserSearchFilter();
usrFilt.setSearchAttribute("myNamespace",
 "custom",<value>,
 ISearchAttribute.EQUALS_OPERATOR,false);
ISearchResult result = usrFact.searchUsers(usrFilt);
while (result.hasNext()) {
    String usrId = (String) result.next();
    user = usrFact.getUser(usrId);
    ...
 }