LoginSignup
1
0

More than 3 years have passed since last update.

OutSystemsのExtensionでRange Action作ってみた

Posted at

きっかけ

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

使い方

image.png

この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/

1
0
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0