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
Markdown
# 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;
```