Codeunit 1502 "Workflow Setup"
Base Application · System.Automation
Across versions
- BC23present
- BC244 procedures removed, 1 events changed
- BC25-27unchanged
- BC2813 procedures added, 1 procedures changed
- BC294 procedures added
- BC30unchanged
Neighbourhood 21 connected objects and pages
Base Application · System.Automation · BC23-30 · source at ea08af5e · facts from BC29
Events published
OnInsertWorkflowTemplates()Δ BC24 (integration)- subscribers: Codeunit 6139 “E-Document Workflow Setup” OnInsertWorkflowTemplates
OnAddWorkflowCategoriesToLibrary()(integration)- subscribers: Codeunit 6139 “E-Document Workflow Setup” OnAddWorkflowCategoriesToLibrary, Codeunit 6280 “Sust. Workflow Event Handling” OnAddWorkflowCategoriesToLibrary
OnAllowEditOfWorkflowTemplates(var Allow: Boolean)(internal)- subscribers: Codeunit 104056 “Upgrade Workflow” AllowDeletionOfWorkflowTemplates
OnAfterInitWorkflowTemplates()(integration)- subscribers: Codeunit 6280 “Sust. Workflow Event Handling” InsertWorkflowTemplates
OnAfterInsertApprovalsTableRelations()(integration)- subscribers: Codeunit 6280 “Sust. Workflow Event Handling” OnAfterInsertApprovalsTableRelations
Procedures
InitWorkflow()InsertWorkflowCategories()InsertWorkflowTemplate(var Workflow: Record Workflow; WorkflowCode: Code[17]; WorkflowDescription: Text[100]; CategoryCode: Code[20])ResetWorkflowTemplates()(internal)InsertApprovalsTableRelations()InsertIncomingDocumentApprovalWorkflowTemplate()InsertOverdueApprovalsWorkflow(): Code[20]InsertCustomerApprovalWorkflow()InsertVendorApprovalWorkflow()InsertItemApprovalWorkflow()JobQueueEntryWorkflowCode(): Code[17]IncomingDocumentWorkflowCode(): Code[17]IncomingDocumentApprovalWorkflowCode(): Code[17]IncomingDocumentOCRWorkflowCode(): Code[17]IncomingDocumentToGenJnlLineOCRWorkflowCode(): Code[17]PurchaseInvoiceWorkflowCode(): Code[17]PurchaseInvoiceApprovalWorkflowCode(): Code[17]PurchaseBlanketOrderApprovalWorkflowCode(): Code[17]PurchaseCreditMemoApprovalWorkflowCode(): Code[17]PurchaseQuoteApprovalWorkflowCode(): Code[17]PurchaseOrderApprovalWorkflowCode(): Code[17]PurchaseReturnOrderApprovalWorkflowCode(): Code[17]SalesInvoiceApprovalWorkflowCode(): Code[17]SalesBlanketOrderApprovalWorkflowCode(): Code[17]SalesCreditMemoApprovalWorkflowCode(): Code[17]SalesQuoteApprovalWorkflowCode(): Code[17]SalesOrderApprovalWorkflowCode(): Code[17]SalesReturnOrderApprovalWorkflowCode(): Code[17]OverdueNotificationsWorkflowCode(): Code[17]SalesInvoiceCreditLimitApprovalWorkflowCode(): Code[17]SalesOrderCreditLimitApprovalWorkflowCode(): Code[17]CustomerWorkflowCode(): Code[17]CustomerCreditLimitChangeApprovalWorkflowCode(): Code[17]VendorWorkflowCode(): Code[17]VendorBankWorkflowCode(): Code[17]+ BC29ItemWorkflowCode(): Code[17]ItemUnitPriceChangeApprovalWorkflowCode(): Code[17]GeneralJournalBatchApprovalWorkflowCode(): Code[17]GeneralJournalLineApprovalWorkflowCode(): Code[17]ItemJournalBatchApprovalWorkflowCode(): Code[17]+ BC28RequisitionWkshBatchApprovalWorkflowCode(): Code[17]+ BC28SendToOCRWorkflowCode(): Code[17]InsertDocApprovalWorkflowSteps(Workflow: Record Workflow; DocSendForApprovalConditionString: Text; DocSendForApprovalEventCode: Code[128]; DocCanceledConditionString: Text; DocCanceledEventCode: Code[128]; WorkflowStepArgument: Record "Workflow Step Argument"; ShowConfirmationMessage: Boolean)InsertRecApprovalWorkflowSteps(Workflow: Record Workflow; ConditionString: Text; RecSendForApprovalEventCode: Code[128]; RecCreateApprovalRequestsCode: Code[128]; RecSendApprovalRequestForApprovalCode: Code[128]; RecCanceledEventCode: Code[128]; WorkflowStepArgument: Record "Workflow Step Argument"; ShowConfirmationMessage: Boolean; RemoveRestrictionOnCancel: Boolean)InsertRecChangedApprovalWorkflowSteps(Workflow: Record Workflow; RuleOperator: Option; RecChangedEventCode: Code[128]; RecCreateApprovalRequestsCode: Code[128]; RecSendApprovalRequestForApprovalCode: Code[128]; var WorkflowStepArgument: Record "Workflow Step Argument"; TableNo: Integer; FieldNo: Integer; RecordChangeApprovalMsg: Text)InsertGenJnlBatchApprovalWorkflowSteps(Workflow: Record Workflow; ConditionString: Text; RecSendForApprovalEventCode: Code[128]; RecCreateApprovalRequestsCode: Code[128]; RecSendApprovalRequestForApprovalCode: Code[128]; RecCanceledEventCode: Code[128]; WorkflowStepArgument: Record "Workflow Step Argument"; ShowConfirmationMessage: Boolean)InsertGenJnlLineApprovalWorkflowSteps(var Workflow: Record Workflow; EventConditions: Text; ApproverType: Enum "Workflow Approver Type"; LimitType: Enum "Workflow Approver Limit Type"; WorkflowUserGroupCode: Code[20]; SpecificApprover: Code[50]; DueDateFormula: DateFormula)InsertItemJnlBatchApprovalWorkflowSteps(Workflow: Record Workflow; ConditionString: Text; RecSendForApprovalEventCode: Code[128]; RecCreateApprovalRequestsCode: Code[128]; RecSendApprovalRequestForApprovalCode: Code[128]; RecCanceledEventCode: Code[128]; WorkflowStepArgument: Record "Workflow Step Argument"; ShowConfirmationMessage: Boolean)+ BC28InsertRequisitionWkshBatchApprovalWorkflowSteps(Workflow: Record Workflow; ConditionString: Text; RecSendForApprovalEventCode: Code[128]; RecCreateApprovalRequestsCode: Code[128]; RecSendApprovalRequestForApprovalCode: Code[128]; RecCanceledEventCode: Code[128]; WorkflowStepArgument: Record "Workflow Step Argument"; ShowConfirmationMessage: Boolean)+ BC28InsertPurchaseDocumentApprovalWorkflowSteps(var Workflow: Record Workflow; DocumentType: Enum "Purchase Document Type"; ApproverType: Enum "Workflow Approver Type"; LimitType: Enum "Workflow Approver Limit Type"; WorkflowUserGroupCode: Code[20]; DueDateFormula: DateFormula)InsertSalesDocumentApprovalWorkflowSteps(var Workflow: Record Workflow; DocumentType: Enum "Sales Document Type"; ApproverType: Enum "Workflow Approver Type"; LimitType: Enum "Workflow Approver Limit Type"; WorkflowUserGroupCode: Code[20]; DueDateFormula: DateFormula)InsertSalesDocumentCreditLimitApprovalWorkflowSteps(var Workflow: Record Workflow; DocumentType: Enum "Sales Document Type"; ApproverType: Enum "Workflow Approver Type"; LimitType: Enum "Workflow Approver Limit Type"; WorkflowUserGroupCode: Code[20]; DueDateFormula: DateFormula)InsertEntryPointEventStep(Workflow: Record Workflow; FunctionName: Code[128]): IntegerInsertEventStep(Workflow: Record Workflow; FunctionName: Code[128]; PreviousStepID: Integer): IntegerInsertResponseStep(Workflow: Record Workflow; FunctionName: Code[128]; PreviousStepID: Integer): IntegerInsertStep(var WorkflowStep: Record "Workflow Step"; WorkflowCode: Code[20]; StepType: Option; FunctionName: Code[128])MarkWorkflowAsTemplate(var Workflow: Record Workflow)GetSequenceNumber(Workflow: Record Workflow; PreviousStepID: Integer): IntegerSetNextStep(Workflow: Record Workflow; WorkflowStepID: Integer; NextStepID: Integer)InsertTableRelation(TableId: Integer; FieldId: Integer; RelatedTableId: Integer; RelatedFieldId: Integer)InsertWorkflowCategory(Code: Code[20]; Description: Text[100])InsertEventArgument(WorkflowStepID: Integer; EventConditions: Text)InsertEventRule(WorkflowStepID: Integer; FieldNo: Integer; Operator: Option)InsertNotificationArgument(WorkflowStepID: Integer; NotifySender: Boolean; NotifUserID: Code[50]; LinkTargetPage: Integer; CustomLink: Text[250])InsertPmtLineCreationArgument(WorkflowStepID: Integer; GenJnlTemplateName: Code[10]; GenJnlBatchName: Code[10])InsertApprovalArgument(WorkflowStepID: Integer; ApproverType: Enum "Workflow Approver Type"; ApproverLimitType: Enum "Workflow Approver Limit Type"; WorkflowUserGroupCode: Code[20]; ApproverId: Code[50]; DueDateFormula: DateFormula; ShowConfirmationMessage: Boolean)InsertMessageArgument(WorkflowStepID: Integer; Message: Text[250])InsertStepArgument(var WorkflowStepArgument: Record "Workflow Step Argument"; WorkflowStepID: Integer)GetWorkflowTemplateCode(WorkflowCode: Code[17]): Code[20]GetWorkflowTemplateToken(): Code[3]GetWorkflowWizardCode(WorkflowCode: Code[17]): Code[20]GetWorkflowWizardToken(): Code[3]SetTemplateForWorkflowStep(Workflow: Record Workflow; FunctionName: Code[128])SetCustomTemplateToken(NewCustomTemplateToken: Code[3])InitWorkflowStepArgument(var WorkflowStepArgument: Record "Workflow Step Argument"; ApproverType: Enum "Workflow Approver Type"; ApproverLimitType: Enum "Workflow Approver Limit Type"; ApprovalEntriesPage: Integer; WorkflowUserGroupCode: Code[20]; DueDateFormula: DateFormula; ShowConfirmationMessage: Boolean)BuildNoPendingApprovalsConditions(): TextBuildPendingApprovalsConditions(): TextBuildIncomingDocumentTypeConditions(Status: Option): TextΔ BC28 (obsolete 28.0: Replaced by procedure BuildIncomingDocumentStatusConditions())BuildIncomingDocumentStatusConditions(Status: Enum "Incoming Document Status"): Text+ BC28BuildIncomingDocumentOCRTypeConditions(OCRStatus: Option): TextBuildPurchHeaderTypeConditionsText(DocumentType: Enum "Purchase Document Type"; Status: Enum "Purchase Document Status"): TextBuildSalesHeaderTypeConditionsText(DocumentType: Enum "Sales Document Type"; Status: Enum "Sales Document Status"): TextBuildCustomerTypeConditions(): TextBuildVendorBankTypeConditions(): Text+ BC29BuildVendorTypeConditions(): TextBuildItemTypeConditions(): TextBuildGeneralJournalBatchTypeConditionsFromRec(var GenJournalBatch: Record "Gen. Journal Batch"): TextBuildGeneralJournalLineTypeConditions(var GenJournalLine: Record "Gen. Journal Line"): TextBuildItemJournalBatchTypeConditionsFromRec(var ItemJournalBatch: Record "Item Journal Batch"): Text+ BC28BuildRequisitionWkshNameTypeConditionsFromRec(var RequisitionWkshName: Record "Requisition Wksh. Name"): Text+ BC28CreateJobQueueEntry(ObjectTypeToRun: Option; ObjectIdToRun: Integer; JobQueueEntryDescription: Text[250]; NotBefore: DateTime; NoOfMinutesBetweenRuns: Integer)Encode(Text: Text): TextGetGeneralJournalBatchIsNotBalancedMsg(): Text[250]
Plus 74 local procedures.
Triggers
OnRun
Calls
From the extracted call graph of BC29 (graphify-al on the snapshot checkout): calls whose target is known from a declared type or an Object::"Name" argument. Interface dispatch and calls through events are not counted, so the list is not complete.
- Codeunit 1521 “Workflow Response Handling” (100 calls:
InitWorkflow → CreateResponsesLibrary,InsertCustomerApprovalWorkflowDetails → CreateApprovalRequestsCode,InsertCustomerApprovalWorkflowDetails → SendApprovalRequestForApprovalCode, …) - Codeunit 1520 “Workflow Event Handling” (98 calls:
InitWorkflow → CreateEventsLibrary,InsertCustomerApprovalWorkflowDetails → RunWorkflowOnCancelCustomerApprovalRequestCode,InsertCustomerApprovalWorkflowDetails → RunWorkflowOnSendCustomerForApprovalCode, …) - Codeunit 1522 “Workflow Request Page Handling” (2 calls:
InitWorkflow → AssignEntitiesToWorkflowEvents,InitWorkflow → CreateEntitiesAndFields) - Codeunit 453 “Job Queue - Enqueue” (1 call:
CreateJobQueueEntry → (object)) - Codeunit 6224 “XML DOM Management” (1 call:
Encode → XMLEscape)
Called by
- Codeunit 1804 “Approval Workflow Setup Mgt.” (20 calls:
ApplyCustomerWizardUserInput → BuildCustomerTypeConditions,ApplyCustomerWizardUserInput → CustomerCreditLimitChangeApprovalWorkflowCode,ApplyCustomerWizardUserInput → CustomerWorkflowCode, …) - Codeunit 6280 “Sust. Workflow Event Handling” (18 calls:
AddWorkflowTableRelationsToLibrary → InsertTableRelation,BuildSustJournalBatchTypeConditionsFromRec → Encode,InsertSustJnlBatchApprovalWorkflowSteps → BuildNoPendingApprovalsConditions, …) - Page 1804 “Approval Workflow Setup Wizard” (3 calls:
SetDefaultValues → GetWorkflowWizardCode,SetDefaultValues → PurchaseInvoiceApprovalWorkflowCode,SetDefaultValues → SalesInvoiceApprovalWorkflowCode) - Codeunit 1540 “Workflow Webhook Setup” (2 calls:
CreateGeneralJournalBatchApprovalWorkflowSteps → GetGeneralJournalBatchIsNotBalancedMsg,InitializeWorkflow → InitWorkflow) - Page 1812 “Item Approval WF Setup Wizard” (2 calls:
SetDefaultValues → GetWorkflowTemplateCode,SetDefaultValues → ItemUnitPriceChangeApprovalWorkflowCode) - Page 1813 “Cust. Approval WF Setup Wizard” (2 calls:
SetDefaultValues → CustomerCreditLimitChangeApprovalWorkflowCode,SetDefaultValues → GetWorkflowTemplateCode) - Table 1501 “Workflow” (2 calls:
CanDelete → OnAllowEditOfWorkflowTemplates,CheckEditingIsAllowed → OnAllowEditOfWorkflowTemplates) - Codeunit 104056 “Upgrade Workflow” (1 call:
UpdateWorkflowWithDelegatedAdminTemplate → ResetWorkflowTemplates) - Codeunit 1541 “Workflow Webhook Events” (1 call:
AddWorkflowWebhookTableRelationsToLibrary → InsertTableRelation) - Codeunit 2 “Company-Initialize” (1 call:
OnRun → InitWorkflow) - Codeunit 20423 “Qlty. Workflow Setup” (1 call:
AddEmployeeUserRelationships → InsertTableRelation) - Page 1500 “Workflows” (1 call:
OnOpenPage → InitWorkflow) - Page 1505 “Workflow Templates” (1 call:
Initialize → InitWorkflow)
Recent changes
- 2026-07-27 #9601 Reset workflow templates no longer removes steps from active workflows (main, BC30, fix)
Deprecations
- procedure BuildIncomingDocumentTypeConditions: Pending 28.0 (#if not CLEAN28), “Replaced by procedure BuildIncomingDocumentStatusConditions()”
Source: AL metadata extracted from the code (names, ids, signatures, properties); no code bodies (D10).
Ask your agent
Procedure bodies are not stored here (D10). The call sections above are our own, per object, from the BC29 call graph. For a procedure body or the calls of one procedure, ask bc-code-atlas (external, by Stefan Maron, MIT; default corpus w1-28), which the bc-observatory plugin connects: bcatlas_resolve_node(object_type: "codeunit", object_name: "Workflow Setup"), then bcatlas_get_procedure_body or bcatlas_get_neighbors on the returned id.