RayKit よくある質問

FNC1を含めたGS1-128のバーコードを生成することはできますか?

はい、できます。

FNC1(ファンクション1)は、AI(アプリケーション識別子)をGS1標準シンボルに表現する際に重要な制御記号で、使われる位置によって機能が異なります。

1)シンボルの先頭:GS1標準のデータであることを示すため、スタート・キャラクタの後ろにつけます。

2)シンボルの途中:可変長データの後ろに他のデータが続く場合、可変長データの項目区切りとして使用されます。

シンボルの先頭のFNC1は自動的に生成されるため入力不要です。必要に応じてシンボルの途中のFNC1のみを埋め込んでください。

以下はGS1-128のバーコードを生成するサンプルコードとなります。ここでは、FNC1を"\F"に指定しています。

IMG_0001.PNG

■Visualforceページ_GS1128GeneratorGenerateSample.vfp


<apex:page controller="GS1128GeneratorGenerateSampleController" docType="html-5.0" applyBodyTag="false" applyHtmlTag="false" sidebar="false"
standardStylesheets="false" showHeader="false">
<apex:slds />
<div class="slds-scope" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<div class="slds-grid slds-grid_vertical">
<div class="slds-col slds-p-around_xx-small">
<div class="slds-form-element">
<label class="slds-form-element__label" for="barcode-value-input">バーコード値を入力してください。 </label>
<label class="slds-form-element__label" for="barcode-value-input">※FNC1コードは"\F"を使用しています。 </label>
<label class="slds-form-element__label" for="barcode-value-input">※シンボルの先頭のFNC1コードは入力不要です。 </label>
<div class="slds-form-element__control">
<input type="text" id="barcode-value-input" value="010491234567891110HH1026\F21173421" class="barcode-input_value slds-input" />
</div>
</div>
</div>
<div class="slds-col slds-grid">
<button class="barcode-button_generate slds-button slds-button_outline-brand">Generate</button>
</div>
<div class="slds-col slds-p-around_xx-small">
<apex:outputPanel id="barcodeContainer">
<!-- バーコード生成コンポーネント -->
<!-- GS1-128バーコードを生成するため、バーコードの種類を"EAN128"にする -->
<gcbc:GcBarcodeVF outputFormat="SVG" type="EAN128" options="{!barcodeFNC1Options}" value="{!barcodeFNC1Value}" imageHeight="250"
imageWidth="350"></gcbc:GcBarcodeVF>
</apex:outputPanel>
</div>
</div>
</div>
<apex:form >
<!-- 受け取った値をコントローラの変数にそれぞれセットする。-->
<apex:actionFunction action="{!updateBarcode}" name="updateValueAndOptions" rerender="barcodeContainer">
<apex:param value="" assignTo="{!barcodeFNC1Value}" name="barcodeValue" />
<apex:param value="" assignTo="{!barcodeFNC1Options}" name="barcodeOptions" />
</apex:actionFunction>
</apex:form>

<script type="text/javascript">
<!-- 「固定長のAI」をキーに、「そのAIとデータ列の合計桁数」を値に設定する。-->
<!-- ここに設定されてないAIは可変長のAIとして扱われる。 -->
var fixedLengthAIMap = new Map();
fixedLengthAIMap.set('00', 20);
fixedLengthAIMap.set('01', 16);
fixedLengthAIMap.set('02', 16);
fixedLengthAIMap.set('11', 8);
fixedLengthAIMap.set('13', 8);
fixedLengthAIMap.set('15', 8);
fixedLengthAIMap.set('20', 4);
fixedLengthAIMap.set('31', 10);
fixedLengthAIMap.set('33', 10);
fixedLengthAIMap.set('36', 10);
fixedLengthAIMap.set('41', 16);

generateBarcodeCore();

document.addEventListener("DOMContentLoaded", function () {
init();
}, false);

document.addEventListener("load", function () {
init();
}, false);

function init() {
if (window.isLoaded) {
return;
}
window.isLoaded = true;
var generateButton = getElementByClass("barcode-button_generate");
if (generateButton) {
generateButton.addEventListener("click", onGenerateButtonClick);
}
}

function getElementByClass(className) {
return document.querySelector('.' + className);
}

function onGenerateButtonClick(e) {
generateBarcodeCore();
}

<!-- Generateボタンを押した時実行される処理 -->
function generateBarcodeCore() {
var inputElement = getElementByClass("barcode-input_value");
var barcodeValue = inputElement.value;
<!-- FNC1コード(このサンプルでは"\f"を使用)を変換する -->
var finalStr = barcodeValue.replace(/\\F/g, String.fromCharCode(0x2000));
<!-- 人間が読める形式のカスタムなメッセージ文字列を指定する -->
var messageStr = generateMessageString(barcodeValue);
<!-- バーコードのオプションを指定する -->
var finalMessageStr = "{'ShowMessage':'true','MessageString':'" + messageStr + "'}";
updateValueAndOptions(finalStr, finalMessageStr);
}

function generateMessageString(barcodeValueStr) {
if (barcodeValueStr.lenght < 3) {
return barcodeValueStr;
}
var starIndex = 0;
var finalString = '';
while (starIndex < barcodeValueStr.length) {
var aiKey = barcodeValueStr.substr(starIndex, 2);
var valueLength = fixedLengthAIMap.get(aiKey);
if (!valueLength) {
starIndex += 2;
var variableLengthStr = barcodeValueStr.substr(starIndex, barcodeValueStr.length - starIndex);
var finalVariableLengthStr = handleVariableLengthString(variableLengthStr);
finalString += ("(" + aiKey + ")" + finalVariableLengthStr);
return finalString;
}
starIndex += 2;
var valueStr = barcodeValueStr.substr(starIndex, valueLength - aiKey.length);
starIndex += (valueLength - aiKey.length);
finalString += ("(" + aiKey + ")" + valueStr);
}
return finalString;
}

function handleVariableLengthString(variableLengthString) {
var variableLengthList = variableLengthString.split(/\\F/g);
if (variableLengthList.length < 2) {
return variableLengthList[0];
}
var tempStr = "";
for (var index = 1; index < variableLengthList.length; index++) {
tempStr += variableLengthList[index]
if (index < variableLengthList.length - 1) {
tempStr += "\F";
}
}
var finalVariableLengthStr = generateMessageString(tempStr);
return variableLengthList[0] + finalVariableLengthStr;
}
</script>
</apex:page>

■Apexクラス_GS1128GeneratorGenerateSampleController.cls

public with sharing class GS1128GeneratorGenerateSampleController {

//バーコード値を格納するプロパティ
public String barcodeFNC1Value {get; set;}
//バーコードのオプションを格納するプロパティ
public String barcodeFNC1Options {get;set;}

public PageReference updateBarcode() {
return null;
}
}

 

この記事は役に立ちましたか?
0人中0人がこの記事が役に立ったと言っています

0 コメント

サインインしてコメントを残してください。