ワークフローについて

ワークフローで、ユーザーに意識させず(ユーザーの入力なしで)に標題に日付を付与したいと思っています。

「経路を設定する」ボタンを押したタイミングで標題に値をセットしてみたのですが、うまくデータが渡りません。何かいい方法はないでしょうか?

wada さん

こんにちは!

 

申請の作成画面を開いた際に、標題に日付をセットする方法はいかがでしょうか??

 

簡単にですが処理を書いてみました。

参考になれば嬉しいです。

   ※ 申請フォームの「標題」の項目コードは “title” としてます。

(function() {
  'use strict';

  garoon.events.on('workflow.request.create.show', function(event) {
   
    var request = event.request;
      
    var nowDate = new Date();
    var year = nowDate.getFullYear();
    var month = ("0" + nowDate.getMonth()).slice(-2);
    var date = ("0" + nowDate.getDate()).slice(-2);

    request["items"]["title"]["value"] = year + "-" + month + "-" + date;
       
    return event;

  });
})();

文系男さん、コメントありがとうございます!

>申請の作成画面を開いた際に、標題に日付をセットする方法はいかがでしょうか??

やっぱり、その方法しかないですかね…

標題には利用者の名前をいれてもらっているので、最初に何か文字がはいっていると

日付をわざわざ消して名前を入れちゃう人がいるかも、、というのがあったので。

 

 

wada さん

 

なるほどですね。。。

もし、標題のルールが決まっている(ユーザー名 + 年日付) 場合であれば、

以下のように名前と年日付をあらかじめ入れておく、といったことで対応は可能かと思われますが、

いかがでしょうか。

(function() {
  'use strict';

  garoon.events.on('workflow.request.create.show', function(event) {
   
    var request = event.request;
    var userName = garoon.base.user.getLoginUser().name;
    var nowDate = new Date();
    var year = nowDate.getFullYear();
    var month = ("0" + nowDate.getMonth()).slice(-2);
    var date = ("0" + nowDate.getDate()).slice(-2);

    request["items"]["title"]["value"] = userName.substring(0,userName.indexOf(";")) + year + "-" + month + "-" + date;
       
    return event;

  });
})();

 

また、jQuery を利用して、「標題」への入力を制限することもできます。

以下、例です。

$(".js_customization_input_item_title").prop('readOnly', true);

wadaさん

 

お伝えし忘れていたのですが、「経路を設定する」ボタンを押したときの

イベントは用意がないようなので、自前で何らかの処理を用意する必要があると思いますが、

ご希望の動作を実現可能であるかは、不明です。。。申し訳ありません><

文系男さん、度々のコメント感謝です!

>もし、標題のルールが決まっている(ユーザー名 + 年日付) 場合であれば、

>以下のように名前と年日付をあらかじめ入れておく、といったことで対応は可能かと思われますが、

 

代理入力の場合もある為、かならずしも利用者=入力ユーザーではないのです。。。

ですので、jQueryでボタンクリック時に標題へ「日付+利用者名」をセットしてみたのですが

うまく更新されませんでした…。

 

detail.showの際に標題を書き換えて、更新すると標題が書き変わるのでは…というのを試したのですが

初回create時の標題が保持されるようで、詳細画面で修正しても標題は書き変わってくれませんでした。。。

wada さん

 

代理申請の際、URL に mid(申請の委任者のID) があったので、それと User API を利用していけないか

模索してみたのですが、cybozu.com上の uid(ユーザーID) と Garoon 上の uid は

同じ値が割り振られないこともあるようなので、自分のやり方では

対応が難しそうでした。。。申し訳ございません。

 

ただ、Garoon の SOAP API であれば、取得した mid を利用してユーザー情報を引っ張って来れるのでは?と

思ったので、時間あるときに試してみて、進展があればこちらでまた

ご連絡差し上げたいと思います。

wada さん

こんにちは!

 

「経路を設定する」ボタンを押した際にデータを挿入する方法は

見つかっていないのですが、申請を作成した際、通常の申請、代理申請時で

利用者の名前 + 日付を設定することはできました。

(処理の都合上、画面遷移に多少、時間が掛かる場合があり、あまりオススメはできませんが。。。)

 

参考程度ですが、 通常申請時、代理申請時の URL から、処理を分け、

 通常申請の場合は、ログインユーザー情報から名前を取得し、

 代理申請の場合は、URL内の mid を利用して SOAP API にてユーザー情報を取得する方法で

申請作成時に「標題」に “申請者 + 申請日時” の内容をセットすることはできました。

 

JavaScript で SOAP API を実行する方法は、コチラを参考にやってみました。

 

文系男さん、こんにちは!

色々とアイディアを出してもらって、ありがとうございます。

 

>「経路を設定する」ボタンを押した際にデータを挿入する方法は

>見つかっていないのですが、申請を作成した際、通常の申請、代理申請時で

>利用者の名前 + 日付を設定することはできました。

jQueryで画面へ自動セットして、、、という処理でしょうか?

「経路を設定する」ボタンを押した際にデータを挿入ができなければ

最悪その方法でやろうかと思います。

実は、今回のワークフローは社用車の利用申請でして

ガルーンユーザー以外が申請をするというレアケース(その場合は上司・ガルーンユーザーが入力)

も発生するので、すべてを自動セットしていいかどうかという問題もあったりします。

 

 

 

 

wada さん

こんにちは!

 

wada さんの仰るように、私が考案した方法は、値を自動的にセットする方法になります。

申し訳ございません。

 

ただ、jQuery の処理じゃなくても、値のセットは可能でした。

 

動作させることだけを目的としており、見苦しいコードで申し訳ないのですが、

以下に、コード例を記載しておきます。参考になれば幸いです。

 

(function() {
  'use strict';
  moment.locale('ja');
 
  var host = window.location.origin;
 
  var SOAP_TEMPLATE =
    '<?xml version="1.0" encoding="UTF-8"?>' +
    '<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope">' +
      '<soap:Header>' +
        '<Action>${ACTION}</Action>' +
        '<Security>' +
          '<UsernameToken>' +
            '<Username>${USERNAME}</Username>' +
            '<Password>${PASSWORD}</Password>' +
          '</UsernameToken>' +
        '</Security>' +
        '<Timestamp>' +
          '<Created>${CREATED}</Created>' +
          '<Expires>${EXPIRES}</Expires>' +
        '</Timestamp>' +
        '<Locale>${LOCALE}</Locale>' +
      '</soap:Header>' +
      '<soap:Body>' +
        '<${ACTION}>' +
          '<parameters${ATTRIBUTE}>${PARAMETERS}</parameters>' +
        '</${ACTION}>' +
      '</soap:Body>' +
    '</soap:Envelope>';
 
  garoon.events.on('workflow.request.create.show', function(event) {
 
    var nowDate = moment().format('YYYY-MM-DD');
 
    if(location.search.indexOf("mid") != -1) {
  
      var userRequest = SOAP_TEMPLATE;
      var target = Number(location.search.substring(location.search.lastIndexOf("&") + 5));
  
      userRequest = userRequest.split('${ACTION}').join('BaseGetUsersById');
      userRequest = userRequest.replace('${USERNAME}', '');
      userRequest = userRequest.replace('${PASSWORD}', '');
      userRequest = userRequest.replace('${CREATED}', '');
      userRequest = userRequest.replace('${EXPIRES}', moment().add(+9, 'hours').format('YYYY-MM-DDTHH:mm:ssZ'));
      userRequest = userRequest.replace('${LOCALE}', 'ja');
      userRequest = userRequest.replace('${PARAMETERS}', '<user_id>' + target + '</user_id>');
      userRequest = userRequest.replace('${ATTRIBUTE}', ' xmlns=""');
 
      var url = host + '/g/cbpapi/base/api.csp';
 
      var xhr = new XMLHttpRequest();
      xhr.open('POST', url);
      xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');
      xhr.setRequestHeader('Content-Type', 'text/xml');
 
      xhr.onload = function() {
        if (xhr.status === 200) {
          var res = xhr.responseXML.documentElement;
          var user = res.getElementsByTagName('user');
          var userName;
   
          for(var i = 0; i < user[0].attributes.length; i++) {
            if(user[0].attributes[i].nodeName === "name") {
              userName = user[0].attributes[i].nodeValue;
              break;
            }
          }
   
          var request = garoon.workflow.request.get();
          request["items"]["title"]["value"] = userName + nowDate;
          garoon.workflow.request.set(request);
   
        } else {
          console.log("error" + xhr.responseText);
        }
      };
  
      xhr.send(userRequest);
  
    } else {
  
      var request = event.request;
      var userName = garoon.base.user.getLoginUser().name;
  
      if(userName.indexOf(";") != -1) {
        request["items"]["title"]["value"] = userName.substring(0,userName.indexOf(";")) + nowDate;
      } else {
        request["items"]["title"]["value"] = userName + nowDate;
      }
    }
 
  return event;

  });
})();

文系男さん、こんばんは!

 

コードを提示していただき有難うございます^^

参考にして組み立ててみようと思います!

他にもなにか解決方法をひらめいたら、また投稿しますね!!

wada さん

 

私も色々と模索してみて、良いアイデアがあれば、

こちらで共有いたします!

文系男さん、こんにちは!

最終的にjQueryの力業で解決しました。

スマートではないですが、とりあえず当初の要望が実現できました!

 

申請時には、経路設定ボタン必ず押す…をヒントに、

経路設定ボタンホバー時にだけ、標題に日付を書き足すようにしました。

ホバーを外すと標題は元に戻すようにしたので、利用者は普通に入力ができます。

 

garoon.events.on(‘workflow.request.create.show’, function(event) {
  jQuery.noConflict();

  var request = event.request;
  var user;

  jQuery(“#send_form_submit_set_path”).hover(function(){
    user = jQuery(“input[class*=‘user’]”).val();
    jQuery(“input[class*=‘user’]”).val(moment().format(‘YYMMDD’) + " " + user);
    request[“items”][“user”][“value”] = moment().format(‘YYMMDD’) + " " + user;
    return request;

},function(){
  jQuery(“input[class*=‘user’]”).val(user);
  request[“items”][“user”][“value”] = user;
  return request;
});

.
.
.