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