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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 14.11.2010, 10:18   #1  
Blog bot is offline
Blog bot
Участник
 
25,459 / 846 (79) +++++++
Регистрация: 28.10.2006
Preston.Larimer: Item import from CSV file made easy (Kinda)
Источник: http://palarimer.greenlight2go.com/2...made-easy.html
==============

The job below uses the axInventTable class to create items from a CSV file. We gave the client an Excel file with columns identified for them to fill in for new items they wanted then saved that without the header to a CSV file. This job reads in a CSV file then uses the axInventTable class to create the new Item. The axInventTable class manages all related tables for us. If you look at the code below, you can see through this class we can easily set values in the related tables as well as the main inventTable record. In the below job you can see we used a mix of values read from the file, and values hard coded, you can easily add fields to your import file to incorporate into the creation of your item as you need them.
One thing to be aware of is if Item templates exist AX will try to find the default Item template to use when it does the initialization of the tables. If there is not a default template it will use the first template found. This is easy enough to work around, just create a new item with minimal fields set and make a template from that item and set it as default using the SysRecordTemplateTable form.
Note: As a side note Atlas 4.0 appears makes use of a similar process for item imports and has the same issue with the Item Template described above.

X++:
//-JobStart -->
static void GL_ItemImport(Args _args)
{
    axInventTable axInventTable;
    inventTable inventTable;
    itemID itemID;
    textBuffer tb = new textBuffer();
    int cnt;
    int numLines;
    int c;
    container inLine;
    Dimension finDim;
    itemType ItemType;
    ;
    tb.fromFile('C:\\items.txt');  //File name  with Path ...
    numLines = tb.numLines();
    if(numLines)
    {
        for(cnt = 0; cnt < numLines; ++cnt)
        {
            inLine = str2Con(tb.nextToken(true));
            if(conpeek(inLine, 1))  //first field item ID don’t do anything if blank ....
            {
                axInventTable =  new axInventTable();
                axInventTable.parmItemId(conPeek(inLine, 1));
                axInventTable.parmItemName(conPeek(inLine, 2));
                axInventTable.parmNameAlias(conPeek(inLine, 3));
                axInventTable.parmItemGroupId(conPeek(inLine, 4));
                axInventtable.parmItemType(str2enum(ItemType, conPeek(inLine, 5)));
                axInventTable.parmModelGroupId(conPeek(inLine, 6));
                axInventTable.parmDimGroupId(conPeek(inLine, 7));
                axInventTable.axInventTableModule_Sales().parmTaxItemGroupId(conPeek(inLine, 13));
                axInventTable.parmPrimaryVendorId(conPeek(inLine, 14));
                axInventTable.axInventTableModule_Purch().parmPrice(ConPeek(inLine, 15));
                //Set financial dimension
                finDim[2] = conPeek(inLine, 18);
                axInventTable.parmDimension(finDim);
                axInventTable.axInventTableModule_Purch().parmUnitId(conPeek(inLine, 20));
                axInventTable.axInventTableModule_Sales().parmUnitId(conPeek(inLine, 21));
                axInventTable.axInventTableModule_Invent().parmUnitId(conPeek(inLine, 22));
                axInventTable.parmPackagingGroupId('TMP');
                axInventTable.parmBOMUnitId(conPeek(inLine, 22));
                axInventTable.axInventTableModule_Invent().parmOverDeliveryPct(20);
                axInventTable.axInventTableModule_Invent().parmUnderDeliveryPct(20);
                axInventTable.axInventTableModule_Sales().parmOverDeliveryPct(20);
                axInventTable.axInventTableModule_Sales().parmUnderDeliveryPct(20);
                axInventTable.axInventTableModule_Purch().parmOverDeliveryPct(20);
                axInventTable.axInventTableModule_Purch().parmUnderDeliveryPct(20);
                axInventTable.save();
                ++c;
            }
        }
        info(strFmt('Imported %1 Items', c));
    }
}
//-Job End <--
==============
Источник: http://palarimer.greenlight2go.com/2...made-easy.html
__________________
Расскажите о новых и интересных блогах по Microsoft Dynamics, напишите личное сообщение администратору.
Старый 14.11.2010, 10:18   #2  
Blog bot is offline
Blog bot
Участник
 
25,459 / 846 (79) +++++++
Регистрация: 28.10.2006
Preston.Larimer: Ledger Journal Import, General Journal
Источник: http://palarimer.greenlight2go.com/2...rnal_7802.html
==============

Importing from a CSV file to create a Ledger journal, we make use of the aX classes here and they simplify our work a lot compared to managing the tables directly. The data being imported below is minimal; but the code should give you a good example of how to work with additional fields.

