Field Types

Complete reference for all 20+ P9 field types with attributes, formats, and usage examples.

Field Types Reference

P9 supports over 20 field types covering every business data need. Fields use inline attribute syntax with colon-separated key-value pairs.

Field Type Table

Type Description Example
Text Single-line text input field Name type:Text
Number Numeric value field Quantity type:Number
Money Currency amount field Total type:Money
Date Date only field StartDate type:Date
DateTime Date and time field CreatedAt type:DateTime
Time Time only field StartTime type:Time
Select Dropdown selection field Status type:Select
Lookup Reference to another object field Customer type:Lookup
Table Child table/collection field LineItems type:Table
Checkbox Boolean true/false field IsActive type:Checkbox
Percentage Percentage value (0-100) field Rate type:Percentage
Area Area measurement field LeasableArea type:Area
Attachment File upload field Documents type:Attachment
Email Email address field Email type:Email
Phone Phone number field PhoneNr type:Phone
Url Web URL field Website type:Url
Address Structured address field Location type:Address
Autonumber Auto-generated sequence field Number type:Autonumber format:"INV-{yy}-#"
Calculated Computed from expression field Total type:Calculated expression:"Qty * Price"
QrCode QR code / barcode field BarCode type:QrCode barcode:true
Polymorphic Dynamic type reference field RelatedTo type:Polymorphic

Common Field Attributes

Attribute Description Example
label:"text" Display label label:"Payment Date"
required:true Field must have a value required:true
optional:true Field is not required optional:true
readonly:true Cannot be edited readonly:true
hidden:true Hidden from UI hidden:true
unique:true Value must be unique unique:true
default:"value" Default value default:"Draft"
placeholder:"text" Placeholder text placeholder:"Enter name"
index:true Create database index index:true
search-field:true Include in search search-field:true
advance-search:true Show in advanced search advance-search:true
linked-view:true Enable linked view navigation linked-view:true
show:[condition] Conditional visibility show:[{Type}='Invoice']
hide:[condition] Conditional hiding hide:[{Status}='Draft']

Text Field

field CompanyName type:Text label:"Company Name" required:true placeholder:"Enter company name" unique:true index:true search-field:true

field Description type:Text label:"Description" optional:true multi-line:true maximum:"2000"

field TermsAndConditions type:Text label:"Terms & Conditions" optional:true rich-text:true

Number Field

field Quantity type:Number label:"Quantity" required:true minimum:"0"

field Floor type:Number label:"Floor" optional:true

Money Field

field TotalAmount type:Money label:"Total Amount" required:true

field SecurityDeposit type:Money label:"Security Deposit" optional:true minimum:"0"

Date Fields

field InvoiceDate type:Date label:"Invoice Date" required:true default:[now()]

field DueDate type:Date label:"Due Date" required:true

field DateOfBirth type:Date label:"Date of Birth" optional:true maximum:[ageLimit()]

field CreatedAt type:DateTime label:"Created At" readonly:true

field StartTime type:Time label:"Start Time" optional:true

Select Field

field Status type:Select label:"Status" required:true

select Status {
	label:"Draft" value:"Draft" default:true
	label:"Pending" value:"Pending"
	label:"Approved" value:"Approved" sentiment:Positive
	label:"Rejected" value:"Rejected" sentiment:Negative
}

field Priority type:Select label:"Priority" tab-filter:true

select Priority {
	label:"Low" value:"Low" stars:2
	label:"Medium" value:"Medium" stars:3 default:true
	label:"High" value:"High" stars:4
	label:"Critical" value:"Critical" stars:5 sentiment:Error
}

Lookup Field

field AssignedTo type:Lookup label:"Assigned To" required:true linked-view:true

lookup AssignedTo {
	lookupobjectname:"Employee"

	displayfield {
		"Name"
		"Department"
	}

	filter {
		Status="Active"
	}
}

Table Field (Child Records)

field LineItems type:Table label:"Line Items"

tabledetail LineItems {
	field Description ischild type:Text label:"Description" required:true
	field Quantity ischild type:Number label:"Qty" required:true minimum:"1"
	field UnitPrice ischild type:Money label:"Unit Price" required:true
	field Total ischild type:Calculated label:"Total" expression:"Quantity * UnitPrice" readonly:true

	lookup Product {
		lookupobjectname:"Product"

		displayfield {
			"Name"
			"SKU"
		}
	}
}

Calculated Field

field FullName type:Calculated label:"Full Name" expression:[COMBINE(FirstName, MiddleName, LastName)] readonly:true

field TotalWithTax type:Calculated label:"Total (inc. Tax)" expression:"SubTotal + (SubTotal * TaxRate / 100)" readonly:true

field RemainingQty type:Calculated label:"Remaining" expression:"Quantity - IF(ISBLANK(UsedQuantity), 0, UsedQuantity)" readonly:true

Expression Functions:

  • COMBINE(a, b, ...) — Joins non-empty values with space (ideal for names)
  • CONCAT(a, b, ...) — Concatenates without separator
  • IF(condition, true, false) — Conditional logic
  • ISBLANK(field) — Check if field is empty

Autonumber Field

field InvoiceNumber type:Autonumber label:"Invoice #" format:"INV-{yy}-#" readonly:true search-field:true filter-order:"1"

field ContractNumber type:Autonumber label:"Contract #" format:"CON-{yy}-#####" readonly:true

Format tokens:

  • {yy} — 2-digit year
  • {yyyy} — 4-digit year (if supported)
  • # — Sequence number (width = number of #)

Percentage Field

field CommissionRate type:Percentage label:"Commission Rate" optional:true minimum:"0" maximum:"100"

field Progress type:Percentage label:"Progress" show-as-slider:true minimum:"0" maximum:"100"

Area Field

field LeasableArea type:Area label:"Leasable Area" optional:true minimum:"0"

field BuiltUpArea type:Area label:"Built-up Area" optional:true

QrCode Field

field BarCode type:QrCode label:"Barcode" optional:true format:"{{Building.Number}} / {{Number}}" barcode:true

Polymorphic Field

field RelatedTo type:Polymorphic label:"Related To" optional:true

polymorphic RelatedTo {
	default: "Contract"

	lookups {
		lookup Contract {
			lookupobjectname: "Contract"
			label:"Contract"

			displayfield {
				"Number"
				"Tenant"
			}

			filter {
				Status="Active"
			}
		}

		lookup WorkOrder {
			lookupobjectname: "WorkOrder"
			label:"Work Order"

			displayfield {
				"Number"
				"Status"
			}
		}

		lookup Invoice {
			lookupobjectname: "Invoice"
			label:"Invoice"

			displayfield {
				"Number"
				"Total"
			}
		}
	}
}

Dynamic Default Values

Use bracket syntax for dynamic defaults:

field Date type:Date label:"Date" default:[now()]

field RequestedBy type:Lookup default:[User.EmployeeId]

field TransactionDate type:Date label:"Transaction Date" minimum:[now()]
Expression Description
[now()] Current date/time
[ageLimit()] Date 18 years ago (age validation)
[User.EmployeeId] Current user's employee ID

Conditional Visibility

field UtilityCharge type:Money show:[AddUtilityCharge]

field Discount type:Number show:[!ApplyDiscountIndividually]

field CommercialTerms type:Text show:[{Type}='Commercial']

field BankDetails type:Text hide:[{PaymentMethod}='Cash']

Experience the Platform

See how P9 and the Tuli platform work together

Ready to Build with P9?

Get hands-on with the platform. See how P9 accelerates your development workflow and integrates seamlessly with your existing systems.