MS Dynamics AX 2009: можно ли воссоздать инфологию из инфологоданных - PullRequest
2 голосов
/ 18 февраля 2011

Можно ли восстановить инфолог из InfologData? Рассмотрим код

static void Job12(Args _args)
{
    InfologData infologData;
    ;

    // here we report something
    error("something awful");
    error("something terrible");
    setprefix("scary");
    warning("mouse");

    // here we get infolog data
    infologData = infolog.infologData();

    infolog.clear(0);

    // SOME CODE

    // here we view infolog once again
}       

что я должен написать вместо // SOME CODE для восстановления "чего-то ужасного", "чего-то ужасного", "страшного \ tmouse" в infolog из infologData?

Моя цель - выполнить какую-либо операцию, сохранить инфологию в базе данных, а затем показать ее пользователю, когда он этого захочет.

Ответы [ 2 ]

3 голосов
/ 20 февраля 2011

infologData могут быть восстановлены в Infolog следующим образом:

    infolog.import(infologData);

Например:

static void Job12(Args _args)
{
    InfologData infologData;

    void saveInfolog()
    {
        ;
        // here we report something
        error("something awful");
        error("something terrible");
        setprefix("scary");
        warning("mouse");

        // here we get infolog data
        infologData = infolog.infologData();

        infolog.clear(0);
    }

    void restoreInfolog()
    {
        ;
        // here we view infolog once again
        infolog.import(infologData);
    }
    ;

    saveInfolog();
    restoreInfolog();
}

Я отделил saveInfolog от restoreInfolog, чтобы избежать проблем с префиксами.

PSЯ предпочитаю import (), а не view () по простой причине: если вы отобразите дополнительную информацию / предупреждение / ошибку между saveInfolog () и restoreInfolog (), вывод будет совершенно другим - import () будет более подходящим в большинстве сценариев.

2 голосов
/ 18 февраля 2011

Простое решение: сохранить возвращаемое значение в поле контейнера.Помните, что не храните поля контейнера в таблицах транзакций, так как для извлечения записи требуется одна дополнительная операция на диск для каждого поля контейнера / памятки.

Позже вы можете отобразить значение в infolog:

infolog.view(x.InfoLogData);

Вы можете преобразовать контейнер в строку:

info(Info::infoCon2str(x.InfoLogData));
...