コード例 #1
0
        public override void ExecuteQuery(CommerceQueryOperation queryOperation, OperationCacheDictionary operationCache, CommerceQueryOperationResponse response)
        {
            int numToTake = 2000;

            lock (_addressLoaderLock) {
                for (int i = 0; i < response.CommerceEntities.Count && response.CommerceEntities.Count < numToTake; i += numToTake)   // only load addresses if we have less than 2000; any more than that will require a incoming filter
                {
                    List <string> preferredAddressIds = new List <string>();
                    Dictionary <string, string> addressToParentIdMap = new Dictionary <string, string>();
                    List <CommerceEntity>       currentBatch         = response.CommerceEntities.Skip(i).Take(numToTake).ToList();

                    foreach (var entity in currentBatch)
                    {
                        string preferredAddressId = entity.GetPropertyValue("GeneralInfo.preferred_address") as string;
                        if (!String.IsNullOrEmpty(preferredAddressId) && !addressToParentIdMap.ContainsKey(preferredAddressId))
                        {
                            preferredAddressIds.Add("'" + preferredAddressId + "'");
                            addressToParentIdMap.Add(preferredAddressId, entity.Id);
                        }
                    }
                    // query them out
                    if (preferredAddressIds.Count == 0)
                    {
                        continue;
                    }

                    CommerceResourceCollection csResources = SiteHelper.GetCsConfig();

                    String connStr = csResources["Biz Data Service"]["s_BizDataStoreConnectionString"].ToString();
                    //ProfileContext pContext = CommerceSiteContexts.Profile[GetSiteName()];
                    string         fields = string.Join(", ", Array.ConvertAll(this.ProfileEntityMappings.PropertyMappings.ToArray(), p => p.Value));
                    string         keys   = string.Join(", ", Array.ConvertAll(this.ProfileEntityMappings.PropertyMappings.ToArray(), p => p.Key));
                    ProfileContext ctxt   = CommerceSiteContexts.Profile[SiteHelper.GetSiteName()];

                    string dataSQLText = "SELECT *  FROM [BEK_Commerce_profiles].[dbo].[Addresses] WHERE u_address_id in (" + String.Join(",", preferredAddressIds.ToArray()) + ")";

                    try {
                        using (OleDbConnection conn = new OleDbConnection(connStr)) {
                            conn.Open();

                            using (OleDbCommand cmdRead = new OleDbCommand(dataSQLText, conn)) {
                                using (OleDbDataReader dataReader = cmdRead.ExecuteReader()) {
                                    while (dataReader.Read())
                                    {
                                        CommerceEntity entity = new CommerceEntity("Address");

                                        entity.Id = dataReader.GetString("u_address_id");
                                        entity.SetPropertyValue("LastName", dataReader.GetString("u_last_name"));
                                        entity.SetPropertyValue("FirstName", dataReader.GetString("u_first_name"));
                                        entity.SetPropertyValue("AddressName", dataReader.GetString("u_address_name"));
                                        entity.SetPropertyValue("AddressType", dataReader.GetNullableInt("i_address_type"));
                                        entity.SetPropertyValue("Description", dataReader.GetString("u_description"));
                                        entity.SetPropertyValue("Line1", dataReader.GetString("u_address_line1"));
                                        entity.SetPropertyValue("Line2", dataReader.GetString("u_address_line2"));
                                        entity.SetPropertyValue("City", dataReader.GetString("u_city"));
                                        entity.SetPropertyValue("StateProvinceCode", dataReader.GetString("u_region_code"));
                                        entity.SetPropertyValue("StateProvinceName", dataReader.GetString("u_region_name"));
                                        entity.SetPropertyValue("ZipPostalCode", dataReader.GetString("u_postal_code"));
                                        entity.SetPropertyValue("CountryRegionCode", dataReader.GetString("u_country_code"));
                                        entity.SetPropertyValue("CountryRegionName", dataReader.GetString("u_country_name"));
                                        entity.SetPropertyValue("Telephone", dataReader.GetString("u_tel_number"));
                                        entity.SetPropertyValue("TelephoneExtension", dataReader.GetString("u_tel_extension"));
                                        entity.SetPropertyValue("LocaleId", dataReader.GetString("i_locale"));
                                        entity.SetPropertyValue("DateModified", dataReader.GetNullableDateTime("dt_date_last_changed"));
                                        entity.SetPropertyValue("DateCreated", dataReader.GetNullableDateTime("dt_date_created"));

                                        currentBatch.Where(x => x.Id == (addressToParentIdMap[entity.Id])).FirstOrDefault()
                                        .Properties.Add("PreferredAddress", new CommerceRelationship(entity));
                                    }
                                    dataReader.Close();
                                }
                            }
                        }
                    } catch (Exception ex) {
                        throw new ApplicationException("Error loading organization addresses", ex);
                    }
                }
            }
        }