WF - не для замены языка программирования. Он для задания некоего протяженного по времени процесса. Типа:
"заявка должна быть одобрена руководителем
если сумма заявки > 1000 её одобряет бухгалтер
после чего материалы можно получить на складе"
Каждая стадия может быть разнесена во времени - то есть состояние этого автомата сохраняется.
В Аксапте, например, это реально выражается просто в проверке перед разноской, одобрили ли ее. Сама разноска не пишется на форкфлов.
X++:
public boolean validate()
{
boolean isValid = true;
;
if (! ledgerJournalTable.JournalNum)
{
isValid = checkFailed(strfmt("@SYS21496", ledgerJournalTable.JournalNum));
}
isValid = isValid && JournalTableData::newTable(ledgerJournalTable).checkOpen();
if (post == NoYes::Yes && ledgerJournalTable.isInWFApprovalProcess() && !ledgerJournalTable.isWFApprovalApproved())
{
// The journal is in workflow approvals and not approved so it can't be posted.
isValid = checkFailed(strfmt("@SYS110592", ledgerJournalTable.JournalNum));
}
return isValid;
}
Форкфлов просто описывает логику передачи заявки от одной инстанции к другой.