Sử dụng plug-in ít viết mã trong Dataverse (bản xem trước)

[Chủ đề này là tài liệu hướng dẫn trước khi phát hành và có thể thay đổi.]

Microsoft Dataverse cung cấp giải pháp mạnh mẽ để đạt được kiến trúc dữ liệu hiệu quả hơn và giảm khối lượng công việc phía máy khách thông qua các plug-in ít viết mã. Các plug-in này là các quy trình làm việc có thể tái sử dụng, thời gian thực, thực thi một tập hợp lệnh cụ thể trong Dataverse, chạy phía máy chủ và được kích hoạt bởi trình xử lý sự kiện được cá nhân hóa.

Quan trọng

  • Đây là một tính năng xem trước.
  • Các tính năng xem trước không được dùng cho sản xuất và có thể có chức năng bị hạn chế. Những tính năng này khả dụng trước khi có bản phát hành chính thức để khách hàng có thể truy cập sớm và cung cấp phản hồi.

Theo truyền thống, các plug-in được tạo dưới dạng các lớp tùy chỉnh được biên dịch thành một tập hợp .NET Framework, sau đó được tải lên và đăng ký bên trong Dataverse. Tuy nhiên, với sự ra đời của plug-in ít viết mã, người dùng có thể tạo các trình xử lý sự kiện này mà không cần hoặc chỉ cần rất ít mã hóa, cũng như không cần phải đăng ký thủ công.

Các plug-in ít viết mã được lưu trữ trong cơ sở dữ liệu và có thể tích hợp liền mạch vào Dataverse và Power Apps . Power Automate Hành vi của quy trình công việc được xác định bằng ngôn ngữ biểu thức và có thể kết nối trực tiếp với dữ liệu kinh doanh và các nguồn dữ liệu bên ngoài thông qua các trình kết nối. Power Fx Dataverse Power Platform Với plug-in ít viết mã, người tạo có thể nhanh chóng xây dựng quy trình làm việc phức tạp với chuyên môn lập trình tối thiểu, tạo ra kiến trúc dữ liệu hợp lý và hiệu quả hơn.

Lợi ích của logic phía máy chủ

Việc xác định logic kinh doanh phía máy chủ mang lại một số lợi ích, bao gồm:

  • Tăng cường bảo mật. Vì logic phía máy chủ được thực thi trên máy chủ nên nó có thể giúp ngăn chặn truy cập trái phép vào dữ liệu hoặc quy trình nhạy cảm.
  • Cải thiện hiệu suất. Bằng cách thực thi trên máy chủ, logic kinh doanh có thể giảm lượng dữ liệu cần truyền giữa máy khách và máy chủ, giúp thời gian xử lý nhanh hơn.
  • Tính nhất quán và độ tin cậy. Logic phía máy chủ đảm bảo các quy tắc kinh doanh được áp dụng thống nhất trên tất cả các máy khách, giảm nguy cơ xảy ra lỗi hoặc không nhất quán.
  • Bảo trì và nâng cấp dễ dàng hơn. Bằng cách tập trung logic kinh doanh trên máy chủ, việc bảo trì và cập nhật trở nên dễ dàng hơn vì có thể thực hiện thay đổi ở một nơi thay vì phải cập nhật nhiều máy khách.
  • Khả năng mở rộng. Logic phía máy chủ có thể được mở rộng dễ dàng hơn logic phía máy khách, cho phép hiệu suất tốt hơn và xử lý khối lượng công việc lớn hơn.

ít viết mã plug-in

Có hai loại plug-in ít viết mã được hỗ trợ trong Dataverse:

Loại Bộ kích hoạt Hỗ trợ các tham số Phạm vi được hỗ trợ
Tức thì Chạy thủ công Có Toàn cầu và bảng
Tự động Dataverse sự kiện bảng No Bảng

Tất cả các plug-in ít viết mã đều có các thuộc tính chung sau:

Thuộc tính Description
Tên hiển thị Tên plug-in dễ đọc đối với con người. Không thể thay đổi sau khi đã tạo.
Tên Tên nội bộ của plug-in. Nền tảng này sử dụng nó để xác định thành phần trong mã và hoạt động cơ sở dữ liệu. Không thể thay đổi sau khi đã tạo.
Description Được sử dụng để cung cấp thêm bối cảnh về plug-in (mục đích, hành vi hoặc các chi tiết quan trọng khác).
Giải pháp Được sử dụng để nhóm các thành phần và xuất sang các môi trường khác. Tìm hiểu thêm về các giải pháp.
Expression Đây là hàm tùy chỉnh có thể được sử dụng để thực hiện các hành động hoặc tính toán, được xác định bằng ngôn ngữ biểu thức. Power Fx Power Fx là ngôn ngữ công thức được sử dụng trong Power Apps ứng dụng canvas và đã được mở rộng để sử dụng trong các plug-in ít viết mã. Xem các hàm được hỗ trợ để biết thêm chi tiết.

Plug-in ít viết mã tức thời là logic mã tùy chỉnh được kích hoạt thủ công bởi người dùng. Có thể sử dụng các tham số đầu vào và đầu ra tùy chỉnh.

Tính chất độc đáo:

Thuộc tính Description
Phạm vi Được sử dụng để liên kết một plug-in với một bảng cụ thể. Có thể đặt thành bảng (hiển thị dưới dạng thực thể) hoặc toàn cục, trong đó phạm vi bảng (thực thể) có nghĩa là plug-in được kích hoạt bằng ngữ cảnh của bản ghi bảng cụ thể và phạm vi toàn cục có nghĩa là thao tác không được liên kết với bảng (tìm hiểu thêm).
Tham số Các tham số cho phép bạn truyền thông tin giữa plug-in và ngữ cảnh chạy plug-in đó, giúp thiết kế logic kinh doanh dễ dàng hơn để có thể tái sử dụng trong nhiều tình huống khác nhau.

Các tham số đầu vào được sử dụng để cung cấp dữ liệu cho plug-in và cho phép bạn kiểm soát cách thức hoạt động của hàm bằng cách truyền vào các giá trị khác nhau mà bạn chỉ định trong Power Fx công thức.

Tham số đầu ra cho phép bạn lấy kết quả của một hàm hoặc phương pháp để sử dụng thêm trong chương trình của bạn.

Các kiểu dữ liệu được hỗ trợ:
  • Boolean
  • String
  • Float
  • Dấu thập phân
  • Ngày giờ
  • Số nguyên

Thông tin thêm về cách tích hợp từ ứng dụng canvas hoặc trong Power Automate dòng đám mây: Tích hợp plug-in ít viết mã

Quyền của plug-in

Thời gian thiết kế

Những người sáng tạo có tư cách thành viên người tùy chỉnh hệ thống hoặc quản trị viên hệ thống vai trò bảo mật trong môi trường Power Platform có thể truy cập tất cả các plug-in trong môi trường đó. Có thể sử dụng các vai trò bảo mật tùy chỉnh để hạn chế quyền truy cập vào các plug-in ít viết mã.

Thời gian chạy

Khi một plug-in được gọi, nó sẽ truy cập vào dữ liệu bảng có trong định nghĩa plug-in (các bảng là một phần của công thức hoặc nếu bảng được liên kết với các thiết lập của plug-in tự động) trong bối cảnh của người dùng đã gọi nó.

Kết nối

Khi sử dụng vai trò bảo mật, quyền truy cập trình kết nối trong các plug-in có thể bị hạn chế đối với một nhóm người dùng cụ thể trong tổ chức của bạn. Chỉ định vai trò nào có quyền tạo, đọc, cập nhật hoặc xóa.

Điều kiện tiên quyết để tạo plug-in ít viết mã

  • Quản trị viên hệ thống hoặc thành viên người tùy chỉnh hệ thống vai trò bảo mật trong môi trường Power Platform .
  • Truy cập vào ứng dụng tăng tốc. Dataverse

Tiền bo

Tất cả các môi trường mới đều có ứng dụng tăng tốc được cài đặt tự động kể từ ngày 1 tháng 10 năm 2023. Dataverse Nếu bạn đã cài đặt trình tăng tốc, bạn có thể cập nhật trình tăng tốc theo cách thủ công. Dataverse Dataverse

Cập nhật trình tăng tốc Dataverse

  1. Làm theo hướng dẫn để xem các ứng dụng được cấp phép trong môi trường của bạn.
  2. Nếu Dataverse Accelerator đã được cài đặt và có bản cập nhật, bản cập nhật đó sẽ được chỉ ra trong bảng bên cạnh mục.
  3. Chọn Dataverse Trình tăng tốc, sau đó chọn Cập nhật trên thanh lệnh.

