Хранение файлов в MIME репозитории

Для хранения файлов в SAP используется mime репозиторий.  Работать с репозиторием осуществляется в транзакции se80. 

Первым делом создадим папку, в которой планируем хранить файлы.



Читать далее «Хранение файлов в MIME репозитории»

Process Management API. Массовое изменение документов Solution

Насколько мне известно, SolDoc  не позволяет массово изменять документы. Однако, существует API, представляющее собой oData сервис, которое позволяет производить данные операции.
API предоставляет возможность использовать все основные операции(чтение, изменение, вставка и т.д. ).
Более подробно можно почитать на оф сайте:
API
Описание формата обмена

Также есть ссылки на два блога, которые работают с данным API на Python. Это не всем подходит, т.к. не всегда возможно запускать скрипты в сетях с продуктивной системой. Если у вас такой проблемы нет, можете использовать решения представленные в данных блогах, это будет даже удобнее.
https://blogs.sap.com/2020/05/04/mass-updating-solution-documentation-via-the-process-management-api/

https://blogs.sap.com/2020/02/28/process-management-api-in-sap-solution-manager/

Предлагаю  реализовать тоже самое на ABAP.
Читать далее «Process Management API. Массовое изменение документов Solution»

Дружба ABAP Objects. Получить доступ к приватному атрибуту

Обычно доступ к приватным и защищенным атрибутам объекта запрещен из-за пределов класса. Но порой необходимо нарушить эту концепцию по тем или иным причинам. Для этого в ABAP существует "дружба".
Класс может предоставить дружбу другим классам и интерфейсам. Этим друзьям предоставляется доступ ко всем компонентам класса, предлагающего дружбу, независимо от их раздела видимости или добавления READ-ONLY.

Пример:

Читать далее «Дружба ABAP Objects. Получить доступ к приватному атрибуту»

Создание oData сервиса. Часть 5. Deep entity получение данных

В предыдущих частях(три, четыре) было рассмотрено получение зависимых данных из системы SAP. В данной части получим данные из внешнего источника в систему. Для для этого будем использовать метод CREATE_DEEP_ENTITY.
Получать будем туже самую структуру, что отправляли в предыдущем посте.

Читать далее «Создание oData сервиса. Часть 5. Deep entity получение данных»

Создание oData сервиса. Часть 4. oData expand entity отправка данных

В прошлом посте было рассказано об ассоциации и навигации. В результате получили несколько вызовов сущностей, происходящих друг за другом. Однако, данный способ накладывает некоторые ограничения и потенциальные потери производительности, т.к. вместо одного RFC вызывается целая цепочка. Также часто нужно данные для передачи на фронт мы получаем одновременно, например как результат работы ФМ. Конечно, можно положить эти данные в буфер и брать необходимое во время вызова соответствующей сущности, звучит не очень рационально.
Стандартный интерфейс позволяет сделать так, чтобы все зависимые сущности заполнялись одновременно.

Читать далее «Создание oData сервиса. Часть 4. oData expand entity отправка данных»

Создание oData сервиса. Часть 2. Function import

Function import - Операция выполняемая на стороне бэкенд системы. Это некоторая альтернатива обычным CRUD сервисам для случаев не подходящих под GET, POST, PUT, DELETE запросы. Может быть вызвана GET и POST методами. Например, проверки, запуски каких либо операций и прочее.

Пример создания

Для сервиса созданного в прошлой части создадим Function import по проверке наличия записи в таблице. (Максимально примитивная функция, в реальных задачах будете вызывать что-то реально стоящее))

Читать далее «Создание oData сервиса. Часть 2. Function import»

oData Отключение программы преобразования для поля

Создал сущность путем импорта стандартной таблицы SPFLI. Свойства полей подтянулись автоматически. Во время тестирования выяснилось, что из-за стандартной программы преобразования обработка валится в дамп. Если для GET запроса хватило обычной замены типа элемента на Edm.String. При обратном преобразовании в POST запросе - дамп.

Читать далее «oData Отключение программы преобразования для поля»

Динамическое программирование ABAP. RFC ФМ для вызова методов произвольного класса.

При интеграциях между системами частенько надо получать данные из смежных систем. Самое простое -  обернуть метод  в RFC ФМ и вызвать его в нужной системе. Это хорошее решение, но что делать если нам нужно вызвать не один метод, а 50 или даже 100. Писать обертку для каждого? Довольно долгое занятие, плюс любое изменение в методе повлечет необходимость дополнительной поддержки этих ФМ. Короче, самое очевидное решение, не всегда самое удобное в конкретном случае. 
Один из альтернативных путей решений - динамическое программирование. Это способ тоже не без недостатков, но он может позволить избежать создании сотен лишних ФМ.  Если надо вызвать один-два метода, я бы не заморачивался и делал все в обертках.

Задача: Написать RFC функцию которая сможет выполнить произвольный метод любого класса и вернуть результат.
Конечно, все случаи мы не предусмотрим, особенно если классу требуется какое-то сложное создание инстанции, попробуем разобрать базовый подход.
Читать далее «Динамическое программирование ABAP. RFC ФМ для вызова методов произвольного класса.»

Преобразование даты из ISO 8601. Получение даты из JIRA

Для преобразования даты из ISO 8601 можно использовать класс cl_xlf_date_time. Если мы получаем данные из JIRA, то необходимо привести полученную дату в вид, с которым может работать данный класс.
Дату из Jira получаем в таком виде - 2020-04-30T00:00:00.000+0300 .
Далее необходимо добавить ":" в смещение: 2020-04-30T00:00:00.000+03:00
Код преобразования:

Читать далее «Преобразование даты из ISO 8601. Получение даты из JIRA»

CRM emails

Пару слов о формулярах CRM. Недавно столкнулся с формулярами в Solution Manager. Для меня это впервые, сохраню напоминалку, может быть кому-то еще пригодится.
Настройка ведется в транзакции SPRO:

 SPRO->SAP Solution Manager: руководство по внедрению->Управление отношениями с клиентами->Маркетинг->Маркетинговое планирование и управление кампаниями->Персонализированный мейл->Обработать контексты признаков для формуляров мейла

Тут мы можем создать пользовательский контекст

Читать далее «CRM emails»