2013-06-10 1 views
0

Справочной информации:Отливки из насадочного (8) типа к TMSTMP (DEC15) типа в системе Unicode (и обратно)

У меня есть несколько таблиц, которые соединены для обеспечения в виде кластере (SE54) , Каждая из этих таблиц имеет стандартные созданные/измененные поля By/On. Для создания обновленных данных данные просты, и я использую событие 05 (On Create) в генераторе обслуживания таблиц. Для дефолта изменяющихся полей это немного более активно. Я должен использовать событие 01 (Before Save), а затем обновлять таблицы TOTAL[] и EXTRACT[] с необходимыми значениями полей.

При сохранении таблицы в SM30, формат TOTAL[] и EXTRACT[] такая же, как вид я, поддерживая с дополнительным флагом, чтобы определить, какой тип изменений производится (обновление/создание/удаление)

Однако при сохранении в SM54 (что является бизнес-требованием) формат TOTAL[] и EXTRACT[] - это всего лишь внутренняя таблица символьных строк.

Проблема:

Я могу понять, что тип таблицы, редактируемый. Но когда я пытаюсь переместить линию символов в строке типа я получаю следующие ошибки во время выполнения: (в зависимости от того, как я пытаюсь переместить/назначить его)

ASSIGN_BASE_TOO_SHORT 
UC_OBJECTS_NOT_CONVERTIBLE 
UC_OBJECTS_NOT_CHAR 

Все мои структуры находятся в следующем формате:

*several generic (flat) types 
CREATED TYPE TMSTMP, "not a flat type 
CHANGED TYPE TMSTMP, "not a flat type 
CREATED_BY TYPE ERNAM, 
CHANGED_BY TYPE AENAM, 

Корень проблемы состоит в том, что два поля метки не являются плоскими. Я вижу в символьной строке, что метки времени представлены 8 символами.

Редактировать: Только после обнаружения решения я могу определить поле Length (8) как упакованное.

Я попытался следующие напрасными:

"try the entire structure - which would be ideal 
assign ls_table_line to <fs_of_the_correct_type> casting. 

"try isolating just the timestamp field(s) 
assign <just_the_8char_representation> to <fs_of_type_tmpstmp> casting. 

Я попробовал несколько других вариантов на «одном поле только» вариант не повезло.

Любые идеи о том, как я могу использовать тип символа для ввода TMSTMP, а затем назад, чтобы обновить внутренние значения таблиц?

+0

Есть ли причина, по которой вы выбрали временные метки для полей базы данных вместо широко используемых отдельных полей даты и времени (ERDAT/ERTIM, ...)? – vwegert

+0

@vwegert Ничто, кроме меня, не продиктовало дизайн :(ERDAT/ERTIM было бы здорово, поскольку они были плоскими структурами, которые в свою очередь заставляют все это уйти. Мы взаимодействуем с Java-системой, но я сомневаюсь, что есть любая реальная техническая причина использовать временные метки (это даже не система с несколькими часовыми поясами). – Esti

ответ

3

Я обнаружил, что следующие работы:

вместо использования:

field-symbols: <structure> type ty_mystructure, 
       <changed> type tmstmp. 

assign gv_sapsingle_line to <structure> casting. "causes a runtime error 
assign gv_sap_p8_field to <changed> casting. "ditto 

Я использовал это:

field-symbols: <structure> type any, 
       <changed> type any. 

assign gv_sapsingle_line to <structure> casting type ty_mystructure. 
assign gv_sap_p8_field to <changed> casting type ty_tmstmp. 

По какой-то причине он не сделал этого, как я предопределены полевые символы.

Я считаю, что странно, как the documentation состояний следующие:

Casting с неявной Тип декларации Предоставлено символ поля является либо полностью набран или имеет один из родового встроенных типов ABAP - C, N, P, или X - вы можете использовать следующее заявление:

ASSIGN ... TO <FS> CASTING. 

Когда система получает доступ поле SYMB ol, содержимое присвоенного объекта данных интерпретируется так, как если бы он имел тот же тип, что и символ поля .

Я могу только предположить, что моя структура не была совместима (в связи с P8 -> TMSTMP преобразования)

Длина и выравнивание объекта данных должна быть совместимой с символом поля type. В противном случае система возвращает ошибку времени выполнения . Если тип символа поля или объекта данных - или содержит - строку, ссылочный тип или внутреннюю таблицу, , тип и положение этих компонентов должны точно совпадать. В противном случае возникает ошибка времени выполнения.

 Смежные вопросы

  • Нет связанных вопросов^_^