[ODC]External Logicの属性いろいろ

[ODCでC#を取り込んでみる（External Logic）](https://qiita.com/jyunji_watanabe/items/2698fb5a80b857875a48#%E6%B3%A8%E6%84%8F%E3%81%99%E3%81%B9%E3%81%8D%E4%BA%8B%E9%A0%85)の関連。

Forgeにコンポーネントをアップロードしようと思っていくつか確認してみたことを記録（主に属性）。

# 環境情報
ODC Studio(Version 1.3.9)
Visual Studio Code(Version 1.85.1)

# 属性のパラメータには日本語が使える
以下の属性のパラメータに日本語を使ってみたところ、全て問題なく動いた。

- OSInterfaceのDescription
- OSActionのDescriptionとReturnDescription
- OSParameterのDescription
- OSStructureのDescription
- OSStructureFieldのDescription

``` cs
[OSInterface(Description = "和暦を扱うActionを提供する/This External Logic provides Actions to handle Japanese Calendar (Japanese Era) ", 
```
と設定した場合、ODC Studio上で対応する要素にも、想定通りに日本語が表示される。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/332987/641c0f96-3185-e5a5-2355-b6b8bd1e82f3.png)


# 戻り値のDescription
Actionの戻り値にDescriptionを指定するには、以下の2行目のように、ReturnDescriptionに設定する。

``` cs
[OSAction(Description = "日を渡して、和暦形式に変換する/Converts input date to text in Japanese calendar format.",
          ReturnName = "FormattedText", ReturnDescription = "元号を利用して表した日付（日本語）")]
```
結果は、以下の通り。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/332987/1fca4ffe-5ee1-1b64-6a79-865aca4ccdba.png)

# OSParameter（ActionのInput Parameterにつける属性）の指定方法
OSParameterAttributeは、対象となる、メソッドのパラメータの直前に指定する。
以下のコード例の2,4,6行目を参照。

``` cs
public string FormatDateAsJapaneseCalendar(
        [OSParameter(Description = "和暦に変換する日/Date Time value to be converted into Japanese calendar format.")]
        DateTime OriginalDate,
        [OSParameter(Description = "Trueのとき、各元号の1年目を「元年」（「１年」ではなく）として扱う/If true, the first year in the era will be converted into '元年' instead of '1年'.")]
        bool TreatFirstYearSpecially = false, 
        [OSParameter(Description = "Trueのとき、文字列化した年月の数字部分を全角で表現する/If true, numeric parts of stringfied Date will be expressed in full-width characters.")]
        bool MakeNumbersFullWidth = false);
```

2行目のOriginalDateに付与したDescriptionは想定通り表示された。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/332987/453c46c6-421d-196c-2d4f-95bb262261fa.png)

# External Logicのアイコン指定
[OSInterfaceAttributeのIconResourceName property](https://success.outsystems.com/documentation/outsystems_developer_cloud/building_apps/extend_your_apps_with_external_logic_using_custom_code/external_libraries_sdk_reference/#iconresourcename-property-1)が使える。

上記のリンクの説明によると
> Defines the name of the embedded resource containing the icon for the corresponding External Library.

とあり、アイコンとして利用する画像をExternal Logicに埋め込む必要がある。
まず、以下のように画像ファイルをWorkspace下に画像ファイル（Resources/JapaneseCalendar.png）を用意する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/332987/8f4fdf4a-1428-4621-9405-0cef75cf31ef.png)

[C#のアプリケーションにリソースを埋め込み、利用する](https://blog.yucchiy.com/2020/11/csharp-embedded-resources/)に記載がある通り、.csprojファイルに以下の設定をすることで、用意した画像を埋め込める。ItemGroup/EmbeddedResourceタグのIncludeに用意した画像ファイルのパスを設定。

```
  <ItemGroup>
    <None Update="Library\license.txt">
      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
    </None>
    <EmbeddedResource Include="Resources/JapaneseCalendar.png" />
  </ItemGroup>
```

OSInterface属性のIconResourceNameパラメータに画像ファイルを指定。（Workspace名.フォルダ名.ファイル名)
``` cs
[OSInterface(Description = "和暦を扱うActionを提供する/This External Logic provides Actions to handle Japanese Calendar (Japanese Era) ", 
             IconResourceName = "JapaneseCalendarODC.Resources.JapaneseCalendar.png")]
```

以下は、ODC Portal上でExternal Logicを開いたところ。
アイコン画像が設定されていることが確認できる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/332987/7efbd966-95a2-aec0-bf90-980d4041a6a2.png)