Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Word Layout Compile Bug #7672

Closed
GestiSam opened this issue Feb 28, 2024 · 3 comments
Closed

Word Layout Compile Bug #7672

GestiSam opened this issue Feb 28, 2024 · 3 comments
Assignees
Labels
accepted reporting ships-in-future-update The issue is fixed in our 'master' branch and will ship in the next PREVIEW release

Comments

@GestiSam
Copy link

GestiSam commented Feb 28, 2024

1. Describe the bug
While compiling a report extension with an existing Layout, the compiler gives the current error:
Failure while emitting metadata for object:'ReportExtension gsStandardSalesInvoice' (Length cannot be less than zero. (Parameter 'length')))

2. To Reproduce
Steps to reproduce the behavior:

  1. Create a new table extension and report extension

tableextension 60100 gsSalesLine extends "Sales Line"
{
fields
{
field(60100; gsUnitPriceAfterDisc; Decimal)
{
Caption = 'Unit price (after discount)';
DataClassification = CustomerContent;
Editable = false;
}
}
}
reportextension 60101 gsStandardSalesOrderConf extends "Standard Sales - Order Conf."
{
WordLayout = './src/layout/gsStandardSalesOrderConf.docx';
dataset
{
add(Line)
{
column(gsUnitPriceAfterDisc; gsUnitPriceAfterDisc) { }
}
}
}
gsStandardSalesOrderConf.docx

3. Expected behavior
Compile and get an updated Dataset in the Word File

