Mengirim pemberitahuan ke Tim jika status item kerja diperbarui dalam aplikasi sampel Tahap
Aplikasi sampel Milestones untuk Microsoft Teams memungkinkan pengguna melacak kemajuan penyelesaian item kerja dalam proyek di seluruh tahap. Meskipun aplikasi mengizinkan item kerja diperbarui dan dikelola, namun saat ini tidak ada pemberitahuan standar tentang pembaruan item kerja kepada tim.
Pada artikel ini, kita akan mempelajari cara membuat alur Power Automate untuk mengirim pemberitahuan kartu adaptif kepada Tim (tempat aplikasi diinstal) saat status item kerja berubah.
Prasyarat
Untuk menyelesaikan tugas ini, kita memerlukan kemampuan untuk masuk ke Teams yang akan tersedia sebagai bagian dari langganan Microsoft 365 tertentu dan juga harus menginstal template Power Apps Milestones untuk Teams. Aplikasi ini dapat diinstal dari https://aka.ms/TeamsInspection.
Masuk ke aplikasi Milestones
Pilih ikon Power Apps di kiri, lalu buka tab Build.
Pilih Tim yang menginstal aplikasi Milestones dari menu aplikasi kiri.
Pilih aplikasi terinstal, lalu pilih Milestones untuk membuka aplikasi. Aplikasi Milestones akan terbuka.
Menambahkan kondisi untuk memanggil alur Power Automate
Dari tampilan hierarki di panel kiri, pilih layar Proyek.
Di layar, tekan tombol Alt, lalu pilih untuk membuka satu proyek. Layar Tambah/Edit Item Kerja akan terbuka.
Klik tombol Selesai.
Pilih properti OnSelect pada tombol selesai.
Saat memilih tombol Selesai, bersama pembaruan lain yang berjalan di latar belakang, kita juga ingin memicu alur yang akan mengirimkan pembaruan kartu adaptif ke Tim jika status item kerja diperbarui. Untuk melakukan perubahan ini, tambahkan yang berikut di bagian atas rumus OnSelect:
If( locEditWorkItem, //adding code to call a flow when status changes If( locSelectedWorkItem.'Work Item Status'.'Project Work Item Status' \<\> cmbAddWorkItemStatus.Selected.'Project Work Item Status', true //your flow call will come here );Salin seluruh kode dari properti OnSelect pada tombol Selesai, lalu rekatkan ke editor teks untuk digunakan nanti.
Pilih ... (elipsis) di sebelah Pengaturan pada pita atas, dan pilih Power Automate.
Pop-up Data akan terbuka dengan pilihan untuk Membuat alur baru.
Pilih tombol Buat alur baru. Jendela browser akan terbuka dengan layar alur Power Automate baru.
Perbarui nama alur ke – "Kirim pemberitahuan kartu adaptif saat status perintah kerja berubah".
Pilih pilihan untuk memicu Power Apps dari daftar pemicu. Alur baru akan dibuat dan langkah Power Apps dimuatkan di layar.
Buat Alur Power Automate
Setelah mengikuti langkah-langkah di bagian sebelumnya, pilih tombol Langkah +baru.
Pilih tindakan Dapatkan baris berdasarkan ID, dan pilih Nama Tabel sebagai Item Kerja Proyek.
Dalam ID Baris, buka konten dinamis, lalu pilih opsi Tanya di Power Apps.
Ganti nama langkah menjadi "Dapatkan rekaman Item Kerja".
Pilih kembali tombol Langkah +berikutnya, lalu pilih tindakan Dapatkan baris berdasarkan ID, lalu pilih Nama Tabel sebagai Status Item Kerja.
Dalam ID Baris buka konten dinamis, pilih Status Item Kerja (Nilai).
Ganti nama langkah menjadi Dapatkan rekaman Status Item Kerja.
Tambahkan langkah lain dengan memilih Langkah +baru.
Tambahkan tindakan Mulai variabel.
Ganti nama langkah untuk memulai variabel - Judul Kartu
Nama - "varCardTitle"
Jenis - "String"
Nilai = Pembaruan status untuk Item Kerja {lalu pilih Nama konten dinamis item Pekerjaan yang ditambahkan pada langkah 3}
Tambahkan langkah lain dengan memilih Langkah +baru.
Tambahkan tindakan Mulai variabel.
- Ganti nama langkah untuk memulai variabel - Tinjau tautan
- Nama - "varReviewWorkItemLink"
- Jenis - "String"
- Nilai - dibiarkan kosong - akan ditambahkan nanti.
Catatan
Setelah menambahkan langkah baru, Anda mungkin melihat peringatan di pemeriksa alur . Peringatan ini diharapkan karena alur dipanggil dari aplikasi Power Apps dan menambahkan langkah baru ke alur yang dipanggil dari aplikasi Power Apps dapat memecah sambungan dengan aplikasi. Nanti dalam latihan, kita akan mengganti sambungan ke alur untuk memperbaiki peringatan ini.
Untuk tindakan Tinjau Tautan Item Kerja, kami akan menggunakan tautan ke aplikasi. Untuk menemukan tautan ini, buka tim yang menginstal aplikasi Milestones, lalu salin tautan untuk tab tempat aplikasi diinstal. Anda dapat menyalin tautan ke tab dengan membuka tab, kemudian memilih ... (elipsis) di sudut kanan atas.
URL Anda akan terlihat sama dengan contoh berikut:
https://teams.microsoft.com/l/entity/GUID/_djb2_msteams_prefix_956529380?context=%7B%22subEntityId%22%3Anull%2C%22channelId%22%3A%2219%3AGUID%40thread.tacv2%22%7D&groupId=GUID&tenantId=GUIDUntuk melanjutkan, salin bagian URL yang muncul setelah context= dan gunakan dekoder URL seperti https://www.urldecoder.org/ untuk mendekode URL.
Salin teks yang dikodekan tersebut dan kembali ke alur Power Automate.
Kembali ke Memulai variabel- Memeriksa Tautan item Kerja.
Atur bidang Nilai ke teks URL yang didekodekan yang disalin sebelumnya.
Tambahkan langkah baru dengan tindakan Tulis, dan di bidang Input, rekatkan cuplikan berikut ini.
replace(replace(replace(variables('varReviewWorkItemLink'),'{','%7B'),'"','%22'),'}','%7D')Tambahkan langkah lain dengan memilih Langkah +baru.
Pilih tindakan Posting kartu adaptif di obrolan atau saluran (Pratinjau).
Posting sebagai - Pengguna
Posting di - saluran
Tim - {tim tempat aplikasi Anda diinstal}
Saluran - Umum
Kartu Adaptif - Rekatkan kode JSON berikut:
Catatan
Kode JSON berikut berisi referensi dinamis ke nilai dari langkah alur sebelumnya. Ini harus secara otomatis menangani referensi yang benar, tetapi jika tidak, perbarui secara manual dengan referensi yang benar. Misalnya, @{outputs('Get_Work_Item_Status_record')?['body/msft_name']} mereferensi kolom nama dari langkah Dapatkan Status Item Kerja.
{ "type": "AdaptiveCard", "body": [ { "type": "TextBlock", "size": "large", "weight": "Bolder", "text": "Status Update for @{outputs('Get_Work_Item_record')?['body/msft_name']}", "wrap": true }, { "type": "TextBlock", "text": "Status for Work Item '@{outputs('Get_Work_Item_record')?['body/msft_name']}' has been updated to @{outputs('Get_Work_Item_Status_record')?['body/msft_name']}", "wrap": true } ], "actions": [ { "type": "Action.OpenUrl", "title": "View @{variables('varCardTitle')}", //Update the part of the following URL before "context=" with the URL copied in step 12. "url": "[https://teams.microsoft.com/l/entity/040880f4-0c68-4c38-8821-d5efd2b6ddbe/_djb2_msteams_prefix_956529380?context=@{outputs('Compose](https://teams.microsoft.com/l/entity/040880f4-0c68-4c38-8821-d5efd2b6ddbe/_djb2_msteams_prefix_956529380?context=@%7boutputs('Compose)')}" } ], "$schema": "<http://adaptivecards.io/schemas/adaptive-card.json>", "version": "1.2" }
Simpan alur.
Picu alur dari Power Apps
Setelah alur disimpan, kembali ke Teams, dan buka aplikasi dalam Power Apps.
Pada tampilan hierarki, pilih layar Tambah/Edit Item Kerja.
Klik tombol Perbarui.
Perbarui properti OnSelect untuk memastikan alur dipicu.
Salin rumus dari mana pun Anda telah merekatkan sebelumnya ke properti OnSelect.
Pada kondisi If pertama yang ditambahkan di bagian atas, ganti "true" dengan fungsi run yang digunakan untuk memicu pemicu alur. Lihat contoh di bawah ini.
If( locEditWorkItem, //adding code to call a flow when status changes If( locSelectedWorkItem.'Work Item Status'.'Project Work Item Status' \<\> cmbAddWorkItemStatus.Selected.'Project Work Item Status', SendAdaptivecardnotificationwhenthestatusoftheworkorderchanges.Run(locSelectedWorkItem.'Project Work item') //your flow call will come here ); //end code
Memperbarui layar Pemuatan
Dari tampilan hierarki, pilih Layar Pemuatan.
Perluas layar pemuatan, lalu conLoading_HiddenHelper di bawahnya.
Pilih timer tmrLoadingDelay, lalu pilih properti OnTimerEnd.
Jika aplikasi dibuka melalui tautan kartu adaptif, aplikasi harus secara langsung membuka rekaman item kerja yang diperbarui, yang berarti bahwa kita memerlukan cara untuk memeriksa apakah id item kerja sedang dilewatkan ke aplikasi.
Rumus halaman Pemuatan harus diperbarui untuk mencakup nomor Item Kerja, jadi kita harus Memperbarui properti OnTimerEnd ke berikut:
If( gblAppLoaded,// && !IsBlankOrError(gblAppStyles), If( !IsBlank(Param("subEntityId")), //check if the parameter is blank or not If( //if the parameter is not blank, check if the user is on a mobile device or desktop/web and then populate the relevant variables and collections to make deep linking work (!IsBlank(Param("hostClientType")) && (Param("hostClientType") = "android" Or Param("hostClientType") = "ios")) || (IsBlank(Param("hostClientType")) && (Acceleration.X > 0 || Acceleration.Y > 0 || Acceleration.Z > 0)) Or tglAdmin_Mobile.Value, //project cover colors ClearCollect( colMobileProjectCoverColors, { Color: "#F4B9B9", Theme: "default", Base: "Color1" }, { Color: "#94BFFF", Theme: "default", Base: "Color2" }, { Color: "#E6F0FF", Theme: "default", Base: "Color3" }, { Color: "#5AC6CC", Theme: "default", Base: "Color4" }, { Color: "#C5E9EA", Theme: "default", Base: "Color5" }, { Color: "#F0F9FA", Theme: "default", Base: "Color6" }, { Color: "#EE6F99", Theme: "default", Base: "Color7" }, { Color: "#F495BF", Theme: "default", Base: "Color8" }, { Color: "#F4D2DC", Theme: "default", Base: "Color9" }, { Color: "#CEF0CD", Theme: "default", Base: "Color10" }, { Color: "#BDBDE6", Theme: "default", Base: "Color11" }, { Color: "#E2E2F6", Theme: "default", Base: "Color12" }, { Color: "#F4F4FC", Theme: "default", Base: "Color13" }, { Color: "#FBF6D9", Theme: "default", Base: "Color14" }, { Color: "#791818", Theme: "dark", Base: "Color1" }, { Color: "#053385", Theme: "dark", Base: "Color2" }, { Color: "#6264A7", Theme: "dark", Base: "Color3" }, { Color: "#002F31", Theme: "dark", Base: "Color4" }, { Color: "#025C5F", Theme: "dark", Base: "Color5" }, { Color: "#03787C", Theme: "dark", Base: "Color6" }, { Color: "#461525", Theme: "dark", Base: "Color7" }, { Color: "#CC3D6D", Theme: "dark", Base: "Color8" }, { Color: "#EA5788", Theme: "dark", Base: "Color9" }, { Color: "#043615", Theme: "dark", Base: "Color10" }, { Color: "#33344A", Theme: "dark", Base: "Color11" }, { Color: "#6264A7", Theme: "dark", Base: "Color12" }, { Color: "#464775", Theme: "dark", Base: "Color13" }, { Color: "#FFAA44", Theme: "dark", Base: "Color14" } ); //local table of character widths, used for auto width labels ClearCollect( colMobileCharsWidth, staticCharWidths ); //stock project cover images ClearCollect( colMobileStockImages, {appStockImage: Blank()}, {appStockImage: ProjectCover_Future}, {appStockImage: ProjectCover_Work}, {appStockImage: ProjectCover_Shapes}, {appStockImage: ProjectCover_Design}, {appStockImage: ProjectCover_Flow}, {appStockImage: ProjectCover_Abstract}, {appStockImage: ProjectCover_Mountain}, {appStockImage: ProjectCover_Vision}, {appStockImage: ProjectCover_DarkShapes}, {appStockImage: ProjectCover_Morning}, {appStockImage: ProjectCover_Sublime}, {appStockImage: ProjectCover_Tech}, {appStockImage: ProjectCover_Neon}, {appStockImage: ProjectCover_City} ); Set( gblMobileProject, LookUp( 'Project Work Items', 'Project Work item' = GUID(Param("subEntityId")) ).Project ); ClearCollect( colMobileWorkItems, Filter( 'Project Work Items', Project.Project = gblMobileProject.Project ) ); UpdateContext( { locMobileCompletionStatus: First( Sort( 'Project Work Item Statuses', Sequence, Ascending ) ) } ); Clear(colMobileWorkItemStatuses); ForAll( Sort( Filter( 'Project Work Item Statuses', 'Project Work Item Status' <> locMobileCompletionStatus.'Project Work Item Status' ), Sequence, Ascending ), Collect( colMobileWorkItemStatuses, { Name: ThisRecord.Name, Color: ThisRecord.Color, 'Color Dark': ThisRecord.'Color Dark', 'Project Work Item Status': ThisRecord.'Project Work Item Status', Sequence: ThisRecord.Sequence } ) ); Collect( colMobileWorkItemStatuses, { Name: locMobileCompletionStatus.Name, Color: locMobileCompletionStatus.Color, 'Color Dark': locMobileCompletionStatus.'Color Dark', 'Project Work Item Status': locMobileCompletionStatus.'Project Work Item Status', Sequence: locMobileCompletionStatus.Sequence } ); Navigate( 'Mobile Work Item Details Screen', ScreenTransition.None, { locMobileSelectedWorkItem: LookUp( 'Project Work Items', 'Project Work item' = GUID(Param("subEntityId")) ), locMobileShowWorkItemDetail: true, locMobileShowSearchWorkItem: false, locMobileNavToDetailFromAbout: true } ), Set( gblProject, LookUp( 'Project Work Items', 'Project Work item' = GUID(Param("subEntityId")) ).Project ); UpdateContext( { locCompletionStatus: First( Sort( 'Project Work Item Statuses', Sequence, Ascending ) ) } ); Clear(colWorkItemStatuses); ForAll( Sort( Filter( 'Project Work Item Statuses', 'Project Work Item Status' <> locCompletionStatus.'Project Work Item Status' ), Sequence, Ascending ), Collect( colWorkItemStatuses, { Name: ThisRecord.Name, Color: ThisRecord.Color, 'Color Dark': ThisRecord.'Color Dark', 'Project Work Item Status': ThisRecord.'Project Work Item Status', Sequence: ThisRecord.Sequence } ) ); Collect( colWorkItemStatuses, { Name: locCompletionStatus.Name, Color: locCompletionStatus.Color, 'Color Dark': locCompletionStatus.'Color Dark', 'Project Work Item Status': locCompletionStatus.'Project Work Item Status', Sequence: locCompletionStatus.Sequence } ); Navigate( 'Add/Edit Work Item', ScreenTransition.None, { locEditWorkItem: true, locSelectedWorkItem: LookUp( 'Project Work Items', 'Project Work item' = GUID(Param("subEntityId")) ), locAddProject: false, locExpandProjectList: true, locProjectSortOrder: true, locSortWorkItemBy: "eta", locShowSearchWorkItem: false, locAddWorkItem: false, locProjectStatusSelection: "Milestone status", locWorkItemSortOrder: true } ) ), If( //if the parameter is blank, check if the user is on a mobile device or desktop/web and redirect the user accordingly (!IsBlank(Param("hostClientType")) && (Param("hostClientType") = "android" Or Param("hostClientType") = "ios")) || (IsBlank(Param("hostClientType")) && Acceleration.X > 0) Or tglAdmin_Mobile.Value, Navigate( 'Mobile Projects Screen', ScreenTransition.None ), Navigate( 'Projects Screen', ScreenTransition.None, { locShowFirstRun: gblFirstRun, locShowPowerAppsPrompt: gblRecordUserSettings.'Display Splash (Power Apps)' = 'Display Splash (Power Apps) (Project User Settings)'.Yes } ) ) ) )
Publikasikan aplikasi Milestones
Semua perubahan pada aplikasi Milestones telah selesai. Aplikasi tersebut sekarang dapat dipublikasikan dengan memilih tombol Publikasikan ke Teams di kanan atas.
Uji alur Power Automate
Buka Teams, lalu buka aplikasi Milestones.
Buka item kerja yang ada dan perbarui Status ke nilai yang berbeda.
Pemberitahuan Kartu Adaptif diterima di saluran Teams tempat aplikasi diinstal.
Lihat juga
- Sebarkan aplikasi distribusi luas aplikasi sampel Milestones
- Menyesuaikan aplikasi sampel Tahap
- Memahami arsitektur aplikasi sampel Tahap
- Menyesuaikan aplikasi sampel
- Tanya-Jawab aplikasi sampel
- Menggunakan aplikasi sampel dari toko Microsoft Teams
Catatan
Apa bahasa dokumentasi yang Anda inginkan? Lakukan survei singkat. (perlu diketahui bahwa survei ini dalam bahasa Inggris)
Survei akan berlangsung kurang lebih selama tujuh menit. Tidak ada data pribadi yang dikumpulkan (pernyataan privasi).
Saran dan Komentar
Kirim dan lihat umpan balik untuk