Как заставить код ABAP работать в любой системе на основе ABAP

Я часто делюсь кодом ABAP через форумы, github и т. Д., Который часто предназначен для работы на любом Система на основе ABAP. К сожалению, часто бывает, что некоторые из объектов, которые я использую (таблицы базы данных, типы и т. Д.), Существуют только в решении, с которым я работаю (например, C / 4HANA, которое работает в системе ABAP).

Важно понимать, что есть несколько решений, разработанных SAP, которые независимы от других решений, но должны быть установлены в системе ABAP, которая включает в себя сам язык ABAP и тесно связанные внешние объекты, например, в словаре ABAP. К таким решениям SAP относятся SAP R / 3, SAP CRM, SAP SRM, SAP SCM, SAP BW, S / 4HANA, C / 4HANA, BW / 4HANA, SAP Solution Manager и т. Д.

Например, предположим, что я хочу задать вопрос о соединении в ABAP, и я привожу следующий пример (который я разработал в системе C / 4HANA, но вопрос не касается C / 4HANA):

REPORT.
DATA gt_partner TYPE TABLE OF crmd_order_index-partner_no.
SELECT DISTINCT a~partner_no
    INTO TABLE gt_partner
    FROM crmd_order_index AS a INNER JOIN crm_jest AS b
    ON a~header = b~objnr
    UP TO 10 ROWS.
cl_demo_output=>write( crmd_order_index ).

Многие люди используют S / 4HANA, а не C / 4HANA, поэтому код не будет компилироваться в их системе, потому что таблица базы данных crmd_order_index существует только в C / 4HANA. Вероятно, эти люди не ответят или не смогут проверить свой ответ, поэтому я думаю, что я мог бы попытаться улучшить этот пример и заставить его работать в любой системе ABAP. Это, конечно, очень простой пример, но представьте, что у вас есть десятки или сотни строк.

Я знаю, что одним из решений является установка ABAP Developer Edition на нашем портативном компьютере, поскольку он содержит минимальную конфигурацию ABAP, и протестируйте на нем код ABAP. Но это относительно сложно и долго в установке, занимает много места на диске, просто для проверки «простая вещь».

Есть ли другой способ легко и быстро проверить, компилируется ли код ABAP в какой-либо системе на основе ABAP? Или любая другая идея?

Я также хотел бы, чтобы это решение применялось к коду размером, например, abapGit.

Для информации:

  • Один хорошо известный инструмент ABAP, который работает в любой системе на основе ABAP, - это abapGit.
  • Вопрос не в версиях (например, для проверки того, что код ABAP, созданный в системе ABAP 7.52, компилируется в системах ABAP 7.0), потому что я думаю, что это гораздо более сложная проблема.
  • В StackOverflow вопрос ABAP, код которого не работает ни в одной системе ABAP, ослабляет принцип минимальных воспроизводимых примеров .

person Sandra Rossi    schedule 01.12.2019    source источник
comment
Я не вижу здесь вообще никаких проблем. Тот факт, что у вас нет конкретной таблицы в одной из систем, связан не с самим языком ABAP, а с отсутствующим пакетом или программным компонентом в целом. У вас будет такая же ситуация на любом другом языке программирования, например Java, если у вас нет определенных зависимостей, таких как пакеты, которые исходят из установленных файлов .jar.   -  person Jagger    schedule 01.12.2019
comment
@Jagger Если я создам базовый инструмент (например, abapGit) в системе C / 4HANA, который должен быть развернут на моих S / 4HANA, SRM, BW и других системах, не существует эффективного и быстрого способа обнаружения и восстановления всех объектов. которые не являются базой?   -  person Sandra Rossi    schedule 01.12.2019
comment
Не думаю, что в SAP есть такая функция. (или, как упоминалось Джаггером, на любом другом языке программирования). В моей старой компании у нас был инструмент, разработанный моим коллегой, для обмена кодом (на основе abapgit). Он проверил все таблицы, классы и т.д., которые используются в данном коде - проверил установленные компоненты и установлены ли они в другой системе. Я думаю, что вы могли бы построить что-то подобное, только взяв компоненты, которые установлены в каждой системе SAP. (для этого вы можете взглянуть на систему ABAP Developer Edition)   -  person Sasku    schedule 02.12.2019
comment
Запрошены отзывы во внутренней группе обсуждения Agile ABAP в компании SAP # sap-dev-ase-abap.   -  person Florian    schedule 02.12.2019
comment
Кстати, abapGit фактически не работает ни в одной системе. Требуется как минимум выпуск 702.   -  person Legxis    schedule 02.12.2019
comment
если это базовый инструмент, вероятность пропуска зависимых объектов должна быть очень низкой.   -  person Haojie    schedule 02.12.2019
comment
@haojie. Очень низкий, если каждый раз, когда вы вызываете метод класса или функциональный модуль или используете объект словаря ABAP, вы проверяете его принадлежность к базовому уровню. Допустим, вы разрабатываете инструмент, не проверяя каждый объект, и что вы хотите все проверить в конце (во всяком случае, вы, вероятно, пропустили один).   -  person Sandra Rossi    schedule 02.12.2019
comment
Возможно, лучшим решением будет разработка пользовательского правила для инспектора кода или для ATC, которое проверяет компонент приложения на зависимости. abapOpenChecks (github.com/larshp/abapOpenChecks) реализовал множество настраиваемых правил. Может быть, мы могли бы использовать это как шаблон.   -  person J.Gerbershagen    schedule 23.12.2019
comment
Вот почему я должен развиваться на 46C T-T.   -  person Ela    schedule 08.12.2020
comment
Cloud Platform ABAP Environment имеет несколько бесплатных пробных версий, код, который там работает, должен (точно не знаю) запускаться везде (с более новыми версиями)   -  person Jonas Wilms    schedule 21.12.2020


