AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 03.05.2011, 15:57   #11  
Evgenius is offline
Evgenius
Участник
 
56 / 10 (1) +
Регистрация: 03.11.2010
Давно известно, что когда код вынужденно разбит на кучу процедур и потому состоит из одних вызов, он вызывает только вопросы.
Ну, попробуем:


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.
Теги
business connector, com connector

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
dax-lessons: Easy way to write queries/select statements – Editor scripts Blog bot DAX Blogs 0 17.12.2010 21:11
dynamicsaxtraining: Write down the record Blog bot DAX Blogs 0 08.12.2010 20:11
Переход на первую строку SalesLine_ds при вызове SalesTable_ds.write() Владимир Максимов DAX: Программирование 4 02.10.2008 18:08
Как понять что вызывает исключение Invalid Method Call Jab Straight DAX: Программирование 0 17.12.2007 23:23
Dynamics AX: .Net BC, C# - Working with AxaptaRecord Object Blog bot DAX Blogs 0 20.06.2007 23:13

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 10:04.