// 根据读者证状态对读者库进行检索 // parameters: // strMatchStyle 匹配方式 left exact right middle // strState 读者证状态 // bOnlyIncirculation 是否仅仅包括参与流通的数据库? true :仅仅包括; false : 包括全部 // bGetPath == true 获得path; == false 获得barcode // return: // -1 error // 其他 命中记录条数(不超过nMax规定的极限) public int SearchReaderState( // RmsChannelCollection channels, RmsChannel channel, string strState, string strMatchStyle, bool bOnlyIncirculation, bool bGetPath, int nMax, out List<string> aPathOrBarcode, out string strError) { strError = ""; aPathOrBarcode = null; LibraryApplication app = this; // 构造检索式 string strQueryXml = ""; int nDbCount = 0; for (int i = 0; i < app.ReaderDbs.Count; i++) { string strDbName = app.ReaderDbs[i].DbName; if (bOnlyIncirculation == true) { if (app.ReaderDbs[i].InCirculation == false) continue; } Debug.Assert(String.IsNullOrEmpty(strDbName) == false, ""); string strOneDbQuery = "<target list='" + StringUtil.GetXmlStringSimple(strDbName + ":" + "状态") + "'><item><word>" + StringUtil.GetXmlStringSimple(strState) + "</word><match>" + strMatchStyle + "</match><relation>=</relation><dataType>string</dataType><maxCount>" + nMax.ToString() + "</maxCount></item><lang>zh</lang></target>"; if (nDbCount > 0) { Debug.Assert(String.IsNullOrEmpty(strQueryXml) == false, ""); strQueryXml += "<operator value='OR'/>"; } strQueryXml += strOneDbQuery; nDbCount++; } if (nDbCount > 0) { strQueryXml = "<group>" + strQueryXml + "</group>"; } else { strError = "目前尚没有参与流通的读者库"; return -1; } #if NO RmsChannel channel = channels.GetChannel(app.WsUrl); if (channel == null) { strError = "get channel error"; return -1; } #endif string strResultSetName = "search_reader_state_001"; long lRet = channel.DoSearch(strQueryXml, strResultSetName, "", // strOuputStyle out strError); if (lRet == -1) goto ERROR1; // not found if (lRet == 0) { strError = "读者证状态 '" + strState + "' (匹配方式: " + strMatchStyle + ") 没有命中"; return 0; } long lHitCount = lRet; if (bGetPath == true) { lRet = channel.DoGetSearchResult( strResultSetName, 0, nMax, "zh", null, out aPathOrBarcode, out strError); if (lRet == -1) goto ERROR1; } else { // 获取检索命中结果 // 获得某一列信息的版本 lRet = channel.DoGetSearchResultOneColumn( strResultSetName, 0, nMax, "zh", null, 0, // nColumn, out aPathOrBarcode, out strError); } if (aPathOrBarcode.Count == 0) { strError = "DoGetSearchResult aPath error 和前面已经命中的条件矛盾"; goto ERROR1; } return (int)lHitCount; ERROR1: return -1; }