注: 以下の翻訳の正確性は検証されていません。AIPを利用して英語版の原文から機械的に翻訳されたものです。
関数は、プラットフォームで送信される通知や、ユーザーのメールアドレスに外部送信される通知などを柔軟に設定するために使用できます。
関数で通知を設定する際には、Principal
(User
またはGroup
を表す)とnotification
タイプが利用されます。このセクションを進めるにあたり、以下のリファレンスが役立つかもしれません:
オントロジーには、ユーザーに割り当てられる問題オブジェクトが含まれていると仮定します。問題に関する詳細を持つ通知を指定されたユーザーに送信するべきである関数を作成したいとします。
Copied!1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
import { EmailNotificationContent, Function, Notification, ShortNotification, User } from "@foundry/functions-api"; import { Issue } from "@foundry/ontology-api"; export class NotificationFunctions { @Function() public createIssueNotification(issue: Issue, user: User): Notification { // プラットフォーム内で表示される短い通知を作成します const shortNotification = ShortNotification.builder() .heading("新しい問題") .content("新しい問題があなたに割り当てられました。") // プラットフォームのIssueオブジェクトへのリンク .addObjectLink("問題", issue) .build(); // メールの本文を定義します。メールの本文には、データの表などのヘッドレスHTMLを含めることができます // ユーザーと問題の両方のプロパティにアクセスできることに注意してください const emailBody = `こんにちは, ${user.firstName}, 新しい問題があなたに割り当てられました: ${issue.description}.`; const emailNotificationContent = EmailNotificationContent.builder() .subject("新しい問題") .body(emailBody) .addObjectLink("問題", issue) .build(); return Notification.builder() .shortNotification(shortNotification) .emailNotificationContent(emailNotificationContent) .build(); } }
関数にユーザーが渡される他に、必要に応じてユーザーまたはグループを取得することができます。問題オブジェクトには assignee
フィールドがあり、そのフィールドにはユーザーIDが含まれているとします。そして、ユーザーに問題についてリマインドする通知を実装したいと思います。
次のようにしてそれを行うことができます:
Copied!1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
import { EmailNotificationContent, Function, Notification, ShortNotification, User, Users } from "@foundry/functions-api"; import { Issue } from "@foundry/ontology-api"; export class NotificationFunctions { @Function() // 問題に対するリマインダー通知を作成する関数 public async createIssueReminderNotification(issue: Issue): Promise<Notification> { // 担当者がいない場合はエラーを投げる if (!issue.assignee) { throw new UserFacingError("Cannot create notification for issue without an assignee."); } // 担当者の情報を取得 const user = await Users.getUserByIdAsync(issue.assignee); // Eメール本文の作成 const emailBody = `Hello, ${user.firstName}, This is a reminder to investigate the following issue: ${issue.description}`. // 通知をインラインで構築するための構造も使用できます return Notification.builder() .shortNotification(ShortNotification.builder() .heading("Issue reminder") // 通知のヘッダー .content("Investigate this issue.") // 通知の内容 .addObjectLink("Issue", issue) // 通知に問題のリンクを追加 .build()) .emailNotificationContent(EmailNotificationContent.builder() .subject("New issue") // Eメールの件名 .body(emailBody) // Eメールの本文 .addObjectLink("Issue", issue) // Eメールに問題のリンクを追加 .build()) .build(); } }
上記で文書化した Notification
API は、カスタム通知内容を返すことを許可します。Functions を使用して通知を設定する別の方法は、通知の受信者のリストを返すことです。これを行うには、単に1つ以上の Principal
(User
や Group
など)を返す Function を記述します。以下の例では、Function は問題を報告したユーザーと現在問題に割り当てられているユーザーの両方を返します。
Copied!1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
import { Function, User, Users } from "@foundry/functions-api"; import { Issue } from "@foundry/ontology-api"; export class NotificationFunctions { /** * Issueを受け取り、Issueの現在の担当者と元々の報告者を表すUserを返します。 * イシューを受け取り、イシューの現在の担当者と元の報告者を表すユーザーを返します。 */ @Function() public async getIssueAssigneeAndReporter(issue: Issue): Promise<User[]> { if (!issue.assignee || !issue.reporter) { throw new UserFacingError("Cannot create notification for issue without an assignee or reporter."); // 担当者や報告者のいないイシューに対して通知を作成することはできません。 } const user = await Users.getUserByIdAsync(issue.assignee); const issueReporter = await Users.getUserByIdAsync(issue.reporter); return [user, issueReporter]; } }