4. Actual behavior
Getting this error:
[Error - 10:30:52 AM] Please report this issue to https://github.com/microsoft/al/issues including information on how to reproduce it, if possible.
Processing of message 'al/createPackage' failed with error: 'One or more errors occurred. (Failure while emitting metadata for object:'ReportExtension gsStandardSalesInvoice' (Length cannot be less than zero. (Parameter 'length'))) (Failure while emitting metadata for object:'ReportExtension gsStandardSalesOrderConf' (Length cannot be less than zero. (Parameter 'length')))'
Details:
System.AggregateException: One or more errors occurred. (Failure while emitting metadata for object:'ReportExtension gsStandardSalesInvoice' (Length cannot be less than zero. (Parameter 'length'))) (Failure while emitting metadata for object:'ReportExtension gsStandardSalesOrderConf' (Length cannot be less than zero. (Parameter 'length')))
---> System.AggregateException: Failure while emitting metadata for object:'ReportExtension gsStandardSalesInvoice' (Length cannot be less than zero. (Parameter 'length'))
---> System.ArgumentOutOfRangeException: Length cannot be less than zero. (Parameter 'length')
at System.String.Substring(Int32 startIndex, Int32 length)
at Microsoft.Dynamics.Nav.CodeAnalysis.Emit.ReportWordUtilities.<>c.b__6_0(String line) in D:\a_work\1\s\source\Prod\Microsoft.Dynamics.Nav.CodeAnalysis\Emitter\ReportEmitterUtilities\ReportWordUtilities.cs:line 137
at System.Linq.Enumerable.SelectArrayIterator2.MoveNext() at System.String.Join(String separator, IEnumerable1 values)
at Microsoft.Dynamics.Nav.CodeAnalysis.Emit.ReportWordUtilities.FillXmlPartDataWithExtendedInfo(String oldXmlPart) in D:\a_work\1\s\source\Prod\Microsoft.Dynamics.Nav.CodeAnalysis\Emitter\ReportEmitterUtilities\ReportWordUtilities.cs:line 128
at Microsoft.Dynamics.Nav.CodeAnalysis.Emit.ReportWordUtilities.UpdateWordFileIfNeeded(IFileSystem fileSystem, String docName, String officeCustomXmlPart, String officeCustomXmlPart_Extended) in D:\a_work\1\s\source\Prod\Microsoft.Dynamics.Nav.CodeAnalysis\Emitter\ReportEmitterUtilities\ReportWordUtilities.cs:line 62
at Microsoft.Dynamics.Nav.CodeAnalysis.Emit.ReportWordUtilities.GenerateWordLayout(ReportTypeSymbol report, IFileSystem fileSystem, String docName, Compilation compilation) in D:\a_work\1\s\source\Prod\Microsoft.Dynamics.Nav.CodeAnalysis\Emitter\ReportEmitterUtilities\ReportWordUtilities.cs:line 37
at Microsoft.Dynamics.Nav.CodeAnalysis.Emit.ReportLayoutsGenerator.GenerateLayout(ReportTypeSymbol symbol, ApplicationObjectTypeSymbol declaringSymbol, DiagnosticBag diagnostics, ReportLayoutSymbol layoutSymbol, Action4 generator) in D:\a\_work\1\s\source\Prod\Microsoft.Dynamics.Nav.CodeAnalysis\Emitter\ReportLayoutsGenerator.cs:line 46 at Microsoft.Dynamics.Nav.CodeAnalysis.Emit.ReportExtensionLayoutsEmitter.Emit(DiagnosticBag diagnostics) in D:\a\_work\1\s\source\Prod\Microsoft.Dynamics.Nav.CodeAnalysis\Emitter\ReportExtensionLayoutsEmitter.cs:line 21 at Microsoft.Dynamics.Nav.CodeAnalysis.MethodCompiler.<>c__DisplayClass15_0.<PreMetadataEmit>b__0(DiagnosticBag diagnostics) in D:\a\_work\1\s\source\Prod\Microsoft.Dynamics.Nav.CodeAnalysis\Compiler\MethodCompiler.cs:line 226 at Microsoft.Dynamics.Nav.CodeAnalysis.MethodCompiler.EmitNonObjectCode(Symbol objectType, Action1 emitter) in D:\a_work\1\s\source\Prod\Microsoft.Dynamics.Nav.CodeAnalysis\Compiler\MethodCompiler.cs:line 205
--- End of inner exception stack trace ---
at Microsoft.Dynamics.Nav.CodeAnalysis.MethodCompiler.EmitNonObjectCode(Symbol objectType, Action1 emitter) in D:\a\_work\1\s\source\Prod\Microsoft.Dynamics.Nav.CodeAnalysis\Compiler\MethodCompiler.cs:line 209 at Microsoft.Dynamics.Nav.CodeAnalysis.MethodCompiler.PreMetadataEmit(ObjectTypeSymbol containingType) in D:\a\_work\1\s\source\Prod\Microsoft.Dynamics.Nav.CodeAnalysis\Compiler\MethodCompiler.cs:line 221 at Microsoft.Dynamics.Nav.CodeAnalysis.MethodCompiler.CompileObject(ObjectTypeSymbol containingType) in D:\a\_work\1\s\source\Prod\Microsoft.Dynamics.Nav.CodeAnalysis\Compiler\MethodCompiler.cs:line 189 at Microsoft.Dynamics.Nav.CodeAnalysis.MethodCompiler.VisitObjectType(ObjectTypeSymbol symbol) in D:\a\_work\1\s\source\Prod\Microsoft.Dynamics.Nav.CodeAnalysis\Compiler\MethodCompiler.cs:line 161 at Microsoft.Dynamics.Nav.CodeAnalysis.Symbols.SymbolVisitor.VisitApplicationObjectType(ApplicationObjectTypeSymbol node) in D:\a\_work\1\s\source\Prod\Microsoft.Dynamics.Nav.CodeAnalysis\Generated\SymbolVisitor.Generated.cs:line 351 at Microsoft.Dynamics.Nav.CodeAnalysis.Symbols.SymbolVisitor.VisitApplicationObjectExtensionType(ApplicationObjectExtensionTypeSymbol node) in D:\a\_work\1\s\source\Prod\Microsoft.Dynamics.Nav.CodeAnalysis\Generated\SymbolVisitor.Generated.cs:line 356 at Microsoft.Dynamics.Nav.CodeAnalysis.Symbols.SymbolVisitor.VisitReportExtensionType(ReportExtensionTypeSymbol node) in D:\a\_work\1\s\source\Prod\Microsoft.Dynamics.Nav.CodeAnalysis\Generated\SymbolVisitor.Generated.cs:line 286 at Microsoft.Dynamics.Nav.CodeAnalysis.Symbols.ReportExtensionTypeSymbol.Accept(SymbolVisitor visitor) in D:\a\_work\1\s\source\Prod\Microsoft.Dynamics.Nav.CodeAnalysis\Generated\Symbols.Generated.cs:line 1208 at Microsoft.Dynamics.Nav.CodeAnalysis.MethodCompiler.<>c__DisplayClass11_0.<CompileModule>b__0(Symbol memberSymbol) in D:\a\_work\1\s\source\Prod\Microsoft.Dynamics.Nav.CodeAnalysis\Compiler\MethodCompiler.cs:line 129 --- End of inner exception stack trace --- at Microsoft.Dynamics.Nav.CodeAnalysis.MethodCompiler.CompileModule(ModuleSymbol moduleSymbol) in D:\a\_work\1\s\source\Prod\Microsoft.Dynamics.Nav.CodeAnalysis\Compiler\MethodCompiler.cs:line 140 at Microsoft.Dynamics.Nav.CodeAnalysis.MethodCompiler.CompileMethodBodies(Compilation compilation, ModuleBuilder moduleBeingBuiltOpt, Boolean hasDeclarationErrors, DiagnosticBag diagnostics, Predicate1 filterOpt, Predicate1 radCompilationFilter, CancellationToken cancellationToken) in D:\a\_work\1\s\source\Prod\Microsoft.Dynamics.Nav.CodeAnalysis\Compiler\MethodCompiler.cs:line 103 at Microsoft.Dynamics.Nav.CodeAnalysis.Compilation.CompileImpl(ModuleBuilder moduleBuilder, Boolean emittingPdb, DiagnosticBag diagnostics, Predicate1 filterOpt, Predicate1 radCompilationFilter, CancellationToken cancellationToken) in D:\a\_work\1\s\source\Prod\Microsoft.Dynamics.Nav.CodeAnalysis\Compilation\Compilation.cs:line 1202 at Microsoft.Dynamics.Nav.CodeAnalysis.Compilation.Compile(ModuleBuilder moduleBuilder, Boolean emittingPdb, DiagnosticBag diagnostics, Predicate1 filterOpt, Predicate1 radCompilationFilter, CancellationToken cancellationToken) in D:\a\_work\1\s\source\Prod\Microsoft.Dynamics.Nav.CodeAnalysis\Compilation\Compilation.cs:line 1174 at Microsoft.Dynamics.Nav.CodeAnalysis.CommandLine.CommonCompiler.PackageTheModule(Compilation compilation, CompilerTextWriter consoleOutput, CancellationToken cancellationToken, ErrorLogger errorLogger, AnalyzerDriver analyzerDriver, Predicate1 filterOpt, Predicate1 radCompilationFilter) in D:\a\_work\1\s\source\Prod\Microsoft.Dynamics.Nav.CodeAnalysis\CommandLine\CommonCompiler.cs:line 793 at Microsoft.Dynamics.Nav.CodeAnalysis.CommandLine.CommonCompiler.RunCoreImpl(CompilerTextWriter consoleOutput, ErrorLogger errorLogger, Compilation compilation, AnalyzerDriver analyzerDriver, IEnumerable1 analyzerExceptionDiagnostics, IEnumerable1 additionalTextFiles, CancellationToken cancellationToken) in D:\a\_work\1\s\source\Prod\Microsoft.Dynamics.Nav.CodeAnalysis\CommandLine\CommonCompiler.cs:line 560 at Microsoft.Dynamics.Nav.CodeAnalysis.CommandLine.CommonCompiler.RunCore(CompilerTextWriter consoleOutput, ErrorLogger errorLogger, ITelemetryService telemetryService, CancellationToken cancellationToken) in D:\a\_work\1\s\source\Prod\Microsoft.Dynamics.Nav.CodeAnalysis\CommandLine\CommonCompiler.cs:line 490 at Microsoft.Dynamics.Nav.CodeAnalysis.CommandLine.CommonCompiler.Run(CompilerTextWriter consoleOutput, ITelemetryService telemetryService, CancellationToken cancellationToken) in D:\a\_work\1\s\source\Prod\Microsoft.Dynamics.Nav.CodeAnalysis\CommandLine\CommonCompiler.cs:line 340 at Microsoft.Dynamics.Nav.EditorServices.Protocol.Utility.ActiveProjectBuilder.Build(VsCodeWorkspace workspace, Project builtProject, StreamingTextWriter outputWriter, Boolean isRad, IList1 args, CancellationToken cancellationToken, IResponseQueue responseQueue, ITelemetryService telemetryService, Boolean forceBuild, IList1 outputFiles, CustomTelemetryEvent telemetryEvent, String requestVsCodeExtensionVersion) in D:\a\_work\1\s\source\Prod\Microsoft.Dynamics.Nav.EditorServices.Protocol\Utility\ActiveProjectBuilder.cs:line 204 at Microsoft.Dynamics.Nav.EditorServices.Protocol.Utility.ActiveProjectBuilder.BuildWorkspaceAsync(CancellationToken cancellationToken, IFileSystem fileSystem, VsCodeWorkspace workspace, String projectDir, IList1 args, Boolean buildDependencyPackage, Boolean isRad, IResponseQueue responseQueue, Boolean forceBuildOfAllDependencies, CustomTelemetryEvent telemetryEvent, ITelemetryService telemetryService, String vsCodeExtensionVersion) in D:\a_work\1\s\source\Prod\Microsoft.Dynamics.Nav.EditorServices.Protocol\Utility\ActiveProjectBuilder.cs:line 115
at Microsoft.Dynamics.Nav.EditorServices.Protocol.LanguageServer.Extensions.CreatePackageRequestHandler.HandleAsync(CreatePackageRequest request, Int32 requestId, CancellationToken cancellationToken) in D:\a_work\1\s\source\Prod\Microsoft.Dynamics.Nav.EditorServices.Protocol\LanguageServer\Extensions\CreatePackageRequestHandler.cs:line 37
at Microsoft.Dynamics.Nav.EditorServices.Protocol.MessageProtocol.RequestHandlerBase1.HandleAsync(JToken requestContents, Int32 requestId, CancellationToken cancellationToken) in D:\a\_work\1\s\source\Prod\Microsoft.Dynamics.Nav.EditorServices.Protocol\MessageProtocol\RequestHandlerBase.cs:line 84 at Microsoft.Dynamics.Nav.EditorServices.Protocol.RequestRegistry.Process(Message message) in D:\a\_work\1\s\source\Prod\Microsoft.Dynamics.Nav.EditorServices.Protocol\Endpoints\RequestRegistry.cs:line 106 ---> (Inner Exception #1) System.AggregateException: Failure while emitting metadata for object:'ReportExtension gsStandardSalesOrderConf' (Length cannot be less than zero. (Parameter 'length')) ---> System.ArgumentOutOfRangeException: Length cannot be less than zero. (Parameter 'length') at System.String.Substring(Int32 startIndex, Int32 length) at Microsoft.Dynamics.Nav.CodeAnalysis.Emit.ReportWordUtilities.<>c.<FillXmlPartDataWithExtendedInfo>b__6_0(String line) in D:\a\_work\1\s\source\Prod\Microsoft.Dynamics.Nav.CodeAnalysis\Emitter\ReportEmitterUtilities\ReportWordUtilities.cs:line 137 at System.Linq.Enumerable.SelectArrayIterator2.MoveNext()
at System.String.Join(String separator, IEnumerable1 values) at Microsoft.Dynamics.Nav.CodeAnalysis.Emit.ReportWordUtilities.FillXmlPartDataWithExtendedInfo(String oldXmlPart) in D:\a\_work\1\s\source\Prod\Microsoft.Dynamics.Nav.CodeAnalysis\Emitter\ReportEmitterUtilities\ReportWordUtilities.cs:line 128 at Microsoft.Dynamics.Nav.CodeAnalysis.Emit.ReportWordUtilities.UpdateWordFileIfNeeded(IFileSystem fileSystem, String docName, String officeCustomXmlPart, String officeCustomXmlPart_Extended) in D:\a\_work\1\s\source\Prod\Microsoft.Dynamics.Nav.CodeAnalysis\Emitter\ReportEmitterUtilities\ReportWordUtilities.cs:line 62 at Microsoft.Dynamics.Nav.CodeAnalysis.Emit.ReportWordUtilities.GenerateWordLayout(ReportTypeSymbol report, IFileSystem fileSystem, String docName, Compilation compilation) in D:\a\_work\1\s\source\Prod\Microsoft.Dynamics.Nav.CodeAnalysis\Emitter\ReportEmitterUtilities\ReportWordUtilities.cs:line 37 at Microsoft.Dynamics.Nav.CodeAnalysis.Emit.ReportLayoutsGenerator.GenerateLayout(ReportTypeSymbol symbol, ApplicationObjectTypeSymbol declaringSymbol, DiagnosticBag diagnostics, ReportLayoutSymbol layoutSymbol, Action4 generator) in D:\a_work\1\s\source\Prod\Microsoft.Dynamics.Nav.CodeAnalysis\Emitter\ReportLayoutsGenerator.cs:line 46
at Microsoft.Dynamics.Nav.CodeAnalysis.Emit.ReportExtensionLayoutsEmitter.Emit(DiagnosticBag diagnostics) in D:\a_work\1\s\source\Prod\Microsoft.Dynamics.Nav.CodeAnalysis\Emitter\ReportExtensionLayoutsEmitter.cs:line 21
at Microsoft.Dynamics.Nav.CodeAnalysis.MethodCompiler.<>c__DisplayClass15_0.b__0(DiagnosticBag diagnostics) in D:\a_work\1\s\source\Prod\Microsoft.Dynamics.Nav.CodeAnalysis\Compiler\MethodCompiler.cs:line 226
at Microsoft.Dynamics.Nav.CodeAnalysis.MethodCompiler.EmitNonObjectCode(Symbol objectType, Action1 emitter) in D:\a\_work\1\s\source\Prod\Microsoft.Dynamics.Nav.CodeAnalysis\Compiler\MethodCompiler.cs:line 205 --- End of inner exception stack trace --- at Microsoft.Dynamics.Nav.CodeAnalysis.MethodCompiler.EmitNonObjectCode(Symbol objectType, Action1 emitter) in D:\a_work\1\s\source\Prod\Microsoft.Dynamics.Nav.CodeAnalysis\Compiler\MethodCompiler.cs:line 209
at Microsoft.Dynamics.Nav.CodeAnalysis.MethodCompiler.PreMetadataEmit(ObjectTypeSymbol containingType) in D:\a_work\1\s\source\Prod\Microsoft.Dynamics.Nav.CodeAnalysis\Compiler\MethodCompiler.cs:line 221
at Microsoft.Dynamics.Nav.CodeAnalysis.MethodCompiler.CompileObject(ObjectTypeSymbol containingType) in D:\a_work\1\s\source\Prod\Microsoft.Dynamics.Nav.CodeAnalysis\Compiler\MethodCompiler.cs:line 189
at Microsoft.Dynamics.Nav.CodeAnalysis.MethodCompiler.VisitObjectType(ObjectTypeSymbol symbol) in D:\a_work\1\s\source\Prod\Microsoft.Dynamics.Nav.CodeAnalysis\Compiler\MethodCompiler.cs:line 161
at Microsoft.Dynamics.Nav.CodeAnalysis.Symbols.SymbolVisitor.VisitApplicationObjectType(ApplicationObjectTypeSymbol node) in D:\a_work\1\s\source\Prod\Microsoft.Dynamics.Nav.CodeAnalysis\Generated\SymbolVisitor.Generated.cs:line 351
at Microsoft.Dynamics.Nav.CodeAnalysis.Symbols.SymbolVisitor.VisitApplicationObjectExtensionType(ApplicationObjectExtensionTypeSymbol node) in D:\a_work\1\s\source\Prod\Microsoft.Dynamics.Nav.CodeAnalysis\Generated\SymbolVisitor.Generated.cs:line 356
at Microsoft.Dynamics.Nav.CodeAnalysis.Symbols.SymbolVisitor.VisitReportExtensionType(ReportExtensionTypeSymbol node) in D:\a_work\1\s\source\Prod\Microsoft.Dynamics.Nav.CodeAnalysis\Generated\SymbolVisitor.Generated.cs:line 286
at Microsoft.Dynamics.Nav.CodeAnalysis.Symbols.ReportExtensionTypeSymbol.Accept(SymbolVisitor visitor) in D:\a_work\1\s\source\Prod\Microsoft.Dynamics.Nav.CodeAnalysis\Generated\Symbols.Generated.cs:line 1208
at Microsoft.Dynamics.Nav.CodeAnalysis.MethodCompiler.<>c__DisplayClass11_0.b__0(Symbol memberSymbol) in D:\a_work\1\s\source\Prod\Microsoft.Dynamics.Nav.CodeAnalysis\Compiler\MethodCompiler.cs:line 129<---

5. Versions:

  • AL Language: 12.6.14.18950
  • Visual Studio Code:
    Version: 1.86.2 (user setup)
    Commit: 903b1e9d8990623e3d7da1df3d33db3e42d80eda
    Date: 2024-02-13T19:40:56.878Z
    Electron: 27.2.3
    ElectronBuildId: 26908389
    Chromium: 118.0.5993.159
    Node.js: 18.17.1
    V8: 11.8.172.18-electron.0
    OS: Windows_NT x64 10.0.22631
  • Business Central: V23.4
  • List of Visual Studio Code extensions that you have installed:
    image
@thloke
Copy link
Contributor

thloke commented Mar 11, 2024

I have a fix for this. The reason why this happens is quite silly, we're not handling lines that are whitespace-only in the custom XML part of the word document. Usually this XML part is not hand-edited but generated by Word, so usually that assumption is fine but in this case the layout has one such line.

A possible workaround to unblock you while we validate and release the fix is to re-create the word layout. That might be faster than waiting for the fix to be released.

@GestiSam
Copy link
Author

Yes that's what I did, regenerated the layout and copied the content over from the old layout.
Thanks for the information about the eventual fix.

@JesperSchulz JesperSchulz added the ships-in-future-update The issue is fixed in our 'master' branch and will ship in the next PREVIEW release label Mar 14, 2024
@JesperSchulz
Copy link

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 25.0.17268.0 and VS Code Extension Version 14.0.958538.

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/

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
accepted reporting ships-in-future-update The issue is fixed in our 'master' branch and will ship in the next PREVIEW release
Projects
None yet
Development

No branches or pull requests

5 participants