X++:
//Job Start -->
static void GL_GJImport(Args _args)
{
    textBuffer tb = new textBuffer();
    int cnt;
    int numLines;
    int c;
    container inLine;
    boolean first = true;
    Dimension finDim;
    amount amount;
    LedgerJournalACType LedgerJournalACType;
    ledgerJournalName ledgerJournalName;
    journalID JournalID;
    axLedgerJournalTable axLedgerJournalTable;
    axledgerJournalTrans axLedgerJournalTrans;
    LedgerJournalType JournalType = ledgerJournalType::Daily;
    ;
    tb.fromFile('C:\\sampleGLImport.csv');  //File name  with Path ...
    numLines = tb.numLines();
    if(numLines)
    {
        ttsBegin;
        for(cnt = 0; cnt < numLines; ++cnt)
        {
            inLine = str2Con(tb.nextToken(true));
            if(conpeek(inLine, 1) && !first)  //first field don’t do anything if blank
            {
                if(!JournalID) //Create Journal Haader
                {
                    select firstonly ledgerJournalName
                        where ledgerJournalName.JournalType == JournalType;
                    axLedgerJournalTable = new axLedgerJournalTable();
                    axLedgerJournalTable.parmJournalName(ledgerJournalName.JournalName);
                    axLedgerJournalTable.parmJournalType(JournalType);
                    axLedgerJournalTable.parmName("Journal Description");
                    axLedgerJournalTable.save();
                    JournalID = axLedgerJournalTable.parmJournalNum();
                }
                //Create Trans ...
                axLedgerJournalTrans = new axLedgerJournalTrans();
                axLedgerJournalTrans.parmJournalNum(JournalID);
                axLedgerJournalTrans.parmAccountType(  str2Enum(LedgerJournalACType, conPeek(inLine, 1)));
                axLedgerJournalTrans.parmAccountNum(conpeek(inLine, 2));
                axLedgerJournalTrans.parmOffsetAccountType(  str2Enum(LedgerJournalACType, conpeek(inLine, 3)));
                axLedgerJournalTrans.parmOffsetAccount(conpeek(inLine, 4));
                finDim[1] = conPeek(inLine, 6);
                finDim[2] = conPeek(inLine, 7);
                axLedgerJournalTrans.parmDimension(finDim);
                amount = conpeek(inLine, 5);
                axLedgerJournalTrans.parmAmountCurCredit((amount > 0 ? abs(amount) : 0));
                axLedgerJournalTrans.parmAmountCurDebit((amount < 0 ? abs(amount) : 0));
                axLedgerJournalTrans.save();
                ++c;
            }
            first = false;
        }
        ttsCommit;
        info(strFmt('Imported %1 Items', c));
    }
}
// Job End <--
==============
Источник: http://palarimer.greenlight2go.com/2...rnal_7802.html
__________________
Расскажите о новых и интересных блогах по Microsoft Dynamics, напишите личное сообщение администратору.
Старый 14.11.2010, 11:01   #3  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от Blog bot Посмотреть сообщение
The job below uses the axInventTable class to create items from a CSV file.
Ну, не знаю.

С одной стороны, импорт штатными инструментами еще проще
http://axapta.mazzy.ru/lib/import/

С другой стороны, ax*-классы выполняют логику по заполнению данных.

С третьей стороны, локализация не озаботилась ax*-классами, поэтому русских полей в ax*-классах сейчас нет. А на проектных таблицах их вообще никто не делает (по-крайней мере, я еще ни разу не видел и сам пока не делаю).

В общем, замечательно-буржуйский совет. Работает только в правильно-буржуйской версии.
Или ошибаюсь?
__________________
полезное на axForum, github, vk, coub.
Старый 15.11.2010, 12:26   #4  
Vadik is offline
Vadik
Модератор
Аватар для Vadik
Лучший по профессии 2017
Лучший по профессии 2015
 
3,631 / 1849 (69) ++++++++
Регистрация: 18.11.2002
Адрес: гражданин Москвы
Цитата:
Сообщение от mazzy Посмотреть сообщение
локализация не озаботилась ax*-классами, поэтому русских полей в ax*-классах сейчас нет
Не совсем так - для классов (таблиц) участвующих в стандартных документах AIF для полей на GLS методы вроде бы создают (возможно не все, даже некоторые поля с SYS кое-где пропущены). Но это не самая большая проблема, так как процесс более-менее автоматизируется - см. опцию в визарде Axd документов для обновления AxBC классов
Цитата:
С другой стороны, ax*-классы выполняют логику по заполнению данных.
Проблема в том, что логика Ax классов отличается от той логики, которая прописана в modifiedField() на таблицах или не дай Б-г в формах (заполнение и очистка связанных полей, к примеру). В итоге получается, что при вводе тех же данных в те же поля в том же порядке руками в формах и через AxBC классы можем получить разный результат.
В идеале наверное хотелось бы чтобы ОТОВСЮДУ с данными работали по принципу "одного окна" (через AxBC классы), но тут возникает вопрос трудозатрат - у кого-то просто не хватит ресурсов на редизайн, у кого-то приложение в состоянии вечного "работает - не чини" . Ну и вендору конечно тоже придется и код лопатить, и серьезную просветительскую работу вести. Т.е. до светлого SOA будущего еще пилить и пилить
__________________
-ТСЯ или -ТЬСЯ ?
За это сообщение автора поблагодарили: mazzy (2).
Теги
ax2009, axbc, импорт данных

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Microsoft Dynamics CRM Team Blog: Importing two or more entities from a Single File Blog bot Dynamics CRM: Blogs 0 09.11.2010 19:05
dynamicsaxtraining: Item setup: Inventory dimension group Blog bot DAX Blogs 1 05.10.2010 15:35
Вопрос про Demand Planner slava09 DAX: Функционал 4 25.09.2006 11:43
Import Consolidation from File <Attain> uk NAV: Программирование 1 26.03.2004 17:13
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 00:29.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.