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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 13.11.2012, 22:33   #1  
EVGL is offline
EVGL
Banned
Соотечественники
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
4,445 / 3001 (0) ++++++++++
Регистрация: 09.07.2002
Адрес: Parndorf, AT
AX2012: a way to keep it simple
AX2009:
X++:
static void setDimension(Args _args)
{
    CustTable                       custTable;    
    
    ttsBegin;
    while select forUpdate custTable   
        where custTable.LineOfBusinessId
    {
        custTable.Dimension[1] = custTable.LineOfBusinessId;
        custTable.update();           
    }        
    ttsCommit;
}
AX2012:
X++:
static void setDimension(Args _args)
{
    DimensionValue                  dimValue;
    CustTable                       custTable;
    
    DimensionFinancialTag           dimFinTag;
    FinancialTagCategory            finTagCat;
    DimensionAttributeDirCategory   dimAttrCat;
    DimensionAttribute              dimAttr;
    DimensionAttributeValueSetItem  dimAttrSetItem;
    DimensionAttributeValue         dimAttrValue;
    DimensionDefault                dimDefaultRecId;                               
    
    ttsBegin;
    while select forUpdate custTable   
        order by custTable.LineOfBusinessId // the dimension value is stored here
        where custTable.LineOfBusinessId
    {
        if (custTable.LineOfBusinessId != dimValue)  
        {
            dimValue = custTable.LineOfBusinessId;
            dimDefaultRecId = 0;

            select firstOnly dimFinTag
                where dimFinTag.Value == dimValue
            join finTagCat
                where finTagCat.RecId == dimFinTag.FinancialTagCategory
            join dimAttrCat     
                where dimAttrCat.DirCategory == finTagCat.RecId
            join dimAttr
                where dimAttr.RecId == dimAttrCat.DimensionAttribute
            join dimAttrValue        
                where dimAttrValue.DimensionAttribute == dimAttr.RecId
                   && dimAttrValue.EntityInstance     == dimFinTag.RecId;
    
            while select count(RecId), maxOf(DimensionAttributeValue) from dimAttrSetItem
                group by DimensionAttributeValueSet
            {
                if (dimAttrSetItem.RecId == 1 && dimAttrSetItem.DimensionAttributeValue == dimAttrValue.RecId)
                {
                    dimDefaultRecId = dimAttrSetItem.DimensionAttributeValueSet;    
                    break;
                }
            }
        }        
        custTable.DefaultDimension = dimDefaultRecId;
        custTable.update();           
    }        
    ttsCommit;
}
Разумеется, не забываем сначала пройтись по таблице и сохранить все уникальные значения аналитики вручную, чтобы система создала записи DimensionAttributeValue и DimensionAttributeValueSetItem.

Последний раз редактировалось EVGL; 13.11.2012 в 22:43.
За это сообщение автора поблагодарили: mazzy (2), S.Kuskov (2).
Старый 13.11.2012, 23:30   #2  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,940 / 3229 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Не вникал особой в логику, но по-моему основную часть кода можно вынести в метод и забыть об этой сложности.
Старый 14.11.2012, 00:19   #3  
Ivanhoe is offline
Ivanhoe
Участник
Аватар для Ivanhoe
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
4,143 / 2156 (80) +++++++++
Регистрация: 29.09.2005
Адрес: Санкт-Петербург
В книге "Microsoft Dynamics AX 2012 Devel. Cookbook - M. Pocius (Packt, 2012) BBS" есть конкретный пример по работе с комбинацией счет ГК / аналитики из кода, пример общего метода для работы с комбинациями. Мне кажется, по аналогии можно собрать такой универсальный метод и пользоваться им. Что скажут знатоки?
__________________
Ivanhoe as is..
Старый 14.11.2012, 00:28   #4  
EVGL is offline
EVGL
Banned
Соотечественники
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
4,445 / 3001 (0) ++++++++++
Регистрация: 09.07.2002
Адрес: Parndorf, AT
Да, конечно. Просто для эксперимента сделал в SQL, чтобы проиллюстрировать неприятности при импорте данных, точнее их самую малую часть.
Старый 14.11.2012, 11:35   #5  
Ivanhoe is offline
Ivanhoe
Участник
Аватар для Ivanhoe
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
4,143 / 2156 (80) +++++++++
Регистрация: 29.09.2005
Адрес: Санкт-Петербург
А новые возможности интеграции с Office не помогут? Там же по идее лукапы должны работать.
__________________
Ivanhoe as is..
Старый 14.11.2012, 11:37   #6  
EVGL is offline
EVGL
Banned
Соотечественники
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
4,445 / 3001 (0) ++++++++++
Регистрация: 09.07.2002
Адрес: Parndorf, AT
Ну что вы! Может быть, в R2 что-то и заработает, а в AX2012 CU3 - каюк. Например, через Excel не удастся заимпортировать "ручные" аналитики, шанс есть только с отделами и центрами затрат, которые лежат в отдельных таблицах. Однако, копии значений этих аналитик в DimensionAttributeValue создаются только по мере необходимости, поэтому использовать их как Foreign Key в другой таблице сразу не удастся. Да и вообще, что-либо, связанное с фин. аналитиками, проще переносить вручную. С импортом справочников клиентов и поставщиков тоже будут массивные проблемы, поскольку убрали и денормализировали CustVendTable.Name и все, что связано с адресами; там теперь тройной-четверной джойн CustTable - DirParty - ... - LogisticsLocation.

