static void Job1(Args _args) { InventJournalCheckPost inventJournalCheckPost; InventJournalTable inventJournalTable; ; inventJournalTable = InventJournalTable::find("MyJournalID"); inventJournalCheckPost = InventJournalCheckPost::newPostJournal(inventJournalTable); inventJournalCheckPost.parmThrowCheckFailed(true); try { inventJournalCheckPost.run(); } catch { info("An error has occurred, journal not posted."); } }
When setting parmThrowCheckFailed to true, when the journal fails to be posted by any reason, Dynamics AX will throw an error with the error message. If you don't, it will simply show the error message on the infolog, but, technically, you wont know wether it posted successfully or not, so it depends on what you're trying to do. This is specially useful when you're working with transactions and depend on the journal being posted successfully to continue with your code or to abort everything.
If you're simply trying to Validate (Check) an Invent Journal, all you have to do is change which constructor you'll use for the class InventJournalCheckPost, like this:
static void Job1(Args _args) { InventJournalCheckPost inventJournalCheckPost; InventJournalTable inventJournalTable; ; inventJournalTable = InventJournalTable::find("MyJournalID"); // Constructor to just check the journal: inventJournalCheckPost = InventJournalCheckPost::newJournalCheckPost(JournalCheckPostType::Check, inventJournalTable); inventJournalCheckPost.parmThrowCheckFailed(true); try { inventJournalCheckPost.run(); } catch { info("The journal contains errors."); } }
And all the other classes for Journals go with the same base, so for example, for a Production Journal, the correct class to perform checking or posting is ProdJournalCheckPost. That is because all of them inherit from JournalCheckPost or JournalCheckPostLedger (which inherits from JournalCheckPost).
So that's it, that's how you post or check a journal with code.