Skip to content

KVSKBAUpdateItemReference#

Events#

OnBeforeUpdateItemReference(Record Sales Line, Boolean, Boolean) :#

Summary: Integration event raised before updating item reference from sales line.

[IntegrationEvent(false, false)]
local procedure OnBeforeUpdateItemReference(SalesLine: Record "Sales Line"; var HaveItemReferenceReset: Boolean; var IsHandled: Boolean): 
[EventSubscriber(ObjectType::Codeunit, Codeunit::"KVSKBAUpdateItemReference", 'OnBeforeUpdateItemReference', '', false, false)]
local procedure DoSomethingOnBeforeUpdateItemReference(SalesLine: Record "Sales Line"; var HaveItemReferenceReset: Boolean; var IsHandled: Boolean)
begin
end;

Parameters:

  • SalesLine: The sales line for which the item reference is being updated.
  • HaveItemReferenceReset: Variable indicating whether the item reference should be reset to its previous value.
  • IsHandled: Set to true to skip the default item reference update logic.

Remarks: This event allows extensions to override or supplement the automatic item reference update process that occurs when a user enters or changes an Item Reference No. on a sales line.

         **Purpose:**
         The standard logic automatically creates or updates customer-specific item references based on
         the Item Reference No. entered on the sales line. This event provides control before that process begins.

         **Use Cases:**
         - Override item reference update logic with custom validation rules
         - Skip item reference update for specific scenarios (e.g., certain customer types)
         - Add pre-processing logic before item reference creation
         - Validate item reference data before proceeding
         - Log or audit item reference changes

         **Parameters:**
         - SalesLine: Contains item, customer, variant, unit of measure, and reference information
         - HaveItemReferenceReset: Set to true to cancel the update and restore the old reference value
         - IsHandled: Set to true to bypass the standard DoUpdateItemCrossReference logic

         **Context:**
         - Triggered during validation of "Item Reference No." field on Sales Line
         - Called from UpdateItemCrossReference procedure
         - Occurs before checking for existing references and creating new ones

         **Related Events:**
         - OnAfterUpdateItemReference: Post-processing after update completes
         - OnBeforeRequestItemRefStartDateAsk: Controls start date dialog
         - OnWriteNewItemReferenceOnBeforeItemReferenceInsert: Pre-insert customization

OnAfterUpdateItemReference(Record Sales Line, Boolean) :#

Summary: Integration event raised after updating item reference from sales line.

[IntegrationEvent(false, false)]
local procedure OnAfterUpdateItemReference(SalesLine: Record "Sales Line"; var HaveItemReferenceReset: Boolean): 
[EventSubscriber(ObjectType::Codeunit, Codeunit::"KVSKBAUpdateItemReference", 'OnAfterUpdateItemReference', '', false, false)]
local procedure DoSomethingOnAfterUpdateItemReference(SalesLine: Record "Sales Line"; var HaveItemReferenceReset: Boolean)
begin
end;

Parameters:

  • SalesLine: The sales line for which the item reference was updated.
  • HaveItemReferenceReset: Indicates whether the item reference was reset (user cancelled operation).

Remarks: This event allows extensions to perform post-processing after the automatic item reference update process has completed.

         **Purpose:**
         Provides a hook for extensions to react to successful item reference updates or handle
         cancellation scenarios where the user opted not to proceed with the update.

         **Use Cases:**
         - Log successful item reference updates for audit trail
         - Trigger notifications when new item references are created
         - Update related data based on the new item reference
         - Synchronize item reference changes with external systems
         - Perform validation or data quality checks on the final result
         - Clean up temporary data used during the update process

         **Parameters:**
         - SalesLine: Contains the sales line with the updated (or reset) item reference
         - HaveItemReferenceReset: True if user cancelled and reference was reset to old value

         **Processing States:**
         - If HaveItemReferenceReset = false: Item reference was successfully created/updated
         - If HaveItemReferenceReset = true: User cancelled, no changes were made

         **Context:**
         - Triggered after DoUpdateItemCrossReference completes
         - Called from UpdateItemCrossReference procedure
         - Occurs after all item reference database operations

         **Related Events:**
         - OnBeforeUpdateItemReference: Pre-processing before update begins
         - OnWriteNewItemReferenceOnBeforeItemReferenceInsert: Customization before final insert

OnBeforeRequestItemRefStartDateAsk(Text[100], Enum KVSKBAAskOptItemRefStartDate, Boolean, Boolean) :#

Summary: Integration event raised before displaying the item reference start date dialog to the user.

