Closed dzzzb closed 3 years ago
Does this reproduce consistently? Can you try to isolate a snippet of a code that would reproduce the issue?
I have the same problem with this dataitem on a report:
dataitem("G/L Entry"; "G/L Entry")
{
DataItemTableView = sorting("Global dimension 1 Code", "Posting Date") where("Global Dimension 1 Code" = filter('<>'''''));
column(Global_Dimension_1_Code; "Global Dimension 1 Code") { }
trigger OnAfterGetRecord()
var
Customer: Record Customer;
prevAcc: Code[20];
begin
Customer.SetLoadFields("No.");
if Customer.Get('asdf') then begin
prevAcc := "G/L Entry"."Global Dimension 1 Code"; // <--------------- this line
end;
end;
}
If remove the marked line, the error disappears. If I get the "Global Dimension 1 Code" field from a record variable then the error also disappears.
When done where? I have a trivial project here to try to test another bug, that does exactly that, and I don't get any diagnostics reported (correctly or wrongly).
I can try and 'bisect' this at some point, but it'll have to wait until I have less real work to do ;)
I have the same problem with this dataitem on a report:
Yes, I have now completed your code and can verify the same error:
I haven't bisected my own code yet. Where is the time... So there might be multiple causes.
Anyway, in this case, it seems that somehow the two records Customer
and G/L Entry
are mixed up by the AA0242 analyser, such that if we do Customer.SetLoadFields
and then access a field from G/L Entry
, it throws said exception. Yet if either line is commented out, it doesn't. Weird!
pinging @PhDuck for thoughts
report 50100 Test
{
UsageCategory = None;
dataset
{
dataitem("G/L Entry"; "G/L Entry")
{
column(Global_Dimension_1_Code; "Global Dimension 1 Code")
{
}
trigger OnAfterGetRecord()
var
Customer: Record Customer;
begin
Customer.SetLoadFields("No.");
Customer.FindFirst();
Message("G/L Entry"."Global Dimension 1 Code");
end;
}
}
}
Analyzer 'Microsoft.Dynamics.Nav.CodeCop.Design.Rule0242PartialRecordsDetectJitLoads' threw an exception of type 'System.NullReferenceException' with message 'System.NullReferenceException: Object reference not set to an instance of an object.
at Microsoft.Dynamics.Nav.CodeCop.Design.Rule0242PartialRecordsDetectJitLoads.JitLoadDetectionVisitor.VisitFieldAccess(IFieldAccess operation) in D:\a\1\s\source\Prod\Microsoft.Dynamics.Nav.CodeCop\Design\Rule0242PartialRecordsDetectJitLoads.cs:line 192
at Microsoft.Dynamics.Nav.CodeAnalysis.BoundFieldAccess.Accept(OperationVisitor visitor) in D:\a\1\s\source\Prod\Microsoft.Dynamics.Nav.CodeAnalysis\BoundTree\Expressions.cs:line 218
at Microsoft.Dynamics.Nav.CodeAnalysis.OperationWalker.Visit(IOperation operation) in D:\a\1\s\source\Prod\Microsoft.Dynamics.Nav.CodeAnalysis\Compilation\OperationWalker.cs:line 29
at Microsoft.Dynamics.Nav.CodeAnalysis.OperationWalker.VisitConversionExpression(IConversionExpression operation) in D:\a\1\s\source\Prod\Microsoft.Dynamics.Nav.CodeAnalysis\Compilation\OperationWalker.cs:line 88
at Microsoft.Dynamics.Nav.CodeAnalysis.BoundConversion.Accept(OperationVisitor visitor) in D:\a\1\s\source\Prod\Microsoft.Dynamics.Nav.CodeAnalysis\BoundTree\Expressions.cs:line 541
at Microsoft.Dynamics.Nav.CodeAnalysis.OperationWalker.Visit(IOperation operation) in D:\a\1\s\source\Prod\Microsoft.Dynamics.Nav.CodeAnalysis\Compilation\OperationWalker.cs:line 29
at Microsoft.Dynamics.Nav.CodeAnalysis.OperationWalker.VisitArgument(IArgument operation) in D:\a\1\s\source\Prod\Microsoft.Dynamics.Nav.CodeAnalysis\Compilation\OperationWalker.cs:line 53
at Microsoft.Dynamics.Nav.CodeAnalysis.BoundCall.Argument.Microsoft.Dynamics.Nav.CodeAnalysis.IOperation.Accept(OperationVisitor visitor) in D:\a\1\s\source\Prod\Microsoft.Dynamics.Nav.CodeAnalysis\BoundTree\Expressions.cs:line 193
at Microsoft.Dynamics.Nav.CodeAnalysis.OperationWalker.Visit(IOperation operation) in D:\a\1\s\source\Prod\Microsoft.Dynamics.Nav.CodeAnalysis\Compilation\OperationWalker.cs:line 29
at Microsoft.Dynamics.Nav.CodeAnalysis.OperationWalker.VisitArray[T](ImmutableArray`1 list) in D:\a\1\s\source\Prod\Microsoft.Dynamics.Nav.CodeAnalysis\Compilation\OperationWalker.cs:line 44
at Microsoft.Dynamics.Nav.CodeAnalysis.OperationWalker.VisitInvocationExpression(IInvocationExpression operation) in D:\a\1\s\source\Prod\Microsoft.Dynamics.Nav.CodeAnalysis\Compilation\OperationWalker.cs:line 133
at Microsoft.Dynamics.Nav.CodeCop.Design.Rule0242PartialRecordsDetectJitLoads.JitLoadDetectionVisitor.VisitInvocationExpression(IInvocationExpression operation) in D:\a\1\s\source\Prod\Microsoft.Dynamics.Nav.CodeCop\Design\Rule0242PartialRecordsDetectJitLoads.cs:line 217
at Microsoft.Dynamics.Nav.CodeAnalysis.BoundCall.Accept(OperationVisitor visitor) in D:\a\1\s\source\Prod\Microsoft.Dynamics.Nav.CodeAnalysis\BoundTree\Expressions.cs:line 161
at Microsoft.Dynamics.Nav.CodeAnalysis.OperationWalker.Visit(IOperation operation) in D:\a\1\s\source\Prod\Microsoft.Dynamics.Nav.CodeAnalysis\Compilation\OperationWalker.cs:line 29
at Microsoft.Dynamics.Nav.CodeAnalysis.OperationWalker.VisitExpressionStatement(IExpressionStatement operation) in D:\a\1\s\source\Prod\Microsoft.Dynamics.Nav.CodeAnalysis\Compilation\OperationWalker.cs:line 98
at Microsoft.Dynamics.Nav.CodeAnalysis.BoundExpressionStatement.Accept(OperationVisitor visitor) in D:\a\1\s\source\Prod\Microsoft.Dynamics.Nav.CodeAnalysis\BoundTree\Statements.cs:line 98
at Microsoft.Dynamics.Nav.CodeAnalysis.OperationWalker.Visit(IOperation operation) in D:\a\1\s\source\Prod\Microsoft.Dynamics.Nav.CodeAnalysis\Compilation\OperationWalker.cs:line 29
at Microsoft.Dynamics.Nav.CodeAnalysis.OperationWalker.VisitArray[T](ImmutableArray`1 list) in D:\a\1\s\source\Prod\Microsoft.Dynamics.Nav.CodeAnalysis\Compilation\OperationWalker.cs:line 44
at Microsoft.Dynamics.Nav.CodeAnalysis.OperationWalker.VisitBlockStatement(IBlockStatement operation) in D:\a\1\s\source\Prod\Microsoft.Dynamics.Nav.CodeAnalysis\Compilation\OperationWalker.cs:line 49
at Microsoft.Dynamics.Nav.CodeAnalysis.BoundBlock.Accept(OperationVisitor visitor) in D:\a\1\s\source\Prod\Microsoft.Dynamics.Nav.CodeAnalysis\BoundTree\Statements.cs:line 84
at Microsoft.Dynamics.Nav.CodeAnalysis.OperationWalker.Visit(IOperation operation) in D:\a\1\s\source\Prod\Microsoft.Dynamics.Nav.CodeAnalysis\Compilation\OperationWalker.cs:line 29
at Microsoft.Dynamics.Nav.CodeCop.Design.Rule0242PartialRecordsDetectJitLoads.AnalyzeMethod(OperationAnalysisContext context) in D:\a\1\s\source\Prod\Microsoft.Dynamics.Nav.CodeCop\Design\Rule0242PartialRecordsDetectJitLoads.cs:line 125
at Microsoft.Dynamics.Nav.CodeAnalysis.Diagnostics.AnalyzerExecutor.<>c__DisplayClass53_1.<ExecuteOperationAction>b__1() in D:\a\1\s\source\Prod\Microsoft.Dynamics.Nav.CodeAnalysis\DiagnosticAnalyzer\AnalyzerExecutor.cs:line 764
at Microsoft.Dynamics.Nav.CodeAnalysis.Diagnostics.AnalyzerExecutor.ExecuteAndCatchIfThrows_NoLock(DiagnosticAnalyzer analyzer, Action analyze, Nullable`1 info) in D:\a\1\s\source\Prod\Microsoft.Dynamics.Nav.CodeAnalysis\DiagnosticAnalyzer\AnalyzerExecutor.cs:line 1100'
Will take a look at this tonight, @atoader please assign it to me.
Thanks! 🥳
The fix for this issue has been checked in to the master branch. It will be available in the bcinsider.azurecr.io/bcsandbox-master Docker image starting from platform build number 24292 and VS Code Extension Version 8.0.446271.
If you don’t have access to these images you need to become part of the Ready2Go program: aka.ms/readytogo
For more details on code branches and docker images please read: https://blogs.msdn.microsoft.com/nav/2018/05/03/al-developer-previews-multiple-releases-and-github/ https://freddysblog.com/2020/06/25/working-with-artifacts/
Can this be backported to AL extension 7.1.x in VS Code, please? It's annoying to have to ignore all these warnings, while also wondering if they are failed attempts to report some actual issues. I'm running:
Name: AL Language
Id: ms-dynamics-smb.al
Description: AL development tools for Dynamics 365 Business Central
Version: 7.1.453917
Publisher: Microsoft
VS Marketplace Link: https://marketplace.visualstudio.com/items?itemName=ms-dynamics-smb.al
@PhDuck Do you know if this fix can be backported to AL extension 7.x as delivered through VS Code? My PROBLEMS
tab is still spammed by this warning in app.json
, which is annoying, and it might even be hiding a legit diagnostic(?)
The fix will be available in the next marketplace update for the VSIX.
1. Describe the bug New rule AA0242 doesn't seem to work properly, and throws, which then dumps an error apparently into
app.json
.2. To Reproduce I don't know. I just opened a project that was previously reporting no warnings, and got an AL extension update, and now I have 33 of these.
3. Expected behavior The rule should work and not dump exceptions in
app.json
. I now don't know if I'm incurring JIT loads anywhere, possibly 33 times, or if the analyser is just not working right.4. Actual behavior
5. Versions: