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:
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
Ê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
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