[IntegrationEvent(false, false)]
local procedure OnBeforeRequestItemRefStartDateAsk(var PageCaption: Text[100]; var SetItemRefStartDateAsk: Enum "KVSKBAAskOptItemRefStartDate"; var IsConfirmed: Boolean; var IsHandled: Boolean): 
[EventSubscriber(ObjectType::Codeunit, Codeunit::"KVSKBAUpdateItemReference", 'OnBeforeRequestItemRefStartDateAsk', '', false, false)]
local procedure DoSomethingOnBeforeRequestItemRefStartDateAsk(var PageCaption: Text[100]; var SetItemRefStartDateAsk: Enum "KVSKBAAskOptItemRefStartDate"; var IsConfirmed: Boolean; var IsHandled: Boolean)
begin
end;

Parameters:

  • PageCaption: The caption text for the dialog page (can be modified).
  • SetItemRefStartDateAsk: The enum value determining which start date option to use (can be set to skip dialog).
  • IsConfirmed: Set to true to indicate user confirmed the dialog (bypasses actual dialog display).
  • IsHandled: Set to true to skip displaying the dialog entirely.

Remarks: This event allows extensions to override or customize the start date selection dialog that appears when creating a new item reference, provided the Sales & Receivables Setup is configured to request the start date from the user.

         **Purpose:**
         When creating a new item reference, the system needs to determine what start date to use.
         If configured to ask the user (KVSKBASetItemRefStartDate::Requests), this event fires before
         showing the dialog.

         **Start Date Options (KVSKBAAskOptItemRefStartDate enum):**
         - "Do not set": No start date (0D), reference valid for all dates
         - "Date from document": Use the document date from sales line
         - "Old values": Keep the start/end dates from the previous item reference

         **Use Cases:**
         - Automatically determine start date based on business rules (set IsHandled = true)
         - Customize dialog caption for specific scenarios
         - Skip dialog and apply default start date logic
         - Validate conditions before showing dialog
         - Apply different start date logic for specific customers or items

         **Parameters:**
         - PageCaption: Can be modified to customize dialog text
         - SetItemRefStartDateAsk: Set to desired option to bypass dialog
         - IsConfirmed: Set to true if programmatically confirming the operation
         - IsHandled: Set to true to prevent the dialog from displaying

         **Context:**
         - Called from RequestItemRefStartDate procedure
         - Triggered by SelectEnumItemRefStartDateAsk when setup = Requests
         - Occurs before KVSKBARequestItemRefStartDate page is shown
         - Part of the WriteNewItemReference flow

         **Related Events:**
         - OnSelectEnumItemRefStartDateAskOnCaseElseKVSKBASetItemRefStartDate: Custom start date options
         - OnWriteNewItemReferenceOnCaseElseAskOptItemRefStartDate: Custom date application logic

OnSelectEnumItemRefStartDateAskOnCaseElseKVSKBASetItemRefStartDate(Boolean, Enum KVSKBAAskOptItemRefStartDate) :#

Summary: Integration event for handling custom KVSKBASetItemRefStartDate enum values in Sales & Receivables Setup.

[IntegrationEvent(false, false)]
local procedure OnSelectEnumItemRefStartDateAskOnCaseElseKVSKBASetItemRefStartDate(var HaveItemReferenceReset: Boolean; var KVSKBAAskOptItemRefStartDate: Enum "KVSKBAAskOptItemRefStartDate"): 
[EventSubscriber(ObjectType::Codeunit, Codeunit::"KVSKBAUpdateItemReference", 'OnSelectEnumItemRefStartDateAskOnCaseElseKVSKBASetItemRefStartDate', '', false, false)]
local procedure DoSomethingOnSelectEnumItemRefStartDateAskOnCaseElseKVSKBASetItemRefStartDate(var HaveItemReferenceReset: Boolean; var KVSKBAAskOptItemRefStartDate: Enum "KVSKBAAskOptItemRefStartDate")
begin
end;

Parameters:

  • HaveItemReferenceReset: Set to true to cancel the item reference update operation.
  • KVSKBAAskOptItemRefStartDate: The enum value to determine start date handling (must be set by event handler).