Tiền bo

Bật tự động cập nhật ứng dụng cho nhà xuất bản Microsoft - Power CAT để tự động nhận các bản cập nhật khi có sẵn (không cần thiết đối với các môi trường mới được tạo sau ngày 1 tháng 10 năm 2023).

Lưu ý

Nếu trước đó bạn đã cài đặt giải pháp ít viết mã Plug-in cho Connectors tùy chọn, giải pháp này sẽ tự động bị xóa khi bạn cập nhật sau ngày 29 tháng 6 năm 2023. Các khả năng sẽ có sẵn trong giải pháp chính.

Tạo plug-in ít viết mã ngay lập tức

  1. Chơi ứng dụng tăng tốc. Dataverse
  2. Chọn Tạo plug-in tức thời thẻ. Tạo plug-in tức thời thẻ
  3. Cung cấp Tên hiển thị.
  4. Tùy chọn, xác định các tham số:
    • Chọn Tham số đầu vào mới hoặc Tham số đầu ra mới, sau đó nhập nhãn và kiểu dữ liệu.
    • Thêm các tham số đầu vào và đầu ra nếu cần.
  5. Nhập biểu thức vào trình soạn thảo Biểu thức. Power Fx
    • Tham chiếu các tham số đầu vào trong công thức theo tên nhãn.
    • Các tham số đầu ra phải được tham chiếu bên trong dấu ngoặc nhọn, chẳng hạn như { Out: "Return value" }.
    • Tham chiếu các bảng Dataverse bằng cách sử dụng các hàm thu thập dữ liệu, chẳng hạn như Filter() và LookUp().
    • Nếu phạm vi được đặt thành thực thể, hãy sử dụng ThisRecord để truy cập các giá trị cột trong hàng bảng liên kết với lần chạy plug-in, chẳng hạn như ThisRecord.'Account Name'.

    Tiền bo

    Lưu ý intellisense trong hộp Biểu thức . Gạch chân màu đỏ là không hợp lệ. Màu vàng ngoằn ngoèo có nghĩa là logic của bạn có thể bị ảnh hưởng bởi những hạn chế về phân quyền. Tránh các vấn đề về phân quyền bằng cách sử dụng các hàm có thể phân quyền .

  6. Tùy chọn mở rộng Tùy chọn nâng cao để sửa đổi giải pháp, phạm vi hoặc mô tả.
  7. Chọn Lưu.
  8. Kiểm tra plug-in ít viết mã tức thời của bạn.

Ví dụ: Tính tổng của hai số nguyên.

  • Tạo hai tham số đầu vào, XY (cả hai đều có kiểu số nguyên), và một tham số đầu ra, Z (kiểu chuỗi).
  • Sử dụng công thức sau: {Z: X + Y }

Ví dụ về plug-in tức thời trong ứng dụng  Dataverse Accelerator

Tạo plug-in ít viết mã tự động

  1. Chơi ứng dụng tăng tốc. Dataverse
  2. Chọn Tạo plug-in tự động thẻ. Tạo plug-in tự động thẻ
  3. Cung cấp các giá trị sau:
    • Tên: Nhập tên cho plug-in, chẳng hạn như Xác thực đầu vào.
    • Bảng: Chọn một bảng để liên kết plug-in, chẳng hạn như Tài khoản.
    • Chạy quy tắc plug-in này khi hàng là. Chỉ định sự kiện dữ liệu sẽ gọi plug-in.
  4. Nhập biểu thức vào trình soạn thảo Biểu thức. Power Fx
    • Tham chiếu các bảng Dataverse bằng cách sử dụng các hàm thu thập dữ liệu, chẳng hạn như Filter() và LookUp().
    • Sử dụng ThisRecord để truy cập các giá trị cột trong hàng bảng liên quan đến lần chạy plug-in, chẳng hạn như ThisRecord.'Account Name'.
  5. Tùy chọn, mở rộng Tùy chọn nâng cao để sửa đổi giai đoạn (thời điểm chạy) và giải pháp nơi lưu plug-in.
  6. Chọn Lưu.
  7. Kiểm tra plug-in ít viết mã tự động của bạn.

Sử dụng Power Platform các trình kết nối trong các plug-in ít viết mã

Power Platform có thể sử dụng các đầu nối trong plug-in ít viết mã để dễ dàng tích hợp dữ liệu và chức năng từ các hệ thống bên ngoài Dataverse, chẳng hạn như SQL Server, Salesforce và SharePoint, mà không cần phải mã hóa phức tạp hoặc phát triển tùy chỉnh.

Điều kiện tiên quyết để sử dụng trình kết nối trong plug-in ít viết mã

Sử dụng các hành động kết nối trong plug-in ít viết mã

Bạn có thể dễ dàng sử dụng các trình kết nốicác trình kết nối tùy chỉnh từ bên trong công thức plug-in ít viết mã. Power Fx

  1. Tạo kết nối tới trình kết nối mà bạn muốn sử dụng.
  2. Thêm tham chiếu kết nối vào kết nối trong môi trường Dataverse .
  3. Trong trình soạn thảo biểu thức của plug-in ít viết mã, hãy nhập tên của tham chiếu kết nối (tên nội bộ có tiền tố và dấu gạch dưới, như Power Fx , không phải tên hiển thị). new_connectorName
  4. Intellisense hiển thị cho bạn những hành động khả dụng. Chọn hành động bạn muốn và nhập các thông số cần thiết.

Trước khi sử dụng trình kết nối trong plug-in ít viết mã, hãy xem lại tài liệu của trình kết nối để đảm bảo rằng bạn đang truyền các tham số đầu vào và đầu ra một cách chính xác.

Thông tin thêm: ví dụ

Lưu ý

  • Không phải tất cả các hành động kết nối đều được hỗ trợ tại thời điểm này.
  • Không sử dụng trình kết nối để kết nối với các bảng từ biểu thức plug-in. Dataverse Dataverse Thay vào đó, hãy sử dụng các hàm Power Fx gốc để tương tác với các bộ sưu tập: Lọc, Tìm kiếm, Tra cứu, Bản vá, Thu thậpĐặt, trong đó các cột được coi là biến toàn cục.

Kiểm tra plug-in ít viết mã

Kiểm tra các plug-in tức thời

  1. Từ Màn hình chính, chọn một plug-in tức thời từ danh sách, sau đó chọn Kiểm tra trên thanh lệnh. Bạn cũng có thể truy cập vào màn hình này từ trình chỉnh sửa plug-in tức thời trên thanh lệnh sau khi đã lưu. Chọn Kiểm tra cho plug-in ít viết mã

  2. Cung cấp giá trị cho bất kỳ tham số đầu vào nào được xác định trong plug-in ít viết mã, sau đó chọn Chạy. Chọn Chạy để kiểm tra plug-in ít viết mã

Quan sát phản hồi.

Tiền bo

Sử dụng các tham số đầu ra để giúp xác thực hành vi và kết quả mong đợi. Nếu không, bạn chỉ thấy kết quả thành công hoặc thất bại khi thử nghiệm.

Kiểm tra các plug-in tự động

Kiểm tra các plug-in tự động bằng cách gọi sự kiện dữ liệu. Quan sát xem plug-in có chạy thành công hay không bằng cách xác thực những thay đổi dự kiến được xác định trong công thức.

Tiền bo

Trong bản xem trước, bạn có thể gọi sự kiện dữ liệu liên quan bằng trình chỉnh sửa bảng trong Power Apps:

  1. đăng nhập vào Power Apps, đi đến Bảng và chọn bảng Plug-in .
  2. Trên thanh lệnh, chọn Chỉnh sửa.
  3. Tạo, cập nhật hoặc xóa hàng trực tiếp từ chế độ xem này. Ngoài ra, bạn có thể mở một hàng trong biểu mẫu mặc định bằng cách chọn một hàng, sau đó chọn Chỉnh sửa hàng bằng biểu mẫu trên thanh lệnh.

Tích hợp plug-in ít viết mã

Gọi plug-in tức thời từ ứng dụng canvas hoặc trang tùy chỉnh

  1. Trong ứng dụng Dataverse Accelerator :
    1. Chọn plug-in tức thời trong danh sách.
    2. Chọn Sao chép đoạn mã trên thanh lệnh. Gọi một phiên bản plug-in ít viết mã
    3. Dán và lưu công thức đã sao chép vào trình soạn thảo văn bản hoặc sổ tay (nơi bạn có thể dễ dàng tham khảo lại).
  2. Trong Power Apps:
    1. Tạo hoặc chỉnh sửa ứng dụng canvas (hoặc trang tùy chỉnh) trong studio. Power Apps
    2. Trong phần điều hướng bên trái, bên dưới tab Nguồn dữ liệu , chọn + nguồn dữ liệu mới và tìm kiếm tùy chọn Môi trường từ trình kết nối Dataverse .
    3. Chèn các thành phần sau vào canvas:
    • Thêm các điều khiển nhập tương ứng với từng loại dữ liệu của tham số, chẳng hạn như Nhập văn bản cho văn bản hoặc số, chuyển đổi cho Boolean.
    • Nếu phạm vi plug-in được liên kết với một bảng, hãy thêm hộp kết hợp được liên kết với cùng bảng đó để bạn có thể chọn đầu vào.
    • Thêm nút để gọi plug-in.
  3. Dán công thức plug-in mà bạn đã sao chép vào thuộc tính OnSelect của nút.
  4. Ánh xạ từng tham số đầu vào Value để tham chiếu đến các điều khiển đầu vào tương ứng:
    • Nếu công thức là Environment.new_CalculateSum({ X: Value, Y: Value });, nó có thể được viết lại thành: Environment.new_CalculateSum({ X: TextInput1.Text, Y: TextInput2.Text });
    • Nếu công thức đã bị ràng buộc, hãy thay thế Environment bằng tên hiển thị của bảng để truy cập vào plug-in.
  5. Nếu tham số đầu ra được xác định cho plug-in ít viết mã:
    1. Ghi lại phản hồi theo công thức Set() hoặc UpdateContext() : Set( ActionResult, Environments.CalculateSum({ X: TextInput1.Text, Y: TextInput2.Text }) );. Hiển thị biến trong nhãn. Ngoài ra, hãy sử dụng công thức Notify() để hiển thị dữ liệu trong thông báo.
  6. Chạy ứng dụng và chọn lệnh trên thanh lệnh để chạy plug-in ít viết mã.

Tìm hiểu thêm về cách bạn có thể gọi Dataverse hành động trực tiếp từ Power Fx trong ứng dụng canvas.

Gọi một plug-in tức thời từ Power Automate dòng đám mây

  1. Trong dòng đám mây, thêm hành động mới từ trình kết nối Microsoft Dataverse .
  2. Chọn hành động có tên là Thực hiện hành động không ràng buộc hoặc Thực hiện hành động ràng buộc.
  3. Chọn plug-in của bạn (có tên duy nhất và tiền tố).
  4. Cung cấp giá trị cho tất cả các tham số đầu vào (nếu có).

Gọi một plug-in tức thời từ Dataverse Web API

Thực hiện theo các bước cho phần Hành động không liên kết hoặc Hàm liên kết với bảng trong phần Gọi API tùy chỉnh từ tài liệu API Web (tùy thuộc vào phạm vi phù hợp của plug-in).

Nhận trợ giúp với plug-in ít viết mã của bạn

Nếu bạn gặp sự cố khi tạo hoặc chạy plug-in ít viết mã, hãy tham khảo các mẹo sau để biết các sự cố thường gặp có thể xảy ra: Microsoft Dataverse ít viết mã mẹo về plug-in và các sự cố đã biết

Liên hệ Trợ giúp + hỗ trợ

Đối với các sự cố liên quan đến cài đặt giải pháp Dataverse Accelerator hoặc plug-in ít viết mã không được đề cập trong Microsoft Dataverse mẹo về plug-in ít viết mã và các sự cố đã biết , chẳng hạn như các lỗi không được ghi chép lại, hãy sử dụng Trợ giúp + trải nghiệm hỗ trợ và bao gồm các thông tin sau:

  • Loại vấn đề- Dataverse Web API và SDK
  • Loại vấn đề phụ - Bộ tăng tốc cho Dataverse

Ví dụ về plug-in ít viết mã bạn có thể tạo

Để biết một số ví dụ về cách tạo plug-in ít viết mã, hãy truy cập Ví dụ Dataverse plug-in ít viết mã (bản xem trước)

