Показать сообщение отдельно
Старый 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.