2016年10月25日火曜日

ChatWorkとGmailの連携。非FileMakerネタです。


ChatWorkにメッセージが投稿されると [To:*****] ○○さん 宛にメールを送信します。
送信元のGmailに返信するとChatWorkにメールの内容が投稿されます。

コミュニケーションツールは、ChatWork をメインに使っていますが、営業の社用携帯がガラケーなので、いちいちメール送るのが面倒!!!!!
なのでガラケーとの連絡もChatWork ですませてしましまいます。
イチイチメールソフト起動してメールアドレス選んで....とうっとうしい作業をしなくて良くなります。

ChatWorkメッセージの最初が [To:*****] で始まっていれば、メールを送信します。
なので、メール送受信用のルームでも[To:*****] で始まっていないメッセージなら通常通り使用できます。

「var Members =」にメールを送信したい人の「ChatWork ID」と「メールアドレス」を記述する必要があります。


以下のコードをGoogle Apps Scriptに記述。

「プロジェクトのトリガー」で「fire」を1分ごとに設定。





var CW_TOKEN = '********************'; //チャットワークAPIトークン
var ROOM_ID = '**********'; //チャットワークルームID



//{チャットワークID:メールアドレス}
var Members = {
   "264000" : "aaa@aaa.ne.jp"
,  "264000" : "bbb@bbb.ne.jp"
,  "263000" : "ccc@ccc.ne.jp"
,  "263000" : "ddd@ddd.ne.jp"
,  "264000" : "eee@eee.ne.jp"
,  "264000" : "fff@fff.ne.jp"
,  "271000" : "ggg@ggg.ne.jp"
}

function fire(){
  fetchContactMail();
  SendMailFromChatWork();
}



function fetchContactMail() {

  /* Gmailから特定条件のスレッドを検索しメールを取り出す */
  var strTerms = '(is:unread -from:cwmail "[cwmail]")';
  var thds = GmailApp.search(strTerms, 0, 500); //条件にマッチしたスレッドを取得、最大500通と決まっている
  //var thds = GmailApp.getMessagesForThreads(myThreads); //スレッドからメールを取得する →二次元配列で格納

    var row = 1;
    for(var n in thds){
        var thd = thds[n];
        var msgs = thd.getMessages();
        for(m in msgs){
            var msg = msgs[m];
            var from = msg.getFrom();
            var to = msg.getTo();
            var date = msg.getDate();
            var subject = msg.getSubject();
            var body = msg.getBody();
          var PlainBody = msg.getPlainBody().slice(0,200);

          Logger.log(subject+from);
       
       
              msg.markRead(); //メッセージを既読にする

          if ( from.match(/cwmail/)) {
          }else{
    /* メッセージを生成しチャットワークにを送る */
    var msgBody = "[hr]" + "\n" +
               "date:" + date + "\n" +
               "from:" + from + "\n" +
               subject +"\n" +
               PlainBody ;

    sendMessage(msgBody);
          }
       
            row++;
       
        }
    }

}



/*ROOM_IDのメッセージを読み込みメールを送信*/
function SendMailFromChatWork() {
    var params = {
    headers : {"X-ChatWorkToken" : CW_TOKEN },
    method : "get"
  };

  var url = "https://api.chatwork.com/v1/rooms/" + ROOM_ID + "/messages?force=0"; //指定のグループチャットからメッセージを取得
  var strRespons = UrlFetchApp.fetch(url, params); //チャットワークAPIエンドポイントからレスポンスを取得
try{
  var json = JSON.parse(strRespons.getContentText()); //文字列をJSON形式として解析しJSONオブジェクトとして返す
  }catch(e){
  return;
    }
  Utilities.sleep(500);
  //Logger.log(json);
  var sent_number = 0;//メール送信数
  /*
  for each(var obj in json){
  Logger.log(obj.body);
  }
  */
  for(var i=0;i// 処理
    var body =json[i].body + "\n\n" +
      json[i].account.name;

  /*宛先メールアドレス*/
  var myRegexp = /^\[To:(.*?)\]+/i;
  var match = myRegexp.exec(body);
    Logger.log(match);
  var ToCwID = match[1];
  var EmailTo=Members[ToCwID];
     //Logger.log(EmailTo);
    if(EmailTo){
      /*2行目をSubjectに設定*/
      var textArray = body.split(/\r\n|\r|\n/);
      var Subject = textArray[1];
      Subject += "[cwmail]";
   
      var EmailCc=Members[json[i].account.account_id];
      Logger.log(EmailCc);
      GmailApp.sendEmail(EmailTo,
                     Subject,
                     body,
                     {
                       /*
                       attachments: [file.getAs(MimeType.PDF)],
                       bcc: 'abc@g.com',
                     
                       from: 'abc@g.com',
                       */
                       cc: EmailCc,
                       name: 'cwmail'
                     });
      sent_number+=1;
      Utilities.sleep(500);
    }
  }//for(var.....
  if(sent_number>0){
  var notification="[info]メール送信済:"+sent_number+"[/info]";
  sendMessage(notification);
  }
}

