formatted \[ to [ and \] to ]
This commit is contained in:
parent
2fc21159de
commit
b426977b42
15 changed files with 87 additions and 87 deletions
|
|
@ -63,7 +63,7 @@ MiniDimensionsTemplate.InsertDimensionsFromTemplates(ConfigTemplateHeader,Custom
|
|||
Code to insert related templates (dimensions):
|
||||
|
||||
```al
|
||||
FUNCTION InsertDimensionsFromTemplates(ConfigTemplateHeader : Record "Config. Template Header";MasterRecordNo : Code\[20\];TableID : Integer)
|
||||
FUNCTION InsertDimensionsFromTemplates(ConfigTemplateHeader : Record "Config. Template Header";MasterRecordNo : Code[20];TableID : Integer)
|
||||
|
||||
// There are multiple records (multiple dimensions per master record)
|
||||
// We have to set filter
|
||||
|
|
@ -80,7 +80,7 @@ FUNCTION InsertDimensionsFromTemplates(ConfigTemplateHeader : Record "Config. Te
|
|||
UNTIL ConfigTemplateLine.NEXT = 0;
|
||||
|
||||
// Create a new Dimensions Record and link it to the Master Record
|
||||
FUNCTION InsertDimensionFromTemplate(ConfigTemplateHeader : Record "Config. Template Header";MasterRecordNo : Code\[20\];TableID : Integer)
|
||||
FUNCTION InsertDimensionFromTemplate(ConfigTemplateHeader : Record "Config. Template Header";MasterRecordNo : Code[20];TableID : Integer)
|
||||
DefaultDimension.INIT;
|
||||
DefaultDimension."No." := MasterRecordNo;
|
||||
DefaultDimension."Table ID" := TableID;
|
||||
|
|
|
|||
|
|
@ -30,7 +30,7 @@ GETURL automatically handles:
|
|||
|
||||
The format is:
|
||||
|
||||
\[String :=\] GETURL(ClientType\[, Company\]\[, Object Type\]\[, Object Id\]\[, Record\])
|
||||
[String :=] GETURL(ClientType[, Company][, Object Type][, Object Id][, Record])
|
||||
|
||||
Where:
|
||||
|
||||
|
|
|
|||
|
|
@ -36,7 +36,7 @@ This table is used to encapsulate the logic of the Business Chart Add-in. The ta
|
|||
* Storing chart values and conversion from .NET to C/AL and vice versa
|
||||
* Handling of captions: We must use C/AL to provide multilanguage text in add-ins. In addition, the multilanguage text must be encapsulated in a single place, because we pass/read the same dataset from/to the add-in.
|
||||
* DrillDown logic
|
||||
* Other helper data related functions, for displaying date, periods, etc.\[Bogdana1\] \[NK2\] \[NK3\]
|
||||
* Other helper data related functions, for displaying date, periods, etc.[Bogdana1] [NK2] [NK3]
|
||||
|
||||
**Note:** It is recommended that you reuse the **Business Chart Buffer table** (485) as a buffer table or extend. It is a generic table which should cover most of the use cases. Implement a new buffer table only if this table does not meet your needs.
|
||||
|
||||
|
|
|
|||
|
|
@ -110,7 +110,7 @@ procedure MigrateItemUnitOfMeasure(ItemDataMigrationFacade : Codeunit "Item Data
|
|||
var
|
||||
MyUnitCodeStagingTable: Record "My Unit Code Staging Table";
|
||||
DataMigrationStatusFacade: Codeunit "Data Migration Status Facade";
|
||||
DescriptionToSet: Text\[10\];
|
||||
DescriptionToSet: Text[10];
|
||||
UnitCodeJson: Text;
|
||||
begin
|
||||
if ItemJson.UnitCode = '' then
|
||||
|
|
|
|||
|
|
@ -82,7 +82,7 @@ group(LargestSale)
|
|||
[EventSubscriber(ObjectType::Codeunit, Codeunit::"Headline RC Business Manager", 'OnComputeHeadlines', '', true, true)]
|
||||
procedure OnComputeHeadlinesBusinessManager()
|
||||
begin
|
||||
// \[...\] compute headline, and init the EssentialBusinessHeadline record
|
||||
// [...] compute headline, and init the EssentialBusinessHeadline record
|
||||
if not ShowHeadline then
|
||||
exit; // not enough data to compute headline
|
||||
|
||||
|
|
|
|||
|
|
@ -33,7 +33,7 @@ _Figure 2: You add a second item that is not in stock. the notification is fired
|
|||
Here is the code for this behavior:
|
||||
|
||||
```al
|
||||
LOCAL PROCEDURE CreateAndSendNotification@23(UnitOfMeasureCode@1010 : Code\[20\];InventoryQty@1009 : Decimal;GrossReq@1008 : Decimal;ReservedReq@1007 : Decimal;SchedRcpt@1006 : Decimal;ReservedRcpt@1005 : Decimal;CurrentQuantity@1004 : Decimal;CurrentReservedQty@1003 : Decimal;TotalQuantity@1002 : Decimal;EarliestAvailDate@1001 : Date) : Boolean;
|
||||
LOCAL PROCEDURE CreateAndSendNotification@23(UnitOfMeasureCode@1010 : Code[20];InventoryQty@1009 : Decimal;GrossReq@1008 : Decimal;ReservedReq@1007 : Decimal;SchedRcpt@1006 : Decimal;ReservedRcpt@1005 : Decimal;CurrentQuantity@1004 : Decimal;CurrentReservedQty@1003 : Decimal;TotalQuantity@1002 : Decimal;EarliestAvailDate@1001 : Date) : Boolean;
|
||||
VAR
|
||||
ItemAvailabilityCheck@1011 : Page 1872;
|
||||
AvailabilityCheckNotification@1000 : Notification;
|
||||
|
|
@ -59,7 +59,7 @@ An easy fix would be to dynamically generate the notification ID. However, what
|
|||
Here is the code for this possible fix:
|
||||
|
||||
```al
|
||||
LOCAL PROCEDURE CreateAndSendNotification@23(UnitOfMeasureCode@1010 : Code\[20\];InventoryQty@1009 : Decimal;GrossReq@1008 : Decimal;ReservedReq@1007 : Decimal;SchedRcpt@1006 : Decimal;ReservedRcpt@1005 : Decimal;CurrentQuantity@1004 : Decimal;CurrentReservedQty@1003 : Decimal;TotalQuantity@1002 : Decimal;EarliestAvailDate@1001 : Date) : Boolean;
|
||||
LOCAL PROCEDURE CreateAndSendNotification@23(UnitOfMeasureCode@1010 : Code[20];InventoryQty@1009 : Decimal;GrossReq@1008 : Decimal;ReservedReq@1007 : Decimal;SchedRcpt@1006 : Decimal;ReservedRcpt@1005 : Decimal;CurrentQuantity@1004 : Decimal;CurrentReservedQty@1003 : Decimal;TotalQuantity@1002 : Decimal;EarliestAvailDate@1001 : Date) : Boolean;
|
||||
VAR
|
||||
ItemAvailabilityCheck@1011 : Page 1872;
|
||||
AvailabilityCheckNotification@1000 : Notification;
|
||||
|
|
|
|||
|
|
@ -27,8 +27,8 @@ To apply this pattern in Dynamics NAV, a table structure similar to Table 1261 S
|
|||
|
||||
Figure 1 describes the definition of a table which is already available in Dynamics NAV. This table can be used for storing sensitive data. As a minimum, the table only needs two fields:
|
||||
|
||||
1. The key is of type GUID (Globally Unique Identifier), which is a 128-bit value consisting of multiple groups of hexadecimal digits \[2\]. Each key needs to be unique and will be used for storing and retrieving the protected information.
|
||||
2. The value (the actual data to be encapsulated) is of type BLOB (Binary Large OBject) \[3\], which contains the encrypted or un-encrypted data (for encryption, see the related [**Encryption**][anchor2] pattern).
|
||||
1. The key is of type GUID (Globally Unique Identifier), which is a 128-bit value consisting of multiple groups of hexadecimal digits [2]. Each key needs to be unique and will be used for storing and retrieving the protected information.
|
||||
2. The value (the actual data to be encapsulated) is of type BLOB (Binary Large OBject) [3], which contains the encrypted or un-encrypted data (for encryption, see the related [**Encryption**][anchor2] pattern).
|
||||
|
||||
[![Figure 1- Example definition, table used for Data Encapsulation][image1]][anchor3]
|
||||
|
||||
|
|
@ -56,7 +56,7 @@ _Figure 2 - Data access before and after **Sensitive** **Data** **Encapsulation.
|
|||
* **Clarity:** when all sensitive data is encapsulated in one place, it is clear which is the information that needs to be protected.
|
||||
* **Simplicity:** easier to protect just a limited number of known resources when they are grouped.
|
||||
* **Homogeneity:** the same protection can be applied to all data, since it is stored in the same place.
|
||||
* **Separation of concerns:** treat each section of the computer program differently, by separating it and clearly addressing its own requirements and limitations. \[1\]
|
||||
* **Separation of concerns:** treat each section of the computer program differently, by separating it and clearly addressing its own requirements and limitations. [1]
|
||||
* **Performance**: data protection techniques like **Access Control** and **Encryption** can now be applied only to the sensitive data (not to everything), which improves the performance of the system.
|
||||
|
||||
**Drawbacks:**
|
||||
|
|
@ -67,29 +67,29 @@ _Figure 2 - Data access before and after **Sensitive** **Data** **Encapsulation.
|
|||
|
||||
**References**
|
||||
|
||||
\[1\] "Wikipedia," \[Online\]. Available: https://en.wikipedia.org/wiki/Separation_of_concerns.
|
||||
[1] "Wikipedia," [Online]. Available: https://en.wikipedia.org/wiki/Separation_of_concerns.
|
||||
|
||||
\[2\] "GUID Structure," \[Online\]. Available: https://msdn.microsoft.com/en-us/library/aa373931(VS.85).aspx.
|
||||
[2] "GUID Structure," [Online]. Available: https://msdn.microsoft.com/en-us/library/aa373931(VS.85).aspx.
|
||||
|
||||
\[3\] "Wikipedia," \[Online\]. Available: https://en.wikipedia.org/wiki/Binary_large_object.
|
||||
[3] "Wikipedia," [Online]. Available: https://en.wikipedia.org/wiki/Binary_large_object.
|
||||
|
||||
\[4\] waldo, "How Do I: Manage Companies in Microsoft Dynamics NAV 2013 R2".
|
||||
[4] waldo, "How Do I: Manage Companies in Microsoft Dynamics NAV 2013 R2".
|
||||
|
||||
\[5\] Microsoft, "Multitenant Deployment Architecture," Microsoft, \[Online\]. Available: https://msdn.microsoft.com/en-us/library/dn271675(v=nav.90).aspx.
|
||||
[5] Microsoft, "Multitenant Deployment Architecture," Microsoft, [Online]. Available: https://msdn.microsoft.com/en-us/library/dn271675(v=nav.90).aspx.
|
||||
|
||||
\[6\] B. Botez, "Setup Table design pattern," Microsoft, 2013\. \[Online\]. Available: https://community.dynamics.com/nav/w/designpatterns/76.setup-table. \[Accessed 31 07 2016\].
|
||||
[6] B. Botez, "Setup Table design pattern," Microsoft, 2013\. [Online]. Available: https://community.dynamics.com/nav/w/designpatterns/76.setup-table. [Accessed 31 07 2016].
|
||||
|
||||
\[7\] "Shotgun Surgery," \[Online\]. Available: https://en.wikipedia.org/wiki/Shotgun_surgery. \[Accessed 31 07 2016\].
|
||||
[7] "Shotgun Surgery," [Online]. Available: https://en.wikipedia.org/wiki/Shotgun_surgery. [Accessed 31 07 2016].
|
||||
|
||||
\[8\] M. Fowler, Refactoring: Improving the design of existing code, Addison Wesley, 1999\.
|
||||
[8] M. Fowler, Refactoring: Improving the design of existing code, Addison Wesley, 1999\.
|
||||
|
||||
\[9\] "Masking out," \[Online\]. Available: https://en.wikipedia.org/wiki/Data_masking#Masking_out. \[Accessed 29 7 2016\].
|
||||
[9] "Masking out," [Online]. Available: https://en.wikipedia.org/wiki/Data_masking#Masking_out. [Accessed 29 7 2016].
|
||||
|
||||
\[10\] "Key Vault," Microsoft, \[Online\]. Available: https://azure.microsoft.com/en-us/services/key-vault/.
|
||||
[10] "Key Vault," Microsoft, [Online]. Available: https://azure.microsoft.com/en-us/services/key-vault/.
|
||||
|
||||
\[11\] "How to: Configure SSL to Secure the Connection to Microsoft Dynamics NAV Web Client," Microsoft, \[Online\]. Available: https://msdn.microsoft.com/en-us/library/hh167264(v=nav.90).aspx. \[Accessed 2 8 2016\].
|
||||
[11] "How to: Configure SSL to Secure the Connection to Microsoft Dynamics NAV Web Client," Microsoft, [Online]. Available: https://msdn.microsoft.com/en-us/library/hh167264(v=nav.90).aspx. [Accessed 2 8 2016].
|
||||
|
||||
\[12\] "sniffer," \[Online\]. Available: http://compnetworking.about.com/od/networksecurityprivacy/g/bldef_sniffer.htm. \[Accessed 02 08 2016\].
|
||||
[12] "sniffer," [Online]. Available: http://compnetworking.about.com/od/networksecurityprivacy/g/bldef_sniffer.htm. [Accessed 02 08 2016].
|
||||
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -110,29 +110,29 @@ In the end, Stan chooses a location for the encryption key on disk, in a standar
|
|||
|
||||
**References**
|
||||
|
||||
\[1\] "Wikipedia," \[Online\]. Available: https://en.wikipedia.org/wiki/Separation_of_concerns.
|
||||
[1] "Wikipedia," [Online]. Available: https://en.wikipedia.org/wiki/Separation_of_concerns.
|
||||
|
||||
\[2\] "GUID Structure," \[Online\]. Available: https://msdn.microsoft.com/en-us/library/aa373931(VS.85).aspx.
|
||||
[2] "GUID Structure," [Online]. Available: https://msdn.microsoft.com/en-us/library/aa373931(VS.85).aspx.
|
||||
|
||||
\[3\] "Wikipedia," \[Online\]. Available: https://en.wikipedia.org/wiki/Binary_large_object.
|
||||
[3] "Wikipedia," [Online]. Available: https://en.wikipedia.org/wiki/Binary_large_object.
|
||||
|
||||
\[4\] waldo, "How Do I: Manage Companies in Microsoft Dynamics NAV 2013 R2".
|
||||
[4] waldo, "How Do I: Manage Companies in Microsoft Dynamics NAV 2013 R2".
|
||||
|
||||
\[5\] Microsoft, "Multitenant Deployment Architecture," Microsoft, \[Online\]. Available: https://msdn.microsoft.com/en-us/library/dn271675(v=nav.90).aspx.
|
||||
[5] Microsoft, "Multitenant Deployment Architecture," Microsoft, [Online]. Available: https://msdn.microsoft.com/en-us/library/dn271675(v=nav.90).aspx.
|
||||
|
||||
\[6\] B. Botez, "Setup Table design pattern," Microsoft, 2013\. \[Online\]. Available: https://community.dynamics.com/nav/w/designpatterns/76.setup-table. \[Accessed 31 07 2016\].
|
||||
[6] B. Botez, "Setup Table design pattern," Microsoft, 2013\. [Online]. Available: https://community.dynamics.com/nav/w/designpatterns/76.setup-table. [Accessed 31 07 2016].
|
||||
|
||||
\[7\] "Shotgun Surgery," \[Online\]. Available: https://en.wikipedia.org/wiki/Shotgun_surgery. \[Accessed 31 07 2016\].
|
||||
[7] "Shotgun Surgery," [Online]. Available: https://en.wikipedia.org/wiki/Shotgun_surgery. [Accessed 31 07 2016].
|
||||
|
||||
\[8\] M. Fowler, Refactoring: Improving the design of existing code, Addison Wesley, 1999\.
|
||||
[8] M. Fowler, Refactoring: Improving the design of existing code, Addison Wesley, 1999\.
|
||||
|
||||
\[9\] "Masking out," \[Online\]. Available: https://en.wikipedia.org/wiki/Data_masking#Masking_out. \[Accessed 29 7 2016\].
|
||||
[9] "Masking out," [Online]. Available: https://en.wikipedia.org/wiki/Data_masking#Masking_out. [Accessed 29 7 2016].
|
||||
|
||||
\[10\] "Key Vault," Microsoft, \[Online\]. Available: https://azure.microsoft.com/en-us/services/key-vault/.
|
||||
[10] "Key Vault," Microsoft, [Online]. Available: https://azure.microsoft.com/en-us/services/key-vault/.
|
||||
|
||||
\[11\] "How to: Configure SSL to Secure the Connection to Microsoft Dynamics NAV Web Client," Microsoft, \[Online\]. Available: https://msdn.microsoft.com/en-us/library/hh167264(v=nav.90).aspx. \[Accessed 2 8 2016\].
|
||||
[11] "How to: Configure SSL to Secure the Connection to Microsoft Dynamics NAV Web Client," Microsoft, [Online]. Available: https://msdn.microsoft.com/en-us/library/hh167264(v=nav.90).aspx. [Accessed 2 8 2016].
|
||||
|
||||
\[12\] "sniffer," \[Online\]. Available: http://compnetworking.about.com/od/networksecurityprivacy/g/bldef_sniffer.htm. \[Accessed 02 08 2016\].
|
||||
[12] "sniffer," [Online]. Available: http://compnetworking.about.com/od/networksecurityprivacy/g/bldef_sniffer.htm. [Accessed 02 08 2016].
|
||||
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -15,8 +15,8 @@ _By Bogdana Botez at Microsoft Development Center Copenhagen_
|
|||
* **Code duplication:** if each entity attempts to write its own routines for data access, invariably this will bring duplication.
|
||||
* **No knowledge reuse:** if a bug is found and fixed in one of the implementations, there is no guarantee that all the other implementations will be updated. For example
|
||||
* **Double-Encryption**: lack of care or knowledge could lead a NAV developer to attempt to double-encrypt strings, which would render them unusable.
|
||||
* **Multi-company configuration \[4\]**: in NAV, it is possible to store multiple companies on the same tenant \[5\] database. A developer who has not investigated such a configuration and its consequences on encryption, can attempt to encrypt data in (for example) a Setup Table \[6\] of only one company, which would make this table unusable from any unencrypted company (since the server will observe that encryption is enabled, and try to retrieve it as it were enabled for all companies and fails).
|
||||
* **"Shotgun surgery" \[7\]:** one change in the data access technique (like a new requirement to validate the user's identity before viewing any protected data), calls for updates in every single implementation of data access, if multiple implementations exist. Hence, one change of requirement triggers multiple efforts to update the product.
|
||||
* **Multi-company configuration [4]**: in NAV, it is possible to store multiple companies on the same tenant [5] database. A developer who has not investigated such a configuration and its consequences on encryption, can attempt to encrypt data in (for example) a Setup Table [6] of only one company, which would make this table unusable from any unencrypted company (since the server will observe that encryption is enabled, and try to retrieve it as it were enabled for all companies and fails).
|
||||
* **"Shotgun surgery" [7]:** one change in the data access technique (like a new requirement to validate the user's identity before viewing any protected data), calls for updates in every single implementation of data access, if multiple implementations exist. Hence, one change of requirement triggers multiple efforts to update the product.
|
||||
|
||||
**Solution:** In Dynamics NAV the same library which offers [**Encryption**][anchor1], is also intended to be used as a **Single Point of Access**. Write code to create, read and remove sensitive data only through codeunit 1266 Encryption Management, and never directly.
|
||||
|
||||
|
|
@ -28,7 +28,7 @@ You can observe that, in panel 3, each usage needs to access separately the encr
|
|||
|
||||
_Figure 1- **Single Point of Access** pattern applied._
|
||||
|
||||
This shows how pattern application is an iterative process, where one step follows another. Refactoring \[8\] the code to apply one pattern, cleans and clarifies the code and in some cases, makes clear the possibility of further refactoring.
|
||||
This shows how pattern application is an iterative process, where one step follows another. Refactoring [8] the code to apply one pattern, cleans and clarifies the code and in some cases, makes clear the possibility of further refactoring.
|
||||
|
||||
**Usage**: call the procedures available in codeunit 1266 Encryption Management to store and access sensitive data.
|
||||
|
||||
|
|
@ -46,29 +46,29 @@ This shows how pattern application is an iterative process, where one step follo
|
|||
|
||||
**References**
|
||||
|
||||
\[1\] "Wikipedia," \[Online\]. Available: https://en.wikipedia.org/wiki/Separation\_of\_concerns.
|
||||
[1] "Wikipedia," [Online]. Available: https://en.wikipedia.org/wiki/Separation\_of\_concerns.
|
||||
|
||||
\[2\] "GUID Structure," \[Online\]. Available: https://msdn.microsoft.com/en-us/library/aa373931(VS.85).aspx.
|
||||
[2] "GUID Structure," [Online]. Available: https://msdn.microsoft.com/en-us/library/aa373931(VS.85).aspx.
|
||||
|
||||
\[3\] "Wikipedia," \[Online\]. Available: https://en.wikipedia.org/wiki/Binary\_large\_object.
|
||||
[3] "Wikipedia," [Online]. Available: https://en.wikipedia.org/wiki/Binary\_large\_object.
|
||||
|
||||
\[4\] waldo, "How Do I: Manage Companies in Microsoft Dynamics NAV 2013 R2".
|
||||
[4] waldo, "How Do I: Manage Companies in Microsoft Dynamics NAV 2013 R2".
|
||||
|
||||
\[5\] Microsoft, "Multitenant Deployment Architecture," Microsoft, \[Online\]. Available: https://msdn.microsoft.com/en-us/library/dn271675(v=nav.90).aspx.
|
||||
[5] Microsoft, "Multitenant Deployment Architecture," Microsoft, [Online]. Available: https://msdn.microsoft.com/en-us/library/dn271675(v=nav.90).aspx.
|
||||
|
||||
\[6\] B. Botez, "Setup Table design pattern," Microsoft, 2013\. \[Online\]. Available: https://community.dynamics.com/nav/w/designpatterns/76.setup-table. \[Accessed 31 07 2016\].
|
||||
[6] B. Botez, "Setup Table design pattern," Microsoft, 2013\. [Online]. Available: https://community.dynamics.com/nav/w/designpatterns/76.setup-table. [Accessed 31 07 2016].
|
||||
|
||||
\[7\] "Shotgun Surgery," \[Online\]. Available: https://en.wikipedia.org/wiki/Shotgun\_surgery. \[Accessed 31 07 2016\].
|
||||
[7] "Shotgun Surgery," [Online]. Available: https://en.wikipedia.org/wiki/Shotgun\_surgery. [Accessed 31 07 2016].
|
||||
|
||||
\[8\] M. Fowler, Refactoring: Improving the design of existing code, Addison Wesley, 1999\.
|
||||
[8] M. Fowler, Refactoring: Improving the design of existing code, Addison Wesley, 1999\.
|
||||
|
||||
\[9\] "Masking out," \[Online\]. Available: https://en.wikipedia.org/wiki/Data\_masking\#Masking\_out. \[Accessed 29 7 2016\].
|
||||
[9] "Masking out," [Online]. Available: https://en.wikipedia.org/wiki/Data\_masking\#Masking\_out. [Accessed 29 7 2016].
|
||||
|
||||
\[10\] "Key Vault," Microsoft, \[Online\]. Available: https://azure.microsoft.com/en-us/services/key-vault/.
|
||||
[10] "Key Vault," Microsoft, [Online]. Available: https://azure.microsoft.com/en-us/services/key-vault/.
|
||||
|
||||
\[11\] "How to: Configure SSL to Secure the Connection to Microsoft Dynamics NAV Web Client," Microsoft, \[Online\]. Available: https://msdn.microsoft.com/en-us/library/hh167264(v=nav.90).aspx. \[Accessed 2 8 2016\].
|
||||
[11] "How to: Configure SSL to Secure the Connection to Microsoft Dynamics NAV Web Client," Microsoft, [Online]. Available: https://msdn.microsoft.com/en-us/library/hh167264(v=nav.90).aspx. [Accessed 2 8 2016].
|
||||
|
||||
\[12\] "sniffer," \[Online\]. Available: http://compnetworking.about.com/od/networksecurityprivacy/g/bldef\_sniffer.htm. \[Accessed 02 08 2016\].
|
||||
[12] "sniffer," [Online]. Available: http://compnetworking.about.com/od/networksecurityprivacy/g/bldef\_sniffer.htm. [Accessed 02 08 2016].
|
||||
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -44,29 +44,29 @@ Mask the field in only a subset of pages. Open the pages where the field should
|
|||
|
||||
**References**
|
||||
|
||||
\[1\] "Wikipedia," \[Online\]. Available: https://en.wikipedia.org/wiki/Separation_of_concerns.
|
||||
[1] "Wikipedia," [Online]. Available: https://en.wikipedia.org/wiki/Separation_of_concerns.
|
||||
|
||||
\[2\] "GUID Structure," \[Online\]. Available: https://msdn.microsoft.com/en-us/library/aa373931(VS.85).aspx.
|
||||
[2] "GUID Structure," [Online]. Available: https://msdn.microsoft.com/en-us/library/aa373931(VS.85).aspx.
|
||||
|
||||
\[3\] "Wikipedia," \[Online\]. Available: https://en.wikipedia.org/wiki/Binary_large_object.
|
||||
[3] "Wikipedia," [Online]. Available: https://en.wikipedia.org/wiki/Binary_large_object.
|
||||
|
||||
\[4\] waldo, "How Do I: Manage Companies in Microsoft Dynamics NAV 2013 R2".
|
||||
[4] waldo, "How Do I: Manage Companies in Microsoft Dynamics NAV 2013 R2".
|
||||
|
||||
\[5\] Microsoft, "Multitenant Deployment Architecture," Microsoft, \[Online\]. Available: https://msdn.microsoft.com/en-us/library/dn271675(v=nav.90).aspx.
|
||||
[5] Microsoft, "Multitenant Deployment Architecture," Microsoft, [Online]. Available: https://msdn.microsoft.com/en-us/library/dn271675(v=nav.90).aspx.
|
||||
|
||||
\[6\] B. Botez, "Setup Table design pattern," Microsoft, 2013\. \[Online\]. Available: https://community.dynamics.com/nav/w/designpatterns/76.setup-table. \[Accessed 31 07 2016\].
|
||||
[6] B. Botez, "Setup Table design pattern," Microsoft, 2013\. [Online]. Available: https://community.dynamics.com/nav/w/designpatterns/76.setup-table. [Accessed 31 07 2016].
|
||||
|
||||
\[7\] "Shotgun Surgery," \[Online\]. Available: https://en.wikipedia.org/wiki/Shotgun_surgery. \[Accessed 31 07 2016\].
|
||||
[7] "Shotgun Surgery," [Online]. Available: https://en.wikipedia.org/wiki/Shotgun_surgery. [Accessed 31 07 2016].
|
||||
|
||||
\[8\] M. Fowler, Refactoring: Improving the design of existing code, Addison Wesley, 1999\.
|
||||
[8] M. Fowler, Refactoring: Improving the design of existing code, Addison Wesley, 1999\.
|
||||
|
||||
\[9\] "Masking out," \[Online\]. Available: https://en.wikipedia.org/wiki/Data_masking\#Masking_out. \[Accessed 29 7 2016\].
|
||||
[9] "Masking out," [Online]. Available: https://en.wikipedia.org/wiki/Data_masking\#Masking_out. [Accessed 29 7 2016].
|
||||
|
||||
\[10\] "Key Vault," Microsoft, \[Online\]. Available: https://azure.microsoft.com/en-us/services/key-vault/.
|
||||
[10] "Key Vault," Microsoft, [Online]. Available: https://azure.microsoft.com/en-us/services/key-vault/.
|
||||
|
||||
\[11\] "How to: Configure SSL to Secure the Connection to Microsoft Dynamics NAV Web Client," Microsoft, \[Online\]. Available: https://msdn.microsoft.com/en-us/library/hh167264(v=nav.90).aspx. \[Accessed 2 8 2016\].
|
||||
[11] "How to: Configure SSL to Secure the Connection to Microsoft Dynamics NAV Web Client," Microsoft, [Online]. Available: https://msdn.microsoft.com/en-us/library/hh167264(v=nav.90).aspx. [Accessed 2 8 2016].
|
||||
|
||||
\[12\] "sniffer," \[Online\]. Available: http://compnetworking.about.com/od/networksecurityprivacy/g/bldef_sniffer.htm. \[Accessed 02 08 2016\].
|
||||
[12] "sniffer," [Online]. Available: http://compnetworking.about.com/od/networksecurityprivacy/g/bldef_sniffer.htm. [Accessed 02 08 2016].
|
||||
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -12,7 +12,7 @@ _By Bogdana Botez at Microsoft Development Center Copenhagen_
|
|||
|
||||
**Forces:**
|
||||
|
||||
* **Insecure communication:** When the user enters a password, if unprotected, a network sniffer \[12\] could catch and read it. A sniffer is either a software program or hardware device which examine network traffic. Years ago, sniffers were tools used exclusively by professional network engineers, but nowadays, they are also popular with Internet hackers and people just curious about networking. A public Wi-Fi network could easily be eavesdropped by an unwanted actor.
|
||||
* **Insecure communication:** When the user enters a password, if unprotected, a network sniffer [12] could catch and read it. A sniffer is either a software program or hardware device which examine network traffic. Years ago, sniffers were tools used exclusively by professional network engineers, but nowadays, they are also popular with Internet hackers and people just curious about networking. A public Wi-Fi network could easily be eavesdropped by an unwanted actor.
|
||||
|
||||
By using data storage patterns like **Sensitive Data Encapsulation**, **Encryption, Single Point of Access** or **Azure Key Vault**, the sensitive data is preserved securely in the implementation of Dynamics NAV. But before it gets into a secure store, this data needs to be transmitted from the user, through a user interface, on a client-server connection and all the way to the database. Is the data safe while being transmitted?
|
||||
|
||||
|
|
@ -39,29 +39,29 @@ _Figure 1 - Data transmission before (http://...) and after SSL encryption (http
|
|||
|
||||
**References**
|
||||
|
||||
\[1\] "Wikipedia," \[Online\]. Available: https://en.wikipedia.org/wiki/Separation_of_concerns.
|
||||
[1] "Wikipedia," [Online]. Available: https://en.wikipedia.org/wiki/Separation_of_concerns.
|
||||
|
||||
\[2\] "GUID Structure," \[Online\]. Available: https://msdn.microsoft.com/en-us/library/aa373931(VS.85).aspx.
|
||||
[2] "GUID Structure," [Online]. Available: https://msdn.microsoft.com/en-us/library/aa373931(VS.85).aspx.
|
||||
|
||||
\[3\] "Wikipedia," \[Online\]. Available: https://en.wikipedia.org/wiki/Binary_large_object.
|
||||
[3] "Wikipedia," [Online]. Available: https://en.wikipedia.org/wiki/Binary_large_object.
|
||||
|
||||
\[4\] waldo, "How Do I: Manage Companies in Microsoft Dynamics NAV 2013 R2".
|
||||
[4] waldo, "How Do I: Manage Companies in Microsoft Dynamics NAV 2013 R2".
|
||||
|
||||
\[5\] Microsoft, "Multitenant Deployment Architecture," Microsoft, \[Online\]. Available: https://msdn.microsoft.com/en-us/library/dn271675(v=nav.90).aspx.
|
||||
[5] Microsoft, "Multitenant Deployment Architecture," Microsoft, [Online]. Available: https://msdn.microsoft.com/en-us/library/dn271675(v=nav.90).aspx.
|
||||
|
||||
\[6\] B. Botez, "Setup Table design pattern," Microsoft, 2013\. \[Online\]. Available: https://community.dynamics.com/nav/w/designpatterns/76.setup-table. \[Accessed 31 07 2016\].
|
||||
[6] B. Botez, "Setup Table design pattern," Microsoft, 2013\. [Online]. Available: https://community.dynamics.com/nav/w/designpatterns/76.setup-table. [Accessed 31 07 2016].
|
||||
|
||||
\[7\] "Shotgun Surgery," \[Online\]. Available: https://en.wikipedia.org/wiki/Shotgun_surgery. \[Accessed 31 07 2016\].
|
||||
[7] "Shotgun Surgery," [Online]. Available: https://en.wikipedia.org/wiki/Shotgun_surgery. [Accessed 31 07 2016].
|
||||
|
||||
\[8\] M. Fowler, Refactoring: Improving the design of existing code, Addison Wesley, 1999\.
|
||||
[8] M. Fowler, Refactoring: Improving the design of existing code, Addison Wesley, 1999\.
|
||||
|
||||
\[9\] "Masking out," \[Online\]. Available: https://en.wikipedia.org/wiki/Data_masking#Masking_out. \[Accessed 29 7 2016\].
|
||||
[9] "Masking out," [Online]. Available: https://en.wikipedia.org/wiki/Data_masking#Masking_out. [Accessed 29 7 2016].
|
||||
|
||||
\[10\] "Key Vault," Microsoft, \[Online\]. Available: https://azure.microsoft.com/en-us/services/key-vault/.
|
||||
[10] "Key Vault," Microsoft, [Online]. Available: https://azure.microsoft.com/en-us/services/key-vault/.
|
||||
|
||||
\[11\] "How to: Configure SSL to Secure the Connection to Microsoft Dynamics NAV Web Client," Microsoft, \[Online\]. Available: https://msdn.microsoft.com/en-us/library/hh167264(v=nav.90).aspx. \[Accessed 2 8 2016\].
|
||||
[11] "How to: Configure SSL to Secure the Connection to Microsoft Dynamics NAV Web Client," Microsoft, [Online]. Available: https://msdn.microsoft.com/en-us/library/hh167264(v=nav.90).aspx. [Accessed 2 8 2016].
|
||||
|
||||
\[12\] "sniffer," \[Online\]. Available: http://compnetworking.about.com/od/networksecurityprivacy/g/bldef_sniffer.htm. \[Accessed 02 08 2016\].
|
||||
[12] "sniffer," [Online]. Available: http://compnetworking.about.com/od/networksecurityprivacy/g/bldef_sniffer.htm. [Accessed 02 08 2016].
|
||||
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@ This pattern is about silently handing file transfers between NAV Service Tier a
|
|||
|
||||
## Description
|
||||
|
||||
As a terminology clarification \[1\], note that both "upload" and "download" are named as seen from the client's point of view:
|
||||
As a terminology clarification [1], note that both "upload" and "download" are named as seen from the client's point of view:
|
||||
|
||||
* Download" defines transferring a file from the server to the client.
|
||||
* "Upload" transfers the file from the client to the server.
|
||||
|
|
@ -21,29 +21,29 @@ Sometimes, files must be transferred to or from known locations without triggeri
|
|||
|
||||
In the following, both the historical and the recommended ways of silently transferring files are described. Since we keep both implementations possible for the sake of backward compatibility, we strongly recommend that you use the file-transfer API provided that is provided with the File Management codeunit (419).
|
||||
|
||||
The legacy API for file transfers \[2\]:
|
||||
The legacy API for file transfers [2]:
|
||||
|
||||
```al
|
||||
\[Ok :=\] UPLOAD(DialogTitle, FromFolder, FromFilter, FromFile, ToFile)
|
||||
[Ok :=] UPLOAD(DialogTitle, FromFolder, FromFilter, FromFile, ToFile)
|
||||
|
||||
\[Ok :=\] DOWNLOAD(FromFile, DialogTitle, ToFolder, ToFilter, ToFile)
|
||||
[Ok :=] DOWNLOAD(FromFile, DialogTitle, ToFolder, ToFilter, ToFile)
|
||||
```
|
||||
|
||||
As you can see, this historical API leaves no place for turning off the functionality for showing a dialog. Historically, NAV offered a remedy to this, namely by using the "Magicpath" string, which is the constant '<TEMP\>'. Under this condition, the way to invoke silent file upload or download becomes:
|
||||
|
||||
```al
|
||||
\[Ok :=\] UPLOAD(DialogTitle, Magicpath, FromFilter, FromFile, ToFile)
|
||||
[Ok :=] UPLOAD(DialogTitle, Magicpath, FromFilter, FromFile, ToFile)
|
||||
|
||||
\[Ok :=\] DOWNLOAD(FromFile, DialogTitle, Magicpath, ToFilter, ToFile)
|
||||
[Ok :=] DOWNLOAD(FromFile, DialogTitle, Magicpath, ToFilter, ToFile)
|
||||
```
|
||||
|
||||
This remedy introduced an issue: If we use "Magicpath" instead of **FromFolder** and **ToFolder** specifications, then where do we upload from and where do we download to? The answer is that they are uploaded to and downloaded from the NAV server's temporary folder. The path to the temporary file can be obtained when this file is created, by using the following function in **File Management: <tempFileName\> := ServerTempFileName(<fileExtension\>)**.
|
||||
|
||||
The new API for file transfers in the **File Management** codeunit:
|
||||
|
||||
\[Text :=\] UploadFileSilent(ClientFilePath)
|
||||
[Text :=] UploadFileSilent(ClientFilePath)
|
||||
|
||||
\[Text :=\] DownloadTempFile(ServerFileName)
|
||||
[Text :=] DownloadTempFile(ServerFileName)
|
||||
|
||||
Using the API in the **File Management** codeunit instead of the historical API is recommended for all file transferring and file management in NAV implementations.
|
||||
|
||||
|
|
|
|||
|
|
@ -23,7 +23,7 @@ The implementation of the pattern involves several considerations:
|
|||
|
||||
Since this kind of tables is a collection of several environment or setup parameters, the primary key does not refer to any business attributes for this kind of tables. However, for maintaining the integrity of the database, it is necessary to define a primary key.
|
||||
|
||||
So, the most common implementation is to have a field "Primary Key" of Code\[10\]. This is populated with a blank value when the record is inserted. This field is not added to the page, so that the user cannot be modify it later.
|
||||
So, the most common implementation is to have a field "Primary Key" of Code[10]. This is populated with a blank value when the record is inserted. This field is not added to the page, so that the user cannot be modify it later.
|
||||
|
||||
**Creating a Page**
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue