Kiểu dữ liệu đối tượng chưa được gõ

Đối tượng chưa nhập là một loại dữ liệu trong Power Fx có thể chứa bất kỳ cấu trúc dữ liệu nào, phức tạp hay đơn giản. Không thể sử dụng trực tiếp đối tượng và yêu cầu chuyển đổi rõ ràng sang loại dữ liệu. Các trường trong bản ghi trong đối tượng chưa nhập có thể được truy cập bằng ký pháp dấu chấm và sự sự tồn tại của các trường chỉ được xác minh trong thời gian chạy.

Đối tượng chưa nhập là loại trả về của các nhà cung cấp chưa nhập cụ thể. Hiện tại, chỉ có hàm ParseJSON() trả về đối tượng chưa nhập.

Loại đơn giản

Giá trị của biến thuộc loại đối tượng chưa nhập không thể sử dụng trực tiếp được. Bạn luôn phải nhập chính xác bằng cách sử dụng hàm tạo kiểu tương ứng.

Các ví dụ sau đây chuyển đổi giá trị của một biến đối tượng chưa nhập có tên là UOValue.

Text(UOValue)
Value(UOValue)

Bảng sau đây liệt kê các loại dữ liệu và hàm tương ứng để chuyển đổi đối tượng chưa nhập sang loại dữ liệu đó.

Loại dữ liệu Hàm Description
Boolean Boolean() Khi chuyển đổi đối tượng chưa được gõ thành boolean, giá trị cơ bản phải đại diện cho một boolean hoặc một loại có thể được tự động được chuyển đổi (chẳng hạn như chuỗi "true").
Màu ColorValue() or RGBA() Màu sắc có thể được thể hiện bằng ký pháp định nghĩa màu Cascading Style Sheet (CSS) dưới dạng một chuỗi hoặc dưới dạng các thành phần RGBA riêng lẻ. Đối tượng chưa nhập có thể được chuyển đổi trực tiếp từ xâu định nghĩa màu Cascading Style Sheet (CSS) bằng hàm ColorValue() hoặc từ các số RGBA riêng lẻ thành màu bằng hàm RGBA().
Đơn vị tiền tệ, Số Value() Khi chuyển đổi đối tượng được bỏ gõ thành số, giá trị cơ bản phải biểu thị một số hoặc một loại có thể được tự động được chuyển đổi (chẳng hạn như chuỗi "123.456").
Ngày, Ngày giờ và Giờ DateValue(), TimeValue() or DateTimeValue() Ngày, giờ và ngày giờ có thể được chuyển đổi trực tiếp từ đối tượng chưa nhập sang loại tương ứng của chúng, khi được biểu thị bằng định dạng ISO 8601. Các định dạng khác phải được chuyển đổi thành văn bản trước tiên bằng cách sử dụng hàm Text() và sau đó chuyển vào hàm DateValue(), TimeValue() hoặc DateTimeValue() sẽ sử dụng ngôn ngữ trong thiết đặt của người dùng hiện tại để diễn giải ngày và giờ theo mặc định.
GUID GUID() Một đối tượng chưa được gõ có thể được chuyển đổi trực tiếp thành GUID nếu đối tượng cơ bản đại diện cho GUID hoặc nếu nó đại diện cho một chuỗi.
Siêu liên kết, Hình ảnh, Phương tiện Text() Các loại dữ liệu này là loại dữ liệu văn bản và có thể được chuyển đổi thành văn bản và sau đó sử dụng trong Power Fx.
Lựa chọn, Hai tùy chọn Switch() hoặc If() Lựa chọnhai tùy chọn được trình bày dưới dạng chuỗi bản địa hóa trong Power Fx. Lựa chọn được hỗ trợ bởi một số và hai tùy chọn dưới dạng boolean. Không có chuyển đổi trực tiếp từ boolean, số hoặc chuỗi thành lựa chọn hoặc hai tùy chọn, nhưng các hàm Switch() hoặc If() có thể được sử dụng trên giá trị boolean, văn bản hoặc số để gán chính xác giá trị lựa chọn hoặc hai tùy chọn.
Bản ghi không áp dụng Không có chuyển đổi trực tiếp từ đối tượng chưa nhập sang cấu trúc bản ghi nhưng có thể truy xuất các trường riêng lẻ từ đối tượng chưa nhập để tạo một bản ghi mới.
Tham chiếu bản ghi không áp dụng Tham chiếu bản ghi là duy nhất đối với nguồn dữ liệu và không có ý nghĩa đại diện trong đối tượng chưa nhập.
Bảng Table()ForAll() Một đối tượng chưa nhập có thể đại diện cho một mảng, mảng này có thể được chuyển đổi thành một bảng. Những đối tượng này có thể là mảng bản ghi hoặc mảng giá trị thực sự là bảng một cột. ForAll() có thể được sử dụng để tạo bảng với các bản ghi được nhập đầy đủ. Xem lại các ví dụ ở phía dưới trong bài viết này để biết thêm thông tin.
Văn bản Text() Văn bản có thể được chuyển đổi trực tiếp. Nếu đối tượng chưa nhập đại diện cho một số, thì trước tiên bạn cần chuyển đổi đối tượng chưa nhập thành số bằng cách sử dụng Value() trước khi chuyển đổi thành văn bản.