/* 本文を受け取りメッセージを送る */
function sendMessage(body){
       var params = {
               headers : {"X-ChatWorkToken" : CW_TOKEN},
               method : "post",
               payload : {
                    body : body
               }
        };

     var url = "https://api.chatwork.com/v1/rooms/" + ROOM_ID + "/messages";
     UrlFetchApp.fetch(url, params);
  Utilities.sleep(500);
}


※いろんなサイトを参考にさせていただきました。ちゃんと記録していなかったので、参照元の表記ができません.....。コードは、コピペな部分が多々あります。

2016年9月27日火曜日

Mac OSX FileMaker で PowerShell を使う。


PowerShellが、Mac OSX 対応と言うことで、FileMakerと連携できないか?いじってみました。

バイナリパッケージがあるので簡単にインストール出来ます。

GitHub - PowerShell/PowerShell: PowerShell for every system! : https://github.com/PowerShell/PowerShell


 OS X版のPowerShellは、パッケージ(*.pkg)の形で配布される。Finderからダブルクリックでインストールを開始できるが、「開発元が未確認のため...」と表示されたときにはコンテキストメニューを表示し「開く」を選択しよう。
引用:http://ascii.jp/elem/000/001/217/1217507/


以下をFileMakerの スクリプト:「AppleScriptを実行」で実行すると、
PowerShellの戻り値が、フィールド:Result に入ります。


スクリプト:「AppleScriptを実行」
set Result to do shell script "/usr/local/bin/Powershell -command '$PSVersionTable;'"
set cell "Result" of current record to Result

2016年8月28日日曜日

FileMakerで一般公開されている「dll」を使用する。QRコード、JANコードなどを作成

C#用とか、.Netで作成された「dll」は、PowerShellを通じて、FileMakerで使うことができます。




動作確認
OS:Windows 10
FileMaker Pro 13|14|15

プラグイン無しでも動作します。
PowerShellを利用します。
※Windows 7 以降、PowerShellは、標準インストールなので気にしなくて大丈夫です。(基本的には。)
プラグイン:ScriptMakerPS でも動作します。サンプルファイルは、プラグイン「有」「無」両方に対応。
「ScriptMakerPS」が無い場合は、FilrMakerのスクリプト「Event を送信」で実行します。

サンプルファイル:
https://sites.google.com/site/scriptmakerps/example/barcode-at-c-dll


無料ライブラリー 「DotNetBarcode」 を使用してみます。
以下でダウンロード可能。
http://www.vector.co.jp/soft/win95/writing/se408449.html

「DotNetBarcode.dll」は、DotNetBarcodeさんの無料ライブラリーです。
http://www.geocities.jp/japan_inf/DotNetBarcode/

ダウンロードファイル: DotNetBarcode_V2.4.0.zip

C:ドライブ直下に「dll」フォルダを作成し、
ダウンロードした「DotNetBarcode_V2.4.0.zip」展開、その中の「DotNetBarcode.dll」を
「C:\dll」にコピー。



※重要
「セキュリティ:ブロックの解除」の確認。
「DotNetBarcode.dll」を右クリック -> プロパティー
「ブロックの解除」をチェックしし、「適用」をクリック。



PowerShellの記述は、以下の様なカンジ。


 Add-Type -Path 'C:\dll\DotNetBarcode.dll' ;
 $bc1=New-Object DotNetBarcode;
 $bc1.Type=[DotNetBarcode+Types]::QRCode;
 $bc1.SaveFileType=[DotNetBarcode+SaveFileTypes]::Png;
 $bc1.Save('0123456789あいうえおabcdefg','C:\Users\PCUSER\Desktop/Barcode.png', 600, 600);

「Windows PowerShell ISE」を起動し、実行すれば、デスクトップに「Barcode.png」が作成されます。

FileMakerに組み込み。

QRコード、JAN13、JAN8、Code39の作成が可能です。

QRコード


JAN13

JAN8

code39