法人番号を使った取引先マスターの管理(追加更新編)

2015年9月14日
ワークフロー基盤が『顧客マスター』を持っていれば、色々と都合が良い。

もし「自由なテキストフォーム」で入力させていると、
  • 「NTT」だったり、「日本電信電話株式会社」だったり
  • 「NTT西日本」だったり、「西日本電信電話株式会社」だったり
  • 「NTTデータ」だったり、「エヌ・ティ・ティ・データ」だったり
  • 「NTTドコモ」は、「NTTドコモ」のままで良かったのに…

そして「株式会社」が、前株だったり後株だったり、、、(そもそも)、あったりなかったり。。。 ナンにせよ法人名の入力が発散して仕方ない。。。俗に『名寄せ』ど呼ばれる作業は「非常に不毛な作業」と言わざるをえない。


以下のワークフローは「取引口座開設業務」だ。

一見すると前回記事(与信管理フロー)とほぼ同じフローだが、、、新しく取引先を登録する際に『顧客マスター』(Business-Connections.xml)が自動的に更新される仕組みとなっている。

この『顧客マスター』は、他の業務フローから、「プルダウンメニュー選択」や「テキスト入力中にリストが絞られるコンボボックス」として呼び出せる。つまり「見積書承認フロー」「請求プロセス」「問合対応プロセス」において、入力される法人名は、必ず『顧客マスター』から選択され、常に「正式な社名」が入力されるようになるのだ。

[取引口座開設業務]


このワークフローの更に秀逸な点は「取引先分類」も併せて持たせているところだ。

データフォーマットを確認してもらえば分かるが、、、全ての法人名称が {取引先分類6文字}#{法人番号}#{法人URL} のフォーマットで管理されている。※ {法人番号}#{法人URL} の部分が識別子(主キー)となる。

◆取引先分類6文字
  • 〔1文字目〕 A: 日本関東 B: 日本関西 C: 日本地方 D:英語圏 E: 非英語圏
  • 〔2文字目〕 1: サービス契約歴なし 2: サービス契約中 3: サービス契約終了
  • 〔3文字目〕 1: パートナ可能性なし 2: パートナ候補 3: オーソライズド 4: シルバー 5: ゴールド
  • 〔4文字目〕 A: 10000人超 B: 10000人以下 C: 5000人以下 D: 3000人以下 E: 1000人以下 F: 500人以下
  • 〔5文字目〕 0: 売上が小さい ~ 9: 売上が大きい (過去6か月のデシル値)
  • 〔6文字目〕 0: 利用期間1年未満 1: 1年以上2年未満 2: 2年以上

たとえば「見積承認フロー」で見積書を作成する営業パーソンからしても、
  • 正式な法人名(商号)が簡単に入力できる、だけでなく
  • 顧客の属性も即時に確認できる
というメリットがある。

業務プロセスの設計者の視点でみても、「入力インターフェース」や「フロー条件分岐」などでもイロイロと工夫できるだろう。


▼[スクリプト工程]のサンプルコード(サーバサイド)
//// == ワークフローデータの参照 / Retrieving ==
// M319 Options-XML: 複数の業務プロセス定義から参照される選択肢XML
optionsList = itemDao.findAll("Business-Connections.xml", true); // return "List<itemview>" 

//{取引先分類6文字}#{法人番号}#{法人URL} および {法人商号}
var corpCategory = data.get("10") + ""; 
var corpNumber = data.get("11") + ""; 
var corpURL = data.get("1") + ""; 
var corpName = data.get("2") + ""; 

//// == 演算 / Calculating ==
var corpKey = corpNumber + "#" + corpURL + "";
var updateflag = 0;

optionsNum = optionsList.size();
var value_id_list = "";
var display_label_list = "";
for (i=0; i < optionsNum; i++){
  if(corpKey == optionsList.get(i).getValue().substr(6) ){ // 既存データ更新
    value_id_list += corpCategory + "#" + corpKey + "\n";
    display_label_list += corpName + "\n";
    updateflag = 1;
  }else{
    value_id_list += optionsList.get(i).getValue() + "\n";
    display_label_list += optionsList.get(i).getDisplay() + "\n";
  }
}
if(updateflag == 0){
  value_id_list += corpCategory + corpKey + "\n";
  display_label_list += corpName + "\n";
}

//// == ワークフローデータへの代入 / Updating ==
retVal.put("12", value_id_list);
retVal.put("13", display_label_list);

▼「既存リストの確認」のサンプルコード(ブラウザサイド)
<script type="text/javascript">
// <input type="button" value="view Category" id="myButton"> がクリックされれば
// <span id="corpinfo"></span> に表示する

jQuery('#myButton').on('click',function(){ 
  var textStr = jQuery('input[name="data\\[9\\].selects"]').val(); // 検索セレクト
  jQuery( '#corpinfo' ).html("" + textStr.substr(0, 6) + "");
}); 
</script>

▼「法人URL」のサンプルコード(ブラウザサイド)
<script type="text/javascript">
/// フォームからフォーカスが外れた際に、先頭の "http://" もしくは "https://" が除去されます
jQuery('input[name="data\\[1\\].input"]').on('change',function(){ 
//データ項目番号「1」のTextフォーム値に変化があれば、
//(change でフォーカス外れを検知)

  var thisValue = jQuery(this).val();

  var myRegex = /^https:\/\/|^http:\/\//; // "http://" もしくは "https://" で始まる (正規表現)
  var newValue = thisValue.replace( myRegex, "" ); // マッチした部分を削除
  // ex) "http://www.questetra.com" → "www.questetra.com"

  var newValueLc = newValue.toLowerCase(); // 小文字化 ※ドメイン部以外にも適用される点に注意

  jQuery('input[name="data\\[1\\].input"]').val( newValueLc );
});
</script>

[取引口座開設業務:「1.取引先の登録」画面]


<データ項目一覧画面>


[雛形ダウンロード (無料)]
<類似プロセス>
≪関連記事≫

[英文記事(English Entry)]

0 件のコメント :

コメントを投稿