Remarks: This event provides extensibility for custom start date handling options beyond the three standard options (Do not set, Date from document, Old values) defined in KVSKBASetItemRefStartDate enum.

         **Purpose:**
         When Sales & Receivables Setup has a custom value for KVSKBASetItemRefStartDate (extended by
         another extension), this event allows the extension to map that custom value to the appropriate
         KVSKBAAskOptItemRefStartDate action.

         **Context:**
         - Called from SelectEnumItemRefStartDateAsk procedure
         - Triggered in the "else" case of the setup field case statement
         - Only invoked when setup is NOT set to "Requests" and NOT one of the three standard options

         **Standard Enum Values (handled before this event):**
         - "Do not set": Start Date = 0D, Ending Date = 0D
         - "Date from document": Start Date = document date, Ending Date = 0D
         - "Old values": Preserves dates from previous item reference
         - "Requests": Shows dialog to user (handled separately)

         **Use Cases:**
         - Extension adds custom start date option to KVSKBASetItemRefStartDate enum
         - Map custom setup value to one of the standard processing options
         - Implement completely custom start date logic
         - Cancel operation for unsupported custom values (set HaveItemReferenceReset = true)

         **Parameters:**
         - HaveItemReferenceReset: Set to true to abort the item reference update
         - KVSKBAAskOptItemRefStartDate: Must be set to indicate desired date handling

         **Implementation Notes:**
         - Event handler MUST set KVSKBAAskOptItemRefStartDate value
         - If no handler processes the custom value, enum remains at default
         - Can combine with OnWriteNewItemReferenceOnCaseElseAskOptItemRefStartDate for complete custom flow

         **Related Events:**
         - OnBeforeRequestItemRefStartDateAsk: Controls dialog display
         - OnWriteNewItemReferenceOnCaseElseAskOptItemRefStartDate: Custom date application

OnWriteNewItemReferenceOnBeforeItemReferenceInsert(Record Item Reference, Record Sales Line, Record Item Reference, Date, Enum KVSKBAAskOptItemRefStartDate) :#

Summary: Integration event raised immediately before inserting the new item reference record.

[IntegrationEvent(false, false)]
local procedure OnWriteNewItemReferenceOnBeforeItemReferenceInsert(var ItemReference: Record "Item Reference"; SalesLine: Record "Sales Line"; OldItemReference: Record "Item Reference"; ToDate: Date; AskOptItemRefStartDate: Enum "KVSKBAAskOptItemRefStartDate"): 
[EventSubscriber(ObjectType::Codeunit, Codeunit::"KVSKBAUpdateItemReference", 'OnWriteNewItemReferenceOnBeforeItemReferenceInsert', '', false, false)]
local procedure DoSomethingOnWriteNewItemReferenceOnBeforeItemReferenceInsert(var ItemReference: Record "Item Reference"; SalesLine: Record "Sales Line"; OldItemReference: Record "Item Reference"; ToDate: Date; AskOptItemRefStartDate: Enum "KVSKBAAskOptItemRefStartDate")
begin
end;

Parameters:

  • ItemReference: The item reference record to be inserted (can be modified).
  • SalesLine: The sales line that triggered the item reference creation.
  • OldItemReference: The previous item reference record (if any existed).
  • ToDate: The date used for calculations (typically document date).
  • AskOptItemRefStartDate: The selected start date option indicating how dates were set.

Remarks: This event provides the final opportunity to modify the item reference record before it is inserted into the database. All standard field mappings and date logic have been applied.

         **Purpose:**
         Allow extensions to add custom fields, perform final validations, or make last-minute
         adjustments to the item reference before database insertion.

         **Standard Fields Already Set:**
         - Reference Type: Customer
         - Reference Type No.: Sell-to Customer No. from sales line
         - Item No.: Item from sales line
         - Variant Code: From sales line
         - Reference No.: Item Reference No. from sales line
         - Description and Description 2: From sales line
         - Unit of Measure: From sales line
         - Starting Date and Ending Date: Set based on AskOptItemRefStartDate option

         **Date Handling by Option:**
         - "Do not set": Starting Date = 0D, Ending Date = 0D
         - "Date from document": Starting Date = ToDate, Ending Date = 0D
         - "Old values": Starting Date and Ending Date from OldItemReference

         **Use Cases:**
         - Populate custom extension fields on Item Reference table
         - Apply additional business rules or validations
         - Set reference-specific attributes based on sales line data
         - Log or audit the item reference creation
         - Modify dates or other fields based on custom logic
         - Prevent insertion by raising an error

         **Parameters:**
         - ItemReference: var parameter, can be modified before insert
         - SalesLine: Source of item and customer data
         - OldItemReference: Previous reference (may be empty if none existed)
         - ToDate: Document date used for date filtering
         - AskOptItemRefStartDate: Indicates which date logic was applied

         **Context:**
         - Called from WriteNewItemReference procedure
         - Last event before ItemReference.Insert() is called
         - Part of the overall item reference update workflow
         - Triggered when user changes Item Reference No. on sales line

         **Related Events:**
         - OnBeforeUpdateItemReference: Pre-processing before entire update process
         - OnAfterUpdateItemReference: Post-processing after insert completes
         - OnWriteNewItemReferenceOnCaseElseAskOptItemRefStartDate: Custom date logic

