From 8853682673105d71aae425d3d81be3fd2482cfc6 Mon Sep 17 00:00:00 2001 From: Filip Hakansson Date: Tue, 7 May 2024 12:49:49 +0200 Subject: [PATCH] Updates to 'Programming Standard' --- .../businessEngineJobsLogging.png | Bin 0 -> 76304 bytes .../api-specification/database-api.md | 17 +- .../api-specification/interactive-api.md | 2 +- docs/documentation/limitations.md | 2 +- docs/documentation/programming-standard.md | 172 ++++++++++++++---- 5 files changed, 154 insertions(+), 39 deletions(-) create mode 100644 assets/attachments/programming-standard/businessEngineJobsLogging.png diff --git a/assets/attachments/programming-standard/businessEngineJobsLogging.png b/assets/attachments/programming-standard/businessEngineJobsLogging.png new file mode 100644 index 0000000000000000000000000000000000000000..df09f1b70fd1f520ec4bc5bde933e29633e18f62 GIT binary patch literal 76304 zcmdSAXH-*N*EWix;4K1nqy>8cAxQ5+ioK9j-ZVn3(99kJMG4`I>J~*^>DT{pP63b^D+2#LLFl*m!v-0ag;f z-dR?@|M;1OJ0n>A$`SUi*Up6Rc0pn=+aDjL2XEnJGQ1-E>QPyPea=(!Tw7_*fc7);o_fl3AaR85$m@QtlfEB(1N@J;xA6 zWV3A=E9t!1#~And`=wAmi}-WIq^~k}`p==t(LlAoU;cB9!)S@Hj4Z|?Zk4_ z6g|uU=iVYff05llx=Q*5B4j9tOWm}fwkr}ovd%h2JETL_Nkv~X#crnU|2ji%0DEWc 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 Mr+K&dj%D!w1KC<4s{jB1 literal 0 HcmV?d00001 diff --git a/docs/documentation/api-specification/database-api.md b/docs/documentation/api-specification/database-api.md index ea39a93..644d970 100644 --- a/docs/documentation/api-specification/database-api.md +++ b/docs/documentation/api-specification/database-api.md @@ -109,6 +109,7 @@ void readRecord() { ### Read multiple records To read multiple records a database action should be defined along with a `Closure` that defines how each read record will be processed/used. +When reading multiple records, the 'readAll' function including 'pageSize' should be used. 'pageSize' is referred to as 'nrOfRecords' in the examples below. Example: @@ -136,7 +137,7 @@ Closure releasedItemProcessor = { DBContainer container -> ### Read with selection Database API has support for expressions and filters, to use the feature, an instance of `ExpressionFactory` should be -retrieved to build the filter and then used to build the DBAction. The rest is identical to a normal operation. +retrieved to build the filter and then used to build the DBAction. The rest is identical to a normal operation. Example: @@ -154,8 +155,10 @@ public void main() { .build(); DBContainer container = query.getContainer(); container.set("MMCONO", currentCompany); - container.set("MMSTAT", "20"); - query.readAll(container, 2, releasedItemProcessor); + container.set("MMSTAT", "20"); + int nrOfKeys = 2; + int nrOfRecords = mi.getMaxRecords() <= 0 || mi.getMaxRecords() >= 10000? 10000: mi.getMaxRecords(); + query.readAll(container, nrOfKeys, nrOfRecords, releasedItemProcessor); } Closure releasedItemProcessor = { DBContainer container -> @@ -191,7 +194,9 @@ public void main() { mi.write(); } } - query.readAll(container, 3, readCallback) + int nrOfKeys = 3; + int nrOfRecords = mi.getMaxRecords() <= 0 || mi.getMaxRecords() >= 10000? 10000: mi.getMaxRecords(); + query.readAll(container, nrOfKeys, nrOfRecords, readCallback) } ``` @@ -235,7 +240,9 @@ void deprecateItems() { DBContainer container = query.getContainer(); container.set("MMCONO", currentCompany); container.set("MMSTAT", "20"); - query.readAllLock(container, 2, updateCallBack); + int nrOfKeys = 2; + int nrOfRecords = mi.getMaxRecords() <= 0 || mi.getMaxRecords() >= 10000? 10000: mi.getMaxRecords(); + query.readAllLock(container, nrOfKeys, nrOfRecords, updateCallBack); } Closure updateCallBack = { LockedResult lockedResult -> diff --git a/docs/documentation/api-specification/interactive-api.md b/docs/documentation/api-specification/interactive-api.md index d76f470..02ecd89 100644 --- a/docs/documentation/api-specification/interactive-api.md +++ b/docs/documentation/api-specification/interactive-api.md @@ -58,7 +58,7 @@ public class SampleExtension extends ExtendM3Trigger { public void main() { String WHLO = interactive.display.fields.WRWHLO if(WHLO == '001'){ - interactive.display.showOkDialog("You are in warehouse " + WHLO); + interactive.showOkDialog("You are in warehouse " + WHLO); } } } diff --git a/docs/documentation/limitations.md b/docs/documentation/limitations.md index dcd03a6..f253a9a 100644 --- a/docs/documentation/limitations.md +++ b/docs/documentation/limitations.md @@ -25,7 +25,7 @@ General XtendM3 limitations. ### M3 Program calls It is not possible to call M3 programs from an extension. Only M3 APIs can be called from extensions. -### Database read on user-defined sorting orders +### Database read on user-defined sorting orders It is not possible to build query on standard tables using user-defined sorting order or index created using CRS021. ## Extending diff --git a/docs/documentation/programming-standard.md b/docs/documentation/programming-standard.md index 72f7bd3..adfdebf 100644 --- a/docs/documentation/programming-standard.md +++ b/docs/documentation/programming-standard.md @@ -20,26 +20,29 @@ Guideline for writing secure, optimized and scalable extensions. --- ## Extension Types -Extension can be created in any of the four types: +There are five types of extensions, below is a short description of each type. ### Trigger Extensions -Trigger extensions are used to hook or inject our own code in a specific method in M3 Java through an extension point. These extensions extend the ExtendM3Trigger class. +Trigger extensions are used to hook or inject our own code in a specific method in M3 BE via extension points. -### Utility Extensions -Utility extensions are used to create an extension program with collection of methods that can be called in other extensions. These extensions extend the ExtendM3Utility class. +### Transaction Extensions +Transaction extensions are used to create custom M3 API transactions. -`utility.call(String utility, String method, Object... arguments)` +### Batch Extensions +Batch extensions are used for long-running jobs and can be executed/scheduled via *SHS010MI*. -### Transaction Extensions -Transaction Extensions are used to create custom M3 API transactions. These extensions extend the ExtendM3Transaction class. +### Utility Extensions +Utility extensions are used to create an extension program with collection of methods that can be called in other extensions.
+`utility.call(String utility, String method, Object... arguments)` ### Table Extensions -Table Extensions are used to create dynamic table. In BE 15.x version, this is the equivalent of the MAK custom tables. It is possible to add columns, assign data types, unique keys, and indices. +Table extensions, or Dynamic Tables, are custom database tables.
+It is possible to add columns, assign data types, unique keys, and indexes. ## Indentation and Formatting -Tab size: 2 spaces -Indent size: 2 spaces -Continuation indent: 4 spaces +Tab size: 2 spaces +Indent size: 2 spaces +Continuation indent: 4 spaces Charset: utf-8 XtendM3 uses Groovy programming and ending code lines with semicolons are optional. @@ -48,7 +51,8 @@ XtendM3 uses Groovy programming and ending code lines with semicolons are option ### Extensions Extension names should be a valid Java class name. -There is no restriction on extension names and will run with no error when compiled. However, when creating extensions, these naming conventions should be followed for readability and maintenance: +There are no restrictions on extension names, and they will run with no error when compiled.
+However, when creating extensions the naming conventions below should be followed for readability and maintenance. __Module__ `SMS` @@ -83,19 +87,21 @@ __Description__ #### Trigger Extensions -`Format: ___` +Format: `___` + +Example:
Type | Program | Extension name ------------- | -------------| ------------- -Interactive | APS450 | FIM_IW_1784_ValidateInvoice +------------ | -------------| ------------- +Interactive| APS450| FIM_IW_1784_ValidateInvoice Fnc Batch| APS450Fnc|FIM_Fnc_1784_ValidateInvoice Batch| OOLINEPI| SLS_Batch_1784_ValidateCO MI Batch| MMS100MI| SCE_MI_1784_ValidateDO #### Utility Extensions -`Format: Utils` +Format: `Utils` -DateUtils +Example: `DateUtils` #### Transaction Extensions - EXT9XXMI is reserved for standard extensions and should not be used @@ -138,12 +144,46 @@ validateType - Variables should be in lowerCamelCase and constants in CAPITAL_CONSTANTS ## Extension Structure -- Global variables and main method are declared at the beginning of the program as compared to M3 Java where these are declared at the end of the program -`` +- Global variables and main method are declared at the beginning of the program as compared to M3 Java where these are declared at the end of the program:
+```groovy + public class ExampleTransaction extends ExtendM3Transaction { + private final DatabaseAPI database; + private final LoggerAPI logger; + + private Integer globalInteger; + private String globalString; + + public ExampleExtension(DatabaseAPI database, LoggerAPI logger) { + this.database = database; + this.logger = logger; + } + + public void main() { + globalInteger = 111; + globalString = "example" + } + } +``` ### Utility Extensions - Utility extensions cannot contain global variables -- It is not possible to declare and create instance of API in utility extensions, instead API should be passed as parameters in utility methods `` +- It is not possible to declare and create instance of API in utility extensions, instead API should be passed as parameters in utility methods:
+```groovy + public class ExampleUtility extends ExtendM3Utility { + + public String exampleGet(String miParamter, MICallerAPI miCaller) { + + String returnValue; + Map parameters = ["EXPA": miParameter]; + + Closure response = { Map response -> + returnValue = response.get("EXPA"); + } + + miCaller.call("EXT000MI", "Get", parameters, response); + } + } +``` ## Programming Practices ### Logging @@ -151,7 +191,9 @@ validateType - It is encouraged to add logs in extensions to help in debugging and troubleshooting issues particularly on non-development environments (TRN, PRD) where there is restriction on modifying extensions - Use proper level of logging – If extension is to be deployed in PRD, it should be limited to DEBUG level. Using INFO/WARNING/ERROR/TRACE on production environment can cause huge log size and impact MT Cloud environment - Avoid logging values of all returned fields in a database query -- Logs can be accessed through Administration tool - Business Engine Jobs `` +- Logs can be accessed through Administration tool - Business Engine Jobs + + #### Log levels - warning @@ -161,9 +203,10 @@ validateType - debug ### Database Access -- It is recommended to use standard API if transactions are available instead of direct database access on WRITE/UPDATE/DELETE where the program uses multiple tables to update. This could cause corrupt data if any on the logic, validation, or database update was missed or incorrectly updated +- It is recommended to use standard APIs if transactions are available instead of direct database access on WRITE/UPDATE/DELETE where the program uses multiple tables to update. This could cause corrupt data if any on the logic, validation, or database update was missed or incorrectly updated - Make sure when using readLock that it is released at the end of the extension to avoid blocking another program access -- When reading table with partial keys, verify that this will not return too many records +- When reading table with partial keys, verify that this will not return too many records. Include _nrOfRecords_ parameter when performing _readAll_ API calls + - It is not allowed read more than 10,000 records per read. If there is a need to read more than 10,000 records, contact the review team with a good reasoning as to why it's needed - When reading table, if possible, specify only the required column fields and avoid selectAllFields on querying tables particularly on tables which contains many fields ### Loops @@ -173,7 +216,7 @@ validateType #### In Memory - SessionAPI is used to store information in key-value mapping that can be accessed between multiple extensions in the same session - Make sure to use unique identifier as key names to avoid conflicts with other extensions when adding content to the cache -- Reassess when there is too many information that needs to be stored in a session. It may be more practical to add the information using XtendM3 tables instead +- Reassess when there is too much information that needs to be stored in a session. It may be more practical to add the information using XtendM3 tables instead #### In Customer Extension Table - Customer extension table refers to CUGEX1, CUGEX2 and CUGEX3 tables and can be accessed through standard API, CUSEXTMI @@ -181,12 +224,47 @@ validateType #### In Dynamic Database - Dynamic Database or XtendM3 table is the equivalent of MAK custom table -- Table name uses prefix EXT and can have specific columns and logical keys -`to add example` +- Table name uses prefix EXT and can have specific columns and logical keys + ```groovy + void read() { + DBAction query = database.table("EXTMIT") + .index("00") + .selection("EXITNO", "EXITDS") + .build(); + DBContainer container = query.createContainer(); + container.set("EXCONO", 999); + container.set("EXDIVI", "GGG"); + container.set("EXSTAT", "30"); + container.set("EXRESP", "KFHAKANSSON"); + if(query.read(container)) { + String itemNumber = container.get("EXITNO"); + String itemDescription = container.get("EXITDS"); + mi.outData.put("RES1", itemNumber); + mi.outData.put("RES2", itemDescription); + mi.write(); + } + } + ``` #### In Text/XML/JSON File - TextFilesAPI is the equivalent of MvxTextFile in M3 Java which can be used to read, write, or delete file -`to add example` + ```groovy + public void readRecord(String folder, String record) { + textFiles.open(folder); + textFiles.read(record, "UTF-8", readFile); + } + + Closure readFile = { BufferedReader reader -> + List header = resolveFields(reader.readLine()); + while((line = reader.readLine()) != null) { + reader.println(line); + } + readResult = header.toString(); + mi.outData.put("RESU", readResult); + mi.write(); + } + ``` + - More examples available here: [TextFilesAPI](https://infor-cloud.github.io/xtendm3/docs/documentation/api-specification/textfiles-api) ### API Call - M3 API can be run using IonAPI or MICallerAPI @@ -207,10 +285,14 @@ validateType ### Date and Time - Use classes [LocalDate](http://docs.groovy-lang.org/latest/html/groovy-jdk/java/time/LocalDate.html), [LocalTime](http://docs.groovy-lang.org/latest/html/groovy-jdk/java/time/LocalTime.html), [LocalDateTime](http://docs.groovy-lang.org/latest/html/groovy-jdk/java/time/LocalDateTime.html) if required to retrieve current date or manipulate date or time `int entryDate = LocalDate.now().format(DateTimeFormatter.ofPattern("yyyyMMdd")).toInteger()` -`int entryTime = LocalDateTime.now().format(DateTimeFormatter.ofPattern("HHmmss")).toInteger()` +`int entryTime = LocalDateTime.now().format(DateTimeFormatter.ofPattern("HHmmss")).toInteger()` + +### Variable Types +- It is not allowed to use *__def__* statements in XtendM3, the type should be known + - If the type is unknown, use *__Object__* ## Testing -Extension approval requires submission of approved Unit test and Functional test documents +Extension approval requires submission of approved Unit test and Functional test documents ### Local - Extensions can be locally tested using [XtendM3 SDK](https://github.com/infor-cloud/xtendm3-sdk-java) which provides the interfaces for the internal APIs available to XtendM3 Extensions. This SDK can be used to build, test and debug Extensions locally without needing to have any M3 environment up and running @@ -219,7 +301,14 @@ Extension approval requires submission of approved Unit test and Functional test ### Live - If the program extension has been activated in the tenant, it automatically runs and the changes to the program are seen by the users. During unit testing, it is recommended that the extension should execute only for specific users until it is verified working to avoid interrupting other users when running the same program - Provided is an example of validating extension to run for specific user/s -`to add example` + ```groovy + private boolean isEnabled() { + if (program.getUser() != "USERNAME") { + return false + } + return true + } + ``` ## Version Controlling More details are provided at [Version Controlling](https://infor-cloud.github.io/xtendm3/docs/documentation/version-controlling/) page @@ -234,5 +323,24 @@ Refer to the example of an [XtendM3 Extension Repository](https://github.com/inf Any git provider that the customer prefers GitHub, GitLab, Bitbucket and etc. ## Documentation -- Extension JavaDoc on top of extension classes is required -- Extension Methods JavaDoc on top of methods (except for main) is recommended +- Extension JavaDoc on top of extension classes is required + - Example: + + ```groovy + /**************************************************************************************** + Extension Name: EXT000MI/transactionName + Type: ExtendM3Transaction + Script Author: + Date: + Description: + * Description of script functionality + + Revision History: + Name Date Version Description of Changes + Revision Author 2022-01-01 1.0 Descriptive text here + Revision Author 2022-02-02 1.1 Outlining what's been updated + Revision Author 2022-03-03 1.2 In the current revision + ******************************************************************************************/ + ``` + +- Extension Methods JavaDoc on top of methods (except for main) is recommended