MoreBeerMorePower

Power Platform中心だけど、ノーコード/ローコード系を書いてます。

Power Apps の カスタム関数を作ってみよう

はじめに

最近 Power Apps に新しい機能、『コンポーネントのパラメーター』 が追加されました。 これを利用することでアプリ作成者が定義可能なカスタム関数を作成することができます。

Excel でよく使われる関数のいくつか (財務関数や統計関数など) は Power Apps で標準的に提供されていませんが、今回追加された機能を利用することで、これらの関数をアプリ作成者自身が定義し、複数のアプリで利用することができるようになります。

以下は Excel における NETWORKDAYS関数 と似たものを カスタム関数で作成した例です。 関数には2つの日付型のパラメーターがあり、結果は2つの日付間の平日の日数を返しています。

f:id:mofumofu_dance:20210222133942p:plain
Custom Function sample - calculate workdays between two date

これまではこのような数値をえるために、ラベルに長い数式を書いたり、あるいは変数に設定していたわけですが、カスタム関数の登場によってアプリに1つコンポーネントを追加するだけでどこからでも定義した関数を呼び出すことができるようになります。

準備

追加された機能は現時点ではまだ試験的機能なので、アプリの設定から有効にする必要があります。 ひとたび設定を有効にすれば、コンポーネントのカスタムプロパティの最下段に『パラメーター』という欄が追加されたことに気づくでしょう。

f:id:mofumofu_dance:20210222140457p:plain
Enabling experimental feature.

カスタムプロパティがそうであるように、パラメーターもまた 名前、説明、データ型、必須/オプション によって構成されます。

f:id:mofumofu_dance:20210222142045p:plain
Definition of Parameter

カスタム関数は出力タイプのカスタムプロパティと、パラメーターを利用することで作成されます。

以下では Power Apps でカスタム関数を作成する方法をいくつかの例を通じて紹介します。

Example 1: "Echo" 関数

最も簡単な例として、入力を返すだけの Echo 関数を作成します。

Echo関数を作成するためにはまず出力タイプのカスタムプロパティをコンポーネントに追加します。この時プロパティの名前が関数名になります。データ型はテキスト型にしてください。

関数の入力であるパラメーターも追加しておきます。"phrase" という名前で、テキスト型のパラメーターを追加してください。

f:id:mofumofu_dance:20210222145219p:plain
Configure Echo function with a text parameter.

パラメーターを含めたカスタムプロパティの設定が完了すると、コンポーネントのプロパティに今追加した "Echo" が表示されます。

このプロパティに既存の関数とパラメーターを組み合わせたものを設定することでカスタム関数が実現されます。

ここでは単純に

"Your input is "&phrase

をEchoの出力として設定します。

f:id:mofumofu_dance:20210222154006p:plain
Set your function in "Echo" property.

作成が終わったらコンポーネントとラベルをスクリーンに追加します。

f:id:mofumofu_dance:20210222151623p:plain
Add Component and Label into Screen

ラベルの Text プロパティに以下のように設定してみましょう。

Component1_1.Echo("Hello World")

ラベルに Your input is Hello World と表示されたら成功です。 Echo関数に入力する文字列を変えてみると、それに対応してラベルの文字列が変化するのを確認してください。

f:id:mofumofu_dance:20210222154627p:plain
Echo function returns input parameter + prefix.

このように、『あるパラメーターを定義して、それに値を渡すことで結果を返す出力タイプのプロパティ』 = カスタム関数 が作成できました。

Echo関数は結果が自明すぎるのでもう少し内容のある例を見てみましょう。

Example 2: 16進数から10進数に変換する関数

カラーコードなどで用いられる16進数を10進数に変換するようなカスタム関数も Power Apps の標準関数の組み合わせで定義することができます。

コンポーネントの作成画面に戻って、先ほどのコンポーネントに新しい出力型のプロパティ "HexToDecimal" を追加してみましょう。

この時、パラメーターとしては文字列で "Hex" という名前のものを追加してください。 カスタム関数は1つのコンポーネントに対して複数設定することができます。同じような分類の関数を1つのコンポーネントにまとめていくのが良いでしょう。

f:id:mofumofu_dance:20210222155613p:plain
Add new custom property "HexToDecimal"

式の詳細は割愛しますが、HexToDecimal プロパティ に 以下の式を設定してください。

With(
    {tblDecimals:
    AddColumns(
        Sequence(Len(Hex),0),
        "Decimals",
        If(
            Mid(Hex,Len(Hex)-ThisRecord.Value,1) in Sequence(10,0),
            Mid(Hex,Len(Hex)-ThisRecord.Value,1),
            LookUp(Table({key:"a",val:10},{key:"b",val:11},{key:"c",val:12},{key:"d",val:13},{key:"e",val:14},{key:"f",val:15}),key=Lower(Mid(Hex,Len(Hex)-Value,1))).val
            )
        )
    },
    Sum(tblDecimals,Decimals*16^Value)
)

f:id:mofumofu_dance:20210222161009p:plain
Expression for HexToDecimal property

再びスクリーン側を表示し、今度は先ほどのラベルの Text プロパティに

Component1_1.HexToDecimal("2F")

と入力してみてください。ここでは16進数 の 2F を10進数であらわした結果が表示されていれば成功です。

※ 2F = 16*2 + 15 = 47

f:id:mofumofu_dance:20210222161333p:plain
HexToDecimal function converts Hex string to number

このように、毎回毎回計算したり、ラベルに追加したくないような複雑な式も、カスタム関数として中身を隠蔽することで、アプリ作成者がより効率よく開発を行うことが可能になります。

おわり

Power Apps のカスタム関数は非常に強力な機能です。

これまで「あー、Power Appsにはこの関数ないのかー」と諦めていたようなケースも、Power Apps に精通した人がカスタム関数を作ってテナント内でそのコンポーネントを共有すれば、すべてのアプリ作成者がその恩恵を得られます。

ぜひこれまで作ってきたアプリで再利用できそうな表現を見つけて、カスタム関数化してみてください。

今回のサンプルは以下に配置しました。msappファイルをダウンロードしてアプリとして開いてみてください。

https://github.com/mofumofu-dance/PowerApps365/raw/master/Samples/Custom%20functions%20sample.msapp

f:id:mofumofu_dance:20210222162250p:plain