Odoo Development Cookbook - Husen Daudi - E-Book

Odoo Development Cookbook E-Book

Husen Daudi

0,0
29,99 €

-100%
Sammeln Sie Punkte in unserem Gutscheinprogramm und kaufen Sie E-Books und Hörbücher mit bis zu 100% Rabatt.

Mehr erfahren.
Beschreibung

The latest version of the powerful Odoo framework uncovers a wide variety of features for rapid application development. Written by seasoned Odoo experts, this updated Odoo Development Cookbook will help you explore Odoo 17’s new features and use them to develop applications from scratch.
You'll learn about website development concepts and get to grips with the Odoo Web Library (OWL), as well as create a new Odoo module from the ground up before progressing to advanced framework concepts. The book also shows you how to modify existing applications, including Point of Sale (POS) applications. Going beyond backend development, you'll discover advanced JavaScript recipes for creating new views and widgets. You'll get a clear understanding of website development and be on your way to becoming a proficient Odoo developer by studying performance optimization, debugging, and automated testing.
By the end of this book, you'll have the knowledge you need to build impressive applications and be well-versed in Odoo development best practices.

Das E-Book können Sie in Legimi-Apps oder einer beliebigen App lesen, die das folgende Format unterstützen:

EPUB
MOBI

Seitenzahl: 912

Veröffentlichungsjahr: 2024

Bewertungen
0,0
0
0
0
0
0
Mehr Informationen
Mehr Informationen
Legimi prüft nicht, ob Rezensionen von Nutzern stammen, die den betreffenden Titel tatsächlich gekauft oder gelesen/gehört haben. Wir entfernen aber gefälschte Rezensionen.



Odoo Development Cookbook

Build effective business applications using the latest features in Odoo 17

Husen Daudi

Jay Vora

Parth Gajjar

Alexandre Fayolle

Holger Brunn

Daniel Reis

Odoo Development Cookbook

Copyright © 2024 Packt Publishing

All rights reserved. No part of this book may be reproduced, stored in a retrieval system, or transmitted in any form or by any means, without the prior written permission of the publisher, except in the case of brief quotations embedded in critical articles or reviews.

Every effort has been made in the preparation of this book to ensure the accuracy of the information presented. However, the information contained in this book is sold without warranty, either express or implied. Neither the authors, nor Packt Publishing or its dealers and distributors, will be held liable for any damages caused or alleged to have been caused directly or indirectly by this book.

Packt Publishing has endeavored to provide trademark information about all of the companies and products mentioned in this book by the appropriate use of capitals. However, Packt Publishing cannot guarantee the accuracy of this information.

Group Product Manager: Aaron Tanna

Publishing Product Manager: Kushal Dave

Book Project Manager: Prajakta Naik

Senior Editor: Kinnari Chohan

Technical Editor: Jubit Pincy

Copy Editor: Safis Editing

Proofreader: Nithya Sadanandan

Indexer: Pratik Shirodkar

Production Designer: Joshua Misquitta

Senior DevRel Marketing Executive: Deepak Kumar

DevRel Marketing Coordinator: Mayank Singh

First published: April 2016

Second edition: January 2018

Third Edition: April 2019

Fourth Edition: December 2020

Fifth Edition: May 2024

Production reference: 2280524

Published by Packt Publishing Ltd.

Grosvenor House

11 St Paul’s Square

Birmingham

B3 1RB, UK.

ISBN 978-1-80512-427-6

www.packtpub.com

Contributors

About the authors

Husen Daudi, a software developer with a Master’s Degree from Gujarat University, India, is also a Six Sigma Black Belt consultant. He co-founded Serpent Consulting Services Pvt. Ltd., a prominent Open Source ERP Service provider with over 100 IT specialists serving clients in more than 170 countries. With extensive experience in ERP implementation since 2007, he brings a unique approach to his work. Husen has played a pivotal role in developing and maintaining various ERP implementations in both public and private sectors. Outside of work, he is a hobbyist painter and cherishes spending time with his sons, Mufaddal and Yusuf.

Jay Vora, a software engineer with a bachelor’s degree from Gujarat University, India, is known for his thoughtful leadership, passion for development, and enthusiasm for technology. With over a decade of experience in ERPs since 2007, he co-founded Serpent Consulting Services Pvt. Ltd., a leading provider of Odoo services. The company boasts a team of over 100 IT specialists serving clients across 170 countries. Jay is known for his sociable nature and active participation in various Odoo forums and social platforms. In addition to his technical pursuits, he is also a poet, writer, and avid blogger on topics ranging from motivation and cricket to ERP-related subjects.

