Este artículo muestra el uso del servicio de códigos de barras para rellenar el formulario adaptable. El caso de uso es el siguiente:
El siguiente código descodifica el código de barras y rellena un objeto JSON con los valores descodificados. A continuación, el servlet devuelve el objeto JSON en su respuesta a la aplicación que realiza la llamada.
public JSONObject extractBarCode(Document pdfDocument) {
// TODO Auto-generated method stub
try {
org.w3c.dom.Document result = barcodeService.decode(pdfDocument, true, false, false, false, false, false,
false, false, CharSet.UTF_8);
List<org.w3c.dom.Document> listResult = barcodeService.extractToXML(result, Delimiter.Carriage_Return,
Delimiter.Tab, XMLFormat.XDP);
log.debug("the form1 lenght is " + listResult.get(0).getElementsByTagName("form1").getLength());
JSONObject decodedData = new JSONObject();
decodedData.put("name", listResult.get(0).getElementsByTagName("Name").item(0).getTextContent());
decodedData.put("address", listResult.get(0).getElementsByTagName("Address").item(0).getTextContent());
decodedData.put("city", listResult.get(0).getElementsByTagName("City").item(0).getTextContent());
decodedData.put("state", listResult.get(0).getElementsByTagName("State").item(0).getTextContent());
decodedData.put("zipCode", listResult.get(0).getElementsByTagName("ZipCode").item(0).getTextContent());
decodedData.put("country", listResult.get(0).getElementsByTagName("Country").item(0).getTextContent());
log.debug("The JSON Object is " + decodedData.toString());
return decodedData;
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
El siguiente es el código servlet. Se llama a este servlet cuando el usuario agrega un archivo adjunto al formulario adaptable. El servlet devuelve el objeto JSON a la aplicación que realiza la llamada. A continuación, la aplicación que realiza la llamada rellena el formulario adaptable con los valores extraídos del objeto JSON.
@Component(service = Servlet.class, property = {
"sling.servlet.methods=get",
"sling.servlet.paths=/bin/decodebarcode"
})
public class DecodeBarCode extends SlingSafeMethodsServlet {
@Reference
DocumentServices documentServices;
@Reference
GetResolver getResolver;
private static final Logger log = LoggerFactory.getLogger(DecodeBarCode.class);
private static final long serialVersionUID = 1L;
protected void doGet(SlingHttpServletRequest request, SlingHttpServletResponse response) {
ResourceResolver fd = getResolver.getFormsServiceResolver();
Node pdfDoc = fd.getResource(request.getParameter("pdfPath")).adaptTo(Node.class);
Document pdfDocument = null;
log.debug("The path of the pdf I got was " + request.getParameter("pdfPath"));
try {
pdfDocument = new Document(pdfDoc.getPath());
JSONObject decodedData = documentServices.extractBarCode(pdfDocument);
response.setContentType("application/json");
response.setHeader("Cache-Control", "nocache");
response.setCharacterEncoding("utf-8");
PrintWriter out = null;
out = response.getWriter();
out.println(decodedData.toString());
} catch (RepositoryException | IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}
El siguiente código forma parte de la biblioteca de cliente a la que hace referencia el formulario adaptable. Cuando un usuario agrega el archivo adjunto al formulario adaptable, se activa este código. El código realiza una llamada de GET al servlet con la ruta del archivo adjunto pasada en el parámetro de solicitud. Los datos recibidos de la llamada al servlet se utilizan para rellenar el formulario adaptable.
$(document).ready(function()
{
guideBridge.on("elementValueChanged",function(event,data){
if(data.target.name=="fileAttachment")
{
window.guideBridge.getFileAttachmentsInfo({
success:function(list)
{
console.log(list[0].name + " "+ list[0].path);
const getFormNames = '/bin/decodebarcode?pdfPath='+list[0].path;
$.getJSON(getFormNames, function (data) {
console.log(data);
var nameField = window.guideBridge.resolveNode("guide[0].guide1[0].guideRootPanel[0].Name[0]");
nameField.value = data.name;
var addressField = window.guideBridge.resolveNode("guide[0].guide1[0].guideRootPanel[0].Address[0]");
addressField.value = data.address;
var cityField = window.guideBridge.resolveNode("guide[0].guide1[0].guideRootPanel[0].City[0]");
cityField.value = data.city;
var stateField = window.guideBridge.resolveNode("guide[0].guide1[0].guideRootPanel[0].State[0]");
stateField.value = data.state;
var zipField = window.guideBridge.resolveNode("guide[0].guide1[0].guideRootPanel[0].Zip[0]");
zipField.value = data.zipCode;
var countryField = window.guideBridge.resolveNode("guide[0].guide1[0].guideRootPanel[0].Country[0]");
countryField.value = data.country;
});
}
});
}
});
});
El formulario adaptable incluido en este paquete se creó con AEM Forms 6.4. Si desea utilizar este paquete en el entorno de AEM Forms 6.3, cree el formulario adaptable en AEM formulario 6.3
Línea 12: Custom Code para obtener la resolución del servicio. Este paquete se incluye como parte de los recursos de este artículo.
Línea 23 - Llame al método extractBarCode de DocumentServices para obtener el objeto JSON rellenado con datos decodificados
Para que esto se ejecute en su sistema, siga los siguientes pasos: