// 保存 // return: // -1 error // 0 成功 // 1 服务器端记录发生改变,未保存。注意重新保存记录 int SaveReaderInfo(ReaderEditControl edit, out string strError) { strError = ""; if (edit.Barcode == "") { strError = "尚未输入证条码号"; goto ERROR1; } stop.OnStop += new StopEventHandler(this.DoStop); stop.Initial("正在保存读者记录 " + edit.Barcode + " ..."); stop.BeginLoop(); EnableControls(false); try { string strNewXml = ""; int nRet = edit.GetData( out strNewXml, out strError); if (nRet == -1) goto ERROR1; ErrorCodeValue kernel_errorcode; byte[] baNewTimestamp = null; string strExistingXml = ""; string strSavedXml = ""; string strSavedPath = ""; long lRet = Channel.SetReaderInfo( stop, "change", edit.RecPath, strNewXml, edit.OldRecord, edit.Timestamp, out strExistingXml, out strSavedXml, out strSavedPath, out baNewTimestamp, out kernel_errorcode, out strError); if (lRet == -1) { // Debug.Assert(false, ""); if (kernel_errorcode == ErrorCodeValue.TimestampMismatch) { CompareReaderForm dlg = new CompareReaderForm(); dlg.Initial( this.MainForm, edit.RecPath, strExistingXml, baNewTimestamp, strNewXml, edit.Timestamp, "数据库中的记录在编辑期间发生了改变。请仔细核对,并重新修改窗口中的未保存记录,按确定按钮后可重试保存。"); dlg.StartPosition = FormStartPosition.CenterScreen; dlg.ShowDialog(this); if (dlg.DialogResult == DialogResult.OK) { nRet = edit.SetData(dlg.UnsavedXml, dlg.RecPath, dlg.UnsavedTimestamp, out strError); if (nRet == -1) { return -1; } strError = "请注意重新保存记录"; return 1; } } goto ERROR1; } /* this.Timestamp = baNewTimestamp; this.OldRecord = strSavedXml; this.RecPath = strSavedPath; */ if (lRet == 1) { // 部分字段被拒绝 MessageBox.Show(this, strError); if (Channel.ErrorCode == ErrorCode.PartialDenied) { // 提醒重新装载? MessageBox.Show(this, "请重新装载记录, 检查哪些字段内容修改被拒绝。"); } } else { // 重新装载记录到编辑器 nRet = edit.SetData(strSavedXml, strSavedPath, baNewTimestamp, out strError); if (nRet == -1) goto ERROR1; } } finally { EnableControls(true); stop.EndLoop(); stop.OnStop -= new StopEventHandler(this.DoStop); stop.Initial(""); } strError = "保存成功"; return 0; ERROR1: return -1; }