Parth Gajjar is an Odoo expert with a deep understanding of the Odoo framework. He started his career at Odoo and spent 7 years in the R&D department at Odoo India. During his time at Odoo, he worked on several key features, including a marketing automation app, mobile application, report engine, domain builder, and more. He also worked as a code reviewer and helped manage the code quality of the new features. Later, he started his own venture named Droggol and now provides various development services related to Odoo. He loves working on Odoo and solving real-world business problems with different technologies. He often gives technical training to Odoo developers.

I would like to thank my parents and family members for all of the support they have given throughout the writing of this book.

Alexandre Fayolle started working with Linux and free software in the mid-1990s and quickly became interested in the Python programming language. In 2012, he joined Camptocamp to share his expertise on Python, PostgreSQL, and Linux with the team implementing Odoo. He currently manages projects for Camptocamp and is strongly involved in the Odoo Community Association. In his spare time, he likes to play jazz on the vibraphone.

Holger Brunn has been a fervent open source advocate since he came into contact with the open source market sometime in the nineties. He has programmed for ERP and similar systems in different positions since 2001. For the last 10 years, he has dedicated his time to TinyERP, which became OpenERP and evolved into Odoo. Currently, he works at Therp BV in the Netherlands as a developer and is an active member of the Odoo Community Association.

Daniel Reis has had a long career in the IT industry, largely as a consultant implementing business applications in a variety of sectors, and today works for Securitas, a multinational security services provider. He has been working with Odoo (formerly OpenERP) since 2010, is an active contributor to the Odoo Community Association projects, is currently a member of the board of the Odoo Community Association, and collaborates with ThinkOpen Solutions, a leading Portuguese Odoo integrator.

Thank you note

