📄 companypreferenceaccessor.cs.svn-base
字号:
using System;
using System.Collections;
using System.Data.Common;
using System.IO;
using System.Xml.Serialization;
using DatabaseUtil;
using Mied.BusinessObject;
using Mied.BusinessObject.Bills;
using Mied.BusinessObject.Preferences;
using Mied.DAL.Internal;
using Mied.DAL.TableSchema;
using NativeInterop;
namespace Mied.DAL.Accesses
{
public class CompanyPreferenceAccessor : AccessorBase
{
public CompanyPreferenceAccessor(MiedDatabase database)
: base(database, CompanyPreferenceSchema.TableName)
{
this.Saved += new EntityHandle(CompanyPreferenceAccessor_Saved);
}
public CompanyPreference Select()
{
if (this.Cache != null)
return (CompanyPreference)this.Cache.Clone();
IList list = this.SelectList();
if (list.Count == 0)
{
CompanyPreference preference = new CompanyPreference();
this.Save(preference);
}
else
{
CompanyPreference preference = (CompanyPreference)list[0];
this.CreateCache(preference);
}
return this.Select();
}
protected override void SaveBefore(Entity entity, DbTransaction transaction)
{
base.DeleteAll(transaction);
}
protected override CommandFieldValueList BuildPairList(Entity entity)
{
CompanyPreference preference = (CompanyPreference)entity;
CommandFieldValueList pairList = new CommandFieldValueList(preference.ID);
byte[] xml = ConvertPreferenceToXml(preference);
pairList.AddZip(CompanyPreferenceSchema.FieldXml, xml);
return pairList;
}
protected override Entity ReadEntity(RecordReader reader)
{
byte[] xml = reader.GetZipBytes(CompanyPreferenceSchema.FieldXml);
CompanyPreference preference = ConvertXmlToPreference(xml);
preference.ID = reader.GetInt32(CompanyPreferenceSchema.FieldID);
return preference;
}
protected override void OnDatabaseClosed()
{
this.Cache = null;
}
private void CompanyPreferenceAccessor_Saved(Entity entity)
{
this.CreateCache((CompanyPreference)entity);
Invoice.OverDueDays = this.Cache.OverdueRules.OverDueDays;
}
private void CreateCache(CompanyPreference preference)
{
if (this.Cache == null)
this.Cache = new CompanyPreference();
preference.CopyTo(this.Cache);
}
private CompanyPreference Cache = null;
private static byte[] ConvertPreferenceToXml(CompanyPreference data)
{
byte[] xmlByteArray = null;
// if email preference is not set yet, we try to get it from registry to which earlier versions stored
//
if (data.EmailPreference.Empty)
{
LegacyWrapper.TryLoadEmailPreferenceFromRegistry(data.EmailPreference);
}
// we need encrypt the password and then set back once the serialization is done
//
string backupPassword = data.EmailPreference.Password;
data.EmailPreference.Password = JiaJieMi.JiaMiStringToString(backupPassword);
try
{
XmlSerializer serializer = new XmlSerializer(typeof(CompanyPreference));
MemoryStream memoryXmlStream = new MemoryStream();
TextWriter writer = new StreamWriter(memoryXmlStream);
serializer.Serialize(writer, data);
writer.Close();
// prepare the buffer
xmlByteArray = memoryXmlStream.ToArray();
memoryXmlStream.Close();
}
catch (Exception e)
{
throw e;
}
finally
{
data.EmailPreference.Password = backupPassword;
}
return xmlByteArray;
}
private static CompanyPreference ConvertXmlToPreference(byte[] xml)
{
CompanyPreference settings = new CompanyPreference();
XmlSerializer serializer = new XmlSerializer(typeof(CompanyPreference));
MemoryStream memoryStream = new MemoryStream(xml);
settings = (CompanyPreference)serializer.Deserialize(memoryStream);
// decrypt the password
settings.EmailPreference.Password = JiaJieMi.JieMiStringToString(settings.EmailPreference.Password);
return settings;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -