Thursday, November 29, 2018

How to get Attendance log from ZKteco Biometric Machine using ZKteco SDK

ZKteco Attendance Device is widely used machine for bio-metric attendance and facial recognition attendance,

Here is the function how to get the device log from Machine using ZKteco SDK.


public DataTable LogTable()

{

            DataTable DT = new DataTable();

            DT.Columns.Add("EmpID");

            DT.Columns.Add("Logtime");

            DT.Columns.Add("LogBranchId");

            DT.Columns.Add("TTYPE");

            DT.Columns.Add("Description");

            return DT;

}





DataTable DTAttLog  = LogTable();





public void GetLogfromMachine(int iMnumber, String MachineIP, String Port,String LogBranchId,String TTYPE)

{

            //Setup columns and other UI stuff

            //Set datasource of grid

            //axCZKEM1 = new zkemkeeper.CZKEMClass();

            //Cursor = Cursors.WaitCursor;

            int idwErrorCode = 0;

            setstatus("Connecting to device " + MachineIP + ":" + Port + ", please wait...");

            bIsConnected = axCZKEM1.Connect_Net(MachineIP, Convert.ToInt32(Port));



            if (bIsConnected)

            {

                //c1TrueDBGrid1[iMnumber - 1, "Status"] = "Connected";

                c1TrueDBGrid1[iMnumber - 1, "F.Attempts"] = "0";

                c1TrueDBGrid1[iMnumber - 1, "LSTime"] = DateTime.Now;

                setstatus("Connected to device " + MachineIP + ":" + Port + "");

                OutPut(MachineIP + ":" + Port + " Current State:Connected");

                c1TrueDBGrid1.Refresh();

                axCZKEM1.RegEvent(iMachineNumber, 65535);



                #region GetLog



                string sdwEnrollNumber = "";

                //int idwTMachineNumber=0;

                //int idwEMachineNumber=0;

                int idwVerifyMode = 0;

                int idwInOutMode = 0;

                int idwYear = 0;

                int idwMonth = 0;

                int idwDay = 0;

                int idwHour = 0;

                int idwMinute = 0;

                int idwSecond = 0;

                int idwWorkcode = 0;



                idwErrorCode = 0;

                int iGLCount = 0;

                int iIndex = 0;



                //Cursor = Cursors.WaitCursor;





                int LogRecivedCount = 0;







                //axCZKEM1.EnableDevice(iMachineNumber, false);//disable the device

                setstatus("Fetching log from device " + MachineIP + ":" + Port + ", please wait...");

                if (axCZKEM1.ReadGeneralLogData(iMachineNumber))//read all the attendance records to the memory

                {

                    LogRecivedCount = 0;

                    while (axCZKEM1.SSR_GetGeneralLogData(iMnumber, out sdwEnrollNumber, out idwVerifyMode,

                               out idwInOutMode, out idwYear, out idwMonth, out idwDay, out idwHour, out idwMinute, out idwSecond, ref idwWorkcode))//get records from the memory

                    {



                        //iGLCount++;

                        //lvLogs.Items.Add(iGLCount.ToString());

                        //lvLogs.Items[iIndex].SubItems.Add(sdwEnrollNumber);//modify by Darcy on Nov.26 2009

                        //lvLogs.Items[iIndex].SubItems.Add(idwVerifyMode.ToString());

                        //lvLogs.Items[iIndex].SubItems.Add(idwInOutMode.ToString());

                        //lvLogs.Items[iIndex].SubItems.Add(idwYear.ToString() + "-" + idwMonth.ToString() + "-" + idwDay.ToString() + " " + idwHour.ToString() + ":" + idwMinute.ToString() + ":" + idwSecond.ToString());

                        //lvLogs.Items[iIndex].SubItems.Add(idwWorkcode.ToString());

                        //iIndex++;

                        try

                        {

                            DTAttLog.Rows.Add(sdwEnrollNumber, idwYear.ToString() + "-" + idwMonth.ToString() + "-" + idwDay.ToString() + " " + idwHour.ToString() + ":" + idwMinute.ToString() + ":" + idwSecond.ToString(), LogBranchId, TTYPE, MachineIP+":"+Port);

                      

                        }

                        catch (Exception)

                        {

                            // throw;

                        }



                        LogRecivedCount++;

                        setstatus("Fetching log from device " + MachineIP + ":" + Port + ", log fetched = " + LogRecivedCount + ",                                 please wait...");

                    }



                    OutPut("Fetch Record from Machine Total Count was " + LogRecivedCount);

                    setstatus("Fetching log completed from device " + MachineIP + ":" + Port + ", log fetched = "                +                                                LogRecivedCount + "");

                    LogRecivedCount = 0;

                }

                else

                {

                    //Cursor = Cursors.Default;

                    axCZKEM1.GetLastError(ref idwErrorCode);



                    if (idwErrorCode != 0)

                    {

                        OutPut("Reading data from terminal failed,ErrorCode: " + idwErrorCode.ToString());

                        setstatus("Reading data from terminal failed,ErrorCode: " + idwErrorCode.ToString() + " from device " + MachineIP + ":" + Port + "");

                    }

                    else

                    {

                        OutPut("No data from terminal returns!");

                        setstatus("No data from returns from device " + MachineIP + ":" + Port + "");



                    }

                }



                axCZKEM1.ClearGLog(iMachineNumber);

                axCZKEM1.RefreshData(iMachineNumber);

                //axCZKEM1.EnableDevice(iMachineNumber, true);//enable the device

              



                #endregion



                axCZKEM1.Disconnect();

            }

            else

            {

                axCZKEM1.GetLastError(ref idwErrorCode);

                //c1TrueDBGrid1[iMnumber - 1, "Status"] = "ErrorCode=" + idwErrorCode.ToString();

                OutPut("Unable to connect the device " + MachineIP + ":" + Port + ", ErrorCode=" + idwErrorCode.ToString());

                c1TrueDBGrid1[iMnumber - 1, "LSTime"] = DateTime.Now;

                setstatus("Unable to connect, ErrorCode: " + idwErrorCode.ToString() + " from device " + MachineIP + ":" + Port +               "");

                if (idwErrorCode == -7)

                {

                    try

                    {

                        int ConAttempts = Convert.ToInt32(c1TrueDBGrid1[iMnumber - 1, "F.Attempts"]);

                        ConAttempts = ConAttempts + 1;

                        c1TrueDBGrid1[iMnumber - 1, "F.Attempts"] = ConAttempts;

                        c1TrueDBGrid1[iMnumber - 1, "LSTime"] = DateTime.Now;



                        if (ConAttempts >= 3)

                        {

                            TerminalActivateDeactivate(iMnumber, "InActive");

                           

                        }

                    }

                    catch (Exception)

                    {

                        //throw;

                    }



                }

                axCZKEM1.Disconnect();

            }



        }


