|
![]() |
#1 |
Участник
|
1. ttsbegin присутствует
2. 2dmitro. Вы как думаете, смог бы я часть записей создавать успешно (см. первый пост), если бы не залогинился? 3. 2Miker. Опубликовать целое .Net-приложение? Если у вас есть список возможных причин - поделитесь, пожалуйста, если нет - значит, вы именно гадать и собирались, разве нет?:-) В сухом остатке: отсутствие TTSBegin - не причина, разве что я его неправильно использую. Сейчас на всякий случай делаю так: вызываю в начале процедуры, где изменяю запись таблицы, а в конце этой процедуры всегдда вызываю TTSCommit, даже если не изменилось ничего. Что еще может быть? |
|
![]() |
#2 |
MCT
|
Цитата:
![]() А по коду можно многое сказать, выложите именно те вещи которые совершают вызовы методов нет коннектора от начала до конца. Остальное можете убрать и поставить звездочки. X++: *****
__________________
Axapta book for developer |
|
![]() |
#3 |
Участник
|
Давно известно, что когда код вынужденно разбит на кучу процедур и потому состоит из одних вызов, он вызывает только вопросы.
Ну, попробуем: X++: AxaptaRecord axRecord = AX.CreateAxaptaRecord("PST_Inventory_ItemProperties"); Int64 RecId = 0; // определить тип данных InventoryDataTypes DataType = GetInventoryDataType(PropertyType); // конвертировать значение из строки (если нужно) и установить в нужное поле string FieldName; object DBPropertyValue = ConvertToInventoryDataType(PropertyType, PropertyValue, AssociatedLink, out FieldName); if (DBPropertyValue == null) return 0; axRecord.set_Field(FieldName, DBPropertyValue); if (FieldName != "Link" && AssociatedLink != null) axRecord.set_Field("Link", AssociatedLink); else if (FieldName != "StringValue" && Convert.ToString(DBPropertyValue) != PropertyValue) axRecord.set_Field("StringValue", PropertyValue); // заполнить прочие нужные поля записи axRecord.set_Field("ItemType", (int)ItemType); axRecord.set_Field("ItemRecId", ItemRecId); axRecord.set_Field("DataSourceId", DataSourceId); axRecord.set_Field("PropertyType", PropertyType.ID); // поскольку мы не получаем группы отдельно (только вместе с элементами), // то указываем группу, только если она только что загружена PropertyTypeGroup PropertyGroup = (PropertyTypeGroup)PropertyGroups[Convert.ToInt64(PropertyGroupId)]; if (PropertyGroup != null) { axRecord.set_Field("PropertyGroupId", PropertyGroup.RecordID); } axRecord.set_Field("LanguageId", LanguageId); try { if (axRecord.ValidateWrite()) { axRecord.Write(); RecId = (Int64)axRecord.get_Field("RecId"); } } catch (Exception ExceptionData) { throw ExceptionData; } Комментарии это код из отдельной процедуры, метод TTSBegin вызывается До нее, а TTSCommit -после. При ошибке сообщается, что она произошла в ValidateWrite(), но на таблице нет ни отношений, ни уникальных индексов, ни перекрытого метода ValidateWrite(). Обязательные поля заполнены все. Последний раз редактировалось Evgenius; 03.05.2011 в 16:08. |
|
![]() |
#4 |
MCT
|
ну начинать надо по порядку :
1 axRecord то вообще создает запись, без последующего обновления? то есть закоментить write() и вызвать insert().
__________________
Axapta book for developer |
|
![]() |
#5 |
Участник
|
Это работает в нескольких приложениях, разработанных для обмена данными со сторонними системами. В чем тут проблема? Я понимаю, что метод insert может содержать что-то дополнительное, но здесь НЕ содержит. Точно. Вообще, у всех тутошних таблиц пока что НЕ ПЕРЕКРЫТ ни один метод.
Последний раз редактировалось Evgenius; 03.05.2011 в 18:14. |
|
![]() |
#6 |
Участник
|
Цитата:
В идеале, перехватить ошибку и сбросить в лог значения всех полей той записи, которая создается/модифицируется. Или просто на этапе отладки перед выполнением проблемного метода сбрасывать значения всех полей в лог. |
|
|
За это сообщение автора поблагодарили: Evgenius (1). |
![]() |
#7 |
Участник
|
Цитата:
Сообщение от Владимир Максимов
![]() Надо еще проверить, что поля заполнены допустимыми значениями. Не только обязательные для заполнения, а вообще все. Ну, например, нет ли где попытки записать значение NULL?
В идеале, перехватить ошибку и сбросить в лог значения всех полей той записи, которая создается/модифицируется. Или просто на этапе отладки перед выполнением проблемного метода сбрасывать значения всех полей в лог. (насчет явной установки null можно не беспокоиться - метод AxaptaRecord.set_Field не допускает такие значения) |
|
![]() |
#8 |
Участник
|
Цитата:
Сообщение от Владимир Максимов
![]() Надо еще проверить, что поля заполнены допустимыми значениями. Не только обязательные для заполнения, а вообще все. Ну, например, нет ли где попытки записать значение NULL?
В идеале, перехватить ошибку и сбросить в лог значения всех полей той записи, которая создается/модифицируется. Или просто на этапе отладки перед выполнением проблемного метода сбрасывать значения всех полей в лог. ![]() А нет ли какого способа получать информацию о причинах ошибки (почему "внешний компонент вызвал исключение" и т.п.)? Или можно только доработать свои таблицы, чтобы хоть с ними было ясно? |
|
Теги |
business connector, com connector |
|
Опции темы | Поиск в этой теме |
Опции просмотра | |
|