Notionのかわりになりうるか
グローバル変数
| 名前 | 値 | 用途 |
| --- | --- | --- |
| gPadding\_1 | 10 | パディング |
| gRadius\_1 | 5 | ラディウス |
| gBorderColor | RGBA(98, 100, 167, 0.5) | 区切り線用 |
| gHeaderColor | RGBA(0, 113, 197,1) | ヘッダー・ボタンのメイン色 |
| gHoverFillColor | RGBA(0, 94, 166, 1) | ホバー時 |
| gPressFillColor | RGBA(0, 72, 128, 1) | 押したとき・実行中 |
| gHoverFillColor\_Clear | RGBA(180, 214, 250, 0.5) | ホバー時 (薄め) |
| gHoverTextColor\_Clear | RGBA(0, 75, 133, 1) | ホバー時文字 (薄め) |
| gPressFillColor\_Clear | RGBA(156, 204, 255, 1) | 押したとき・実行中 (薄め) |
| gTextColor | RGBA(33, 33, 33, 1) | 黒字テキストの色 |
| | | |
| gLoginID | Office365ユーザー.MyProfile().Id | ログインユーザの365ID |
| gLoginMail | Office365ユーザー.MyProfile().Mail | ログインユーザの365メール |
| gLoginUser | LookUp('社員マスタ(仮)', メールアドレス = gLoginMail | ログインユーザの社員情報 |
Teams新規チャットDB登録
\\\`jsx
Refresh(HELP\_CHAT\_LOGs);
Set(// Chat\_Logに登録されている最後のメッセージ
lastChatLog,
Last(
Sort(
Filter(
HELP\_CHAT\_LOGs,
HELP\_CHAT.ID = ChatSelected.ID
),
送信日時,
SortOrder.Ascending
)
)
);
Set(// lastChatLogDate以降のTeamsチャットに送信されたチャット内容
teamsMessage,
SortByColumns(
Filter(
MicrosoftTeams.GetMessagesFromChat(createRecipient).value,
DateTimeValue(createdDateTime) > lastChatLog.送信日時
),
"createdDateTime",
SortOrder.Ascending
)
);
// teamsMessageがあればChat\_Logに登録
If(
CountRows(teamsMessage) <> 0,
Set(
testlabel,
"実行!"
);
ForAll(
teamsMessage As msg,
If(
PlainText(msg.body.content) <> lastChatLog.本文,
Patch(
HELP\_CHAT\_LOGs,
Defaults(HELP\_CHAT\_LOGs),
{
HELP\_CHAT: ChatSelected,
送信者: gLoginUser.'氏名(漢字)',
本文: PlainText(msg.body.content)
}
);
);
);
,
Set(
testlabel,
"のね"
);
)
\\\`
power apps で teamsコネクタを利用を利用することでチャットの作成やメッセージの投稿ができるように
- 送信用アダプティブカード
\\\`json
{
"type": "AdaptiveCard",
"$schema": "http://adaptivecards.io/schemas/adaptive-card.json",
"version": "1.4",
"body": [
{
"type": "FactSet",
"facts": [
{
"title": "スキル群",
"value": "@{triggerBody()?['text\_1']}"
},
{
"title": "商材",
"value":" @{triggerBody()?['text\_3']}"
},
{
"title": "要請者",
"value":" @{triggerBody()?['text']}"
}
]
},
{
"type": "Container",
"items": [
{
"type": "TextBlock",
"text": "要請メッセージ",
"wrap": true,
"weight": "Bolder"
},
{
"type": "TextBlock",
"text": "@{triggerBody()?['text\_2']}",
"wrap": true
}
]
},
{
"type": "Container",
"items": [
{
"type": "TextBlock",
"text": "応答メッセージ",
"wrap": true,
"spacing": "Medium",
"weight": "Bolder"
},
{
"type": "Input.Text",
"placeholder": "メッセージを入力",
"id": "inputText"
}
],
"spacing": "Medium"
},
{
"type": "Input.Text",
"id": "HELP\_ID",
"value": "@{triggerBody()?['number']}",
"isVisible": false
},
{
"type": "ActionSet",
"actions": [
{
"type": "Action.Submit",
"title": "対応",
"id": "submitButton"
}
]
}
]
}
\\\`
- チャット作成
\\\`
MicrosoftTeams.CreateChat(
hamanoID //xxxx-xxxx-xxxx-xxxx
&";"&
getUserId, //xxxx-xxxx-xxxx-xxxx
{topic:("test")}
)
\\\`
- チャット送信
\\\`jsx
UpdateContext({
\_body:
{
recipient: DDM\_CHATS.Selected.id, // 19:xxx-xxx-xxx\_xxx-xxx-xxx@unq.gbl.spaces
messageBody: "本文"
}
});
MicrosoftTeams.PostMessageToConversation(
"User",
"Group chat",
ParseJSON(JSON(\_body))
)
\\\`
- チャネルに送信
\\\`jsx
MicrosoftTeams.PostMessageToChannelV3(
DDM\_TEAM.Selected.id, // xxx-xxx-xxx-xxx
DDM\_CHANNEL.Selected.id, // 19:xxxxxxxxxxxxxx@thread.tacv2
{content:"test\_honbun",contentType:"text"},
{subject:"test\_title"}
)
\\\`
- チャンネルにアダプティブカード送信して返り値取得
\\\`jsx
UpdateContext({responder: Teamsアダプティブカード送信待機.Run(
DataCardValue40.Selected.Value,
DataCardValue41.Selected.Value,
要請者\_DataCard2.Default,
{text:DataCardValue27.Text}
)})
\\\`
- 空白エスケープ処理
\\\`jsx
If(IsBlank(Samplevalue), "未選択",Samplevalue)
Coalesce(Samplevalue, "未選択")
\\\`
- 要請メッセージ Update
\\\`
DataCardValue17.Text & If(
ルタおまオプション\_DataCard3.Visible,
Char(10) & Concat(
colFormRows,
"CAF番:" & CAF &
" / 工事希望日:" & Text(希望日,"yyyy/mm/dd") &
" / 契約名義:" & 名義,
Char(10)
)
)
\\\`
data value - default
\\\`jsx
With(
{
msg1: Coalesce(varRequestMessage, ""),
msg2: Coalesce(varPasoomaStatusMessage, "")
},
If(
!IsBlank(msg1) && !IsBlank(msg2),
msg1 & msg2,
msg1 & msg2
)
)
\\\`
- カード送信改行処理
\\\`jsx
With(
{
normalized:
Substitute(
Self.Text,
Char(13) & Char(10),
Char(10)
)
},
Substitute(normalized, Char(10), "\\r\\n")
)
\\\`
\\\`jsx
With(
{
totalMin: DateDiff(ThisItem.要請日時, Now(), TimeUnit.Minutes)
},
Text(RoundDown(totalMin / 60, 0), "00") & ":" &
Text(Mod(totalMin, 60), "00")
)
\\\`
- 応対ステータス デフォアイテム
["応対中(保留)"]
- ルタオまオプション OnSelect
\\\`jsx
Collect(
colFormRows,
{
id: GUID(),
CAF: "",
希望日: Today(),
名義: ""
}
)
\\\`
ギャラリー テキストエリアなど OnChange
\\\`jsx
Patch(
colFormRows,
ThisItem,
{
CAF: Self.Text
}
)
Patch(
colFormRows,
ThisItem,
{
希望日: Self.SelectedDate
}
)
Patch(
colFormRows,
ThisItem,
{
名義: Self.Text
}
)
\\\`
ゴミ箱
Remove(colFormRows, ThisItem)
- 商材 セレクト プレースホルダー、ITEM
\\\`jsx
If(
IsBlank(DataCardValue20.Selected),
"スキル群を選択してください。"
)
\\SortByColumns(
ForAll(
DataCardValue20.Selected.スキル群商材,
商材
),
"cr8c1\_shozai\_name",
SortOrder.Ascending
)\\
\\\`
- スキル群 OnChenge
Reset(DataCardValue2)
Item
\\\`jsx
SortByColumns(
Choices([@'Help-prot'].スキル群),
"cr8c1\_skil\_group\_name",
SortOrder.Ascending
)
\\\`
- 簡易メッセージ Visible
DataCardValue18.Selected.Value = '要請種別 (Help-prot)'.'報告のみ'
OnChange
\\\`jsx
Set(
varRequestMessage,
Switch(
Self.Selected.Value,
"故障手配",
"故障手配をお願いします。"& Char(10),
"営業取次",
"営業取次お願いします。"& Char(10),
"UTM取次",
"UTM取次お願いします。"& Char(10),
"パソおま",
"パソおまお願いします。"& Char(10),
""
)
);
\\\`
Item
["故障手配", "営業取次", "UTM取次","パソおま"]
- ステータス OnChange
\\\`jsx
Set(
varPasoomaStatusMessage,
Switch(
Self.Selected.Value,
"ステータス②-1",
"ステータス:ステータス②-1"& Char(10),
"ステータス②-2",
"ステータス:ステータス②-2"& Char(10),
"ステータス3",
"ステータス:ステータス3"& Char(10),
"ステータス4",
"ステータス:ステータス4"& Char(10),
"test"
)
);
\\\`
item
["ステータス②-1","ステータス②-2","ステータス3","ステータス4"]
- フォーム 失敗
\\\`jsx
Confirm(
"",
{
Title: "HELP要請に失敗しました。",
Subtitle:"お手数ですが再試行してください。"
}
)
\\\`
成功
\\\`jsx
ResetForm('Main\_Form');
ClearCollect(
colFormRows,
{
id: GUID(),
CAF: "",
希望日: Today(),
名義: ""
}
);
Set(varRequestMessage, Blank());
Set(varPasoomaStatusMessage, Blank());
Confirm(
"",
{
Title: "HELP要請が完了しました。",
Subtitle:"受諾者の反応をお待ちください。"
}
)
\\\`
- レコード手動作成
\\\`
Patch(
HELP\_CHAT,
Defaults(HELP\_CHAT),
{
HELP\_ID: {
Id: Form4.LastSubmit.ID,
Value: Text(Form4.LastSubmit.ID)
},
要請者: {
Id: Form4.LastSubmit.ID,
Value: Text(Form4.LastSubmit.要請者)
},
受諾者: {
Id: Form4.LastSubmit.ID,
Value: Text(Form4.LastSubmit.受諾者)
}
}
\\\`
- フォームクリア
\\\`jsx
ResetForm(Main\_Form);
ClearCollect(
colFormRows,
{
id: GUID(),
CAF: "",
希望日: Today(),
名義: ""
}
);
Set(varRequestMessage, Blank());
Set(varPasoomaStatusMessage, Blank());
\\\`
- フォーム送信
SubmitForm(Main\_Form)
- スクリーン OnVisivle
\\\`jsx
UpdateContext({viewMode: "HelpForm"});
ClearCollect(
colFormRows,
{
id: GUID(),
CAF: "",
希望日: Today(),
名義: ""
}
);
Set(
varKanjiName,
With(
{
n: Substitute(
Substitute(Office365ユーザー.MyProfile().DisplayName, "(", "("),
")", ")"
)
},
Mid(
n,
Find("(", n) + 1,
Find(")", n) - Find("(", n) - 1
)
)
);
Set(
varCenterName,
With(
{
n: Substitute(
Substitute(Office365ユーザー.MyProfile().Department, "(", "("),
")", ")"
)
},
Mid(
n,
Find("(", n) + 1,
Find(")", n) - Find("(", n) - 1
)
)
)
\\\`
19:0fce6ffe-a6fb-4464-8555-f86abfde7006\_42c15e3a-3329-4f26-a237-f17111c9e149@unq.gbl.spaces
19:0fce6ffe-a6fb-4464-8555-f86abfde7006\_f7fdabe3-8e8c-4664-83f7-c2861c212dd4@unq.gbl.spaces
コンポーネント
- ヘッダーOnSelect
\\\`jsx
Set(isTestLabel, !isTestLabel)
\\\`
