2017-05-30 16 views
0

J'ai connecté avec succès au dispositif biométrique et capable de tirer tous les enregistrements à l'aide Zkemkeeper.dll en utilisant la méthode suivanteTirez uniquement les nouvelles données du dispositif biométrique + zkemkeeper

axCZKEM1.ReadGeneralLogData(iMachineNumber) 

En utilisant la méthode ci-dessus chaque fois il va tirer toutes les données présentes à un moment donné dans l'appareil. Mais je veux obtenir les données nouvellement insérées à chaque fois. Est-ce possible à Zkemkeeper, si ce n'est pas le meilleur moyen d'y parvenir? Plz partagez vos idées. Merci d'avance

Répondre

0

ReadGeneralLogData est conçu pour charger tous les journaux de présence. Pour obtenir le nouvel inscrit, vous devez enregistrer l'événement avec l'API RegEvent fournie dans le fichier dll que vous avez.

Signature du RegEvent

VARIANT_BOOL RegEvent ([in] LONG dwMachineNumber, [en] LONG EventMask) dwMachineNumber est égal à zéro EventMask est 1

Une fois enregistré, l'événement OnAttTransactionEx volonté être appelé chaque fois qu'une présence est enregistrée.

La signature de l'événement est

OnAttTransactionEx (BSTR EnrollNumber, LONG IsInvalid, LONG AttState, LONG VerifyMethod, LONG année, LONG mois, LONG Jour, heure de temps, longue minute, LONG En second lieu, LONG Workcode)

Si vous êtes à la recherche du soutien de WebAPI, vous pouvez consulter le http://camsunit.com/application/biometric-web-api.html

+0

Merci. Mais im en utilisant essl f18 modèle, mon fournisseur a déclaré que ce matériel ne prend pas en charge l'événement en temps réel .. – Subburaj

+0

Êtes-vous sûr, si votre fournisseur est le personnel technique. Ils peuvent un revendeur. Ils peuvent être au courant du dépannage du matériel. Au-delà, ils ne sauraient pas comment fonctionne le logiciel. Donc, j'aime vous suggérer de vérifier votre conclusion. – Ramshri

+0

En fait, j'ai essayé d'enregistrer l'événement en utilisant 'OnAttTransactionEx' mon appareil est totalement bloqué, alors j'ai conclu que ce n'est pas possible .. – Subburaj

1

Mais im en utilisant le modèle F18 Essl, mon fournisseur a dit que ce matériel ne soutiendra pas l'événement en temps réel

^C'est ce qui m'a fait écrire ma réponse, il ne supporte événement en temps réel. Comme je l'ai fait moi-même avec la série F-18. En continuant de ce que Ramshri répond, il y a deux façons de réaliser ce que vous voulez.

1: Grâce à l'enregistrement des événements en temps réel

2: Obtenez toutes les données que vous êtes déjà de la machine, puis refactoring seulement ce dont vous avez besoin.

première approche:

public int sta_RegRealTime(ListBox lblOutputInfo) 
     { 
      if (GetConnectState() == false) 
      { 
       lblOutputInfo.Items.Add("*Please connect first!"); 
       return -1024; 
      } 

      int ret = 0; 

      if (axCZKEM1.RegEvent(GetMachineNumber(), 65535))//Here you can register the realtime events that you want to be triggered(the parameters 65535 means registering all) 
      { 
       //common interface 
       this.axCZKEM1.OnFinger += new zkemkeeper._IZKEMEvents_OnFingerEventHandler(axCZKEM1_OnFinger); 
       this.axCZKEM1.OnVerify += new zkemkeeper._IZKEMEvents_OnVerifyEventHandler(axCZKEM1_OnVerify); 
       this.axCZKEM1.OnFingerFeature += new zkemkeeper._IZKEMEvents_OnFingerFeatureEventHandler(axCZKEM1_OnFingerFeature); 
       this.axCZKEM1.OnDeleteTemplate += new zkemkeeper._IZKEMEvents_OnDeleteTemplateEventHandler(axCZKEM1_OnDeleteTemplate); 
       this.axCZKEM1.OnNewUser += new zkemkeeper._IZKEMEvents_OnNewUserEventHandler(axCZKEM1_OnNewUser); 
       this.axCZKEM1.OnHIDNum += new zkemkeeper._IZKEMEvents_OnHIDNumEventHandler(axCZKEM1_OnHIDNum); 
       this.axCZKEM1.OnAlarm += new zkemkeeper._IZKEMEvents_OnAlarmEventHandler(axCZKEM1_OnAlarm); 
       this.axCZKEM1.OnDoor += new zkemkeeper._IZKEMEvents_OnDoorEventHandler(axCZKEM1_OnDoor); 

       //only for color device 
       this.axCZKEM1.OnAttTransactionEx += new zkemkeeper._IZKEMEvents_OnAttTransactionExEventHandler(axCZKEM1_OnAttTransactionEx); 
       this.axCZKEM1.OnEnrollFingerEx += new zkemkeeper._IZKEMEvents_OnEnrollFingerExEventHandler(axCZKEM1_OnEnrollFingerEx); 

       //only for black&white device 
       this.axCZKEM1.OnAttTransaction -= new zkemkeeper._IZKEMEvents_OnAttTransactionEventHandler(axCZKEM1_OnAttTransaction); 
       this.axCZKEM1.OnWriteCard += new zkemkeeper._IZKEMEvents_OnWriteCardEventHandler(axCZKEM1_OnWriteCard); 
       this.axCZKEM1.OnEmptyCard += new zkemkeeper._IZKEMEvents_OnEmptyCardEventHandler(axCZKEM1_OnEmptyCard); 
       this.axCZKEM1.OnKeyPress += new zkemkeeper._IZKEMEvents_OnKeyPressEventHandler(axCZKEM1_OnKeyPress); 
       this.axCZKEM1.OnEnrollFinger += new zkemkeeper._IZKEMEvents_OnEnrollFingerEventHandler(axCZKEM1_OnEnrollFinger); 


       ret = 1; 
      } 
      else 
      { 
       axCZKEM1.GetLastError(ref idwErrorCode); 
       ret = idwErrorCode; 

       if (idwErrorCode != 0) 
       { 
        lblOutputInfo.Items.Add("*RegEvent failed,ErrorCode: " + idwErrorCode.ToString()); 
       } 
       else 
       { 
        lblOutputInfo.Items.Add("*No data from terminal returns!"); 
       } 
      } 
      return ret; 
     } 

