/// <summary> /// Created a clone of the orignal and copy the orignal releational rows to the clone database /// The copy is done only for the rows that are part of the sorted filtered rows table /// The row order is keep the same as the sorted filtered rows table /// Only rows in the paging range (speciefied by startIndex, blockSize) are copyied /// </summary> /// <param name="sortedRows">Sorted Rows row set</param> /// <param name="cloneName">The Name of the clone dataset</param> /// <param name="dsStore">The oringnal dataset</param> /// <param name="startIndex">The start index for paging</param> /// <param name="blockSize">The size of the paging block</param> /// <returns>The sorted, filtered, and paged dataset</returns> private static DataSet CopySortedDataToOrigClone(DataRow[] sortedRows, string cloneName, DataSet dsStore, int startIndex, int blockSize) { DataRowCollection offerRows = dsStore.Tables[0].Rows; //DataSet dsFinal = new DataSet(cloneName); // dsFinal = dsStore.Clone(); ServerPaymentItemsDataSets dataSets = new ServerPaymentItemsDataSets(); DataSet dsFinal = dataSets.CreateStoreDataSet(cloneName, true); dsFinal.DataSetName = cloneName; int startPosition = 0; int endPosition = sortedRows.Length; if (UseBlockSize(startIndex, blockSize, endPosition, 0)) { startPosition = startIndex; int maxEndPosition = blockSize + startIndex; if (maxEndPosition < endPosition) { endPosition = maxEndPosition; } } for (int rowIndex = startPosition; rowIndex < endPosition; rowIndex++) //foreach (DataRow row in sortedRows) { DataRow row = sortedRows[rowIndex]; DataRow offerRow = offerRows.Find((object)row["itemOffer_itemOffer_Id"]); if (offerRow != null) { DataRow[] itemRow = offerRow.GetChildRows("itemOffer_item"); DataRow[] priceRow = offerRow.GetChildRows("itemOffer_price"); DataRow[] moneyRow = priceRow[0].GetChildRows("price_money"); DataRow[] propertiesRow = itemRow[0].GetChildRows("item_properties"); // DataRow[] propertyRow = propertiesRow[0].GetChildRows("properties_property"); dsFinal.Tables["itemOffer"].ImportRow(offerRow); dsFinal.Tables["item"].ImportRow(itemRow[0]); dsFinal.Tables["price"].ImportRow(priceRow[0]); dsFinal.Tables["money"].ImportRow(moneyRow[0]); //if (propertiesRow.Length > 0) // { // dsFinal.Tables["properties"].ImportRow(propertiesRow[0]); // foreach (DataRow property in propertyRow) // { // dsFinal.Tables["property"].ImportRow(property); // } // } } } return(dsFinal); }
/// <summary> /// Update the store data with a new response /// </summary> /// <param name="response">xml string store response received from the PaymentItems</param> /// <param name="key">The key is the store name to copy</param> private void CopyResponseToStoreData(XmlDocument xmlDoc, string key) { string response = xmlDoc.InnerXml; try { // MemoryStream schema = LoadSchemaFile("StoreImportSchemaFull.xsd"); ServerPaymentItemsDataSets dataSets = new ServerPaymentItemsDataSets(); DataSet dsStoreCreated = dataSets.CreateStoreDataSet("StoreDataSet", true); XmlNode itemOffersNode = xmlDoc.SelectSingleNode("/Response/store"); XmlNodeList itemOffersNodeList = xmlDoc.SelectNodes("/Response/store/itemOffers/itemOffer"); lock (lockObject) { if (mDebug) { xmlDoc.Save(String.Format(@"{0}CopyResponseToStoreXml_{1}.xml", mDebugDir, key)); } mStoreXml[key].InnerXml = xmlDoc.InnerXml; //DataSet dsStore = LoadXMLInToDataSet(itemOffersNode, schema, "StoreDataSet"); DataSet dsStore = dataSets.LoadStoreDataXMLInToDataSet(itemOffersNodeList, dsStoreCreated, true); if (mDebug) { dsStore.WriteXml(String.Format(@"{0}CopyResponseToStoreData_{1}.xml", mDebugDir, key)); } mStoreDataSet[key] = dsStore; } } catch (Exception ex) { mLogger.Error(String.Format("Error in CopyResponseToStoreData for Store {0} Error: {1}\n Response: {2}", key, ex, response)); } }
/// <summary> /// Add the item Assets To StoreInventory Items node /// </summary> /// <param name="response">xml string store response received from the PaymentItems</param> /// <param name="storeName">The name of the store used for debugging.</param> /// <returns>The reesponse xml document with the items assets added</returns> private XmlDocument AddAssetsToStoreInventoryItems(XmlDocument response, string storeName) { XmlDocument storeResponse = new XmlDocument(); storeResponse.InnerXml = response.InnerXml; try { if (response == null) { throw new Exception("Error: Cached Response for PaymentItems User Inventory Response is not available"); } else { XmlNode itemOffersNode = response.SelectSingleNode("/Response/store"); XmlNodeList itemOffersNodeList = response.SelectNodes("/Response/store/itemOffers/itemOffer"); ServerPaymentItemsDataSets dataSets = new ServerPaymentItemsDataSets(); DataSet dsStoreCreated = dataSets.CreateStoreDataSet("StoreDataSet", false); DataSet dsStore = dataSets.LoadStoreDataXMLInToDataSet(itemOffersNodeList, dsStoreCreated, false); //MemoryStream schema = LoadSchemaFile("StoreImportSchema.xsd"); //DataSet dsStore = LoadXMLInToDataSet(itemOffersNode, schema, "StoreDataSet"); if (mDebug) { dsStore.WriteXml(String.Format(@"{0}AddAssetsToStoreInventoryItems_{1}.xml", mDebugDir, storeName)); } DataTable dtOffer = dsStore.Tables["itemOffer"]; DataTable dtItem = dsStore.Tables["item"]; DataColumn itemAssets = new DataColumn("Assets", System.Type.GetType("System.String")); itemAssets.ColumnMapping = MappingType.Element; dtItem.Columns.Add(itemAssets); foreach (DataRow offerRow in dtOffer.Rows) { DataRow[] itemRowArray = offerRow.GetChildRows("itemOffer_item"); DataRow itemRow = itemRowArray[0]; string hangoutItemId = itemRow["name"].ToString(); itemRow["Assets"] = String.Format("<![CDATA[{0}]]>", mPaymentItemsManager.GetAssetDataSetDna(hangoutItemId)); } StringWriter sw = new StringWriter(); dsStore.WriteXml(sw); XmlDocument responseTemp = new XmlDocument(); responseTemp.LoadXml(UnEscapeXml(sw.ToString())); XmlNode storeItemOffersNode = storeResponse.SelectSingleNode("/Response/store/itemOffers"); storeItemOffersNode.RemoveAll(); XmlNodeList newOfferList = responseTemp.SelectNodes("/StoreDataSet/itemOffer"); foreach (XmlNode newOffer in newOfferList) { XmlNode newChildNode = storeResponse.ImportNode(newOffer, true); storeItemOffersNode.AppendChild(newChildNode); } //storeResponse.LoadXml(responseTemp.SelectSingleNode("/StoreDataSet").InnerXml); } } catch (Exception ex) { mLogger.Error(String.Format("Error in AddAssestsToStoreInventoryItems Error: {0}\n Response: {1}", ex, response)); } return(storeResponse); }