SlideShare a Scribd company logo
1 of 34
Microsoft Dynamics® AX 2012
Forms/tables methods call sequences
Objectifs
• Describe the methods call sequencing
• Describe the forms and tables methods and
when they should be override
• Describe how to access form objects
• Describe how to do some common tasks on
forms
Methods call sequencing
Cases
• Case 1: Form opening
• Case 2: Record creation
• Case 3: Field modification
• Case 4: Record saving
• Case 5: Record deletion
• Case 6: Form closing
• Case 7: RunBase
Form opening
Form Opening
Form.init
• Used to retrieve and validate the calling parameters
• Initialize Controls : Visibility, Enable, Editable…
• Do not put code that affects DS in this method use DS.init instead
DS.init
• Set Data Source properties : AllowEdit, AllowCreate, AllowDelete…
• Create ranges, sorting and filters
• Cache methods to improve performance
• Not apply ranges values only if the ranges/links… are permanent
Form Opening
DS.linkActive
• This methods is called every time we activate a new record on the
calling form
• Applying links, ranges and updating design depending on the caller
record!
DS.executeQuery
• Applying ranges and filters values
• Avoid changing the query structure (create ranges, links…) at this
level as this method is frequently called
DS.active
• Updating design depending on the selected record
• Updating other Data Sources queries
Record creation
Record creation
DS.Create
• Add supplementary rules to validate the creation
• Modify creation process : example open a specific form for creation
DS.initValue
• Only to initialize fields with values that can not exists outside of the
form, example :
• Filter on the top of the form
• Values coming from a calling form/class
Table.initValue
• Assign a default value to fields
• Always call this method when creating records by X++ code even if
the method is empty : It may be overridden in a future version!
Field modification
Field modification
Control.validate - Control.Modified
• never!
DSField.validate
• Validate the value typed / chosen by the user against business rules
and data consistency
DSField.modified
• Modify value on other fields
• Implement field modification rules
When : code we want to implement is specific to the form, or depends on some data that
are only available on the form
Table.validateField, table.modifiedField
Same as DS methods. These methods are called what ever the form.
Field modification
In modifiedField methods, you should always make sure that the code you
have implemented will be cancelable if the user choose not save the changes
he made. Else you have to force the saving of the record!
Incorrect :
Correct :
Field modification
Modifying a field value by X++
You should be sure the value you are assigning to the field respect
business rules, as the system will not trigger a validateField method call
automatically!
Lookup consideration
When you override the default lookup of a field to filter values that can
be chosen by the user. You should always override validateField or
validate to consider the case when the user type directly a value in the
field without using the lookup.
Record saving
Record saving
DS.validateWrite
• Validate business rules and data consistency (mandatory fields filled…) that
are form specific
Table.validateWrite
• Same as the DS equivalent but will be applied on all forms
DS.Write
• Updating other DS in the same form
• Override the normal saving process with some specific rules
Table.insert / Tables.update
• Implement specific rules : CUD other record, recalculate a value…
Record saving
• When inserting/updating records by X++ code you should always call
Table.validateWrite in order o validate business rules/ mandatory fields…
Even if the method is empty!
• Avoid direct call to doInsert/doUpdate, as all business rules that are written
in insert/update are not executed. Only use direct call if :
1. Performance issues
2. You are sure that business rules implemented in insert/update are not applicable in your
use case.
Creation/update by X++ Code should be done using AxBC classes because they implement a Framework to
correctly validate fields values and business rules. This will be discussed in an other session.
Record deletion
Record deletion
Delete Actions
You should always remember to implement Delete Actions when your table is
linked to other tables! Forgetting this can lead to data inconsistency.
In X++ code you should always call Table.validateDelete before calling delete
Form closing
Form closing
How to catch closing method of a form
• ClosedOk : form has been closed using OK command button
• ClosedCancel : form has been closed using a cancel command button or
Esc
• Closed : form has been closed “Normally”
Runbase
RunBase
Main
• Keep the code as minimum as possible
• Used to retrieve and validate calling parameters, instantiate a class objects
and initialize class object parameters
Construct
• Always create a construct method to encapsulate the new Method
InitParmDefault
• Use this method to default class variables/query with default values for the
first class run by the user.
HOW TO ?
How to acces form objects
• FormRun : element, this
• DataSource : DataSourceName_ds, this
• Active Record : DataSourceName
• DataSource Query : DataSourceName_q
• DataSource Query Run : DataSourceName_qr
• Field value : DataSourceName.Field
• Control
element.control(element.controlId(formControlStr(FormName, ControlName)))
Or
AutoDeclaration
General rules
• Do not place code in a form unless you cannot place it in
a class or in a table method.
• Code written on forms cannot be reused and is difficult to
customize.
• Forms are entirely client-based. There should be no code in
them that manipulates the database.
• Always Use Field Groups in Tables
• To modify text that appears in the user interface you
should modify property values on the extended data
types or base enums in the application.
General rules
• If a control is linked to a field data source, You
should never AutoDeclare this control. All
behavior changes (visibility, mandatory, enable,
…) can be done throw the data Source. Next
slides shows you how you can do common
tasks!
How To ?
How to enable/disable a control
Incorrect :
ControlName.enabled(true/false);
Correct :
DataSourceName_ds.object(fieldnum(Table, Field)).enabled(true/false);
How to set visibility of a control
Incorrect :
ControlName.visible(true/false);
Correct :
DataSourceName_ds.object(fieldnum(Table, Field)).visible(true/false);
How To ?
How to make a control editable
Incorrect :
ControlName.allowEdit(true/false);
Correct :
DataSourceName_ds.object(fieldnum(Table, Field)).allowEdit(true/false);
How to make a control mandatory
Incorrect :
ControlName.mandatory(true/false);
Correct :
DataSourceName_ds.object(fieldnum(Table, Field)).mandatory(true/false);
How to?
Assign a value to a control
Incorrect
Contol.text(value), control.realvalue(value), control. Checked(Value)…
Correct
DataSourceName.Field = Value;
How to?
Allow/prevent record creation/modification/deletion
Creation
• Propriety : AllowCreate
• X++ : DataSourceName_ds.allowCreate()
Modification
• Propriety : AllowEdit
• X++ : DataSourceName_ds.allowEdit()
Deletion
• Propriety : AllowDelete
• X++ : DataSourceName_ds.allowDelete()
NOT CORRECT
Making Buttons that allow creation/modification/deletion disabled doesn’t prevent doing
theses action. As there are shortcuts (Ctrl+N, Alt+F9…) that trigger the same events!
How to?
Cache methods (1)
Method caching mechanism helps improve performances.
DataSource_ds.cacheAddMethod(tableMethodStr(TableName, MethodName));
(1) Caching mechanism will be discussed in details in an other session.
How to?
Create/Apply range on a form DS
1. Declare a variable QueryBuildRange on classDeclaration
2. Create and assign the range in DS.init() after super()
3. Apply the range value in DS.executeQuery or DS.linkActive
Add a filter control to a form (not listPage)
1. Declare a Range as previous
2. Declare a variable in class Declaration with desired type
3. Create an edit method on form methods on the declared variable
4. Call the DS.executeQuery() and use the variable as a value for the range
5. Create a control on the form using the edit method
6. Optional : Save the filter value by user by overriding methods
In some cases you may have to use QueryFilter and not QueryBuildRange. See :
- http://msdn.microsoft.com/en-us/library/hh745335.aspx
- http://msdn.microsoft.com/en-us/library/gg881181.aspx
How to?
Add a filter control to a listPage
1. Turn the “Filter” group visible = Yes
2. Add a control to the group and specify properties : Label, helpText, CK…
3. Specify properties :
1. FilterDataSource : data source you want to filter
2. FilterField : field to filter based on it
3. FilterExpression : %1, !=%1, ..%1, %1..
A standard framework behind listPage will apply filter once a value is specified!
Contact me
Mohamed Amine HAMDAOUI
mahamdaoui@toolconsulting.com
www.toolconsulting.com
Phone
+212 (0) 6 69 42 79 94
Please don’t hesitate to contact me if you find any error on the document or if you have
any questions.
Thanks for your time, and see you in the next Lab!

More Related Content

What's hot

Microsoft Dynamics AX 2012 - Development Introduction Training - Part 3/3
Microsoft Dynamics AX 2012 - Development Introduction Training - Part 3/3Microsoft Dynamics AX 2012 - Development Introduction Training - Part 3/3
Microsoft Dynamics AX 2012 - Development Introduction Training - Part 3/3Fabio Filardi
 
Microsoft Dynamics AX 2012 - Development Introduction Training - Part 1/3
Microsoft Dynamics AX 2012 - Development Introduction Training - Part 1/3Microsoft Dynamics AX 2012 - Development Introduction Training - Part 1/3
Microsoft Dynamics AX 2012 - Development Introduction Training - Part 1/3Fabio Filardi
 
Dynamics ax 2012 development overview
Dynamics ax 2012 development overviewDynamics ax 2012 development overview
Dynamics ax 2012 development overviewAli Raza Zaidi
 
Microsoft dynamics ax 2012 development introduction part 2/3
Microsoft dynamics ax 2012 development introduction part 2/3Microsoft dynamics ax 2012 development introduction part 2/3
Microsoft dynamics ax 2012 development introduction part 2/3Ali Raza Zaidi
 
AX 2012 R3 Installation Guide
AX 2012 R3 Installation GuideAX 2012 R3 Installation Guide
AX 2012 R3 Installation GuideBiswanath Dey
 
Microsoft Dynamics AX 2012 - X++ Compiled to CIL
Microsoft Dynamics AX 2012 - X++ Compiled to CILMicrosoft Dynamics AX 2012 - X++ Compiled to CIL
Microsoft Dynamics AX 2012 - X++ Compiled to CILFabio Filardi
 
Developer's guide to customization
Developer's guide to customizationDeveloper's guide to customization
Developer's guide to customizationAhmed Farag
 
Sql(structured query language)
Sql(structured query language)Sql(structured query language)
Sql(structured query language)Ishucs
 
Introduction to oracle database (basic concepts)
Introduction to oracle database (basic concepts)Introduction to oracle database (basic concepts)
Introduction to oracle database (basic concepts)Bilal Arshad
 
Apex trigger framework Salesforce #ApexTrigger #Salesforce #SFDCPanther
Apex trigger framework Salesforce #ApexTrigger #Salesforce #SFDCPantherApex trigger framework Salesforce #ApexTrigger #Salesforce #SFDCPanther
Apex trigger framework Salesforce #ApexTrigger #Salesforce #SFDCPantherAmit Singh
 
Salesforce Development Best Practices
Salesforce Development Best PracticesSalesforce Development Best Practices
Salesforce Development Best PracticesVivek Chawla
 

What's hot (20)

Microsoft Dynamics AX 2012 - Development Introduction Training - Part 3/3
Microsoft Dynamics AX 2012 - Development Introduction Training - Part 3/3Microsoft Dynamics AX 2012 - Development Introduction Training - Part 3/3
Microsoft Dynamics AX 2012 - Development Introduction Training - Part 3/3
 
Microsoft Dynamics AX 2012 - Development Introduction Training - Part 1/3
Microsoft Dynamics AX 2012 - Development Introduction Training - Part 1/3Microsoft Dynamics AX 2012 - Development Introduction Training - Part 1/3
Microsoft Dynamics AX 2012 - Development Introduction Training - Part 1/3
 
Dynamics ax 2012 development overview
Dynamics ax 2012 development overviewDynamics ax 2012 development overview
Dynamics ax 2012 development overview
 
Microsoft dynamics ax 2012 development introduction part 2/3
Microsoft dynamics ax 2012 development introduction part 2/3Microsoft dynamics ax 2012 development introduction part 2/3
Microsoft dynamics ax 2012 development introduction part 2/3
 
AX 2012 R3 Installation Guide
AX 2012 R3 Installation GuideAX 2012 R3 Installation Guide
AX 2012 R3 Installation Guide
 
Microsoft Dynamics AX 2012 - X++ Compiled to CIL
Microsoft Dynamics AX 2012 - X++ Compiled to CILMicrosoft Dynamics AX 2012 - X++ Compiled to CIL
Microsoft Dynamics AX 2012 - X++ Compiled to CIL
 
Oracle Apps - Forms
Oracle Apps - FormsOracle Apps - Forms
Oracle Apps - Forms
 
E-R diagram & SQL
E-R diagram & SQLE-R diagram & SQL
E-R diagram & SQL
 
Chapter 1 introduction to sql server
Chapter 1 introduction to sql serverChapter 1 introduction to sql server
Chapter 1 introduction to sql server
 
My Sql Work Bench
My Sql Work BenchMy Sql Work Bench
My Sql Work Bench
 
Developer's guide to customization
Developer's guide to customizationDeveloper's guide to customization
Developer's guide to customization
 
Introduction to SQL
Introduction to SQLIntroduction to SQL
Introduction to SQL
 
SSAS Tabular model importance and uses
SSAS  Tabular model importance and usesSSAS  Tabular model importance and uses
SSAS Tabular model importance and uses
 
Sql server T-sql basics ppt-3
Sql server T-sql basics  ppt-3Sql server T-sql basics  ppt-3
Sql server T-sql basics ppt-3
 
SQL Commands
SQL Commands SQL Commands
SQL Commands
 
Introduction to sql
Introduction to sqlIntroduction to sql
Introduction to sql
 
Sql(structured query language)
Sql(structured query language)Sql(structured query language)
Sql(structured query language)
 
Introduction to oracle database (basic concepts)
Introduction to oracle database (basic concepts)Introduction to oracle database (basic concepts)
Introduction to oracle database (basic concepts)
 
Apex trigger framework Salesforce #ApexTrigger #Salesforce #SFDCPanther
Apex trigger framework Salesforce #ApexTrigger #Salesforce #SFDCPantherApex trigger framework Salesforce #ApexTrigger #Salesforce #SFDCPanther
Apex trigger framework Salesforce #ApexTrigger #Salesforce #SFDCPanther
 
Salesforce Development Best Practices
Salesforce Development Best PracticesSalesforce Development Best Practices
Salesforce Development Best Practices
 

Viewers also liked

An Introduction to the Dynamics AX Application Integration Framework
An Introduction to the Dynamics AX Application Integration FrameworkAn Introduction to the Dynamics AX Application Integration Framework
An Introduction to the Dynamics AX Application Integration FrameworkFolio3-Dynamics-Services
 
AX2012 AIF(Application Integration Framework) 소개
AX2012 AIF(Application Integration Framework) 소개AX2012 AIF(Application Integration Framework) 소개
AX2012 AIF(Application Integration Framework) 소개Alvin You
 
Dynamic AX : Application Integration Framework
Dynamic AX : Application Integration FrameworkDynamic AX : Application Integration Framework
Dynamic AX : Application Integration FrameworkSaboor Ahmed
 
Execution plan for sql
Execution plan for sqlExecution plan for sql
Execution plan for sqlSatra Eadtrong
 
MB6-890 Transcript.PDF
MB6-890 Transcript.PDFMB6-890 Transcript.PDF
MB6-890 Transcript.PDFRandy King
 
Sql query performance analysis
Sql query performance analysisSql query performance analysis
Sql query performance analysisRiteshkiit
 
Version control in the Dynamics AX
Version control in the Dynamics AXVersion control in the Dynamics AX
Version control in the Dynamics AXAlvin You
 
AX2012 Technical Track - Infrastructure, Davy Vliegen
AX2012 Technical Track - Infrastructure, Davy VliegenAX2012 Technical Track - Infrastructure, Davy Vliegen
AX2012 Technical Track - Infrastructure, Davy Vliegendynamicscom
 

Viewers also liked (10)

An Introduction to the Dynamics AX Application Integration Framework
An Introduction to the Dynamics AX Application Integration FrameworkAn Introduction to the Dynamics AX Application Integration Framework
An Introduction to the Dynamics AX Application Integration Framework
 
AX2012 AIF(Application Integration Framework) 소개
AX2012 AIF(Application Integration Framework) 소개AX2012 AIF(Application Integration Framework) 소개
AX2012 AIF(Application Integration Framework) 소개
 
Dynamic AX : Application Integration Framework
Dynamic AX : Application Integration FrameworkDynamic AX : Application Integration Framework
Dynamic AX : Application Integration Framework
 
Faisal engineer (1)
Faisal engineer (1)Faisal engineer (1)
Faisal engineer (1)
 
Execution plan for sql
Execution plan for sqlExecution plan for sql
Execution plan for sql
 
MB6-890 Transcript.PDF
MB6-890 Transcript.PDFMB6-890 Transcript.PDF
MB6-890 Transcript.PDF
 
Sql query performance analysis
Sql query performance analysisSql query performance analysis
Sql query performance analysis
 
Azure overview
Azure overviewAzure overview
Azure overview
 
Version control in the Dynamics AX
Version control in the Dynamics AXVersion control in the Dynamics AX
Version control in the Dynamics AX
 
AX2012 Technical Track - Infrastructure, Davy Vliegen
AX2012 Technical Track - Infrastructure, Davy VliegenAX2012 Technical Track - Infrastructure, Davy Vliegen
AX2012 Technical Track - Infrastructure, Davy Vliegen
 

Similar to Microsoft dynamics ax2012 : forms and tables methods call sequences, How To?

20231013_274_ClubServicenow_Catalog.pdf
20231013_274_ClubServicenow_Catalog.pdf20231013_274_ClubServicenow_Catalog.pdf
20231013_274_ClubServicenow_Catalog.pdfTiago Macul
 
Creating a Great XPages User Interface
Creating a Great XPages User InterfaceCreating a Great XPages User Interface
Creating a Great XPages User InterfaceTeamstudio
 
Creating a Great XPages User Interface, TLCC Teamstudio Webinar - Feb, 2014
Creating a Great XPages User Interface, TLCC Teamstudio Webinar - Feb, 2014Creating a Great XPages User Interface, TLCC Teamstudio Webinar - Feb, 2014
Creating a Great XPages User Interface, TLCC Teamstudio Webinar - Feb, 2014Howard Greenberg
 
KWizCom forms - introduction
KWizCom forms - introductionKWizCom forms - introduction
KWizCom forms - introductionNimrod Geva
 
SFDC Other Platform Features
SFDC Other Platform FeaturesSFDC Other Platform Features
SFDC Other Platform FeaturesSujit Kumar
 
Marty, You're Just Not Thinking Fourth Dimensionally
Marty, You're Just Not Thinking Fourth DimensionallyMarty, You're Just Not Thinking Fourth Dimensionally
Marty, You're Just Not Thinking Fourth DimensionallyTeamstudio
 
Jaspersoft and Clarity PPM - Advanced Reporting with Data Warehouse
Jaspersoft and Clarity PPM - Advanced Reporting with Data WarehouseJaspersoft and Clarity PPM - Advanced Reporting with Data Warehouse
Jaspersoft and Clarity PPM - Advanced Reporting with Data WarehouseThiago Bottoni
 
Implementing Tables and Views.pptx
Implementing Tables and Views.pptxImplementing Tables and Views.pptx
Implementing Tables and Views.pptxLuisManuelUrbinaAmad
 
Obiee metadata development
Obiee metadata developmentObiee metadata development
Obiee metadata developmentdils4u
 
Oracle Forms: Introduction to multiple Forms
Oracle Forms: Introduction to multiple FormsOracle Forms: Introduction to multiple Forms
Oracle Forms: Introduction to multiple FormsSekhar Byna
 
The Joy of Subforms with Randy Carey
The Joy of Subforms with Randy CareyThe Joy of Subforms with Randy Carey
The Joy of Subforms with Randy Careyjdaychi
 
DeVry UniversityStudent Lab ActivityBIS245 Database Essentials.docx
DeVry UniversityStudent Lab ActivityBIS245 Database Essentials.docxDeVry UniversityStudent Lab ActivityBIS245 Database Essentials.docx
DeVry UniversityStudent Lab ActivityBIS245 Database Essentials.docxduketjoy27252
 
SA05 - Customizing the User Interface
SA05 - Customizing the User Interface SA05 - Customizing the User Interface
SA05 - Customizing the User Interface Maintenance Connection
 

Similar to Microsoft dynamics ax2012 : forms and tables methods call sequences, How To? (20)

20231013_274_ClubServicenow_Catalog.pdf
20231013_274_ClubServicenow_Catalog.pdf20231013_274_ClubServicenow_Catalog.pdf
20231013_274_ClubServicenow_Catalog.pdf
 
Creating a Great XPages User Interface
Creating a Great XPages User InterfaceCreating a Great XPages User Interface
Creating a Great XPages User Interface
 
Creating a Great XPages User Interface, TLCC Teamstudio Webinar - Feb, 2014
Creating a Great XPages User Interface, TLCC Teamstudio Webinar - Feb, 2014Creating a Great XPages User Interface, TLCC Teamstudio Webinar - Feb, 2014
Creating a Great XPages User Interface, TLCC Teamstudio Webinar - Feb, 2014
 
KWizCom forms - introduction
KWizCom forms - introductionKWizCom forms - introduction
KWizCom forms - introduction
 
Cis245 finalreview
Cis245 finalreviewCis245 finalreview
Cis245 finalreview
 
KWizCom Forms
KWizCom FormsKWizCom Forms
KWizCom Forms
 
Module 3 design and implementing tables
Module 3 design and implementing tablesModule 3 design and implementing tables
Module 3 design and implementing tables
 
SFDC Other Platform Features
SFDC Other Platform FeaturesSFDC Other Platform Features
SFDC Other Platform Features
 
Marty, You're Just Not Thinking Fourth Dimensionally
Marty, You're Just Not Thinking Fourth DimensionallyMarty, You're Just Not Thinking Fourth Dimensionally
Marty, You're Just Not Thinking Fourth Dimensionally
 
Jaspersoft and Clarity PPM - Advanced Reporting with Data Warehouse
Jaspersoft and Clarity PPM - Advanced Reporting with Data WarehouseJaspersoft and Clarity PPM - Advanced Reporting with Data Warehouse
Jaspersoft and Clarity PPM - Advanced Reporting with Data Warehouse
 
Implementing Tables and Views.pptx
Implementing Tables and Views.pptxImplementing Tables and Views.pptx
Implementing Tables and Views.pptx
 
Obiee metadata development
Obiee metadata developmentObiee metadata development
Obiee metadata development
 
LDV.pptx
LDV.pptxLDV.pptx
LDV.pptx
 
Oracle Forms: Introduction to multiple Forms
Oracle Forms: Introduction to multiple FormsOracle Forms: Introduction to multiple Forms
Oracle Forms: Introduction to multiple Forms
 
The Joy of Subforms with Randy Carey
The Joy of Subforms with Randy CareyThe Joy of Subforms with Randy Carey
The Joy of Subforms with Randy Carey
 
Refactoring
RefactoringRefactoring
Refactoring
 
DeVry UniversityStudent Lab ActivityBIS245 Database Essentials.docx
DeVry UniversityStudent Lab ActivityBIS245 Database Essentials.docxDeVry UniversityStudent Lab ActivityBIS245 Database Essentials.docx
DeVry UniversityStudent Lab ActivityBIS245 Database Essentials.docx
 
SA05 - Customizing the User Interface
SA05 - Customizing the User Interface SA05 - Customizing the User Interface
SA05 - Customizing the User Interface
 
Lightning Process Builder
Lightning Process BuilderLightning Process Builder
Lightning Process Builder
 
Lightning Process Builder
Lightning Process BuilderLightning Process Builder
Lightning Process Builder
 

Recently uploaded

Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Allon Mureinik
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Servicegiselly40
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationMichael W. Hawkins
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationRadu Cotescu
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerThousandEyes
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024The Digital Insurer
 
Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Paola De la Torre
 
Developing An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of BrazilDeveloping An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of BrazilV3cube
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking MenDelhi Call girls
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024The Digital Insurer
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking MenDelhi Call girls
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxMalak Abu Hammad
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationSafe Software
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking MenDelhi Call girls
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Igalia
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...Neo4j
 
A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024Results
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘RTylerCroy
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEarley Information Science
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024The Digital Insurer
 

Recently uploaded (20)

Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101
 
Developing An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of BrazilDeveloping An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of Brazil
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptx
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
 
A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024
 

Microsoft dynamics ax2012 : forms and tables methods call sequences, How To?

  • 1. Microsoft Dynamics® AX 2012 Forms/tables methods call sequences
  • 2. Objectifs • Describe the methods call sequencing • Describe the forms and tables methods and when they should be override • Describe how to access form objects • Describe how to do some common tasks on forms
  • 4. Cases • Case 1: Form opening • Case 2: Record creation • Case 3: Field modification • Case 4: Record saving • Case 5: Record deletion • Case 6: Form closing • Case 7: RunBase
  • 6. Form Opening Form.init • Used to retrieve and validate the calling parameters • Initialize Controls : Visibility, Enable, Editable… • Do not put code that affects DS in this method use DS.init instead DS.init • Set Data Source properties : AllowEdit, AllowCreate, AllowDelete… • Create ranges, sorting and filters • Cache methods to improve performance • Not apply ranges values only if the ranges/links… are permanent
  • 7. Form Opening DS.linkActive • This methods is called every time we activate a new record on the calling form • Applying links, ranges and updating design depending on the caller record! DS.executeQuery • Applying ranges and filters values • Avoid changing the query structure (create ranges, links…) at this level as this method is frequently called DS.active • Updating design depending on the selected record • Updating other Data Sources queries
  • 9. Record creation DS.Create • Add supplementary rules to validate the creation • Modify creation process : example open a specific form for creation DS.initValue • Only to initialize fields with values that can not exists outside of the form, example : • Filter on the top of the form • Values coming from a calling form/class Table.initValue • Assign a default value to fields • Always call this method when creating records by X++ code even if the method is empty : It may be overridden in a future version!
  • 11. Field modification Control.validate - Control.Modified • never! DSField.validate • Validate the value typed / chosen by the user against business rules and data consistency DSField.modified • Modify value on other fields • Implement field modification rules When : code we want to implement is specific to the form, or depends on some data that are only available on the form Table.validateField, table.modifiedField Same as DS methods. These methods are called what ever the form.
  • 12. Field modification In modifiedField methods, you should always make sure that the code you have implemented will be cancelable if the user choose not save the changes he made. Else you have to force the saving of the record! Incorrect : Correct :
  • 13. Field modification Modifying a field value by X++ You should be sure the value you are assigning to the field respect business rules, as the system will not trigger a validateField method call automatically! Lookup consideration When you override the default lookup of a field to filter values that can be chosen by the user. You should always override validateField or validate to consider the case when the user type directly a value in the field without using the lookup.
  • 15. Record saving DS.validateWrite • Validate business rules and data consistency (mandatory fields filled…) that are form specific Table.validateWrite • Same as the DS equivalent but will be applied on all forms DS.Write • Updating other DS in the same form • Override the normal saving process with some specific rules Table.insert / Tables.update • Implement specific rules : CUD other record, recalculate a value…
  • 16. Record saving • When inserting/updating records by X++ code you should always call Table.validateWrite in order o validate business rules/ mandatory fields… Even if the method is empty! • Avoid direct call to doInsert/doUpdate, as all business rules that are written in insert/update are not executed. Only use direct call if : 1. Performance issues 2. You are sure that business rules implemented in insert/update are not applicable in your use case. Creation/update by X++ Code should be done using AxBC classes because they implement a Framework to correctly validate fields values and business rules. This will be discussed in an other session.
  • 18. Record deletion Delete Actions You should always remember to implement Delete Actions when your table is linked to other tables! Forgetting this can lead to data inconsistency. In X++ code you should always call Table.validateDelete before calling delete
  • 20. Form closing How to catch closing method of a form • ClosedOk : form has been closed using OK command button • ClosedCancel : form has been closed using a cancel command button or Esc • Closed : form has been closed “Normally”
  • 22. RunBase Main • Keep the code as minimum as possible • Used to retrieve and validate calling parameters, instantiate a class objects and initialize class object parameters Construct • Always create a construct method to encapsulate the new Method InitParmDefault • Use this method to default class variables/query with default values for the first class run by the user.
  • 24. How to acces form objects • FormRun : element, this • DataSource : DataSourceName_ds, this • Active Record : DataSourceName • DataSource Query : DataSourceName_q • DataSource Query Run : DataSourceName_qr • Field value : DataSourceName.Field • Control element.control(element.controlId(formControlStr(FormName, ControlName))) Or AutoDeclaration
  • 25. General rules • Do not place code in a form unless you cannot place it in a class or in a table method. • Code written on forms cannot be reused and is difficult to customize. • Forms are entirely client-based. There should be no code in them that manipulates the database. • Always Use Field Groups in Tables • To modify text that appears in the user interface you should modify property values on the extended data types or base enums in the application.
  • 26. General rules • If a control is linked to a field data source, You should never AutoDeclare this control. All behavior changes (visibility, mandatory, enable, …) can be done throw the data Source. Next slides shows you how you can do common tasks!
  • 27. How To ? How to enable/disable a control Incorrect : ControlName.enabled(true/false); Correct : DataSourceName_ds.object(fieldnum(Table, Field)).enabled(true/false); How to set visibility of a control Incorrect : ControlName.visible(true/false); Correct : DataSourceName_ds.object(fieldnum(Table, Field)).visible(true/false);
  • 28. How To ? How to make a control editable Incorrect : ControlName.allowEdit(true/false); Correct : DataSourceName_ds.object(fieldnum(Table, Field)).allowEdit(true/false); How to make a control mandatory Incorrect : ControlName.mandatory(true/false); Correct : DataSourceName_ds.object(fieldnum(Table, Field)).mandatory(true/false);
  • 29. How to? Assign a value to a control Incorrect Contol.text(value), control.realvalue(value), control. Checked(Value)… Correct DataSourceName.Field = Value;
  • 30. How to? Allow/prevent record creation/modification/deletion Creation • Propriety : AllowCreate • X++ : DataSourceName_ds.allowCreate() Modification • Propriety : AllowEdit • X++ : DataSourceName_ds.allowEdit() Deletion • Propriety : AllowDelete • X++ : DataSourceName_ds.allowDelete() NOT CORRECT Making Buttons that allow creation/modification/deletion disabled doesn’t prevent doing theses action. As there are shortcuts (Ctrl+N, Alt+F9…) that trigger the same events!
  • 31. How to? Cache methods (1) Method caching mechanism helps improve performances. DataSource_ds.cacheAddMethod(tableMethodStr(TableName, MethodName)); (1) Caching mechanism will be discussed in details in an other session.
  • 32. How to? Create/Apply range on a form DS 1. Declare a variable QueryBuildRange on classDeclaration 2. Create and assign the range in DS.init() after super() 3. Apply the range value in DS.executeQuery or DS.linkActive Add a filter control to a form (not listPage) 1. Declare a Range as previous 2. Declare a variable in class Declaration with desired type 3. Create an edit method on form methods on the declared variable 4. Call the DS.executeQuery() and use the variable as a value for the range 5. Create a control on the form using the edit method 6. Optional : Save the filter value by user by overriding methods In some cases you may have to use QueryFilter and not QueryBuildRange. See : - http://msdn.microsoft.com/en-us/library/hh745335.aspx - http://msdn.microsoft.com/en-us/library/gg881181.aspx
  • 33. How to? Add a filter control to a listPage 1. Turn the “Filter” group visible = Yes 2. Add a control to the group and specify properties : Label, helpText, CK… 3. Specify properties : 1. FilterDataSource : data source you want to filter 2. FilterField : field to filter based on it 3. FilterExpression : %1, !=%1, ..%1, %1.. A standard framework behind listPage will apply filter once a value is specified!
  • 34. Contact me Mohamed Amine HAMDAOUI mahamdaoui@toolconsulting.com www.toolconsulting.com Phone +212 (0) 6 69 42 79 94 Please don’t hesitate to contact me if you find any error on the document or if you have any questions. Thanks for your time, and see you in the next Lab!