OutSystemsのExtensionでRange Action作ってみた
きっかけ
Outsystemsで、いろいろなループの処理時間を計測してみたでRange ActionをExtensionで作っているのを見て、もう少し改良できそうと思ったので取り組んでみました。
コード
using System;
using System.Collections;
using System.Data;
using OutSystems.HubEdition.RuntimePlatform;
using OutSystems.RuntimePublic.Db;
using OutSystems.HubEdition.RuntimePlatform.Db;
namespace OutSystems.NssRangeExtension {
public class CssRangeExtension: IssRangeExtension {
/// <summary>
///
/// </summary>
/// <param name="ssDestinationList"></param>
/// <param name="ssFrom"></param>
/// <param name="ssTo"></param>
public void MssRange(object ssDestinationList, int ssFrom, int ssTo) {
IOSList list = (IOSList)ssDestinationList;
for(int i = 0, j = ssFrom; j < ssTo; i++, j++)
{
list.Insert(i, j);
}
} // MssRange
} // CssRangeExtension
} // OutSystems.NssRangeExtension
使い方
using System;
using System.Collections;
using System.Data;
using OutSystems.HubEdition.RuntimePlatform;
using OutSystems.RuntimePublic.Db;
using OutSystems.HubEdition.RuntimePlatform.Db;
namespace OutSystems.NssRangeExtension {
public class CssRangeExtension: IssRangeExtension {
/// <summary>
///
/// </summary>
/// <param name="ssDestinationList"></param>
/// <param name="ssFrom"></param>
/// <param name="ssTo"></param>
public void MssRange(object ssDestinationList, int ssFrom, int ssTo) {
IOSList list = (IOSList)ssDestinationList;
for(int i = 0, j = ssFrom; j < ssTo; i++, j++)
{
list.Insert(i, j);
}
} // MssRange
} // CssRangeExtension
} // OutSystems.NssRangeExtension
このListの型はInteger Listです(既に別のRange Actionを作ってしまっていたのでAction名がRange2になってしまっています)。
コード説明
なぜかExtensionのInput/Output ParameterにはRecord Listは設定できるのですが、プリミティブ型のListが設定できません(Integer Listなど)。そのためObject型を使うことにしました。Output ParameterにObject型を設定しても、その後それをOutSystemsの中でList型に変換することはできません。そのため、Input Parameterとして受け取ったObject型の変数(元はInteger List型)をExtensionの中で加工することにしました。Objectは参照渡しのため、この方法でも元のInteger List型の変数の値を変更できます。その他にもBinary Data型、List型が参照渡しのようです。これは忘れがちなので要注意ですね!古いですがリンクを載せておきます。
おまけ
当初、Range Actionの実装をするときに、IEnumerableを返せばForEachのRecord Listの中にFunctionとして書けるのでは?と思ったのですが、残念ながらOutSystemsはIEnumerableには対応していませんでした。ということで今回の実装になりました。よりよい実装があれば是非教えて欲しいです。
https://www.outsystems.com/forums/discussion/33259/using-httprequestmessage-and-ienumerable/
Author And Source
この問題について(OutSystemsのExtensionでRange Action作ってみた), 我々は、より多くの情報をここで見つけました https://qiita.com/shoji9x9/items/1e4653ba2d2bae02ef21著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .