UNPKG

bc-code-intelligence-mcp

Version:

BC Code Intelligence MCP Server - Complete Specialist Bundle with AI-driven expert consultation, seamless handoffs, and context-preserving workflows

101 lines (89 loc) 3.15 kB
# Table Safety Validation Patterns ## IsTemporary Safeguard Implementation ```al procedure ProcessBulkData(var DataBuffer: Record "Data Processing Buffer") begin // Always validate temporary status before bulk operations if not DataBuffer.IsTemporary then Error('This procedure requires a temporary table to prevent data corruption.'); DataBuffer.Reset(); if DataBuffer.FindSet() then repeat ProcessIndividualRecord(DataBuffer); DataBuffer.Delete(); // Safe because table is confirmed temporary until DataBuffer.Next() = 0; end; ``` ## Database Write Protection ```al procedure SafeDataManipulation(var TempCustomer: Record Customer temporary) var Customer: Record Customer; begin // Validate temporary status before any modifications if not TempCustomer.IsTemporary then Error('Database safety violation: Expected temporary table for data manipulation.'); // Safe to perform destructive operations TempCustomer.Reset(); TempCustomer.DeleteAll(); // Load fresh data from permanent table Customer.FindSet(); repeat TempCustomer := Customer; TempCustomer.Insert(); until Customer.Next() = 0; end; ``` ## Bulk Operation Validation ```al procedure ProcessLargeDataSet(var TempItem: Record Item temporary; ProcessingMode: Option Validate,Update,Delete) begin // Critical safety check for bulk operations if not TempItem.IsTemporary then Error('Bulk processing operations require temporary tables. This prevents accidental permanent data modification.'); case ProcessingMode of ProcessingMode::Validate: ValidateAllRecords(TempItem); ProcessingMode::Update: UpdateAllRecords(TempItem); ProcessingMode::Delete: TempItem.DeleteAll(); // Safe deletion end; end; local procedure ValidateAllRecords(var TempItem: Record Item temporary) begin TempItem.Reset(); if TempItem.FindSet() then repeat ValidateItemData(TempItem); until TempItem.Next() = 0; end; ``` ## Data Integrity Protection ```al procedure SecureDataProcessing(var WorkingTable: Record "Working Data Buffer") var OriginalFilters: Text; begin // Mandatory safety validation if not WorkingTable.IsTemporary then Error('Data integrity protection: This operation requires a temporary working table.'); OriginalFilters := WorkingTable.GetFilters(); try WorkingTable.Reset(); ProcessAllRecords(WorkingTable); finally // Restore original state WorkingTable.Reset(); WorkingTable.SetView(OriginalFilters); end; end; local procedure ProcessAllRecords(var WorkingTable: Record "Working Data Buffer") begin if WorkingTable.FindSet(true) then repeat WorkingTable."Processing Status" := WorkingTable."Processing Status"::Completed; WorkingTable.Modify(); until WorkingTable.Next() = 0; end; ```