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
↑こんな感じで。
なのでまぁいろいろなことができる・・・・かも?
まとめ
何に使えるとかそんなの知りません!
以上です。