We at SerpentCS (https://www.serpentcs.com/) would like to thank everyone who participated actively:

Ammar OfficewalaChirag PatelDeepak AhirMaitree Abhishek PandyaMurtuza SalehNikul ChaudharyParvez QureshiPrince PatelRajan SoniRitesh BambhaniyaVacha Harshil Bhatt

About the reviewer

Maxime Chambreuil serves as the Managing Director for Latin America at Open Source Integrators, a firm specializing in expert consulting and implementation services for open source solutions. With nearly two decades of experience in ERP and CRM consulting, Maxime brings a robust background in Information Systems Engineering, Business Management, and Free Software to his role

Maxime holds certifications as a Scrum Master and a Red Hat Partner Platform Certified Salesperson. He is also one of the founders and a former Vice-President of the Odoo Community Association, a non-profit organization dedicated to promoting and supporting Odoo and its collaborative development. Maxime has contributed significantly to the development of Odoo modules for Management Systems, Field Service Management, and various localizations, as well as to translations and bug reports.

Maxime’s primary mission is to assist businesses in optimizing their processes, automating workflows, and transitioning to open source solutions.

Table of Contents

Preface

1

Installing the Odoo Development Environment

Technical requirements

Understanding the Odoo ecosystem

Odoo editions

Git repositories

Runbot

Odoo app store

Odoo Community Association

Official Odoo help forum

Odoo’s eLearning platform

Installing Odoo from the source

Getting ready

How to do it...

How it works...

Starting the instance

Managing Odoo server databases

Getting ready

How to do it...

How it works...

There’s more...

Storing the instance configuration in a file

How to do it...

How it works...

Activating Odoo developer tools

How to do it...

How it works...

Updating the add-on modules list

Getting ready

How to do it…

How it works…

2

Managing Odoo Server Instances

Configuring the add-ons path

Getting ready

How to do it…

How it works…

There’s more…

Standardizing your instance directory layout

How to do it…

How it works…

There’s more...

Installing and upgrading local add-on modules

Getting ready

How to do it…

How it works…

There’s more…

Installing add-on modules from GitHub

Getting ready

How to do it…

How it works…

There’s more…

Applying changes to add-ons

Getting ready

How to do it…

How it works…

See also

Applying and trying proposed PRs

Getting ready

How to do it…

How it works…

There’s more…

3

Creating Odoo Add-On Modules

Technical requirements

What is an Odoo add-on module?

Creating and installing a new add-on module

Getting ready

How to do it...

How it works...

Completing the add-on module manifest

Getting ready

How to do it...

How it works...

There’s more…

Organizing the add-on module file structure

Getting ready

How to do it...

How it works...

Adding models

Getting ready

How to do it...

How it works...

Adding access security

Getting ready

How to do it...

How it works…

See also

Adding menu items and views

Getting ready

How to do it...

How it works...

Using the scaffold command to create a module

Getting ready

How to do it...

How it works...

4

Application Models

Technical requirements

Defining the model representation and order

Getting ready

How to do it...

There’s more…

Adding data fields to a model

Getting ready

How to do it...

How it works...

There’s more...

Adding a float field with configurable precision

Getting ready

How to do it...

How it works...

Adding a monetary field to a model

Getting ready

How to do it…

How it works…

Adding relational fields to a model

Getting ready

How to do it...

How it works…

There’s more...

Adding a hierarchy to a model

Getting ready

How to do it...

How it works…

There’s more…

Adding constraints validations to a model

Getting ready

How to do it...

How it works…

Adding computed fields to a model

Getting ready

How to do it...

How it works...

There’s more...

Exposing related fields stored in other models

Getting ready

How to do it...

How it works...

There’s more...

Adding dynamic relations using reference fields

Getting ready

How to do it...

How it works...

Adding features to a model using inheritance

Getting ready

How to do it...

How it works...

Copying the model definition using inheritance

Getting ready

How to do it...

How it works...

There’s more…

Using delegation inheritance to copy features to another model

Getting ready

How to do it...

How it works...

There’s more...

Using abstract models for reusable model features

Getting ready

How to do it...

How it works...

There’s more...

5

Basic Server-Side Development

Technical requirements

Specifying model methods and using API decorators

Getting ready

How to do it…

How it works…

Reporting errors to the user

Getting ready

How to do it…

How it works…

There’s more…

Obtaining an empty recordset for a different model

Getting ready

How to do it…

How it works…

See also

Creating new records

Getting ready

How to do it…

How it works…

There’s more…

Updating values of recordset records

Getting ready

How to do it…

How it works…

There’s more…

Searching for records

Getting ready

How to do it…

How it works…

There’s more…

Combining recordsets

Getting ready

How to do it…

How it works…

Filtering recordsets

Getting ready

How to do it…

How it works…

There’s more…

Traversing recordset relations

Getting ready

How to do it…

How it works…

There’s more…

See also

Sorting recordsets

Getting ready

How to do it…

How it works…

There’s more…

Extending the business logic defined in a model

Getting ready

How to do it…

How it works…

There’s more…

Extending write() and create()

Getting ready

How to do it…

How it works…

There’s more…

Customizing how records are searched

Getting ready

How to do it…

How it works…

There’s more…

See also

Fetching data in groups using read_group()

Getting ready

How to do it…

How it works…

6

Managing Module Data

Technical requirements

Using external IDs and namespaces

How to do it...

How it works...

There’s more…

See also

Loading data using XML files

How to do it...

How it works...

There’s more...

Using the noupdate and forcecreate flags

How to do it...

How it works...

There’s more...

See also

Loading data using CSV files

How to do it...

How it works...

Add-on updates and data migration

How to do it...

How it works...

There’s more...

See also

Deleting records from XML files

Getting ready

How to do it...

How it works...

Invoking functions from XML files

How to do it...

How it works...

There’s more...

7

Debugging Modules

The auto-reload and --dev options

Getting ready

How to do it...

How it works...

Producing server logs to help debug methods

Getting ready

How to do it...

How it works...

There’s more...

Using the Odoo shell to interactively call methods

Getting ready

How to do it...

How it works...

There’s more...

Using the Python debugger to trace method execution

Getting ready

How to do it...

How it works...

There’s more...

See also

Understanding the debug mode options

How to do it...

How it works...

8

Advanced Server-Side Development Techniques

Technical requirements

Changing the user that performs an action

Getting ready

How to do it...

How it works...

There’s more...

See also

Calling a method with a modified context

Getting ready

How to do it...

How it works…

There’s more...

See also

Executing raw SQL queries

Getting ready

How to do it...

How it works...

There’s more...

See also

Writing a wizard to guide the user

Getting ready

How to do it...

How it works...

There’s more...

Redirecting the user

See also

Defining onchange methods

Getting ready

How to do it...

How it works...

There’s more...

Calling onchange methods on the server side

Getting ready

How to do it...

How it works...

See also

Defining onchange with the compute method

Getting ready

How to do it...

How it works...

See also

Defining a model based on a SQL view

Getting ready

How to do it...

How it works...

There’s more...

See also

Adding custom Settings options

Getting ready

How to do it...

How it works...

There’s more...

Implementing init hooks

Getting ready

How to do it...

How it works...

9

Backend Views

Technical requirements

Adding a menu item and window actions

Getting ready

How to do it...

How it works...

There’s more…

See also

Having an action open a specific view

How to do it...

How it works...

There’s more...

Adding content and widgets to a form view

How to do it...

How it works...

There’s more…

See also

Adding buttons to forms

How to do it...

How it works...

There’s more...

Passing parameters to forms and actions – context

Getting ready

How to do it...

How it works...

There’s more...

See also

Defining filters on record lists – domain

How to do it...

How it works...

There’s more...

See also

Defining list views

How to do it...

How it works...

There’s more...

Defining search views

How to do it...

How it works...

There’s more...

See also

Adding a search filter side panel

Getting ready

How to do it...

How it works...

There’s more...

Changing existing views – view inheritance

How to do it...

How it works...

There’s more...

Defining document-style forms

How to do it...

How it works...

See also

Dynamic form elements using attributes

How to do it...

How it works...

There’s more...

Defining embedded views

How to do it...

How it works...

There’s more...

Displaying attachments on the side of the form view

How to do it...

How it works...

There’s more...

Defining kanban views

How to do it...

How it works...

There’s more...

See also

Showing kanban cards in columns according to their state

Getting ready

How to do it...

How it works...

There’s more...

Defining calendar views

How to do it...

How it works...

There’s more...

Defining graph view and pivot view

Getting ready

How to do it...

How it works...

There’s more...

Defining the cohort view

Getting ready

How to do it...

How it works...

Defining the gantt view

Getting ready

How to do it...

How it works...

There’s more...

Defining the activity view

Getting ready

How to do it...

How it works...

Defining the map view

Getting ready

How to do it…

How it works...

10

Security Access

Technical requirements

Creating security groups and assigning them to users

Getting ready

How to do it...

How it works...

There’s more...

See also

Adding security access to models

Getting ready

How to do it...

How it works...

There’s more...

See also

Limiting access to fields in models

Getting ready

How to do it...

How it works...

There’s more...

See also

Limiting record access using record rules

Getting ready

How to do it...

How it works...

There’s more...

Activating features with security groups

Getting ready

How to do it...

How it works...

There’s more...

Accessing recordsets as a superuser

How to do it...

How it works...

There’s more...

Hiding view elements and menus based on groups

Getting ready

How to do it...

How it works...

See also

11

Internationalization

Setting up a language installation and user preference settings

How to do it…

How it works...

There’s more...

Setting up options relating to language

Getting ready

How to do it...

How it works...

There’s more...

Text translation using a web client user interface

Getting ready

How to do it...

How it works…

Exporting translation strings to a file

Getting ready

How to do it…

How it works...

There’s more…

Using gettext tools to make translations easier

How to do it...

How it works...

There’s more...

Importing translation files into Odoo

Getting ready

How to do it...

How it works...

Altering a website’s custom language URL code

Getting ready

How to do it...

How it works...

12

Automation, Workflows, Emails, and Printing

Technical requirements

Managing dynamic record stages

Getting ready

How to do it...

How it works...

See also

Managing Kanban stages

Getting started

How to do it...

How it works...

There’s more...

See also

Adding a quick create form to a Kanban card

Getting started

How to do it...

How it works...

Creating interactive Kanban cards

Getting started

How to do it...

How it works...

Adding a progress bar to Kanban views

Getting started

How to do it...

How it works...

Creating server actions

Getting ready

How to do it...

How it works...

There’s more...

Using Python code server actions

Getting ready

How to do it...

How it works...

There’s more...

See also

Using automated actions on time conditions

Getting ready

How to do it...

How it works...

There’s more...

See also

Using automated actions on event conditions

Getting ready

How to do it...

How it works...

There’s more...

Creating QWeb-based PDF reports

Getting ready

How to do it...

How it works...

There’s more...

Managing activities from a Kanban card

Getting started

How to do it...

How it works...

There’s more…

See also

Adding a stat button to a form view

Getting started

How to do it...

How it works...

See also

Enabling the archive option for records

Getting started

How to do it...

How it works...

There’s more…

13

Web Server Development

Technical requirements

Making a path accessible from a network

Getting ready

How to do it...

How it works...

There’s more...

See also

Restricting access to web-accessible paths

Getting ready

How to do it...

How it works...

There’s more...

Consuming parameters passed to your handlers

How to do it...

How it works...

There’s more...

See also

Modifying an existing handler

Getting ready

How to do it...

How it works…

There’s more...

See also

Serving static resources

Getting ready

How to do it...

How it works…

14

CMS Website Development

Managing assets

What are asset bundles and different assets in Odoo?

Custom assets

How to do it...

There’s more...

Adding CSS and JavaScript for a website

Creating or modifying templates

Understanding QWeb templates

Creating a basic website template

Using Odoo Website Builder

Styling and customization

Loops

Dynamic attributes

Fields

Conditionals

Setting variables

Subtemplates

Inline editing

Managing dynamic routes

Getting ready

How to do it…

How it works…

There’s more...

Offering static snippets to the user

How to do it…

How it works…

There’s more…

Offering dynamic snippets to the user

How to do it…

How it works…

There’s more…

Getting input from website users

Getting ready

How to do it…

Managing SEO options

Getting ready

How to do it...

How it works...

There’s more...

Managing sitemaps for the website

Getting ready

How to do it...

How it works...

There’s more...

Getting a visitor’s country information

Getting ready

How to do it...

How it works...

Tracking a marketing campaign

Getting ready

How to do it...

How it works...

Managing multiple websites

Getting ready

How to do it...

How it works...

Redirecting old URLs

Getting ready

How to do it...

How it works...

Publish management for website-related records

Getting ready

How to do it…

How it works...

There’s more…

15

Web Client Development

Technical requirements

Creating custom widgets

Getting ready

How to do it…

How it works…

Using client-side QWeb templates

Getting ready

How to do it...

How it works...

There’s more…

Making RPC calls to the server

Getting ready

How to do it…

How it works…

See also

Creating a new view

Getting ready

How to do it…

How it works…

Debugging your client-side code

Getting ready

How to do it...

How it works…

There’s more…

Improving onboarding with tours

Getting ready

How to do it…

How it works…

Mobile app JavaScript

Getting ready

How to do it…

How it works…

There’s more...

16

The Odoo Web Library (OWL)

Technical requirements

Creating an OWL component

Getting ready

How to do it...

How it works...

There’s more...

Managing user actions in an OWL component

Getting ready

How to do it...

How it works…

There’s more...

Making OWL components with hooks

Getting ready

How to do it…

How it works...

Understanding the OWL component life cycle

Getting ready

How to do it…

How it works…

There’s more…

Adding an OWL field to the form view

Getting ready

How to do it…

How it works…

There’s more…

17

In-App Purchasing with Odoo

IAP concepts

Odoo IAP

How it works…

18

Automated Test Cases

Technical requirements

Adding Python test cases

Getting ready

How to do it...

How it works...

There’s more...

Running tagged Python test cases

Getting ready

How to do it...

How it works...

There’s more...

Setting up Headless Chrome for client-side test cases

How to do it...

How it works...

Adding client-side QUnit test cases

Getting ready

How to do it...

How it works...

There’s more...

Adding tour test cases

Getting ready

How to do it...

How it works...

Running client-side test cases from the UI

How to do it...

How it works...

Debugging client-side test cases

Getting ready

How to do it...

How it works...

Generating videos/screenshots for failed test cases

How to do it...

How it works...

Populating random data for testing

Getting ready

How to do it...

How it works...

There’s more…

19

Managing, Deploying, and Testing with Odoo.sh

Exploring some basic concepts of Odoo.sh

What is Odoo.sh?

Why was Odoo.sh introduced?

When should you use Odoo.sh?

What are the features of Odoo.sh?

Creating an Odoo.sh account

Getting ready

How to do it...

How it works...

There’s more...

Adding and installing custom modules

Getting ready

How to do it...

How it works...

There’s more...

Managing branches

Getting ready

How to do it...

How it works...

Accessing debugging options

How to do it...

There’s more...

Getting a backup of your instance

How to do it...

How it works...

Checking the status of your builds

How to do it...

How it works...

There’s more...

All Odoo.sh options

Getting ready

How to do it...

There’s more...

20

Remote Procedure Calls in Odoo

Technical requirements

Logging in to/connecting Odoo with XML-RPC

Getting ready

How to do it...

How it works...

There’s more...

Searching/reading records using XML-RPC

Getting ready

How to do it...

How it works...

There’s more...

Creating/updating/deleting records using XML-RPC

Getting ready

How to do it...

How it works...

There’s more...

Calling methods using XML-RPC

Getting ready

How to do it...

How it works...

There’s more...

Logging in to/connecting Odoo with JSON-RPC

Getting ready

How to do it...

How it works...

There’s more...

Fetching/searching records using JSON-RPC

Getting ready

How to do it...

How it works...

There’s more...

Creating/updating/deleting records using JSON-RPC

Getting ready

How to do it...

How it works...

There’s more...

Calling methods using JSON-RPC

Getting ready

How to do it...

How it works...

The OCA odoorpc library

Getting ready

How to do it...

How it works...

There’s more...

See also

Generating API keys

How to do it...

How it works…

21

Performance Optimization

The prefetching pattern for recordsets

How to do it…

How it works...

There’s more...

The in-memory cache – ormcache

How to do it...

How it works...

There’s more...

Generating images in different size

How to do it...

How it works...

There’s more...

Accessing grouped data

How to do it...

How it works...

There’s more...

See also

Creating or writing multiple records

How to do it...

How it works...

There’s more...

Accessing records through database queries

How to do it...

How it works...

There’s more...

Profiling

Enabling the profiler

22

Point of Sale

Technical requirements

Adding custom JavaScript/SCSS files

Getting ready

How to do it…

How it works…

There’s more…

Adding an action button to the keyboard

Getting ready

How to do it…

How it works..

There’s more…

Making RPC calls

Getting ready

How to do it...

How it works…

There’s more…

Modifying the Point of Sale screen UI

Getting ready

How to do it…

How it works...

Modifying existing business logic

Getting ready

How to do it…

How it works...

Modifying customer receipts

Getting ready

How to do it…

How it works...

23

Managing Emails in Odoo

Technical requirements

Configuring incoming and outgoing email servers

Getting ready

How to do it...

How it works...

There’s more...

Managing chatter on documents

Getting ready

How to do it...

How it works...

There’s more...

Managing activities on documents

Getting ready

How to do it...

How it works...

There’s more...

Sending emails using the Jinja template

Getting ready

How to do it...

How it works...

There’s more...

Sending emails using the QWeb template

Getting ready

How to do it...

How it works...

There’s more...

Managing the email alias

Getting ready

How to do it...

How it works...

There’s more...

Logging user changes in a chatter

Getting ready

How to do it...

How it works...

Sending periodic digest emails

Getting ready

How to do it...

How it works...

24

Managing the IoT Box

Technical requirements

Flashing the IoT Box image for Raspberry Pi

Getting ready

How to do it…

How it works…

There’s more...

Connecting the IoT Box with a network

Getting ready

How to do it…

How it works...

Adding the IoT Box to Odoo

Getting ready

How to do it…

How it works…

There’s more…

Loading drivers and listing connected devices

Getting ready

How to do it…

How it works…

Taking input from devices

Getting ready

How to do it…

How it works…

There’s more…

Accessing the IoT Box through SSH

Getting ready

How to do it…

How it works…

There’s more…

Configuring a POS

Getting ready

How to do it…

How it works…

There’s more…

Sending PDF reports directly to a printer

Getting ready

How to do it…

How it works…

25

Web Studio

Installing Odoo Web Studio

Starting with a new app

Suggested features

Components

Field properties

Views

Form views

List views

Kanban views

Calendar views

Graph views

Pivot views

Search views

Gantt views

Resource views

Building a new app

Defining the data model

Defining the general views

Defining the fields and components

Adding a button

Filters

Edit Menu

Customizing an existing app

Choosing an existing app to customize

Built-in functions

Importing modules

Exporting modules

Search view

Automations

Reports

External reports

Internal reports

Blank reports

Modules

Search views

Automations

Index

Other Books You May Enjoy