الأحد، 19 فبراير 2017

Generate QR Code In ADF Application


إن شاء الله في هذه المشاركة سنتعرف على كيفية    Generate QR Code In ADF Application 

سأعمل على تطبيق فكرة QR code  داخل ADF Application  مع شاشة Login  حيث إن صورة QR التي ستعرض على الشاشات الأخرى ستمثل معلومات المستخدم الذي قام بتسجيل دخول 
على سبيل المثال سنأخذ (الإسم الأول ، الإسم الثاني)





1.   نعمل على إنشاء تطبيق جديدApplication   ADF Fusion Web
2.   إنشاء ADF Business Component from table   (للجداول أو الجدول الذي سيتم التعامل معها)
3.   في البداية  نقوم على تضمين المكتبات المطلوبة للـQR   وهي 
qrgen-1.0
zxing-core-1.7
zxing-j2se-1.7

 من خلال right click  على إسم المشروع بعدها Project Properties بعدها نختار Labraries and Classpath وبالضغط على 

  ADD JAR/Labraries ويتم إضافة 

كما مبين في الصورة أدناه: 


تم رفع هذه المكتبات مع التطبيق 


5.   عمل شاشةLogin   تم التطرق لها على هذا الرابط

  http://ascensionmyblog.blogspot.com/2016/08/login-skin-adf.html

الآن لتكوين وإنشاء الـ QR  لمعلومات المستخدم الذي قام بتسجيل دخول إذن نقوم بإنشاء servlet  وليكن إسمها ServletQR 
ونعمل على نسخ الكود التالي:

import common.UserInfo;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import javax.servlet.*;
import javax.servlet.annotation.WebServlet;
import net.glxn.qrgen.QRCode;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import net.glxn.qrgen.image.ImageType;

@WebServlet(name = "ServletQR", urlPatterns = { "/servletqr" })
public class ServletQR extends HttpServlet {
 private static final String CONTENT_TYPE = "text/html; charset=UTF-8";
 public void init(ServletConfig config) throws ServletException 
  {
     super.init(config);
    }
protected void processRequest(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException 
{
 UserInfo qrInfo = (UserInfo) request.getSession().getAttribute("user");
 //ASIGNAR TEXTO A VARIABLE OUT DE TIPO BYTE
ByteArrayOutputStream out = QRCode.from(qrInfo.getFirstName()+"_"+qrInfo.getLastName()).to(ImageType.PNG).stream(); 
//ASIGNAR TIPO Y TAMAأ‘O DE CONTENIDO A RESPONSE
 response.setContentType("image/png");
 response.setContentLength(out.size());
 //ALMACENA EN VARIABLE OUTSTREAM LA CAPACIDAD DE ALMACENAR DATOS BINARIOS
 OutputStream outStream = response.getOutputStream();
//ALMACENA EN OUTPUTSTREAM EL VALOR DE OUT CONVERTIDO EN ARREGLO DE BYTES
 outStream.write(out.toByteArray());
//MUESTRA EL CUERPO DE OUTSTREAM
 outStream.flush();
 outStream.close();
    }
    @Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException 
    {
        processRequest(request, response);
    }
}


لنأخذ لمحة تعريفية بسيطة  حول الكود
7. ما يهمني هنا هو أن أسترجع معلومات المستخدم الذي قام بتسجيل دخول من الـ session  إلىservlet   وهذا يتم من خلال كود السطر التالي حسب الكود أعلاه:
  
 UserInfo qrInfo = (UserInfo) request.getSession().getAttribute("user");


لاحظ طريقة إسترجاع المعلومات التي تم وضعها ب session بهيئة java class  إذن يتم إسترجاعها بمتغير من نوع java class ألا وهو qrInfo

8. الآن أريد تكوين الـ QR  من هذه المعلومات التي إسترجعتها (وهي معلومات المستخدم) وهذا يكون بكود السطر التالي :
ByteArrayOutputStream out = QRCode.from(qrInfo.getFirstName()+"_"+qrInfo.getLastName()).to(ImageType.PNG).stream(); 


9. الآن تكونت لي صورة QR  من الأسم الأول والإسم الثاني للمستخدم ويفصل بينهما ب _  وتم وضع الصورة المتكونة بتعريف متغير من نوع stream  ويمكن أيضاً تعريف متغير من نوع file 
                
أما بقية الكود في الـ servlet هو فقط لقراءة وكتابة الصورة وهو كود standard  متبع عند التعامل مع قراءة وكتابة الصور 
10. الآن نريد أن نعرض الصورة على الصفحة، نعمل على سحب وإفلات image component  ونحدد من الخصائص التابعة للـ Image  خاصية الـ source  لهذه الصورة سيكون هو:
 الـ servlet pattern  أي /servletqr 
كما في الصورة المبينة في أدناه 


لتحميل التطبيق إضغط هنا 

Connection Psotgresql Database in Jdeveloper IDE

السلام عليكم ورحمة الله وبركاته موضوع اليوم هو كيفية عمل Connection  لقاعدة البيانات  Psotgresql داخل  بيئة العمل  Jdeveloper بداي...