mirror of
https://github.com/microsoft/BCQuality.git
synced 2026-10-05 14:46:55 +01:00
Add 18 community AL/BC patterns across style, data-modeling, web-services, appsource, breaking-changes, performance, and testing
Contributed by CURABIS ApS, generalized from patterns observed across real AppSource/PTE development. Each article follows the knowledge file format (frontmatter, Description/Best Practice/Anti Pattern, sibling .good.al/.bad.al samples).
This commit is contained in:
parent
07e324ddbc
commit
057e17c202
52 changed files with 1109 additions and 0 deletions
13
microsoft/knowledge/appsource/file-datatype-saas.bad.al
Normal file
13
microsoft/knowledge/appsource/file-datatype-saas.bad.al
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
codeunit 50104 "Import File Reader"
|
||||
{
|
||||
procedure ImportFile()
|
||||
var
|
||||
ImportFile: File;
|
||||
InStream: InStream;
|
||||
begin
|
||||
ImportFile.WriteMode(false);
|
||||
ImportFile.TextMode(true);
|
||||
ImportFile.Open('C:\Import\data.txt'); // fails in SaaS — no local filesystem
|
||||
ImportFile.CreateInStream(InStream);
|
||||
end;
|
||||
}
|
||||
17
microsoft/knowledge/appsource/file-datatype-saas.good.al
Normal file
17
microsoft/knowledge/appsource/file-datatype-saas.good.al
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
codeunit 50104 "Import File Reader"
|
||||
{
|
||||
procedure ImportFile()
|
||||
var
|
||||
TempBlob: Codeunit "Temp Blob";
|
||||
InStream: InStream;
|
||||
FileName: Text;
|
||||
begin
|
||||
if UploadIntoStream('Import file', '', 'All Files (*.*)|*.*', FileName, InStream) then
|
||||
ParseStream(InStream);
|
||||
end;
|
||||
|
||||
local procedure ParseStream(var InStream: InStream)
|
||||
begin
|
||||
// parse InStream content here
|
||||
end;
|
||||
}
|
||||
28
microsoft/knowledge/appsource/file-datatype-saas.md
Normal file
28
microsoft/knowledge/appsource/file-datatype-saas.md
Normal file
|
|
@ -0,0 +1,28 @@
|
|||
---
|
||||
bc-version: [all]
|
||||
domain: appsource
|
||||
keywords: [file-datatype, saas, onprem, uploadintostream, downloadfromstream, instream, outstream, streaming]
|
||||
technologies: [al]
|
||||
countries: [w1]
|
||||
application-area: [all]
|
||||
---
|
||||
|
||||
# The File data type's direct I/O methods are OnPrem-only
|
||||
|
||||
> Contributions welcome — open a PR to refine or extend this article.
|
||||
|
||||
## Description
|
||||
|
||||
The classic `File` variable type — `Open`/`Create`/`Read`/`Write`/`Close` against a path on the local or server filesystem — only works on-premises, because there is no accessible filesystem in the SaaS/cloud sandbox. Any extension meant to run in Business Central Online must not rely on `File.Open`, `File.Create`, `File.Read`, or `File.Write` for its core functionality: code built this way compiles but fails, or is silently skipped, in the cloud.
|
||||
|
||||
## Best Practice
|
||||
|
||||
Use the stream-based equivalents: `UploadIntoStream` to read user-selected file content into an `InStream`, and `DownloadFromStream` to write an `OutStream`'s content to a file the user saves. Stage the content in a `TempBlob` between the stream and the rest of the parsing/formatting code.
|
||||
|
||||
See sample: `file-datatype-saas.good.al`.
|
||||
|
||||
## Anti Pattern
|
||||
|
||||
Opening a hardcoded or user-supplied filesystem path with the `File` variable type. This is a strong signal the code was written for on-premises only, or copied from material that predates the cloud-first streaming APIs.
|
||||
|
||||
See sample: `file-datatype-saas.bad.al`.
|
||||
Loading…
Add table
Add a link
Reference in a new issue