Updated billing contact Q4 business review summary もっと表示 Delivery schedule Re: Question about the November order Question about the November order Renewal kickoff
Timelineコンポーネントは複数のテーブルの行を一つのリストとして表示し、最新が順に表示されます。デフォルトではレコードのノート、ポータル通信、その他のアクティビティです。RecordContextに入れると、そのレコードに関する行が表示されます:誰がいつ書きましたか?リッチテキストの本文は数行に切り替わり、「さらに表示」と「ダウンロード用の添付ファイル」です。ページを1ページずつ読み、残りは「Load more」、再読用にはリフレッシュで読みます。検索はグリッド形式で動作します。テキストは主題やテキストの冒頭、またはリード*の後の任意の場所から一致し、1日または1年前に>、<、>=、<=の前でその日の行を見つけます。複数のテーブルがある場合は、検索の横にあるメニューでどの行を表示するか選びます。
<RecordContext table="account" queryParameterName="id">
<Timeline />
</RecordContext><RecordContext TableName="account" QueryParameterName="id">
<Timeline />
</RecordContext>アカウント詳細ページのデモで示されているSchmeler and Sonsに関するメモ、メッセージ、予約。そのメモの一つは内部的なもので、テキストは *WEB* で始まっていないためリストには載っていません。表示されるテーブルを選ぶか、フィルターメニューで編集 フィルター (AllowFiltering)で絞り込み、サインインして自分のビュー(AllowSavedViews)として保存してください。
ノートはテキストが *WEB*で始まる場合にのみポータルに届くため、スタッフは顧客が見た記録の内部メモを保持できます。電話、タスク、その他の活動も説明文で同じルールに従いますが、フィルターなしのタイプ(デフォルトはポータル通信)は例外です。サーバーはこのルールをすべてのクエリ、グリッド、結合に適用するため、どのテーブルアクセスルールも拡大できません。ポータルはプレフィックスを表示せず、ポータルを通じて作成されたノートやアクティビティに追加します。タイトルで作成者が Note created on … by Name [contact:id] と名付けられたメモは、その連絡先によって書かれたものとして表示されます。 SecurityOptions.PortalVisibility.Prefix を別のプレフィックスを使うか、すべてのメモやアクティビティを表示する null に設定し、すべてのアクティビティを表示するために UnfilteredActivities にテーブルを追加してください。ポータルに本人としてサインインしたスタッフは例外で、セキュリティロールで読めるすべてのノートやアクティビティをDynamicsのようにテキストが保存されている状態で確認するため、ポータル用のノートにプレフィックスを自分で追加します。
builder.Services.Configure<SecurityOptions>(options =>
{
// ノートやアクティビティは、テキストが*PORTAL*で始まるときにポータルに到達します。
options.PortalVisibility.Prefix = "*PORTAL*";
// ユーザーが読めるすべてのメールはポータルに届きます。メールはプレフィックスを付けることができません。
options.PortalVisibility.UnfilteredActivities.Add("email");
});
メールにはプレフィックスを付けることはできません。メールの本文は送信したメールクライアントがHTMLドキュメントとして書き込むため、プレフィックスが最初のテキストになることはなく、どのメールもプレフィックスでポータルに届くことはありません。UnfilteredActivitiesにemailを追加するのがメールを表示する唯一の方法であり、ユーザーが読めるすべてのメール(内部メールも含む)をレコードに表示します。
ポータル通信(ppp_portalcommunication)は、Power Portals Proソリューションにおける、ポータルユーザーとスタッフ間のメッセージの活動です。これはポータル用なので、接頭辞は必要ありません。「 It From 」には、誰が書いたかが記載されています:ポータルユーザーの連絡先か、または返信したスタッフで、 連絡先はToに記載されています。メッセージはリッチテキストで、1つの添付ファイルを搭載できます。
タイムラインはユーザーが読むことができるものだけをリストアップしており、テーブル上で読むべき項目の種類はそれぞれで、どちらも読めないユーザーはタイムラインを全く見られません。ノートは objectid を通じてその記録を指し示し、ポータルは regardingobjectidを通じて通信するため、通常のルールではユーザーがアクセス可能なレコードについての項目を RowsViaParentで読むことができます。その検索は読む可能性のある列の中に残し、タイムラインはその記録に関する項目をタイムラインを通じて求め、ユーザーが読んではいけない列の条件を解除し、アクセスしたすべてのレコードの項目をリストアップします。
// ユーザーは自分の会社のアカウントに関するメモやメッセージを読みます。
builder.Services.AddTableAccess("annotation", t => t
.ForSignedInUsers()
.RowsViaParent("objectid", "account", parent => parent.RowsOfTheirAccount("accountid"))
.Allow(TableSecurityPermission.Read)
.ReadingAllColumns());
builder.Services.AddTableAccess("ppp_portalcommunication", t => t
.ForSignedInUsers()
.RowsViaParent("regardingobjectid", "account", parent => parent.RowsOfTheirAccount("accountid"))
.Allow(TableSecurityPermission.Read)
.ReadingAllColumns());
ポータルのアプリケーションユーザーもDataverse内の両方のテーブルで読み取る必要があります。NoteはNoteテーブルで読み取る必要があります。Dataverseはすべてのアクティビティタイプを一つの権限セットで付与しているため、ポータル通信はPower Portals Proアプリケーションユーザーの役割が既に保持しているアクティビティのリードオンでカバーされます。ユーザーがノートやメッセージを変更または削除するには、Noteテーブル上でWrite and Delete、アクティビティに対してDeleteが必要ですが、この役割は保持していません。
ポータル通信を作成できるユーザーは、タイムラインが載っているレコードに関する新しいメッセージ、主題、リッチテキストメッセージ、添付ファイル1つを受け取り、ノートを作成できるユーザーには新しいノートが付与されます。CreatableTables新しい行を書けるテーブルの名前、デフォルトでノートとポータル通信の名前が割り当てられます。メモやメッセージはその場に書き込まれ、別のテーブルの行はサイドパネルに表示されます。これは独自の形態であり、周囲のページとは別に保存されます。サーバーはリクエスト内容に関わらずユーザーからメッセージを送信するため、あるユーザーが別のユーザーとして書き込むことはできません。テーブルアクセスを付与する:OwnedBy("from")は作成者から新しいメッセージを送信し、RowsOwnedByContact("from")RowsForWritingではユーザーが送信したもののみを変更・削除できます。書き込みと削除を省略すると、メッセージは送信されたままのままです。タイムラインは各行で編集と削除をユーザーに許可し、サーバーは変更が届いたときに再度判断します。FormLocation(React: formLocation)は、他のテーブルのフォームがどこで開くかを示します:デフォルトで右側のサイドパネル、左側、中央のダイアログ、またはInline — メモやメッセージが書かれる間にタイムラインの位置にあります。
// 会社のアカウントに関するすべてのメッセージを読み、新しいものを書き、自分のアカウントを変更したり削除したりしましょう。
builder.Services.AddTableAccess("ppp_portalcommunication", t => t
.ForSignedInUsers()
.RowsViaParent("regardingobjectid", "account", parent => parent.RowsOfTheirAccount("accountid"))
.RowsForWriting(r => r.RowsOwnedByContact("from"))
.OwnedBy("from")
.Allow(TableSecurityPermission.Read | TableSecurityPermission.Create | TableSecurityPermission.Append
| TableSecurityPermission.Write | TableSecurityPermission.Delete)
.ReadingAllColumns()
.WritingOnCreate("regardingobjectid")
.Writing("subject", "description", "ppp_attachment"));
// ポータルユーザーからのメッセージは、レコードの所有者ではなくキューに送られます。
builder.Services.Configure<PortalCommunicationOptions>(options =>
{
options.Recipient = PortalCommunicationRecipient.Queue;
options.QueueId = new Guid("00000000-0000-0000-0000-000000000000");
});
スタッフは PortalCommunicationOptionsを通じて新しいメッセージを受信します。デフォルトでは、その所有者がユーザーの場合、その所有者宛てはその記録の所有者宛てです。代わりに、ポータルのアプリケーションユーザーがアクセスが必要なキューにアイテムを追加したり、誰にも追加しなくても、レコードのタイムライン上に残ることもあります。
ノートやすべてのアクティビティテーブルはサーバー上でタイムラインやカレンダーとして登録されており、それぞれフォームの要求に応じて日付が付けられています。例えば、開始時は予定、締め切りはタスクや電話、メールやメッセージは作成日時です。タイムラインにはユーザーが読むことができる登録済みテーブルが一覧化されています。 Tablesで表示されるものの名前を挙げます。レコードには、その記録に関する行や、送信者、受信者、参加者として参加するアクティビティが記載されます。サーバーはポータル用のノートやアクティビティのみを表示します。テキストが *WEB*で始まるもの、またはある UnfilteredActivitiesのタイプすべてです。メールは接頭辞を持たないため、リストに email がある場合にのみ表示されます。
<Timeline tables={['annotation', 'ppp_portalcommunication', 'phonecall', 'email']} /><Timeline Tables="@(["annotation", "ppp_portalcommunication", "phonecall", "email"])" />自分 AddMultiTableSource専用のテーブルを登録します。タイトル、テキスト、所有者や受信者、行が対象となるレコードのルックアップなど、表示されるものを記載します。次に、そのコントロールに必要な列名を付けます。 ForTimelines 、行の ForCalendars 順序が日付、開始カラム、もし順にならば終了カラムと終日カラム ForSearch、緯度と経度 ForMaps 。これらのカラムは、ビューのクエリ名が何であれ常に読み込まれます。テーブルにないカラム名や、異なるタイプのカラム名を付ける登録は、起動時にポータルを停止し、問題点を教えます。ノートやアクティビティテーブルを登録しても、登録名だけが変わります。登録はアクセス権を得ません。各テーブルは他のテーブルと同様に読み取りアクセスが必要です。
// 事件はタイムラインやカレンダーに記載され、開封日数で日付が示されている。
builder.Services.AddMultiTableSource("incident", t => t
.Title("title")
.Body("description")
.Owner("ownerid")
.Regarding("customerid")
.ForTimelines(start: "createdon")
.ForCalendars(start: "createdon"));
// メールは送信日数で、書かれたものではなく送られた日数で知っています。
builder.Services.AddMultiTableSource("email", t => t.ForTimelines(start: "senton"));
タイムラインは、まず新しい行をリストアップし、今から遡ります。 Upcoming (React: upcoming)はその先の先から表示されるため、次に表示されるものが自分の見出しで最初に表示され、 Ascending (React: ascending)はこれから先の行を最初にリストアップします: 「Upcoming Items」を参照してください。テーブルの行を自分なりに描いたり、自分で書く場合は 「Custom Rendering」をご覧ください。
<Timeline upcoming={{ days: 2 }} /><Timeline Upcoming="TimeSpan.FromDays(2)" />グリッドのように、Dataverse独自の「My Phone Calls」や「All Activities」などのタイムラインビュー、ViewIdsMultiTableViewIdsの複数のテーブルのビュー、CustomViewDefinitionsの自分のビュー、DefaultViewId表示の先に表示するビューを選べるようにします。2つ以上のビューセレクターがある場合は、見出しの代わりにビューセレクターが置かれます。DataverseのViewactivitypointer登録済みアクティビティテーブルを一覧表示し、レコードにはそのレコードを通過させる行を表示します。AllowSavedViews(React: allowSavedViews)では、サインインしたユーザーはタイムラインに表示されたテーブルを自分のビューとして保存し、自分のビューの隣に提供し、デフォルトのビューを選択して使わないものをフィルターメニューから非表示にできます(「保存済みビュー」参照)。
自分のビューは1つ以上のテーブルの行を一覧にします。テーブルにFetchXMLクエリを与え、そのフィルターと結合がどの行を表示するかを決めます。これにより、ビューはアカウントの連絡先との電話通話など他のレコードに対してファイルされた行にアクセスできます。 FilterByRecord を false に設定し、ビューのクエリが自動的に決定できるようにします。タイムラインは自分の列を独自の順序で読み取るため、クエリの列や順序は問題になりません。ユーザーはフィルターがテストする各列を読める必要があります。ユーザーが読んではいけない列の条件は削除されます。
<Timeline
viewIds={[myPhoneCallsViewId, myTasksViewId]}
filterByRecord={false}
customViewDefinitions={[
{
// アカウントの連絡先との電話や、アカウントに関するメモ。
id: '6f3c2a1e-0b7d-4c55-9a3e-2d8f1b6c4e90',
displayName: 'Calls with our people',
tables: [
{
table: 'phonecall',
fetchXml: `
<fetch>
<entity name="phonecall">
<link-entity name="contact" from="contactid" to="regardingobjectid">
<filter><condition attribute="parentcustomerid" operator="eq" value="${accountId}" /></filter>
</link-entity>
</entity>
</fetch>`,
},
{
table: 'annotation',
fetchXml: `
<fetch>
<entity name="annotation">
<filter><condition attribute="objectid" operator="eq" value="${accountId}" /></filter>
</entity>
</fetch>`,
},
],
},
]}
/><Timeline ViewIds="@([myPhoneCallsViewId, myTasksViewId])"
CustomViewDefinitions="@_views"
FilterByRecord="false" />
@code {
// アカウントの連絡先との電話や、アカウントに関するメモ。
private List<MultiTableViewDefinition> _views =
[
new()
{
Id = new Guid("6f3c2a1e-0b7d-4c55-9a3e-2d8f1b6c4e90"),
DisplayName = "Calls with our people",
Tables =
[
new MultiTableViewTable
{
Table = "phonecall",
FetchXml = $"""
<fetch>
<entity name="phonecall">
<link-entity name="contact" from="contactid" to="regardingobjectid">
<filter><condition attribute="parentcustomerid" operator="eq" value="{accountId}" /></filter>
</link-entity>
</entity>
</fetch>
""",
},
new MultiTableViewTable
{
Table = "annotation",
FetchXml = $"""
<fetch>
<entity name="annotation">
<filter><condition attribute="objectid" operator="eq" value="{accountId}" /></filter>
</entity>
</fetch>
""",
},
],
},
];
}どのテーブルをリストするか、各ページにどれだけの項目を追加するか、検索ボックスが表示されるか、そしてスクロールする前にリストの長さをどれくらい大きくするかを選びます。
名称 | 種類 | デフォルト | 概要 |
|---|---|---|---|
AllowFiltering | bool | False | trueすると、フィルターメニューでビューのフィルターがグリッドのように変更できます does — 各テーブルごとに表示されるタブ:列の条件、グループにネストされたもの、関連 ユーザーが読むことができる列やテーブルでフィルタリングするテーブル。変更は タイムラインはビューを示し、保存したユーザーはそれを自分のビューとして保持できます。そうではありません Dataverseに管理されている複数のテーブルのビューを提供するためで、サーバーはそれをIDで読み取ります。 デフォルトはfalse:ユーザーはビューに持つすべてのフィルターを削除できます。 ページの行を絞り込むための表示は望まないかもしれません。 |
AllowSavedViews | bool | False | サインインしたユーザーは、タイムラインに表示されたテーブルを自分のビューとして保存できます。 ページの横にビューピッカーを表示し、デフォルトのビューを選択し、使わないビューを非表示にしてください。 タイムラインやカレンダーに保存されたビューが、 Timeline.SavedViewsKey なしで両方で提供されます。 デフォルトでオフ。Power Portals Pro Coreソリューションのマルチテーブルビューテーブルが必要です。内部 ユーザーはまた、 |
AllowSearch | bool | True | 行の検索欄の上に検索ボックスが表示され、これも1日または1年かかります — true。 |
Ascending | bool | False | これからは最も古い行を最初にリストします。デフォルトは false:新しい行が先に、これから戻します。 |
ChildContent | RenderFragment? | ページのテンプレートや表のフォーム: Components.MultiTableTemplate と Components.MultiTableForm。 | |
CreatableTables | IEnumerable<string>? | ユーザーがタイムラインから新しい行を書き込めるテーブル、作成可能なテーブル。デフォルト メモやポータル通信、タイムラインの記録が必要なものだ。 | |
CustomViewDefinitions | List<MultiTableViewDefinition>? | コードで定義されたビュー(最後にリスト):それぞれ1つ以上のテーブルの行を示します。 | |
DefaultTables | IEnumerable<string>? | タイムラインがすべての表を表示するときに最初に表示された表は、それ自体は表示されず、他の表だけが表示されています ユーザーはテーブルメニューで閲覧可能ですが、電源はオフです。ノート、メール、 ポータル通信。どれも見せられていないのに、すべてのテーブルがそうだ。 | |
DefaultViewId | Guid? | 最初に示された視点。未設定、あるいは視点の中に含まれていない、最初の視点です。 | |
FilterByRecord | bool | True | Timeline.Regarding 時には周囲の形の記録上の行のみを表示します 名前なし。時間軸をfalseに設定し、その時間軸は意見が勝手に決まる どの行が表示され、どこに置かれても表示されます。デフォルトはtrueです。 |
FormLocation | TimelineFormLocation | Right | 行の形状が開く場所で、作成または変更するために:右側または左側のサイドパネル、 メモやメッセージが書かれる際に、中央に、またはタイムラインの場所にダイアログを配置します。メモ と ページの形式を持たないメッセージは、フォームが開いている場所に書かれます。デフォルト TimelineFormLocation.Right。 |
MatchParties | bool? | レコードが送り手、受取人、参加者として参加する活動が何であれ、隣に示されます その辺りの人たち。セットされていない、各テーブルのセッティング、そうでなければサーバーのセット。 | |
MaxHeight | string? | リストの最も大きいほど、CSSの長さ( | |
MultiTableViewIds | IEnumerable<Guid>? | IDで選べる複数のテーブルのビュー: Timeline.ViewIds年以降にリストされています。 | |
PageSize | int | 10 | 最初に表示されるアイテムの数と「追加」ごとに追加される項目数。デフォルトは10です。 |
Record | TableRecord? | このタイムラインの記録は、周囲の形によって連鎖的に流れている。 | |
Regarding | TableRecordReference? | 行が示す記録 — その周囲の記録と、その記録が参加する活動。未設定の場合、 周囲の形の記録( Timeline.FilterByRecord参照);いずれもない場合、すべての行は ショーを見る。 | |
SavedViewsKey | string? | このタイムラインはタイムラインの中で名前を付け、保存されたビューやユーザーのデフォルトおよび 隠された視点はそれ自体のものだ。それがなければ、すべてのタイムラインやカレンダーとその見解を共有している ありません。文字、数字、 | |
Series | MultiTableSeries? | 繰り返される予定がどう表れているか。セットは置かれず、各テーブルのセッティングも。 | |
ShowRecordLinks | bool | True | アイテムのタイトルが true;ページのないテーブルにはリンクがありません。 |
SignInUrl | string | Account/Login | サインインしていないユーザーが保存済みのビューメニューからサインインを促され、そこで求められます 彼らは最初に;このページに戻ってきます。デフォルトは |
Tables | IEnumerable<string>? | 論理名で示されているテーブルは、それぞれ | |
Title | string? | 見出し。ビュー名、または「タイムライン」がデフォルトで使われます。ビューセレクターがその代わりに入ります。 | |
Upcoming | TimeSpan? | タイムラインがどれくらい先から始まるか、つまりこれから起こるものが他のものよりも上に表示されるように 見出し:2日間は次の2日間の行を最初に示します。未設定は今から始まります。 | |
ViewIds | IEnumerable<Guid>? | IDごとに選べるDataverseビュー — 「My Emails」や「All Activities」 — それぞれ1つのビュー 登録されたテーブル、または | |
ViewSort | ViewSort | NameAscending | ピッカー内のビューの順序。デフォルトは ViewSort.NameAscending、グリッドとカレンダーの順序です。 |
AllowFilteringtrueすると、フィルターメニューでビューのフィルターがグリッドのように変更できます does — 各テーブルごとに表示されるタブ:列の条件、グループにネストされたもの、関連 ユーザーが読むことができる列やテーブルでフィルタリングするテーブル。変更は タイムラインはビューを示し、保存したユーザーはそれを自分のビューとして保持できます。そうではありません Dataverseに管理されている複数のテーブルのビューを提供するためで、サーバーはそれをIDで読み取ります。 デフォルトはfalse:ユーザーはビューに持つすべてのフィルターを削除できます。 ページの行を絞り込むための表示は望まないかもしれません。AllowSavedViewsTimeline.SavedViewsKey なしで両方で提供されます。 デフォルトでオフ。Power Portals Pro Coreソリューションのマルチテーブルビューテーブルが必要です。内部 ユーザーはまた、 AllowSearchtrue。Ascendingfalse:新しい行が先に、これから戻します。ChildContentComponents.MultiTableTemplate と Components.MultiTableForm。CreatableTablesCustomViewDefinitionsDefaultTablesDefaultViewIdFilterByRecordTimeline.Regarding 時には周囲の形の記録上の行のみを表示します 名前なし。時間軸をfalseに設定し、その時間軸は意見が勝手に決まる どの行が表示され、どこに置かれても表示されます。デフォルトはtrueです。FormLocationTimelineFormLocation.Right。MatchPartiesMaxHeightMultiTableViewIdsTimeline.ViewIds年以降にリストされています。PageSizeRecordRegardingTimeline.FilterByRecord参照);いずれもない場合、すべての行は ショーを見る。SavedViewsKeySeriesShowRecordLinkstrue;ページのないテーブルにはリンクがありません。SignInUrlTablesTitleUpcomingViewIdsViewSortViewSort.NameAscending、グリッドとカレンダーの順序です。