short version - i got engaged this weekend.
long version - http://www.tatochip.com
An interesing opinion article over at ArsTechnica on the hostile takeover of PeopleSoft raises an interesting point about how it could be really bad for everyone, especially colleges and universities who've become somewhat dependent on PS for the cost-effectiveness of its product line. What's interesting, however, is the comment that SAP, PeopleSoft, and Oracle are the only major ERP/CRM vendors out there. What about MS-CRM? Sure, it had some problems in the outset, but i've seen it, and it totally “kicks the llama's @$%.” What's more is the customizability it offers via .NET coding (like we mind extending anything, right?).
So i've done this before, but for the life of me can't figure out why i can't do it again. When you place a DataSet into the web server's cache, it stands to reason that at some point, you'll want to once again reload the same cache item with the DataSet, once again from the database itself. Solution? Use the CacheItemRemovedCallback delegate to basically call the same routine that queries the data, builds a new DataSet, and places it back into the cache automatically, say every 10 minutes or so.
Thing is, if i use the code below, the CacheItemRemovedCallback delegate i specify gets called right away, and then never again. Anyone seen this before? Solutions?
Here's the code:
public class CachedAuthors : System.Web.UI.Page
{
protected System.Web.UI.WebControls.DataGrid dg;
DataSet dsPubs;
CacheItemRemovedCallback cb = null;
private void Page_Load(object sender, System.EventArgs e)
{
LoadData();
}
public void ReCache(string name, object o, CacheItemRemovedReason reason)
{
CacheData();
StreamWriter writer = new StreamWriter(@"C:\CacheLog.txt",true);
writer.WriteLine(DateTime.Now.ToString());
writer.Close();
}
void LoadData()
{
dsPubs = new DataSet();
CacheData();
dsPubs = (DataSet)Cache["dsPubs"];
dg.DataSource = dsPubs.Tables[0];
dg.DataBind();
}
void CacheData()
{
if(Cache["dsPubs"] == null)
{
cb =
new CacheItemRemovedCallback(this.ReCache);
SqlDataAdapter da = new SqlDataAdapter("select * from authors",
"Data Source=(local); User ID=sa; Password=pass4Sql; initial catalog=pubs");
da.Fill(dsPubs);
Cache.Insert("dsPubs",
dsPubs,
null,
DateTime.Now.AddSeconds(10),
TimeSpan.Zero,
CacheItemPriority.High,
cb);
Cache["dsPubs"] = dsPubs;
}
}
#region Web Form Designer generated code
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: This call is required by the ASP.NET Web Form Designer.
//
InitializeComponent();
base.OnInit(e);
}
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.Load += new System.EventHandler(this.Page_Load);
}
#endregion
}
So i installed Reporting Services today, too. Thing is, if i try to create a BI project in Studio 2003, i get the same error every time. “There is an error in the XML document(0,0).” i googled it, but no good hits as far as i can find yet. Anyone else?
So i have this idea, and i'm experiencing a little difficulty with an XPath expression i need to write. Here's a serialized Person object:
<Person xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<DOB>1972-10-31T00:00:00.0000000-05:00</DOB>
</Person>
So what i want to find out is this. i need to write an XPath query that basically takes a looks to see if the Person/DOB node is less than today. i've tried a few variations, but none seem to work? Anyone want to lend a hand with some simple XPath to query with a date?
(shames self for not knowing)
Say you've got two types. AType and BType. Inside of a method call, an instance of AType a creates an instance of BType b. So like this:
class AType
{
void DoSomeWork()
{
BType b = new BType();
}
}
Is there some way of reflecting (or remembering, i guess you could say) backwards in the stack to figure out what Type was the creating Type for your new instance?