Giới hạn

  • Đối tượng ngôn ngữ môi trường cần được thêm lại để truy cập các plug-in mới bên trong các ứng dụng canvas hiện có. Đối với bất kỳ plug-in nào được tạo sau khi bạn đã thêm bảng môi trường nguồn dữ liệu vào ứng dụng canvas hiện có, bạn phải xóa và thêm lại đối tượng ngôn ngữ môi trường. Power Fx Sau đó, bạn sẽ thấy danh sách các plug-in được cập nhật dưới dạng hành động.

  • Intellisense yêu cầu ký hiệu rõ ràng trong các plug-in tự động nếu bạn muốn tham chiếu bất kỳ bảng nào trong công thức. Sử dụng cú pháp giải thích sau như [@Accounts], sử dụng dấu ngoặc vuông và ký hiệu @ (không phải Accounts).

  • Hỗ trợ lồng nhau. Các plug-in chỉ có thể gọi các hành động của bên thứ nhất do Microsoft phát hành từ Power Fx biểu thức.

  • Một số Collect kịch bản yêu cầu Patch. Có một số trường hợp mà Collect() không hiệu quả. Giải pháp thay thế là sử dụng Patch() như được hiển thị trong ví dụ về cột điền thông tin bên dưới. Nếu bạn đang tạo một plug-in tự động, hãy thêm @ vào trước mỗi bảng được tham chiếu trong công thức Power Fx .

    Patch(Faxes,
        Collect(Faxes, { Subject : "Sub1" } ),
        { Regarding : First(Accounts) }
    )
    
  • Khi plug-in ít viết mã tương tác với các trình kết nối và sử dụng DLP, quản trị viên có thể chặn việc tạo kết nối bằng DLP. Tuy nhiên, các tham chiếu kết nối hiện có trong môi trường vẫn tiếp tục hoạt động. Dataverse Trong trường hợp quản trị viên cần chặn mọi tương tác của plug-in ít viết mã với bất kỳ trình kết nối nào, họ có thể vô hiệu hóa cài đặt tổ chức Allowconnectorsonpowerfxactions. Cài đặt này được bật theo mặc định và có thể tắt bằng các phương pháp SDK thông thường (WebAPI, SDK, PowerShell, v.v.). Bạn có thể vô hiệu hóa tính năng này bằng cách sử dụng plug-in ít viết mã như sau:

    Patch(Organizations, First(Organizations), { 'Enable connectors on power fx actions.': 'Enable connectors on power fx actions. (Organizations)'.No })
    
  • Các plug-in sử dụng trình kết nối chỉ có thể xuất kết quả từ các trường cụ thể. Do đó, bạn cần ánh xạ các giá trị nguyên thủy cụ thể từ trình kết nối phản hồi tới các giá trị đầu ra.

ít viết mã plugin có giới hạn kết nối tùy chỉnh

Nếu bạn có plugin ít viết mã với các kết nối tùy chỉnh, thì các kết nối tùy chỉnh phải được nhập trước, trước các tham chiếu kết nối hoặc luồng.

Nếu môi trường của bạn không chứa trình kết nối tùy chỉnh trong giải pháp, hãy nhập giải pháp riêng chỉ bao gồm trình kết nối tùy chỉnh đó. Hãy thực hiện thao tác nhập này trước khi nhập giải pháp thực tế. Bạn cần thực hiện việc này trước vì Azure phải đăng ký trình kết nối tùy chỉnh trước khi có thể nhập các thành phần giải pháp khác.

Nếu bạn nhập giải pháp có chứa các luồng và kết nối tùy chỉnh, Azure sẽ không thể đăng ký kết nối tùy chỉnh đó trong khi đang đăng ký các luồng hoặc tham chiếu kết nối của bạn. Điều này cũng áp dụng cho các tham chiếu kết nối cho trình kết nối tùy chỉnh chưa được nhập trước đó trong một giải pháp riêng biệt. Nếu Azure không đăng ký trình kết nối tùy chỉnh của bạn, quá trình nhập sẽ không thành công hoặc bạn không thể bắt đầu quá trình nhập.

Thông tin thêm: Tạo các kết nối tùy chỉnh trong các giải pháp: Những hạn chế đã biết

Xem thêm

ít viết mã plug-in Power Fx (bản xem trước)

Sử dụng lời nhắc được dựng sẵn trong plug-in Dataverse ít viết mã trong Power Apps