et leurs définitions:

//If your fingerprint(or your card) passes the verification,this event will be triggered,only for color device 
     void axCZKEM1_OnAttTransactionEx(string EnrollNumber, int IsInValid, int AttState, int VerifyMethod, int Year, int Month, int Day, int Hour, int Minute, int Second, int WorkCode) 
     { 
      string time = Year + "-" + Month + "-" + Day + " " + Hour + ":" + Minute + ":" + Second; 

      gRealEventListBox.Items.Add("Verify OK.UserID=" + EnrollNumber + " isInvalid=" + IsInValid.ToString() + " state=" + AttState.ToString() + " verifystyle=" + VerifyMethod.ToString() + " time=" + time); 

      throw new NotImplementedException(); 
     } 

     //If your fingerprint(or your card) passes the verification,this event will be triggered,only for black%white device 
     private void axCZKEM1_OnAttTransaction(int EnrollNumber, int IsInValid, int AttState, int VerifyMethod, int Year, int Month, int Day, int Hour, int Minute, int Second) 
     { 
      string time = Year + "-" + Month + "-" + Day + " " + Hour + ":" + Minute + ":" + Second; 
      gRealEventListBox.Items.Add("Verify OK.UserID=" + EnrollNumber.ToString() + " isInvalid=" + IsInValid.ToString() + " state=" + AttState.ToString() + " verifystyle=" + VerifyMethod.ToString() + " time=" + time); 

      throw new NotImplementedException(); 
     } 

     //After you have placed your finger on the sensor(or swipe your card to the device),this event will be triggered. 
     //If you passes the verification,the returned value userid will be the user enrollnumber,or else the value will be -1; 
     void axCZKEM1_OnVerify(int UserID) 
     { 
      if (UserID != -1) 
      { 
       gRealEventListBox.Items.Add("User fingerprint verified... UserID=" + UserID.ToString()); 
      } 
      else 
      { 
       gRealEventListBox.Items.Add("Failed to verify... "); 
      } 

      throw new NotImplementedException(); 
     } 

Deuxième approche: Maintenant, supposons que vous avez récupéré toutes les données, mais vous ne nécessitent que les données après celui que vous récupéré de la dernière fois.Prenant un exemple comme; vous devez stocker les données mises à jour à votre dB chaque fois que vous appelez le axCZKEM1.ReadGeneralLogData(iMachineNumber); Comparez la liste de retour de données avec celle de votre dB (avec DateTime column car il agira comme un unique dans la table) comme;

ICollection<AttendanceLog> lstMachineInfo = manipulator.GetLogData(objZkeeper2, machineNum); 
     if (lstMachineInfo != null && lstMachineInfo.Count > 0) 
     { 
      var lastRecord = db.yourTableNameHere.OrderByDescending(x => x.DateTime).FirstOrDefault(); 


      if (lastRecord != null) 
      { 
       lstMachineInfo = lstMachineInfo.Where(x => x.DateTime > lastRecord.DateTime).ToList(); 
      } 

      foreach (var p in lstMachineInfo) 
      { 
       db.yourTableNameHere.Add(p); 
      } 

      db.SaveChanges(); 

En utilisant la première approche:

enter image description here