Loại bản ghi

Bạn có thể truy cập các trường trên một biến đại diện cho bản ghi đối tượng chưa nhập bằng cách sử dụng ký pháp dấu chấm thông thường được sử dụng cho bản ghi. Tuy nhiên, sự tồn tại của các trường sẽ không được xác minh cho đến khi chạy. Kết quả là cũng không có sẵn intellisense. Nếu một trường không tồn tại hoặc có giá trị null bên trong, thì việc truy cập trường đó sẽ dẫn đến một giá trị Blank().

Mỗi trường trên bản ghi cũng thuộc loại đối tượng chưa nhập và cần được nhập đúng cách. Trường có thể là một bản ghi chưa nhập thuộc kiểu đơn giản. Trong trường hợp đó là một bản ghi, bạn có thể xâu chuỗi ký pháp dấu chấm. Nếu bất kỳ trường nào trong chuỗi không tồn tại, thì Blank() được trả về.

Các ví dụ sau đây sử dụng các trường từ một biến đối tượng chưa nhập có tên là UORecord.

Text(UORecord.StringField)
Value(UORecord.Field.ChildField)

Trong trường hợp tên trường bao gồm tên mã định danh không hợp lệ, chẳng hạn như khi tên trường bắt đầu bằng một số hoặc chứa các ký tự không hợp lệ, chẳng hạn như dấu gạch nối, thì bạn có thể đặt tên trường trong dấu trích dẫn đơn:

untyped.'01'
untyped.'my-field'

Mảng

Biến đối tượng chưa nhập có thể chứa một mảng. Mặc dù mảng có thể là mảng bản ghi hoặc mảng kiểu đơn giản, việc chuyển đổi mảng đối tượng chưa nhập thành bảng bằng hàm Table() sẽ luôn dẫn đến bảng một cột chứa đối tượng chưa nhập. Các hàm như ForAll()Index() không yêu cầu bạn tạo Table() trước tiên và kết quả là không yêu cầu bạn sử dụng trường Value một cột.

Ví dụ: để lấy số thứ hai trong một mảng đối tượng chưa nhập chứa các giá trị số ( [1, 2, 3] ), bạn có thể sử dụng công thức sau đây để truy xuất hàng thứ hai trong bảng và chuyển đổi cột thành một số:

Value( Index( UOArray, 2 ) )

Nếu đối tượng chưa nhập được chuyển đổi thành Table() trước tiên, thì hàng thứ hai trong bảng một cột là cột Value chứa đối tượng chưa nhập:

Value( Index( Table( UOArray ), 2 ).Value )

Đối với một mảng bản ghi có cột văn bản được gọi là Field, logic tương tự cũng được áp dụng. Có thể truy cập trực tiếp vào đối tượng chưa nhập hoặc nếu sử dụng hàm Table() sẽ dẫn đến bảng một cột của đối tượng chưa nhập.

Cột Field có thể được truy cập trực tiếp từ đối tượng chưa nhập được trả về bởi hàm Index().

Text( Index( UORecordArray, 2 ).Field )

Khi sử dụng hàm Table(), trước tiên hãy truy xuất cột Value của bảng một cột để lấy đối tượng chưa nhập, sau đó truy cập cột Field.

Text( Index( Table( UORecordArray ), 2 ).Value.Field )

Để chuyển đổi một mảng bản ghi thành bảng được nhập, bạn có thể sử dụng hàm ForAll() và chuyển đổi từng trường riêng lẻ.

ForAll( UORecordArray, { FirstField: Value(ThisRecord.FirstField), SecondField: Text(ThisRecord.SecondField) } )

Nếu đối tượng chưa nhập được chuyển đổi thành bảng trước tiên, thì một lần nữa, bảng một cột kết quả của đối tượng chưa nhập sẽ yêu cầu bạn sử dụng cột Value để lấy các trường.

ForAll( Table(UORecordArray), { FirstField: Value(ThisRecord.Value.FirstField), SecondField: Text(ThisRecord.Value.SecondField) } )