Текущее время: Вт, июл 15 2025, 01:50

Часовой пояс: UTC + 3 часа


Правила форума


ВНИМАНИЕ!

Вопросы по SAP Query и Quick View - сюда



Начать новую тему Ответить на тему  [ Сообщений: 2 ] 
Автор Сообщение
 Заголовок сообщения: Как преобразовать плоскую структуру в глубокую для прокси ?
СообщениеДобавлено: Пт, май 13 2011, 09:22 
Младший специалист
Младший специалист

Зарегистрирован:
Пт, фев 18 2011, 17:19
Сообщения: 63
Всем привет, задача такая, надо с помощью ABAP прочитать CSV файл с разделителями “;” и далее протащить его через XI в другую систему.
Как прочитать из CSV я знаю, уже сделано, но проблема друга, у меня есть выходящий интерфейс (proxy) через который я как раз и кидаю данные из своей ABAP проги (создаю там объект прокси и вызываю его метод передавая deep structure OUTPUT), у него (у этой deep structure OUTPUT) есть поле c типом xsd:double, я никак не могу преобразовать данные из CSV файла в эту deep structure , чтобы кинуть. Он ругается как раз на это поле, говорит следующее:
Myfield (допустим так называется мое поле) must be a character like data object (data type C, N, D, T or STRING) .
Дело в том что в файле значение которое должно передаваться в поле Myfield - вида 12345678,12345678 т.е. не целое и длиной может быть 16 символов и вот как его перевести в deep структуру прокси я не могу понять.
Буду признателен за помощь, спасибо.

Для наглядности вот алгоритм:
Я сначала создал внутреннюю табличку вот такого вида

TYPES: BEGIN OF mytype,
f1(14) TYPE C,
f2(24) TYPE C,
f3(9) TYPE C,
f4(6) TYPE C,
f5(4) TYPE N,
f6(5) TYPE N,
Myfield (8) TYPE F,
END OF mytype.

Потом засовываю в нее данные из CSV, все залезает нормально.

DATA: mylocaltable TYPE TABLE OF mytype WITH HEADER LINE.

...... засунул данные в локальную табличку

DATA: OUTPUT TYPE TABLE OF DEEP_STRUCTURE_TYPE WITH HEADER LINE.
DATA: deepstructure LIKE LINE OF OUTPUT-message_type-line.

LOOP AT mylocaltable.
MOVE-CORRESPONDING mylocaltable to deepstructure.
APPEND deepstructure TO OUTPUT-message_type-line.
ENDLOOP.

TRY.
CREATE OBJECT PROXY.
CALL METHOD PROXY->Message_Out
EXPORTING
OUTPUT = OUTPUT.
COMMIT WORK.
ENDTRY.

Ругаетя он как раз на цикл.
Строчка «MOVE-CORRESPONDING mylocaltable to deepstructure.»
Какого же типа мне надо сделать в локальной табличке поле Myfield ? или может как то надо преобразовать, просто в данном случае оно типа F и длиной 8 символов (больше нельзя), а это значит что теряется точность.


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Как преобразовать плоскую структуру в глубокую для прокси ?  Тема решена
СообщениеДобавлено: Пт, май 13 2011, 10:26 
Младший специалист
Младший специалист

Зарегистрирован:
Пт, фев 18 2011, 17:19
Сообщения: 63
kinderus написал(а):
Всем привет, задача такая, надо с помощью ABAP прочитать CSV файл с разделителями “;” и далее протащить его через XI в другую систему.
Как прочитать из CSV я знаю, уже сделано, но проблема друга, у меня есть выходящий интерфейс (proxy) через который я как раз и кидаю данные из своей ABAP проги (создаю там объект прокси и вызываю его метод передавая deep structure OUTPUT), у него (у этой deep structure OUTPUT) есть поле c типом xsd:double, я никак не могу преобразовать данные из CSV файла в эту deep structure , чтобы кинуть. Он ругается как раз на это поле, говорит следующее:
Myfield (допустим так называется мое поле) must be a character like data object (data type C, N, D, T or STRING) .
Дело в том что в файле значение которое должно передаваться в поле Myfield - вида 12345678,12345678 т.е. не целое и длиной может быть 16 символов и вот как его перевести в deep структуру прокси я не могу понять.
Буду признателен за помощь, спасибо.

Для наглядности вот алгоритм:
Я сначала создал внутреннюю табличку вот такого вида

TYPES: BEGIN OF mytype,
f1(14) TYPE C,
f2(24) TYPE C,
f3(9) TYPE C,
f4(6) TYPE C,
f5(4) TYPE N,
f6(5) TYPE N,
Myfield (8) TYPE F,
END OF mytype.

Потом засовываю в нее данные из CSV, все залезает нормально.

DATA: mylocaltable TYPE TABLE OF mytype WITH HEADER LINE.

...... засунул данные в локальную табличку

DATA: OUTPUT TYPE TABLE OF DEEP_STRUCTURE_TYPE WITH HEADER LINE.
DATA: deepstructure LIKE LINE OF OUTPUT-message_type-line.

LOOP AT mylocaltable.
MOVE-CORRESPONDING mylocaltable to deepstructure.
APPEND deepstructure TO OUTPUT-message_type-line.
ENDLOOP.

TRY.
CREATE OBJECT PROXY.
CALL METHOD PROXY->Message_Out
EXPORTING
OUTPUT = OUTPUT.
COMMIT WORK.
ENDTRY.

Ругаетя он как раз на цикл.
Строчка «MOVE-CORRESPONDING mylocaltable to deepstructure.»
Какого же типа мне надо сделать в локальной табличке поле Myfield ? или может как то надо преобразовать, просто в данном случае оно типа F и длиной 8 символов (больше нельзя), а это значит что теряется точность.


проблему решил след образом )))

1.
заменил
Myfield (8) TYPE F, на Myfield (16) TYPE С,

2.
заменил блок

LOOP AT mylocaltable.
MOVE-CORRESPONDING mylocaltable to deepstructure.
APPEND deepstructure TO OUTPUT-message_type-line.
ENDLOOP.

на

DATA: Float type F.
LOOP AT mylocaltable.
deepstructure-f1 = mylocaltable-f1.
deepstructure-f2 = mylocaltable-f2.
deepstructure-f3 = mylocaltable-f3.
deepstructure-f4 = mylocaltable-f4.
deepstructure-f5 = mylocaltable-f5.
deepstructure-f6 = mylocaltable-f6.

CALL FUNCTION 'CHAR_FLTP_CONVERSION'
EXPORTING
STRING = mylocaltable-Myfield
IMPORTING
FLSTR = Float
EXCEPTIONS
EXPONENT_TOO_BIG = 1
EXPONENT_TOO_SMALL = 2
STRING_NOT_FLTP = 3
TOO_MANY_DECIM = 4
OTHERS = 5.

deepstructure-Myfield = Float.
APPEND deepstructure TO OUTPUT-message_type-line.
ENDLOOP.

Спасибо за внимание ))).


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 2 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB