- 基本情報
- はじめる前に
- 使い方
- 通知
- VB の式を使用する
- アプリをデザインする
- イベントとルール
- アプリで RPA を活用する
- アプリ内でエンティティを活用する
- アプリ内でキューを活用する
- Studio Web の Apps
- アプリケーション ライフサイクル管理 (ALM)
- 基本的なトラブルシューティング ガイド

Apps ユーザー ガイド
カスタム HTML
[カスタム HTML] コントロールは上級ユーザー向けです。HTML、CSS、JavaScript のプログラミング言語の柔軟性を利用し、ビジネス ニーズに応じてカスタムの対話型コントロールを作成できます。このコントロールには、HTML、CSS、JavaScript のコード専用のエディターが含まれているため、外部でホストされている CSS ファイルや JavaScript ファイルを URL を介して組み込めるという利点もあります。
デモ
カスタム HTML: グラフを作成する
はじめに
このアプリは、d3.js や chart.js などの JavaScript ライブラリを使用して、さまざまな種類のグラフを作成する方法を示しています。
デモアプリ (ご自身でお試しください)
対話型のグラフをご自分で試す場合はデモ アプリをご利用ください。
デモ アプリ (使用方法)
- UiPath Apps で新しいアプリを作成し、ダウンロードしたデモ アプリをインポートします。
- アプリをプレビューしてすべてのグラフの種類を操作します。
カスタム HTML: 変数の関数を使用して対話型の円グラフを作成する
はじめに
このアプリでは、エンティティ、[カスタム HTML]、および [編集グリッド] コントロールを組み合わせて、対話型の円グラフを表示します。対話機能をアクティブ化するには、ドロップダウン メニューからオプションを選択します。これにより、円グラフのセクションと編集グリッド内のレコードが変更されます。その後、グラフ セクションをクリックすると、編集グリッド内のデータが更新されます。
デモアプリ (ご自身でお試しください)
対話型の円グラフをご自身で試すには、以下のデモ アプリを使用するか、手順を実行します。
デモ アプリ (使用方法)
- デモ アプリをプレビューします。
- [Filter Tickets by Customer Name] ドロップダウンからオプションを選択します。チケットの合計数、円グラフの表現、および編集グリッド内のデータが変わります。
- グラフのスライス上にカーソルを合わせます。ツールチップに、カテゴリ名とチケット数が表示されます。
- グラフのスライスをクリックします。編集グリッドに、選択したカテゴリのレコードが表示されます。
手順
[カスタム HTML] コントロールでエンティティと変数がどのように使用されているかを確認するには、次のアプリ ファイルをローカル マシンにダウンロードします。
ダウンロード後、次の手順を実行します。
-
UiPath Data Service で [スキーマをインポート] をクリックします。
- 先ほどダウンロードした
ticket_entities_schema.jsonファイルを選択します。 - [エンティティ] タブで、[Tickets] と [Tickets Source] のチェックボックスをオンにします。
- [チョイス セット] タブに切り替え、[Continents] と [Friction Level] のチェックボックスをオンにします。
- [インポート] をクリックします。
- 先ほどダウンロードした
-
UiPath Data Service で、Tickets Source エンティティを選択します。
- [データをインポート] をクリックします。
- 以前にダウンロードした
ticketsource_entity_data.csvファイルを選択して、[開く] をクリックします。 - [データ] タブに切り替えて、アップロードされたレコードを表示します。
-
UiPath Data Service で、Tickets エンティティを選択します。
- [データをインポート] をクリックします。
- 以前にダウンロードした
tickets_entity_data.csvファイルを選択して、[開く] をクリックします。 - Relationship 型および Choice Set 型のフィールドのデータは、自動的にはインポートされません。これらのフィールドには手動でデータを入力する必要があります。
- [ データ ] タブに切り替えます。Tickets レコードごとに、Source フィールドの値をランダムに Chat、Phone、または Email を選択して更新します。
- [データ] タブの Tickets レコードごとに、Friction フィールドの値をランダムに 1、2、または 3 を選択して更新します。
-
アプリ ファイルをインポートするために、以下の手順を実行してから、手順 14 に進みます。 UiPath Apps で、新しい VB アプリを作成します。
- [ファイルからインポート] をクリックします。
- 以前にダウンロードした
CustomHTMLPieChart_DemoApp.uiappファイルを選択して、[開く] をクリックします。 - エラーを修正するには、インポートしたアプリのエンティティを、前の手順 2 と 3 で作成したエンティティに置き換えます。
- インポートしたアプリで、「CustomFilterDropdown」という名前の [ドロップダウン] コントロールを選択し、[リストのソース] プロパティの [式エディター] を開いて保存します。
-
アプリを最初から作成するために、手順 5 から 14 を実行します。 UiPath Apps で、新しい VB アプリを作成します。
-
アプリで、手順 1 から 3 で作成したエンティティを参照します。
-
Data Service のエンティティに基づいて以下の変数を作成します。
変数名 入力 参照されるエンティティ allTicketsListSource チケット filteredTicketListSourceListSource チケット selectedSourceTypeテキスト - ticketSourceTypesListSource Tickets Source -
[ドロップダウン] コントロールをアプリに追加し、名前を「CustomerFilterDropdown」に変更します。
-
[ラベル] フィールドで、名前を「Filter tickets by customer name (チケットを顧客名でフィルター処理)」に変更します。
-
[リストのソース] フィールドで式エディターを開き、次の VB 式を書き込みます。
New ListSource(of String)With{.data = allTickets.data.Select(Function(x) x.CustomerName).Distinct.ToList}New ListSource(of String)With{.data = allTickets.data.Select(Function(x) x.CustomerName).Distinct.ToList} -
[イベント] タブに切り替えて、[ルールを作成] をクリックします。
-
[値を設定] ルールを追加して、次の入力値を設定します。
設定する項目 filteredTicketListSourcefilteredTicketListSource値 (Value) Fetch(of Tickets)Fetch(of Tickets)
-
-
[ヘッダー] コントロールをアプリに追加し、名前を「TicketCountHeader」に変更します。
- [テキスト] フィールドで式エディターを開き、次の VB 式を書き込みます。
(filteredTicketListSource.totalRecords).ToString +" Tickets"(filteredTicketListSource.totalRecords).ToString +" Tickets"
- [テキスト] フィールドで式エディターを開き、次の VB 式を書き込みます。
-
[カスタム HTML] コントロールをアプリに追加し、名前を「Chart」に変更します。
- コード エディターを開き、プレースホルダーの内容を次のコード スニペットに置き換えます。
-
HTML: オープンソース ライブラリからテンプレートの JavaScript グラフを生成し、そのグラフにスタイル クラスを適用します。
<script src="https://cdn.jsdelivr.net/npm/chart.js"></script> <div class="chartContainer"> <canvas class="pieChart" id="myChart"></canvas> </div><script src="https://cdn.jsdelivr.net/npm/chart.js"></script> <div class="chartContainer"> <canvas class="pieChart" id="myChart"></canvas> </div> -
CSS: 2 つのスタイルクラスを定義します: .chartContainerと
.pieChart..chartContainer { height: 100%; background-color: #ffffff; font-family: Arial, Helvetica, sans-serif; font-weight: bold; color: #526069; display: flex; align-items: center; justify-content: center; } .pieChart { width: 50%; max-width: 400px; max-height: 400px; }.chartContainer { height: 100%; background-color: #ffffff; font-family: Arial, Helvetica, sans-serif; font-weight: bold; color: #526069; display: flex; align-items: center; justify-content: center; } .pieChart { width: 50%; max-width: 400px; max-height: 400px; } -
JavaScript: 変数の関数を定義し、グラフに対話機能を追加します。
// Create an object to store counts var counts = {"Email": 0, "Phone": 0, "Chat": 0}; // Mock data to see the chart in designer, You can assign it with empty array if you don't want to see chart in designer var Tickets = [ {Source: { Source: 'Phone' }}, ]; // Function to count the number of tickets per Source function countTickets(tickets) { counts = {"Email": 0, "Phone": 0, "Chat": 0}; // Reset counts to zero for (var i = 0; i < tickets.length; i++) { counts[tickets[i].Source.Source]++; } } countTickets(Tickets); // Count tickets in the initial data // Create a Chart var ctx = document.getElementById('myChart').getContext('2d'); var myChart = new Chart(ctx, { type: 'pie', data: { labels: ['Email', 'Phone', 'Chat'], datasets: [{ label: '# of Tickets', data: [counts["Email"], counts["Phone"], counts["Chat"]], backgroundColor: [ 'rgba(255, 99, 132, 0.2)', 'rgba(54, 162, 235, 0.2)', 'rgba(255, 206, 86, 0.2)' ], borderColor: [ 'rgba(255, 99, 132, 1)', 'rgba(54, 162, 235, 1)', 'rgba(255, 206, 86, 1)' ], borderWidth: 1 }] }, options: { onClick: function(evt, elements) { if (elements.length) { var chartElement = elements[0]; var label = this.data.labels[chartElement.index]; OutputSource = label; console.log(OutputSource); // You can see the stored value in browser's console on each click App.setVariable('selectedSourceType', OutputSource); } } } }); // Function to update chart's data function updateChart(data) { NewTickets = data; // New data to update the chart countTickets(NewTickets); myChart.data.datasets[0].data = [counts["Email"], counts["Phone"], counts["Chat"]]; myChart.update(); let sourceWithData = Object.keys(counts).find(ticketSource => { return counts[ticketSource] > 0; }); if(sourceWithData) { App.setVariable('selectedSourceType', sourceWithData); } } //Listen for updates to the ticket data and update chart async function registerOnChangeEvent() { App.onVariableChange('filteredTicketListSource',(listSource) => { updateChart(listSource.data); }) const listSource = await App.getVariable('filteredTicketListSource'); if(listSource?.data?.length > 0) { updateChart(listSource.data); } } registerOnChangeEvent();// Create an object to store counts var counts = {"Email": 0, "Phone": 0, "Chat": 0}; // Mock data to see the chart in designer, You can assign it with empty array if you don't want to see chart in designer var Tickets = [ {Source: { Source: 'Phone' }}, ]; // Function to count the number of tickets per Source function countTickets(tickets) { counts = {"Email": 0, "Phone": 0, "Chat": 0}; // Reset counts to zero for (var i = 0; i < tickets.length; i++) { counts[tickets[i].Source.Source]++; } } countTickets(Tickets); // Count tickets in the initial data // Create a Chart var ctx = document.getElementById('myChart').getContext('2d'); var myChart = new Chart(ctx, { type: 'pie', data: { labels: ['Email', 'Phone', 'Chat'], datasets: [{ label: '# of Tickets', data: [counts["Email"], counts["Phone"], counts["Chat"]], backgroundColor: [ 'rgba(255, 99, 132, 0.2)', 'rgba(54, 162, 235, 0.2)', 'rgba(255, 206, 86, 0.2)' ], borderColor: [ 'rgba(255, 99, 132, 1)', 'rgba(54, 162, 235, 1)', 'rgba(255, 206, 86, 1)' ], borderWidth: 1 }] }, options: { onClick: function(evt, elements) { if (elements.length) { var chartElement = elements[0]; var label = this.data.labels[chartElement.index]; OutputSource = label; console.log(OutputSource); // You can see the stored value in browser's console on each click App.setVariable('selectedSourceType', OutputSource); } } } }); // Function to update chart's data function updateChart(data) { NewTickets = data; // New data to update the chart countTickets(NewTickets); myChart.data.datasets[0].data = [counts["Email"], counts["Phone"], counts["Chat"]]; myChart.update(); let sourceWithData = Object.keys(counts).find(ticketSource => { return counts[ticketSource] > 0; }); if(sourceWithData) { App.setVariable('selectedSourceType', sourceWithData); } } //Listen for updates to the ticket data and update chart async function registerOnChangeEvent() { App.onVariableChange('filteredTicketListSource',(listSource) => { updateChart(listSource.data); }) const listSource = await App.getVariable('filteredTicketListSource'); if(listSource?.data?.length > 0) { updateChart(listSource.data); } } registerOnChangeEvent();
-
[保存] をクリックします。
-
[スタイル] タブに切り替えて、[サイズ] を次のように設定します。
幅 1000 px 高さ 400 px
-
[ヘッダー] コントロールをアプリに追加し、名前を「sourceTypeHeader」に変更します。
- [テキスト] フィールドで式エディターを開き、次の VB 式を書き込みます。
"Tickets created through " & selectedSourceType"Tickets created through " & selectedSourceType
- [テキスト] フィールドで式エディターを開き、次の VB 式を書き込みます。
-
[編集グリッド] コントロールをアプリに追加し、名前を「TicketsListByType」に変更します。
- [データ ソース] フィールドで式エディターを開き、次の VB 式を書き込みます。
Fetch(of Tickets)(createFilterGroup(Nothing, New FilterGroup(){createFilterGroup(New QueryFilter(){addFilter(MainPage.TicketsListByType.SearchColumn, "contains", MainPage.TicketsListByType.SearchTerm)}, Nothing, 0), createFilterGroup(New QueryFilter(){addFilter("Source.Source", "=", selectedSourceType), addFilter("CustomerName", "contains", MainPage.CustomerFilterDropdown.SelectedItem)}, Nothing, 0)}, 0), New PaginationProps(MainPage.TicketsListByType.PageStart, MainPage.TicketsListByType.PageLimit), New SortOption(){addSortOption(MainPage.TicketsListByType.SortColumn, Not(Not(MainPage.TicketsListByType.isDescending)))}, Nothing, New ExpansionFieldOption(){addExpansionFieldOption("Source", New String(){"Id","Source"}), addExpansionFieldOption("CreatedBy", New String(){"Id","Name"}), addExpansionFieldOption("UpdatedBy", New String(){"Id","Name"})})Fetch(of Tickets)(createFilterGroup(Nothing, New FilterGroup(){createFilterGroup(New QueryFilter(){addFilter(MainPage.TicketsListByType.SearchColumn, "contains", MainPage.TicketsListByType.SearchTerm)}, Nothing, 0), createFilterGroup(New QueryFilter(){addFilter("Source.Source", "=", selectedSourceType), addFilter("CustomerName", "contains", MainPage.CustomerFilterDropdown.SelectedItem)}, Nothing, 0)}, 0), New PaginationProps(MainPage.TicketsListByType.PageStart, MainPage.TicketsListByType.PageLimit), New SortOption(){addSortOption(MainPage.TicketsListByType.SortColumn, Not(Not(MainPage.TicketsListByType.isDescending)))}, Nothing, New ExpansionFieldOption(){addExpansionFieldOption("Source", New String(){"Id","Source"}), addExpansionFieldOption("CreatedBy", New String(){"Id","Name"}), addExpansionFieldOption("UpdatedBy", New String(){"Id","Name"})})
- [データ ソース] フィールドで式エディターを開き、次の VB 式を書き込みます。
-
[MainPage] で、[イベント] タブに切り替えて、[ルールを作成] をクリックします。
-
[値を設定] ルールを追加して、次の入力値を設定します。
設定する項目 allTickets値 (Value) クエリ ビルダーを開き、Tickets エンティティを選択して [保存] をクリックします。 -
2 つ目の [値を設定] ルールを追加し、次の入力値を設定します。
設定する項目 filteredTicketListSource値 (Value) クエリ ビルダーを開き、Tickets エンティティを選択して [保存] をクリックします。
-
-
アプリをプレビューし、ドロップダウンでオプションを選択して、グラフが更新されていることを確認します。グラフ セクションをクリックし、編集グリッドが選択したセクションのデータで更新されていることを確認します。
カスタム HTML: 日付/時刻選択を作成する
はじめに
このアプリは、カスタムの日付時刻ピッカーを作成する方法を示しています。
デモアプリ (ご自身でお試しください)
日付時刻ピッカーをご自身で試す場合はデモ アプリをご利用ください。
デモ アプリ (使用方法)
- UiPath Apps で新しいアプリを作成し、ダウンロードしたデモ アプリをインポートします。
- アプリをプレビューして日付時刻ピッカーを操作します。
カスタム HTML: パスワード フィールドを作成する
はじめに
このアプリは、パスワード フィールドを作成する方法を示しています。
デモアプリ (ご自身でお試しください)
パスワード フィールドをご自身で試す場合はデモ アプリをご利用ください。
デモ アプリ (使用方法)
- UiPath Apps で新しいアプリを作成し、ダウンロードしたデモ アプリをインポートします。
- アプリをプレビューしてパスワード フィールドを操作します。
カスタム HTML: 署名入力フィールドを作成する
はじめに
このアプリは、署名の入力フィールドを作成する方法を示しています。
デモアプリ (ご自身でお試しください)
署名の入力をご自身で試す場合はデモ アプリをご利用ください。
デモ アプリ (使用方法)
- UiPath Apps で新しいアプリを作成し、ダウンロードしたデモ アプリをインポートします。
- いくつかのエラーが見つかる可能性があります。エラーを修正するには、参照されているストレージ バケット「Demo app」をテナント内のバケットに置き換えます。
- アプリをプレビューして署名の入力フィールドを操作します。
全般
- コード エディターを開く - 3 つのパネルで構成されるエディターを開いて、HTML、CSS、JavaScript のコードを追加できます。
- アクセシブル ラベル - コントロールの説明です。このプロパティはスクリーン リーダーによって使用され、アクセシビリティを向上できます。
- 非表示 - true の場合、実行時にコントロールが非表示になります。
- 無効化 - true の場合、実行時にこのコントロールを非アクティブにします。HTML、CSS、JavaScript のコンテンツは読み込まれますが、クリックなどのユーザーの操作には応答しません。
イベント
イベントはありません。
スタイル
- コントロールの配置 - 既定では、親の配置を継承します。親とは異なる配置を設定することもできます。既定の親の配置に戻すには、現在優先されているオプションの選択を解除します。
注:
配置は、親に対して選択したレイアウト ([縦方向 ]/ [横方向]) によって異なります。
- 枠線 - コントロールの枠線です。枠線の太さと半径を設定できます。
- マージン - コントロールのマージンです。既定では 4px のマージンが設定されています。[上/下] および [左/右] のプロパティがそれぞれ組み合わされています。これらのプロパティの組み合わせは、[マージン] セクションの右側にある [リンク] ボタンをクリックして解除できます。
- サイズ - コントロールの幅と高さです。既定では、サイズは [
auto] に設定されています。最小値または最大値を設定するには、3 点リーダー メニューのアイコン (...) をクリックします。
カスタム HTML 用のコード エディター
[カスタム HTML] コントロールのコード エディターには 3 つのパネルがあり、HTML、CSS、JavaScript のプログラミング言語でコードを入力できます。各エディターでは、IntelliSense (コードの自動補完機能) と構文の強調表示機能がサポートされています。
このパネルから入力したコードはプロジェクトにコンパイルされ、プレビュー用に App Studio でレンダリングされます。コントロールの機能を確認するには、アプリをプレビューします。

- 各エディターのコンテンツの最大サイズは 5 MB です。コンテンツがこのサイズを超えると、変更を保存できなくなります。
- IntelliSense は、HTML エディター内に記述した CSS と JavaScript コードでは機能しません。
外部リソースを追加する
定義済みのスタイルやスクリプトが既にある場合は、それらをこのコントロール内で参照できます。対応する CSS パネルや JavaScript パネルでコードを記述する必要はありません。
既存の .css または .js ファイルを参照するには、以下の手順に従います。
- [カスタム HTML] コントロールのコード エディターで、[外部リソース] タブに切り替えます。
- [CSS] セクションで、外部 CSS ファイルを追加します。相互運用性を確保し、アプリが実行される場所で確実にファイルを利用できるようにするため、ファイルはネットワークでアクセス可能な URL でホストされている必要があります。
- [JavaScript] セクションで、外部スクリプト ファイルを追加します。 相互運用性を確保し、アプリが実行される場所で確実にファイルを利用できるようにするため、ファイルはネットワークでアクセス可能な URL でホストされている必要があります。
- 外部リソースをすべて追加し終わったら、[保存] をクリックします。
Tab キーのアクセシビリティのショートカット キー
既定では、Tab キーを押すと、現在のエディター内にタブ スペースが追加されます。Tab キーの動作をカスタマイズするには、次のショートカット キーを使用します。
| OS | ショートカット キー | 動作 |
|---|---|---|
| Windows | Ctrl + M | パネル間を移動し、エディターに表示されているボタンにフォーカスを変更するよう Tab キーに指示します。Ctrl + M キーをもう一度押すと、Tab キーの既定の動作に戻ります。 |
| macOS | Ctrl + Shift + M | パネル間を移動し、エディターに表示されているボタンにフォーカスを変更するよう Tab キーに指示します。Ctrl + Shift + M キーをもう一度押すと、Tab キーの既定の動作に戻ります。 |
HTML エディター
このパネルではコントロールの構造を入力できます。通常は HTML コード ブロックの <body></body> タグ内に含まれています。
たとえば、対話型の円グラフのコンテナー要素をアプリに追加するには、次の HTML スニペットを使用します。
<canvas id="myChart" class="chart-container" style="width:100%;max-width:600px"></canvas>
<canvas id="myChart" class="chart-container" style="width:100%;max-width:600px"></canvas>
場所:
id="myChart"は、HTML 要素内に対話型の円グラフを生成する、JavaScript の「myChart」要素を参照します。詳しくは、「JavaScript エディター」をご覧ください。class="chart-container"は、HTML 要素内に円グラフのスタイルを追加する CSS クラス「chart-container」を参照します。詳しくは、「CSS エディター」をご覧ください。
CSS エディター
このパネルでは、コントロールのスタイルと、そのコントロール内の要素を入力できます。
たとえば、円グラフに色と枠線を追加するには、次の CSS スニペットを使用します。
.chart-container {
background-color: #f3f7e9;
border: 1px solid #cccccc;
}
.chart-container {
background-color: #f3f7e9;
border: 1px solid #cccccc;
}
JavaScript エディター
このパネルでは、コンテンツのタイムリーな更新、マップ、2D/3D グラフィック アニメーションのような、コントロールの対話型の要素を作成できます。
たとえば、Apple 製品の全世界の売上を示す円グラフを作成し、選択したスライスの値を表示するようにデザインするには、以下の手順を実行します。
- 次の JavaScript 外部リソースを追加します。
https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.9.4/Chart.jshttps://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.9.4/Chart.js - 次の JavaScript スニペットを使用します。
const ctx = document.getElementById('myChart').getContext('2d'); const myChart = new Chart(ctx, { type: 'pie', data: { labels: ['iPhone', 'iPad', 'MacBook', 'Apple Watch', 'AirPods'], datasets: [{ label: 'Sales', data: [120000, 80000, 50000, 40000, 30000], backgroundColor: [ '#5CB85C', // Green '#F0AD4E', // Orange '#D9534F', // Red '#5BC0DE', // Light blue '#999', // Gray ], borderColor: '#fff', borderWidth: 2, }], }, options: { plugins: { legend: { position: 'top', }, title: { display: true, text: 'Apple Products Sales', }, }, }, });const ctx = document.getElementById('myChart').getContext('2d'); const myChart = new Chart(ctx, { type: 'pie', data: { labels: ['iPhone', 'iPad', 'MacBook', 'Apple Watch', 'AirPods'], datasets: [{ label: 'Sales', data: [120000, 80000, 50000, 40000, 30000], backgroundColor: [ '#5CB85C', // Green '#F0AD4E', // Orange '#D9534F', // Red '#5BC0DE', // Light blue '#999', // Gray ], borderColor: '#fff', borderWidth: 2, }], }, options: { plugins: { legend: { position: 'top', }, title: { display: true, text: 'Apple Products Sales', }, }, }, });
カスタム HTMLで変数を使用する
[カスタム HTML] コントロールと、他のコントロールや連携との間の通信を設定するには、変数を作成し、組み込み関数 setVariable()、getVariable()、onVariableChange() を使用することをお勧めします。
getVariable()
既存の変数の値を取得するには、JavaScript エディターでこの関数を使用します。
たとえば、変数の値を internalValue に渡すには、次の JavaScript スニペットを使用します。
async function init() {
let internalValue = await App.getVariable('<app_variable_name>');
}
init();
async function init() {
let internalValue = await App.getVariable('<app_variable_name>');
}
init();
getVariable()関数は非同期であるため、awaitを使用する必要があります。- 関数内で
getVariable()を呼び出す場合は、その関数はasyncとしてください。この例ではinit()関数を作成してすぐに呼び出しました。 getVariable()を最上位レベルで呼び出す場合は、async関数内に埋め込みます。
無効な変数名などのエラーを処理するには、トライ キャッチ ステートメントを使用します。以下に例を示します。
async function init() {
try {
const value = await App.getVariable("test");
} catch (e) {
console.log("Error in evaluating app variable:", e);
}
}
init();
async function init() {
try {
const value = await App.getVariable("test");
} catch (e) {
console.log("Error in evaluating app variable:", e);
}
}
init();
setVariable()
既存の変数に値を設定するには、JavaScript エディターでこの関数を使用します。最初の引数は変数名、2 番目の引数は設定する値です。
async function setValue() {
await App.setVariable('<app_variable_name>', <app_variable_value>);
}
setValue();
async function setValue() {
await App.setVariable('<app_variable_name>', <app_variable_value>);
}
setValue();
設定操作が完了するまで待ってから他のコードを実行するには、await を使用します。
無効な変数名や、変数と設定値の型の不一致などのエラーを処理するには、トライ キャッチ ステートメントを使用します。以下に例を示します。
try {
App.setVariable('<app_variable_name>', <app_variable_value>);
} catch (e) {
console.log("Error in setting app variable:", e);
}
try {
App.setVariable('<app_variable_name>', <app_variable_value>);
} catch (e) {
console.log("Error in setting app variable:", e);
}
onVariableChange()
既存の変数の値の変更をリッスンし、変数の最新の値にアクセスするには、JavaScript エディターでこの関数を使用します。
App.onVariableChange('<app_variable_name>', value => {
console.log("Latest value: ", value);
});
App.onVariableChange('<app_variable_name>', value => {
console.log("Latest value: ", value);
});
次の例では、onVariableChange() によって返される関数を deregister 変数に代入します。次に、変数の変更のリッスンを停止する場合は、deregister() 関数を呼び出すことができます。
const deregister = App.onVariableChange('<app_variable_name>', value => {
console.log("Latest value: ", value);
});
// To stop listening for value changes, the deregister function can be invoked like below
deregister();
const deregister = App.onVariableChange('<app_variable_name>', value => {
console.log("Latest value: ", value);
});
// To stop listening for value changes, the deregister function can be invoked like below
deregister();
- リスナーは、[カスタム HTML] コントロールが完全にレンダリングされた後に開始されます。[カスタム HTML] コントロールが初期化される前に変数の値が変更された場合、更新後の値はキャプチャされません。 最新の変数値を取得するには、
onVariableChange()を呼び出す前にgetVariable()を呼び出します。 - HTML コントロールとその中の関数は、実行時にコントロールが表示された後に初期化されます。
変数の型
| アプリの変数の型 | 変数の関数からの応答のサンプル |
|---|---|
| Text (String) | "Hello world" |
| UInt64 (Int) | 100 |
| Decimal number | 50.25 |
| True/False (Boolean) | True |
| DateOnly | 2024-01-02 (形式: YYYY-MM-DD) |
| DateTimeOffset | 2024-01-06T09:54:41.9170000Z (同等の JS 形式: Date オブジェクトの ISO 文字列) |
| AppsFile - [ファイル ピッカー] コントロールの値 | JS File オブジェクト ![]() |
AppsFile - URL から作成される値 以下に例を示します。 new AppsFile("https://image.jpg") | File オブジェクト: {FileSize: 0, Name: "", URL: "https://image.jpg", __infoType: "$metadata"} |
| GUID | "5637F7DB-391D-4C8B-805D-0A918531CA3E" |
| List(Of string) | ["Banana", "Kiwi", "Apple", "Lemon"] |
| ListSource(Of <Entity>) | { data: [{Name: "John", Age: "28", ...},{Name: "Kane", Age: "48", ...}], totalRecords: 2 } |
| <Entity> (Single entity row) | { Name: "John", Age: "28", ... } |
| ListSource(Of <Choiceset>) | { data: [{DisplayName: "Male", Id: "00F3372D-3920-EC11-AE72-0003FFBA1E91", Name: "Male", ...}, {DisplayName: "Female", Id: "01F3372D-3920-EC11-AE72-0003FFBA1E91", Name: "Female", ...}], totalRecords: 2 } |
| Datatable | [{From: 'Ahmedabad', To: 'Azua', ...},{From: 'banglore', To: 'Dominican Republic',...},...] |
カスタム HTML のベスト プラクティス
- [カスタム HTML] コントロールにはクライアント側からアクセスできるため、機密データを含めないでください。
<html>タグと<head>タグは HTML エディター内で使用しないでください。コードは自動的に<body>タグ内に追加されるためです。- [外部リソース] タブには Bootstrap、jQuery、その他の JavaScript SDK などの外部リソースの CDN URL を追加します。
- 変数の変更のリッスンを停止する場合は、
deregister()関数を使用します。 - アプリケーションの速度の低下を防ぎ、コントロールの応答性を維持するために、大きなデータ ループを回避します。
- DOM 要素の使用は可能な限り最小限に抑えます。DOM 要素は必要な場合にのみ作成し、古くなったら削除します。
- 大規模なデータセットには、標準的なスクロールではなく無限スクロールや仮想スクロールを使用します。
- クリーンで最適化された冗長性のないコードを作成・維持します。
機能制限
- JavaScript エディターで無限ループまたは長期実行ループを追加すると、メイン スレッドでブロックが発生し、ブラウザーのタブが応答しなくなります。これを防ぐには、ループ内の条件が無限に実行されないようにします。ただし、無限ループが残っていてタブが応答しなくなった場合は、ブラウザー タブを強制的に閉じてから再度開いてください。
- コントロールを Apps に接続するには、変数の関数
getVariable()、setVariable()、onVariableChange()を使用する必要があります。 - HTML コントロールのサイズは、ポップアップまたはドロップダウン メニューの表示に合わせて動的に調整されません。これらのメニューに合わせて HTML コントロールのサイズを手動で設定する必要があります。
- デザイン時に HTML コントロールを操作することはできません。
setVariable()、getVariable()、およびonVariableChange()関数は、実行時にのみ動作します。- 変数名の変更や変数の削除は、コード エディターに自動的に反映されません。現在の変数でコードを手動で更新する必要があります。
- [カスタム HTML] コントロールから画像データを転送してストレージ バケットへ、またはデータ URL を使用するエンティティへ送る場合、ファイル サイズが 1 MB を超えてはなりません。このサイズを超えるファイルはパフォーマンスの問題を引き起こす可能性があります。
- このコントロールがプロセス、キュー、ストレージ バケットなどの他の UiPath コンポーネントと通信するには、変数を使用する必要があります。
- LESS または SCSS を使用して前処理された CSS コードは、HTML コントロールとの互換性がありません。
- 以下の API は、セキュリティ上の理由により、使用すると警告なしに失敗します。
download属性を使用してダウンロードするWindow.alert()、Window.confirm()、Window.print()、Window.prompt()を使用してモーダルを開ける- ポインターと向きをロックする
- トップレベルのブラウザー コンテキストに移動する
requestFullscreen()を使用して全画面表示に入るMediaDevices.getDisplayMedia()を使用して画面をキャプチャするMediaDevices.getUserMedia()を使用してカメラまたはマイクにアクセスする- 支払いをリクエストする
navigator.geolocation()を使用して場所にアクセスするnavigator.share()を使用してデータを共有する
[カスタム HTML] コントロールのコードをデバッグする
[カスタム HTML] コントロールのコンソール ログを追加および絞り込む
- JavaScript エディターで
console.log()を追加します。 - F12 を押してブラウザー コンソールを開き、[コンソール] タブを選択します。
- コンソールの設定で、[Selected context only] チェックボックスをオンにします。
- コンソール ページの上部にある JavaScript コンテキスト ドロップダウンから、目的の HTML コントロールの
html-control-base.htmlオプションを選択します。
選択したコントロールのログがコンソールに表示されます。
詳しくは、以下のビデオをご覧ください。
ブレークポイントを追加する
- JavaScript エディターで
console.log()を追加します。 - F12 を押してブラウザー コンソールを開き、[コンソール] タブを選択します。
- ログの右側にある VM メッセージをクリックします。
デバッガーが開きます。目的の行番号をクリックしてブレークポイントを選択します。
詳しくは、以下のビデオをご覧ください。
VB のプロパティ
| VB のプロパティ | データ型 | 説明 |
|---|---|---|
AccessibleLabel | 文字列 | コントロールの説明です。スクリーン リーダーなどのアクセシビリティ テクノロジで使用されます。 |
Hidden | Boolean | [カスタム HTML] の表示/非表示を指定します。true の場合、実行時にコントロールが非表示になります。 |
Disabled | Boolean | [カスタム HTML] コントロールを無効化するかどうかを指定します。true の場合、実行時にこのコントロールとの対話が無効化されます。HTML、CSS、JavaScript のコンテンツは読み込まれますが、ユーザーの操作には応答しません。 |
- デモ
- カスタム HTML: グラフを作成する
- カスタム HTML: 変数の関数を使用して対話型の円グラフを作成する
- カスタム HTML: 日付/時刻選択を作成する
- カスタム HTML: パスワード フィールドを作成する
- カスタム HTML: 署名入力フィールドを作成する
- 全般
- イベント
- スタイル
- カスタム HTML 用のコード エディター
- 外部リソースを追加する
- Tab キーのアクセシビリティのショートカット キー
- HTML エディター
- CSS エディター
- JavaScript エディター
- カスタム HTML で変数を使用する
- カスタム HTML のベスト プラクティス
- 機能制限
- [カスタム HTML] コントロールのコードをデバッグする
- [カスタム HTML] コントロールのコンソール ログを追加および絞り込む
- ブレークポイントを追加する
- VB のプロパティ
