public static bool SaveSiteKeys(List <Int64> ASiteKeysSetUpForUse, List <Int64> ASiteKeysToRemove) { TDBTransaction Transaction = new TDBTransaction(); bool SubmissionOK = true; PPartnerLedgerTable PartnerLedgerTable = new PPartnerLedgerTable(); PPartnerLedgerRow PartnerLedgerRow; // save site keys that can be used in p_partner_ledger DBAccess.WriteTransaction( ref Transaction, ref SubmissionOK, delegate { // create new records in p_partner_ledger if not there yet foreach (Int64 SiteKey in ASiteKeysSetUpForUse) { if (PPartnerLedgerAccess.CountViaPUnit(SiteKey, Transaction) == 0) { PartnerLedgerRow = PartnerLedgerTable.NewRowTyped(); PartnerLedgerRow.PartnerKey = SiteKey; // calculate last partner id, from older uses of this ledger number object MaxExistingPartnerKeyObj = Transaction.DataBaseObj.ExecuteScalar( String.Format("SELECT MAX(" + PPartnerTable.GetPartnerKeyDBName() + ") FROM " + PPartnerTable.GetTableDBName() + " WHERE " + PPartnerTable.GetPartnerKeyDBName() + " > {0} AND " + PPartnerTable.GetPartnerKeyDBName() + " < {1}", SiteKey, SiteKey + 500000), Transaction); if (MaxExistingPartnerKeyObj.GetType() != typeof(DBNull)) { // found a partner key for this site already: set it to last used value PartnerLedgerRow.LastPartnerId = Convert.ToInt32(Convert.ToInt64(MaxExistingPartnerKeyObj) - SiteKey); } else { // in this case there was no partner key for this site yet PartnerLedgerRow.LastPartnerId = 0; } PartnerLedgerTable.Rows.Add(PartnerLedgerRow); } } // delete records from p_partner_ledger that are no longer needed foreach (Int64 SiteKey in ASiteKeysToRemove) { PPartnerLedgerAccess.DeleteByPrimaryKey(SiteKey, Transaction); } PPartnerLedgerAccess.SubmitChanges(PartnerLedgerTable, Transaction); }); // make sure SitesList will be refreshed when called next time TPartnerCacheableWebConnector.RefreshCacheableTable(TCacheablePartnerTablesEnum.InstalledSitesList); return(SubmissionOK); }