OnWriteNewItemReferenceOnCaseElseAskOptItemRefStartDate(Record Item Reference, Record Sales Line, Record Item Reference, Date, Enum KVSKBAAskOptItemRefStartDate) :#

Summary: Integration event for handling custom AskOptItemRefStartDate enum values when writing new item reference.

[IntegrationEvent(false, false)]
local procedure OnWriteNewItemReferenceOnCaseElseAskOptItemRefStartDate(var ItemReference: Record "Item Reference"; SalesLine: Record "Sales Line"; OldItemReference: Record "Item Reference"; ToDate: Date; AskOptItemRefStartDate: Enum "KVSKBAAskOptItemRefStartDate"): 
[EventSubscriber(ObjectType::Codeunit, Codeunit::"KVSKBAUpdateItemReference", 'OnWriteNewItemReferenceOnCaseElseAskOptItemRefStartDate', '', false, false)]
local procedure DoSomethingOnWriteNewItemReferenceOnCaseElseAskOptItemRefStartDate(var ItemReference: Record "Item Reference"; SalesLine: Record "Sales Line"; OldItemReference: Record "Item Reference"; ToDate: Date; AskOptItemRefStartDate: Enum "KVSKBAAskOptItemRefStartDate")
begin
end;

Parameters:

  • ItemReference: The item reference record being created (Starting Date and Ending Date can be set).
  • SalesLine: The sales line that triggered the item reference creation.
  • OldItemReference: The previous item reference record (if any existed).
  • ToDate: The date used for calculations (typically document date).
  • AskOptItemRefStartDate: The custom enum value that needs to be handled.

Remarks: This event provides extensibility for custom start/end date handling logic beyond the three standard options (Do not set, Date from document, Old values) in the KVSKBAAskOptItemRefStartDate enum.

         **Purpose:**
         When a custom value is added to KVSKBAAskOptItemRefStartDate enum by an extension, this event
         allows that extension to implement the corresponding date-setting logic for the item reference.

         **Standard Date Options (handled before this event):**
         1. "Do not set": Starting Date = 0D, Ending Date = 0D (no date restrictions)
         2. "Date from document": Starting Date = ToDate, Ending Date = 0D (valid from document date onwards)
         3. "Old values": Preserves Starting Date and Ending Date from OldItemReference

         **Context:**
         - Called from WriteNewItemReference procedure
         - Triggered in the "else" case of the AskOptItemRefStartDate case statement
         - Only invoked when AskOptItemRefStartDate is NOT one of the three standard values
         - Occurs after standard field transfers but before OnWriteNewItemReferenceOnBeforeItemReferenceInsert

         **Use Cases:**
         - Extension adds custom date option to KVSKBAAskOptItemRefStartDate enum
         - Implement custom date calculation logic (e.g., "Start date = first of month")
         - Apply complex date rules based on business requirements
         - Calculate dates based on item attributes or customer settings
         - Set date ranges based on external data sources

         **Implementation Requirements:**
         - Event handler MUST set ItemReference."Starting Date" and ItemReference."Ending Date"
         - Use ToDate parameter for date calculations if needed
         - Can reference OldItemReference for date-related logic
         - Dates can be set to 0D for "no restriction"

         **Parameters:**
         - ItemReference: var parameter, must set Starting Date and Ending Date fields
         - SalesLine: Source of item and document data
         - OldItemReference: Previous reference (may be empty)
         - ToDate: Document date from sales line (GetDateForCalculations)
         - AskOptItemRefStartDate: The custom enum value to process

         **Date Field Meanings:**
         - Starting Date = 0D: No start restriction, valid from beginning
         - Ending Date = 0D: No end restriction, valid indefinitely
         - Both 0D: Valid for all dates
         - Date range: Reference only valid within specified period

         **Related Events:**
         - OnSelectEnumItemRefStartDateAskOnCaseElseKVSKBASetItemRefStartDate: Maps setup to enum
         - OnBeforeRequestItemRefStartDateAsk: Controls dialog for custom options
         - OnWriteNewItemReferenceOnBeforeItemReferenceInsert: Final pre-insert customization