【GeneXus】C#でExternal Object(その3)

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」を作成します。

SDTControl

GeneXusで「External Object」を編集します。

GxCsTest

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

↑こんな感じで。
なのでまぁいろいろなことができる・・・・かも?

まとめ

何に使えるとかそんなの知りません!

以上です。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください