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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 20.01.2021, 16:44   #1  
trud is offline
trud
Участник
Лучший по профессии 2017
 
1,039 / 1635 (57) ++++++++
Регистрация: 07.06.2003
Записей в блоге: 1
Спасибо что поделились. Еще как вариант можно наверное сделать отдельную табличку(Статус, Результирующий файл), запускать эту операцию в пакете и приатачивать файл к этой табличке по завершению. Пользователь соответсвенно будет скачивать файл когда он сформируется и может вообще закрыть браузер
Старый 20.01.2021, 17:30   #2  
kair84 is offline
kair84
Участник
 
47 / 58 (2) ++++
Регистрация: 15.04.2010
Адрес: Belarus
Цитата:
Сообщение от trud Посмотреть сообщение
Спасибо что поделились. Еще как вариант можно наверное сделать отдельную табличку(Статус, Результирующий файл), запускать эту операцию в пакете и приатачивать файл к этой табличке по завершению. Пользователь соответсвенно будет скачивать файл когда он сформируется и может вообще закрыть браузер
Конечно, можно развивать идею на свой вкус и цвет.

Для моих целей этого вполне достаточно, я всего лишь хотел восстановить возможность взаимодействия с пользователем после выполнения операции в отдельной сессии.

Доработал пример для корректной работы в пакетном режиме
X++:
// This is a framework class. Customizing this class may cause problems with future upgrades to the software.
class Test_RunbaseBatch extends RunBaseBatch
{
    // Packed variables
    str             csvFileContent;
    Email           email2Send;

    #define.CurrentVersion(1)
    #localmacro.CurrentList
        csvFileContent,
        email2Send
    #endmacro

    public boolean getFromDialog()
    {
        boolean ret;

        ret = super();

        email2Send = SysUserInfo::getUserEmail(curUserId());

        return ret;
    }

    public container pack()
    {
        return [#CurrentVersion,#CurrentList];
    }

    public void run()
    {
        info("run");

        if (! this.validate())
            throw error("");

        commaStreamIo iO = commaStreamIo::constructForWrite();

        container header = ["Num"];
        iO.writeExp(header);

        int i;
        for (i=1; i<=660; i++)
        {
            iO.write(i);

            //sleep(1000); //Over 10 min.
            sleep(100);
        }

        System.IO.Stream stream = iO.getStream();
        stream.Position = 0;
        System.IO.StreamReader reader = new System.IO.StreamReader(stream);
        csvFileContent = reader.ReadToEnd();

        if (this.isInBatch())
        {
            this.runAfterOperation();
        }

    }

    public void runAfterOperation()
    {
        info("runAfterOperation");

        Filename filename = "file.csv";
        System.Byte[] byteArray =  System.Text.Encoding::Unicode.GetBytes(csvFileContent);
        System.IO.MemoryStream stream = new System.IO.MemoryStream(byteArray);
        stream.Position = 0;

        if (this.isInBatch())
        {
            if (SysEmailDistributor::validateEmail(email2Send))
            {
                SysMailerMessageBuilder messageBuilder = new SysMailerMessageBuilder();
                messageBuilder.setFrom(email2Send,"@SYS115063")
                              .addTo(email2Send)
                              .setPriority(1)
                              .setSubject(this.caption())
                              .setBody(this.caption())
                              .addAttachment(stream, fileName);
                SysMailerFactory::sendNonInteractive(messageBuilder.getMessage());
                info(strFmt("CSV file %1 Sent to user on e-mail %2",filename,email2Send));

            }
        }
        else
        {
            File::SendFileToUser(stream, fileName);
            info(strFmt("CSV file %1 Sent to user",filename));
        }

    
    }

    public boolean runsImpersonated()
    {
        return true;
    }

    public boolean unpack(container packedClass)
    {
        Version version = RunBase::getVersion(packedClass);
    ;
        switch (version)
        {
            case #CurrentVersion:
                [version,#CurrentList] = packedClass;
                break;
            default:
                return false;
        }

        return true;
    }

    public boolean validate(Object _calledFrom = null)
    {
        if (false)
            return checkFailed("");

        return true;
    }

    static ClassDescription description()
    {
        return "Test RunBase";
    }

    static Test_RunbaseBatch construct()
    {
        return new Test_RunbaseBatch();
    }

    static void main(Args args)
    {
        Test_RunbaseBatch    runBase;

        runBase = Test_RunbaseBatch::construct();

        if (runBase.prompt())
        {
            runBase.runOperation();

            if (!runBase.batchInfo().parmBatchExecute())
            {
                runBase.runAfterOperation();
            }
        }

    }

    protected boolean canRunInNewSession()
    {
        return true;
    }

}
Старый 22.01.2021, 15:33   #3  
kair84 is offline
kair84
Участник
 
47 / 58 (2) ++++
Регистрация: 15.04.2010
Адрес: Belarus
Теперь по теме:
Вот как процесс обработчик может информировать пользователя о прогрессе
Нажмите на изображение для увеличения
Название: SysOp_Progress.JPG
Просмотров: 32
Размер:	57.4 Кб
ID:	13030
Теги
#страшнодалекиониотнарода

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
mfp: X++ in AX7: String truncation Blog bot DAX Blogs 6 29.05.2020 18:24
mfp: What is new in X++ in AX7? Blog bot DAX Blogs 2 10.02.2016 00:29
Пример использования RunBuf Mechanizm DAX: Программирование 11 02.03.2004 13:25
Пример использования класса RunBase* Andronov DAX: Программирование 3 17.09.2003 13:12
HB_Tutorial_setTmpData - пример использования метода setTmpData vitk DAX: База знаний и проекты 0 10.12.2001 15:26
Опции темы Поиск в этой теме
Поиск в этой теме:

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

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

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

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