C#でExternal Objectを作成した時の備忘録。
一応流れ的なことと、引数の渡し方を中心に書きます。
あくまでも個人的にやった結果なので、他のやり方もあるだろうし
もっといい方法もいっぱいあると思います。
参考リンク
参考
カテゴリ:外部オブジェクトwiki.genexus.jp
環境
GeneXus16
Visual Studio Community 2019
事前準備
その2の続きです。
SDT(List)
SDTをListでC#プロジェクト側で処理したい場合です。
まずはSDTをListで保持するクラスを作成。
SDTControl.cs
using System.Collections.Generic;
namespace AddClassLibrary
{
public class SDTControl
{
public List SdtCollection { get; set; }
public SDTControl()
{
SdtCollection = new List();
}
public void SdtAdd(GeneXus.Utils.GxUserType sdt)
{
SdtCollection.Add(sdt);
}
}
}
SDTControl.csを引数として受け取るメソッドをGxCsTest作成。
GxCsTest.cs
using System;
namespace AddClassLibrary
{
public class GxCsTest
{
public static string GetString(String str)
{
var test = "C# Add Library";
return str + ":" + test;
}
public static string SdtString(GeneXus.Utils.GxUserType sdt)
{
var test = sdt.ToJSonString();
return test;
}
public static int SdtCount(SDTControl sdtcol)
{
try
{
return sdtcol.SdtCollection.Count;
}
catch (Exception ex)
{
return 0;
}
}
public static String SdtControlString(SDTControl sdtcol)
{
var result = "";
foreach (GeneXus.Utils.GxUserType sdt in sdtcol.SdtCollection)
{
result += sdt.ToJSonString();
}
return result;
}
}
}
GeneXusで「External Object」を作成します。
GeneXusで「External Object」を編集します。
GeneXusのイベントを編集します。
Event 'TEST'
// C#で文字結合
&Vartest = GxCsTest.GetString("TESTだよ!")
MSG(&Vartest)
// C#でSDTをJsonに変換
&SDT1 = new()
&SDT1.Id = 99
&SDT1.Name = !"oqiita"
&SDT1.Date= &Today
&Vartest = GxCsTest.SdtString(&SDT1)
MSG(&Vartest)
// C#でSDTを保持 変数の初期化
&SDTControl = new()
// C#でSDTを保持 1個目のSDT
&SDT1 = new()
&SDT1.Id = 99
&SDT1.Name = !"oqiita"
&SDT1.Date= &Today
&SDTControl.SdtAdd(&SDT1)
// C#でSDTを保持 2個目のSDT
&SDT1 = new()
&SDT1.Id = 88
&SDT1.Name = !"oqiita88"
&SDT1.Date= &Today + 1
&SDTControl.SdtAdd(&SDT1)
// セットされている個数を取得
&Num = GxCsTest.SdtCount(&SDTControl)
MSG(&Num.ToString().Trim())
// JSON文字列を結合して取得
&Vartest = GxCsTest.SdtControlString(&SDTControl)
MSG(&Vartest)
Endevent
実行結果
SDTControlに保持したSDTの数と、JSONで結合した文字列が画面に表示されれば成功です。
別のSDT
External ObjectでわざとSDTの型を設定しないでおくと別のSDTをSDTControlに設定できるところです。
Event 'TEST'
// C#でSDTを保持 変数の初期化
&SDTControl = new()
// C#でSDTを保持1
&SDT1 = new()
&SDT1.Id = 99
&SDT1.Name = !"oqiita"
&SDT1.Date= &Today
&SDTControl.SdtAdd(&SDT1)
// C#でSDTを保持2
&SDT1 = new()
&SDT1.Id = 88
&SDT1.Name = !"oqiita88"
&SDT1.Date= &Today + 1
&SDTControl.SdtAdd(&SDT1)
// 別のSDTを作成
&SDT2.aaa = 1
&SDT2.bbb = 2
&SDT2.ccc = 3
&SDTControl.SdtAdd(&SDT2)
// JSON文字列を結合して取得
&Vartest = GxCsTest.SdtControlString(&SDTControl)
MSG(&Vartest)
Endevent
↑こんな感じで。
なのでまぁいろいろなことができる・・・・かも?
まとめ
何に使えるとかそんなの知りません!
以上です。