別記事で枝番管理ができるか?という内容を書きました。
その方法を紹介
ポイントは
①自動採番された数字(親番号)と枝番号を一つにする
②枝番号を附番をどうやってやるか?
③一意であることをどう担保するか?
最初に書いたプログラムを紹介
var no; //親番号と枝番号を組み合わせたものを格納する変数
var no1 = getFieldValue_XP('textfield46'); //親番号をフィールドから取得
var no2 = getFieldValue_XP('textfield47'); //枝番号をフィールドから取得
var no3 = "00" + no2; // 枝番号の頭に00を付け足す
var no4 = no3.slice(-2); // 枝番号の下2桁を取り出す(枝番号改と名づける)
no = no1+" - "+no4; //親番号と枝番号改を一つに
setFieldValue_XP('textfield61',no); //親番号と枝番号改を一つにしたものをフィールドにセット
①の部分を解決するために、まず親番号と枝番号の数値をフィールドから取得する必要があります
そのプログラムはgetFieldValue_XP('ID');
そして数値を一つにするのが、「+」です
no = no1+" - "+no4;
これは親番号と枝番号の間に「-」を挟んでいるのでちょっと見難いですが、シンプルにすると
no = no1 + no4;
「-」は文字列なので、「"」で囲んでやる必要がある
②枝番号を附番をどうやってやるか?
親番号は自動採番なので、同じ数字が利用されることはありません
が、枝番号は自動採番を使えません
Aという書類で自動採番1がされた場合、Bという自動採番するとふされる番号は2になってしまうからです
他の方法として過去の枝番号に+1をしてやるという方法があるのかもしれませんが、やり方がわからない
なので、手で入力する方法に
でもいくつか危惧されることがある
①利用済みの番号を手入力したら?
②必ず2桁にしたいが、1桁で入力したら?
そこで書いたプログラムが
var no3 = "00" + no2; // 枝番号の頭に00を付け足す
var no4 = no3.slice(-2); // 枝番号の下2桁を取り出す(枝番号改と名づける)
まずno2は手入力の数字。これが1桁か2桁で入力されたかは入力の値のバイト数でyesかnoか判断するという方法があるらしいがめんどくさそうなので却下
なので、入力された数値に"00"を加える
これによりno2の数値が「1」の場合は「001」。「01」の場合は「0001」となる
次にno3.slice(-2);で「001」or「0001」の数値の右から2桁の数字を取り出す
それにより必ず2桁の数字を設定することが可能に
最後③一意であることをどう担保するか?
setFieldValue_XP('ID',no); //親番号と枝番号改を一つにしたものをフィールドにセット
このプログラムは親番号と枝番号を組み合わせたもの値を指定のフィールドに入れるというもの
この時の指定したフィールドを一意の設定にしておくことによって、一意性を担保する事ができる
補足として、文字列から必要な文字を取得する方法
◆ string.substring(from [, to])
string の from~to - 1 文字目(最初の文字を 0 番とする)の文字列を返します。
負の値を指定すると 0 番目と見なされます。
to を省略すると残りのすべてを返します。
"1234567".substring(2, 4); // "34" を返す
"1234567".substring(2, 4); // "34" を返す
◆ string.slice(from [, to])
string の from~to - 1 文字目(最初の文字を 0 番目とする)の文字列を返します。
負の値を指定すると後ろから数える点が substring() と異なります。
to を省略すると残りのすべてを返します。
"1234567".slice(2, 4); // "34" を返す
"1234567".slice(2); // "34567" を返す
◆ string.substr(from [, len])
string の from 番目から len 文字分(最初の文字を 0 番目とする)の文字列を返します。
from に負の値を指定すると後ろから数えます。
len を省略すると残りのすべてを返します。
"1234567".substr(2, 4); // "3456" を返す