Sencha ExtJsでポーリング処理

ポーリング処理を実装するには、Ext.util.TaskRunnerを使います。
Classic Toolkit、Modern Toolkit共通で利用できます。

以下のサンプルは、ブラウザのコンソールに1秒間隔でログを記述します。
デモ&ソース

Sencha ExtJs Modernで電卓付き数値入力コントロールを作ってみた。

Enterprise向けSPAを開発するのに向いているSencha ExtJs
今回は、Modern Tookkitで電卓付き数値入力コントロールを作ってみました。

ソースとデモはこちらから
https://fiddle.sencha.com/#view/editor&fiddle/1n34

Microsoft Teamsにエラーログを出力するLog4Net Custom Appenderを作ってみた。


Custom AppenderクラスはAppenderSkeletonを継承し、Append()メソッドをオーバライドして作成。
IncomingWebhooksのURLをlog4net.configから取得できるようにプロパティを作成しておく。

●Custom Appenderクラスは以下のとおり。
 MSTeamsUtil()の実装についてはこちらを参考にして下さい。
public class MSTeamsAppender : AppenderSkeleton {

    //Microsoft TeamsのコネクタURL
    public string IncomingWebhookURL { getset; }  

    // Microsoft Teamsにログ追記
    protected override void Append(LoggingEvent loggingEvent) {
        var mstu = new MSTeamsUtil();
        mstu.PostPlainMessage(IncomingWebhookURL, RenderLoggingEvent(loggingEvent));
    }
}
●log4net.configの設定方法は以下のとおり
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <log4net>
    <appender name="MSTeamsAppender" type="FxCommonLib.Log4NetAppender.MSTeamsAppender, FxCommonLib">
      <incomingWebhookURL value="https://outlook.office.com/・・・" />
      <layout type="log4net.Layout.PatternLayout">
        <ConversionPattern value="%username %d [%t] %-5p %c - %m%n" />
      </layout>
      <filter type="log4net.Filter.LevelRangeFilter">
        <levelMin value="WARN" />
        <levelMax value="FATAL" />
      </filter>
    </appender>
    <root>
      <level value="INFO" />
      <appender-ref ref="MSTeamsAppender" />
    </root>
  </log4net>
</configuration>
こんな感じでログが投稿されます。

Microsoft TeamsにC#でメッセージ投稿してみた


最近、無償提供されたMicrosoft Teamsにプログラムからメッセージ投稿してみたいと思い、実装してみた。
システム監視、センサなどから情報投稿など、いろいろ利用できそう。

まずは、Microsoft TeamsのIncoming Webhook APIのURLを取得。
取得方法の詳細はこちら

○Microsoft Teamsに平文メッセージを投稿するためのユーティリティメソッド
public class MSTeamsUtil {
    // Microsoft Temasに平文メッセージを投稿
    public void PostPlainMessage(string webhookURL, string message) {
        using (var client = new WebClient()) {
            var param = new Dictionary();
            // Textパラメータは必須
            param["Text"] = message;
            var json = JsonConvert.SerializeObject(param);

            client.Headers.Add(HttpRequestHeader.ContentType, "application/json;charset=UTF-8");
            client.Encoding = Encoding.UTF8;
            client.UploadString(webhookURL, json);
        }
    }
}
○利用側のソース
public class MSTeamsUtilTest {
    //取得したImcoming WebhooksのURLをセット
    private string _webhookURL = "https://outlook.office.com/webhook/・・・";

    public void PostPlainMessageTest() {
        var mst = new MSTeamsUtil();
        mst.PostPlainMessage(_webhookURL, "hoge hoge");
    }
}
最初、HttpClientで実装しようとしたが、PostAsAsync()実行時にエラー(ExceptionもCatchできない状態)となった。
エラーの原因は、よく解らないので、追々調査してみることに。

代わりにWebClientに変更して実装してみるとメッセージ投稿に成功した。

なお、HttpClientを利用する時はリクエストの度にインスタンス生成・破棄してはならにとのこと。
TCPコネクションが都度、張られ、パフォーマンスを低下させるとのこと。

WebClientではリクエストの度にインスタンス生成・破棄してもTCPコネクションが使い回されるため問題ない。

【参考】
C# HTTPクライアントまとめ
不適切なインスタンス化のアンチパターン

厳選 Visual Studioの便利なショートカット

  エラー箇所にジャンプ 「Ctrl + Shift + F12」 ブレークポイント 設定/解除 「F9」 有効化/無効化 「Ctrl + F9」 ViEmu特有 「:ls」:バッファナンバーのリストを表示。 「:b2」:バッファ2のファイルを開く。 「:n」:次のバッファのファ...