Невозможно получить строки из таблицы с помощью JCo SAP - PullRequest
0 голосов
/ 15 февраля 2019

Я пишу код Java для получения данных от SAP BAPI с использованием Java Connector (JCo) .Я впервые подключаюсь к SAP с помощью JCo.Мне удалось получить таблицы, доступные в источнике данных, а также получить одну конкретную таблицу и количество столбцов, используя table_name.getNumColumns () , что дает мне общее количество столбцов.Но когда я делаю, table_name.getNumRows () , он говорит 0 .Где, как в моем источнике данных, есть около 85 строк .Как я могу получить строки из этой таблицы?

Ниже приведен код, который я использовал: (Извините за неверный код)

import ....;
import ....;

public class SapConnection {

      public static void gettingTableData(JCoFunction function) {

          JCoParameterList table_list = function.getTableParameterList();
          JCoTable my_table = function.getTableParameterList().getTable("SOME_TABLE");

          System.out.println("Field Count: "+my_table.getFieldCount());

          // This is not working as Number of Rows is 0.
          for(int i = 0; i<my_table.getNumRows(); i++, my_table.nextRow()) {
              // get those rows and do something ..
          }

          System.out.println("Is Empty: "+my_table.isEmpty()); // returns True
          System.out.println("Is First Row: "+my_table.isFirstRow()); // returns false
          System.out.println("Next Row: "+my_table.nextRow()); // returns false
          System.out.println("Num Rows: "+my_table.getNumRows()); // returning 0

        }

      public static void loadDataSourceAndGetData(JCoDestination dest) throws JCoException {

       JCoRepository sapRepository = dest.getRepository();
       JCoFunctionTemplate template = 
           sapRepository.getFunctionTemplate("DATA_SOURCE_NAME");
       JCoFunction my_function = template.getFunction();

       gettingTableData(my_function);

  }

     public static void main(String[] args) throws JCoException {
         // get the Properties created for connection.
         Properties pp = getJcoProperties();
         PropertiesDestinationDataProvider pddp = new PropertiesDestinationDataProvider(pp);
         Environment.registerDestinationDataProvider(pddp);

         JCoDestination dest = getDestination();

         try {
             // Using JCo Context for stateful function calls to Start() and End()
             JCoContext.begin(dest);
             loadDataSourceAndGetData(dest);
             JCoRepository sapRepository = dest.getRepository();
             System.out.println(sapRepository.getMonitor().getLastAccessTimestamp());
         } finally {
             // end the connection.
             JCoContext.end(dest);
         }
    }
}

1 Ответ

0 голосов
/ 15 февраля 2019

Если вы хотите получить некоторые данные из SAP BAPI, это также очень поможет для вызова этого BAPI.Данные не материализуются автоматически в объектах JCo из ничего.
В вашем коде вы не выполняете какую-либо JCoFunction.

Установите обязательные значения параметров импорта для этого BAPI (если они есть)выполните BAPI (ваш объект JCoFunction), а затем вы получите в ответ данные экспорта из системы SAP, которые также добавят соответствующие строки в объект JCoTable.

...