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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 16.09.2005, 17:21   #11  
vic_z is offline
vic_z
Участник
 
26 / 30 (2) +++
Регистрация: 11.12.2003
Re: Создание наследника EDT через Х++
Цитата:
Изначально опубликовано vesna
..Хочу сделать мастер создания справочников, чтобы освободить себя от нудной работы создания EDT, таблицы, полей, индексов и тд,тд..
После программного создания EDT, появиться еще одна проблемка - настроить Relation на EDT через код.

Я делал следующим образом.
Программно экспортировал существующий EDT (например AssetId). Далее в тексте xpo-файла производил замену текущего названия EDT на новое. После этого импортировал исправленный xpo-файл. Далее модифицировал свойства EDT через метод Global::setProperty().

Конечно этот метод можно назвать извращенным. Однако, более красивого способа, как можно добавить EDT's relation, я не нашел.


PHP код:
#aot
#AotExport
#File
#Properties
#define.DefaultStr_PatternName("AssetId")
#define.DefaultInt_PatternName("xRefPathRecId")
#define.EDTStartPos(61)
#define.test('123456789')
static void newEDT(str _name "test"str _parentEDTName "Num"boolean _withRelation true)
{
    
TreeNode   treeNode treenode::findNode(#ExtendedDataTypesPath);
    
TreeNode   patternNode;
    
str        patternName;
    
str        filename;
    
TextBuffer textBuffer;
    
int        exportId;
    
DictType   dictType;
    ;

    if (
treeNode.AOTfindChild(_name))
        throw 
error(strfmt("EDT %1 already exists"_name));

    if (
_withRelation)
    {
        
dictType = new DictType(treeNode.AOTfindChild(_parentEDTName).applObjectId());
        switch (
dictType.baseType())
        {
            case 
Types::String :
                
patternName #DefaultStr_PatternName;
                
break;
            case 
Types::Integer :
                
patternName #DefaultInt_PatternName;
                
break;
            default:
                throw 
error(strfmt("Ðarent EDT %1 must be string or integer data type"_parentEDTName));
        }
    }
    else
    {
        
patternName _parentEDTName;
    }

    
patternNode treeNode.AOTfindChild(patternName);
    if (!
patternNode)
        throw 
error(strfmt("Pattern EDT %1 does not exist"patternName));

    
filename Xinfo::directory(DirectoryType::Temp) + patternName #xpo;

    
patternNode.treeNodeExport(filename);

    
textBuffer = new TextBuffer();
    
textBuffer.fromFile(filename);
    
textBuffer.replace(patternName#test);
    
textBuffer.replace(#test, _name);
    
textBuffer.toFile(filename);

    
exportId infolog.startImport(filename0);

    
infolog.importElement(exportId,
                          
UtilFileType::Application,
                          
UtilElementType::ExtendedType,
                          
_name,
                          
#EDTStartPos,
                          #impOk);

    
infolog.endImport(exportId1);

    if (!
treeNode.AOTfindChild(_name))
        throw 
error(strfmt("EDT %1 has not been created"_name));


Теперь можно изменить программно Relation
PHP код:
    TreeNode         EDTNode = ....AOTfindChild(myNewEDT);
    
TreeNode         parent EDTNode.AOTfindChild(#PropertyRelations);
    
TreeNode         relation;
    
str              properties;
    ;
    
parent EDTNode.AOTfindChild(#PropertyRelations);
    
relation parent.AOTfirstChild();
    if (!
relation)
    {
            throw 
error(strfmt("Relation of EDT %1 does not exist"EDTNode.toString()));
    }

    
properties relation.AOTgetProperties();
    
properties setProperty(properties#PropertyTable, _tableName);
    
properties setProperty(properties#PropertyRelatedfield, _relatedName);
    
relation.AOTsetProperties(properties);
    
EDTNode.AOTsave(); 
Надесь это как-нибудь поможет.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
4.0SP2: Создание записи в ForecastSales через API Jab Straight DAX: Программирование 8 30.11.2007 11:39
Создание РБП, через периодические операции sparur DAX: Функционал 7 30.08.2007 19:44
Создание EDT в X++ Dimus DAX: Программирование 9 14.10.2005 13:48
Список полей таблиц на базе конкретного EDT Владимир Максимов DAX: Программирование 10 06.10.2004 14:45
Создание контролов через TreeNode uvi DAX: Программирование 3 21.07.2003 11:23

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

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

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