Говорят, что есть шанс воспользоваться "IMDF - Intelligent Data Management Framework", но я не пробовал:
https://mbs.microsoft.com/partnersou...es/ax_idmf.htm
Хотя нет, это явно не для импорта, а для переноса данных между инсталлациями: Святой Грааль - архивация данных в AX.

Последний раз редактировалось EVGL; 14.11.2012 в 11:59.
Старый 14.11.2012, 12:13   #7  
Vadik is offline
Vadik
Модератор
Аватар для Vadik
Лучший по профессии 2017
Лучший по профессии 2015
 
3,631 / 1849 (69) ++++++++
Регистрация: 18.11.2002
Адрес: гражданин Москвы
Цитата:
Сообщение от EVGL Посмотреть сообщение
С импортом справочников клиентов и поставщиков тоже будут массивные проблемы, поскольку убрали и денормализировали CustVendTable.Name и все, что связано с адресами; там теперь тройной-четверной джойн CustTable - DirParty - ... - LogisticsLocation.

Говорят, что есть шанс воспользоваться "IMDF - Intelligent Data Management Framework", но я не пробовал:
https://mbs.microsoft.com/partnersou...es/ax_idmf.htm
Посмотрите на Data Migration Framework - там уже подготовлены схемы для многих основных справочников
__________________
-ТСЯ или -ТЬСЯ ?
За это сообщение автора поблагодарили: EVGL (5), Ivanhoe (5).
Старый 27.11.2012, 21:21   #8  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,940 / 3229 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
А вы не думали над тем чтобы завести денормализованные временные таблички CustVendTableImportTMP, в которых завести все какие нам надо поля (Dimension, Name, и.т.п.) и при вставке значений в эти таблички, на Insert() искать соответсвующие записи реальных табличек и если есть то обновлять, а если нет то добавлять запись. Тогда вся сложная логика по сохранению наименований, складских аналитик, будет спрятана. Удобно получится.
Модификация вроде бы должна быть несложная. Один раз написать, а потом всегда использовать.
Старый 27.11.2012, 21:50   #9  
Vadik is offline
Vadik
Модератор
Аватар для Vadik
Лучший по профессии 2017
Лучший по профессии 2015
 
3,631 / 1849 (69) ++++++++
Регистрация: 18.11.2002
Адрес: гражданин Москвы
Цитата:
Сообщение от Logger Посмотреть сообщение
А вы не думали над тем чтобы завести денормализованные временные таблички CustVendTableImportTMP, в которых завести все какие нам надо поля (Dimension, Name, и.т.п.) и при вставке значений в эти таблички, на Insert() искать соответсвующие записи реальных табличек и если есть то обновлять, а если нет то добавлять запись
А DMF что-то принципиально иное делает ?
__________________
-ТСЯ или -ТЬСЯ ?
За это сообщение автора поблагодарили: Logger (5).
Старый 16.03.2013, 19:37   #10  
Vadik is offline
Vadik
Модератор
Аватар для Vadik
Лучший по профессии 2017
Лучший по профессии 2015
 
3,631 / 1849 (69) ++++++++
Регистрация: 18.11.2002
Адрес: гражданин Москвы
axsa: Microsoft Dynamics AX 2012 Data Import/Export Framework (Old name - Data Migration Framework) is now available on Information source
UPD: axsa: Microsoft Dynamics AX 2012 Data Import/Export Framework (Old name - Data Migration Framework) is now available on Information source
__________________
-ТСЯ или -ТЬСЯ ?
Теги
ax2012, dmf

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
axblog4u: Display Web Image Content in Forms using Dynamics AX2012 Blog bot DAX Blogs 0 28.05.2012 19:12
emeadaxsupport: AX2012 and AX2009 or AX4 side by side - AOS performance counters overwritten Blog bot DAX Blogs 0 13.03.2012 18:11
axblog4u: Dynamics AX2012: Create Custom Service using X++ Blog bot DAX Blogs 0 24.01.2012 21:11
sumitax: AX2012 – One stop for all documentation released my Microsoft Blog bot DAX Blogs 0 26.09.2011 19:13
ukax: Microsoft Dynamics AX2012 - Partner Update Briefing Blog bot DAX Blogs 0 23.07.2011 20:15

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

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

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