Sunday, January 21, 2018

Crystal Report is not rendering/showing/runing in localhost visual studio

Crystal report is not loading in browser, due to windows update, little workaround is required to get this issue fix.

Step1.  If crystal report is installed on your system go to following path.

C:\inetpub\wwwroot\aspnet_client\system_web\4_0_30319\crystalreportviewers13

copy the folder "crystalreportviewers13" and paste in application root folder

Step2. Go to web.config file. modify section group in this way.




<configSections>
    <sectionGroup name="businessObjects">
      <sectionGroup name="crystalReports">
        <section name="rptBuildProvider" type="CrystalDecisions.Shared.RptBuildProviderHandler,                  CrystalDecisions.Shared, Version=13.0.2000.0, Culture=neutral, PublicKeyToken=692fbea5521e1304, Custom=null"/>
        <section name="crystalReportViewer" type="System.Configuration.NameValueSectionHandler" />
      </sectionGroup>
    </sectionGroup>
  </configSections>


<businessObjects>
    <crystalReports>
      <rptBuildProvider>
        <add embedRptInResource="true"/>
      </rptBuildProvider>
      <crystalReportViewer>
        <add key="ResourceUri" value="/ERPWeb/crystalreportviewers13" />
      </crystalReportViewer>
    </crystalReports>
  </businessObjects>
 


The key value will be defined in the way



http://localhost:36409/ERPWeb//ERPWeb/crystalreportviewers13

<add key="ResourceUri" value="/ERPWeb/crystalreportviewers13" />