『グループ再編で取引会社が変わります』
取引先から「社名変更の通知ハガキ」が届くことは多い。しかし、この手のハガキだけを頼りに「取引先マスタ」のメンテナンスを行う、、、と言うのは、実に心もとない。
2015年12月1日、日本政府は『法人番号システム』の『Web-API 機能』を稼働させた。
もし、アプリケーション側が「取引先の法人番号」(13桁数字)を把握していれば、取引先の商号や所在地等の登記情報をいつでも参照できる。加えて「商号変更」「吸収合併」「会社解散」などの変化情報(処理区分)についても検知できるようになったのだ。
以下のワークフロー定義は、この『Web-API 機能』を活用し「商号変更」を自動検知する仕組みだ。
ここでは、ワークフロー基盤に「取引先マスタ」(Business-Connection.xml)が存在していることを前提にしている。つまり、「取引先マスタ」に登録されている商号が登記情報と同一であるかを確認している。毎週日曜日の朝に自動実行される設定だ。
[取引先マスタ登録商号の自動チェック]
取引先が多くなってくると「取引先マスタ」のメンテナンス作業もバカにならない。
場合によっては「知らない間に取引先会社が消滅していた」なんて事もあるだろう。このワークフロー定義は、何といっても、完全に無人化されている点が秀逸だ。
ただこの例で注意したいのは「1回の Web-API リクエスト」が、1つの「法人番号」について行われている点だ。Questetra で稼働させる場合、「総ステップ数:500まで」の制限がある。つまり「取引先マスタ」が約160社までであれば問題なく活用できるが、それ以上が想定される場合には別途工夫が必要となる。(次回に続く)
PS
なお、Web-API へのリクエスト部分には「アプリケーションID」が必要となる。この「アプリケーションID」は各社にて申請が必要だ。業務テンプレート(.qar)の[リクエスト送信イベント]では「APPLICATIONID」と設定されているが、稼働前に書き換える必要がある。
PS2
なお、v10.4(2015年11月2日)までの Questetra では『XML 形式のレスポンス』が格納できない状態だった。(つまり "MIME type: application/xml なレスポンス" が想定されていない状態だった)。しかし、v10.4.1(2015年12月7日)以降は『XML 形式のレスポンス』も[文字列型データ]に格納できるようになっている。
[取引先マスタ登録商号の自動チェック:「1. Confirm / 確認」画面]
▼[リクエスト送信イベント]の設定サンプル
- アクセスURL: https://api.houjin-bangou.nta.go.jp/1/num [固定値]
- HTTP Method: GET [固定値]
- 送信パラメータ:
- id: APPLICATIONID [固定値]
- number: {requestId}
- type: 12 [固定値] (ファイル形式 XML )
- history: 0 [固定値] (変更履歴を含まない)
▼自動工程「Count # of clientsXML」のサンプルコード(サーバーサイド)
//// == ワークフローデータの参照 / Retrieving == // [共通ファイル]に登録されている XML ファイル (M319) // returns "List<ItemView>" optionsList = itemDao.findAll("Business-Connections.xml", true); //// == 演算 / Calculating == var numOfClients = 0; // javascript number numOfClients = optionsList.size(); // 登録されている取引先数 var clientsCorporateNumbers = ""; // javascript string var clientsCorporateNames = ""; for (j = 0; j < numOfClients; j++){ clientsCorporateNumbers += optionsList.get(j).getValue().substr(7, 13) + "¥n"; clientsCorporateNames += optionsList.get(j).getDisplay() + "¥n"; } //// == ワークフローデータへの代入 / Updating == retVal.put("1", java.math.BigDecimal(numOfClients) ); // この例ではループ回数と同じ retVal.put("2", java.math.BigDecimal(numOfClients) ); // numOfClients == numOfLoops retVal.put("3", clientsCorporateNumbers ); retVal.put("4", clientsCorporateNames ); retVal.put("5", java.math.BigDecimal(0) ); // i=0 retVal.put("11", "vvv Check Log vvv¥n" ); // null 状態を解除 if( numOfClients == 0 ){ retVal.put("11", "Business-Connections.xml: no such file ?" ); }
▼自動工程「Request Prep」のサンプルコード(サーバーサイド)
//// == ワークフローデータの参照 / Retrieving == var i = 0; // javascript number i = data.get("5") - 0; var clientsCorporateNumbers = ""; // javascript string var clientsCorporateNames = ""; clientsCorporateNumbers = data.get("3") + ""; // (multi-lines) clientsCorporateNames = data.get("4") + ""; //// == 演算 / Calculating == var iRequestCorporateNumbers = ""; // javascript string var array = clientsCorporateNumbers.split("¥n"); iRequestCorporateNumbers = array[i]; var iCorporateNames = ""; // javascript string var array2 = clientsCorporateNames.split("¥n"); iCorporateNames = array2[i]; //// == ワークフローデータへの代入 / Updating == retVal.put("6", iRequestCorporateNumbers ); retVal.put("7", iCorporateNames );
▼自動工程「Respose Chk / i++」のサンプルコード(サーバーサイド)
//// == ワークフローデータの参照 / Retrieving == var i = 0; // javascript number i = data.get("5") - 0; var iCorporateNames = ""; // javascript string iCorporateNames = data.get("7") + ""; var diffLog = ""; // javascript string diffLog = data.get("11") + ""; var iResponseTmp = ""; // javascript string iResponseTmp = data.get("8") + ""; iResponseTmp = iResponseTmp.replace(/^<¥?xml¥s+version¥s*=¥s*(["'])[^¥1]+¥1[^?]*¥?>/, ""); // E4X bug 336551 var iResponseXML = new XML(iResponseTmp); // javascript xml //// == 演算 / Calculating == var iResponseCorporateNames = ""; // javascript string iResponseCorporateNames += iResponseXML.corporation[0].name; diffLog += iCorporateNames + " is " + iResponseCorporateNames; if(iCorporateNames == iResponseCorporateNames){ diffLog += ": ok" + "¥n"; } else { diffLog += ": NG" + "¥n"; } // for XML debug //diffLog += " lastUpdateDate: " + iResponseXML.lastUpdateDate + "¥n"; //diffLog += " count: " + iResponseXML.count + "¥n"; //diffLog += " divideNumber: " + iResponseXML.divideNumber + "¥n"; //diffLog += " divideSize: " + iResponseXML.divideSize + "¥n"; //diffLog += " sequenceNumber - " + iResponseXML.corporation[0].sequenceNumber + "¥n"; //diffLog += " process - " + iResponseXML.corporation[0].process + "¥n"; //diffLog += " updateDate - " + iResponseXML.corporation[0].updateDate + "¥n"; //diffLog += " changeDate - " + iResponseXML.corporation[0].changeDate + "¥n"; //diffLog += " name - " + iResponseXML.corporation[0].name + "¥n"; //// == ワークフローデータへの代入 / Updating == retVal.put("5", java.math.BigDecimal(i + 1) ); retVal.put("10", iResponseCorporateNames ); retVal.put("11", diffLog );
<データ項目一覧画面>
[雛形ダウンロード (無料)]
- 業務テンプレート:取引先マスタ登録商号の自動チェック
- 法人番号を使った取引先マスターの管理(一括更新編) (2015-09-21)
- 法人番号を使った取引先マスターの管理(追加更新編) (2015-09-14)
- 法人番号で外部 Web-API に問い合わせる (2015-10-26)
- M407 データ項目 業務の流れ: 挿し込みメールが繰り返し送信されるように設定する (使い方)
- M230 自動工程: 業務データの複雑なデータ加工が自動実行されるように設定する(ECMAスクリプト) (使い方)
- M319 プロセスモデリング環境: 複数の業務プロセス定義から参照される選択肢XMLを登録する (使い方)
[英文記事 (English Entry) ]
0 件のコメント :
コメントを投稿