Ответы (3)


Самый простой способ поделиться фрагментом кода примера ABAP выглядит так:

  1. создать локальный пакет, например $MY_SAMPLE,
  2. скопируйте весь пример кода и зависимости в,
  3. переместите его в новый чистый репозиторий https://www.github.com с помощью abapGit и
  4. добавьте README, который предоставляет версию ABAP, для которой был написан код.

С помощью этих лучших практик:

  • Сократите код и зависимости до минимума, необходимого для работы образца. Удалите обращения к другим объектам разработки, не имеющим прямого отношения к проблеме. Максимально ограничьте себя функциями и API, доступными на платформе ABAP.

  • Если есть зависимости, которые составляют часть проблемы, например, в разделе «Как использовать функциональный модуль CRM XYZ?», Или которые не могут быть скопированы из-за размера или авторских прав (!), Укажите программный компонент SAP, частью которого они являются. of, и укажите это как зависимость в README.

  • Убедитесь, что пример компилируется и работает, выполнив его. Это ненадежно, так как он может случайно получить доступ к нескопированным зависимостям, которые вы забыли скопировать, но это, по крайней мере, даст вам представление.

ABAP здесь не особенный. Предоставление минимальных рабочих примеров всегда требует усилий на любом языке разработки. Это требует отделения затронутого кода от ненужных зависимостей и замены требуемых минимальными рабочими заглушками. Это одна из причин, почему задавать хорошие вопросы - это тяжелая работа, и почему StackOverflow ценит хорошие вопросы с репутацией.

person Florian    schedule 02.12.2019
comment
Спасибо. Думаю, мой вопрос был недостаточно ясным. Вопрос не в том, как делиться кодом ABAP, но если код ABAP должен быть базовым инструментом, как убедиться, что все используемые им объекты являются базовыми, чтобы развертывание не завершилось ошибкой в ​​CRM, ERP, SRM, BW, и др. система. Фактически, я хотел бы максимально автоматизировать вашу передовую практику № 2 (определение программного компонента SAP). В конце концов, пожалуйста, отредактируйте мой вопрос, чтобы прояснить его. - person Sandra Rossi; 02.12.2019

Сандра: Я не думаю, что есть хороший и простой ответ на эту проблему. Мы годами страдаем от этой проблемы. Я так часто горел языком ABAP в разных выпусках. Особенно модульные тесты SQL и ABAP. Даже старый добрый char02 сжег нас на прошлой неделе. Да Char02 - это отраслевой элемент данных, который больше не поддерживается в s / 4 Hana. У вас должны быть все возможные выпуски sap abap, чтобы убедиться, что все в порядке. Есть опция удаленной проверки синтаксиса, которая сначала показалась хорошей. Однако он начинается с 7.02 SP14. Так что для 7.0 это бесполезно. И вам в первую очередь нужен доступ к этим выпускам. Кто может себе это позволить? Почему 1 система ABAP не может выполнять проверки с обратной совместимостью. :( Меня не удивило, что ABAPGit выбрал последнюю, но не последнюю версию abap как «текущую версию». Мы должны поддерживать код от 7.0 до 7.5+, так как у нас есть клиенты от S / 4 hana до 7.0 с 1 базой кода. У нас также есть общая база кода с SolMan / CRM и шлюзом SAP и пакетом ECC Business.Сохранить эту базу кода чистой для всех сред легче сказать, чем сделать.

Что касается примеров. Придерживаться строго ABAP NW примеров - это просто, но если вы не ограничиваете себя SFLIGHT или такими таблицами, как T002 / T006, это сложнее, чем люди думают.

Базовое, но не идеальное решение - проверить класс разработки всех объектов в транспорте перед выпуском. Мы занимаемся этим уже некоторое время. отслеживание того, что является допустимым объектом Basis, для какой цели - ТРУДНО. Я использовал базовые объекты, которых нет в системах 7.2 и которые не удалось импортировать. Затем вы можете добавить к своим чекам дату TADIR.

В конце концов, я просто импортирую в самую старую (7.0) систему в качестве дымового теста.

Я буду смотреть, есть ли у кого-нибудь волшебное решение :) Удачи

person phil soady    schedule 19.12.2019

Поскольку выпуски имеют обратную совместимость, вы можете настроить систему с очень низким выпуском и разработать на нем свой код. ABAP OO был представлен в версии 4.6C

person Ela    schedule 08.12.2020