Difference between revisions of "VN3056REP - Same business logic as View Report for View Cross function from Questionnaire list"
(→Design detail) |
Wikicatglobe (talk | contribs) |
||
(5 intermediate revisions by 2 users not shown) | |||
Line 1: | Line 1: | ||
+ | <accesscontrol>Main:MyGroup</accesscontrol> | ||
+ | [[Category:Miscellaneous]] | ||
+ | |||
== Introduction == | == Introduction == | ||
[[Image:ViewCrossFunction.PNG]] | [[Image:ViewCrossFunction.PNG]] | ||
Line 55: | Line 58: | ||
</source> | </source> | ||
: Re-setup and rebuild data cache in another thread | : Re-setup and rebuild data cache in another thread | ||
− | <source | + | <source lang=csharp> |
[ServerMethod] | [ServerMethod] | ||
public bool ResetupAndRebuildDcs(int pqId, int qcsId, string key) | public bool ResetupAndRebuildDcs(int pqId, int qcsId, string key) | ||
Line 73: | Line 76: | ||
[[Image: ResetupDcsForCrossDiagramGenerator.png]] | [[Image: ResetupDcsForCrossDiagramGenerator.png]] | ||
: ResetupDcs() method: | : ResetupDcs() method: | ||
− | <source | + | <source lang=csharp> |
public void ResetupDcs() | public void ResetupDcs() | ||
{ | { | ||
Line 99: | Line 102: | ||
} | } | ||
</source> | </source> | ||
− | : ResetupDcsReal() method: note that | + | : ResetupDcsReal() method: note that ''AccessFactory.CurrentInstance().ConnectionFactory.Commit();'' has to be called before building Dcs to get latest data. |
<source lang=csharp> | <source lang=csharp> | ||
private void ResetupDcsReal() | private void ResetupDcsReal() | ||
Line 127: | Line 130: | ||
| [[Trần Nguyễn Thanh Tùng]] | | [[Trần Nguyễn Thanh Tùng]] | ||
| Technical design | | Technical design | ||
+ | | NA | ||
+ | |- | ||
+ | | 0.2 | ||
+ | | 01.04.2010 | ||
+ | | [[Trần Nguyễn Thanh Tùng]] | ||
+ | | Update to bug fixed - Finish | ||
| NA | | NA | ||
|} | |} |
Latest revision as of 04:22, 18 October 2013
<accesscontrol>Main:MyGroup</accesscontrol>
Introduction
The current process of "View cross" function in Questionnaire list:
- Create / Rebuild the default data cache of selected questionnaire.
- Check if the data cache has any axises, if yes redirect to a "nearly" cross viewer page, if no, just render an error message.
Disadvantage:
- The data cache is always rebuilt if there is a change in data of questionnaire.
- If the questionnaire template of questionnaire is changed, it is too difficult to re-setup the data cache.
Design decisions
When "View Cross" function of Questionnaire list is clicked:
- If this is the first time that this function is used for selected questionnaire, create a data cache and redirect to cross viewer page.
- If not, use the same business logic as "View Report" function, show the below dialog
- If option 1 is selected, data cache will be re-setup, rebuild, and then show the cross viewer page.
- If option 2 is selected, just show the cross viewer page with the old data cache.
Design detail
- Re-make a new "Regenerate instant cross" dialog as above.
- There are two main processes for this dialog:
- The Page_Load event:
- Create default data cache
// QuestionnaireObject is a selected Questionnaire
QuestionnaireCacheSpecification qcsObject = DiagramUtilities.CreateNewDCSByQuestionnaire(QuestionnaireObject);
- The Button Ok clicked event:
- Re-setup data cache:
// _dcsId is a questionnaire cache specification ID
// _pqId is a project questionnaire ID
var pq = ProjectQuestionnaire.GetByPrimaryKey(_pqId);
var qcs = QuestionnaireCacheSpecification.GetBy(_dcsId);
var pqs = new List<ProjectQuestionnaire> { pq };
qcs.QuickSetup(pqs, true);
qcs.AxisSet = qcs.CreateDefaultAxisSet();
qcs.Save();
- Rebuild data cache:
// qcsObject is a questionnaire cache specification object
DataCacheManager.Instance.BuildDCSIfNeeded(qcsObject, true, false);
- Re-setup and rebuild data cache in another thread
[ServerMethod]
public bool ResetupAndRebuildDcs(int pqId, int qcsId, string key)
{
var identity = WindowsIdentity.GetCurrent();
var generator = new ResetupDcsForCrossDiagramGenerator(pqId, qcsId, key, identity);
var thread = new Thread(generator.ResetupDcs)
{
CurrentCulture = Thread.CurrentThread.CurrentCulture,
CurrentUICulture = Thread.CurrentThread.CurrentUICulture
};
thread.Start();
return true;
}
- Class diagram of ResetupDcsForCrossDiagramGenerator class
- ResetupDcs() method:
public void ResetupDcs()
{
if (IsInProc())
{
ResetupDcsReal();
return;
}
_identity.Impersonate();
IoC.Resolve<IAccessFactoryFactory>().CreateFactory();
try
{
ResetupDcsReal();
AppDomain.CurrentDomain.SetData(_threadkey, string.Format("Success.{0}", _dcsId));
}
catch (Exception e)
{
Abort(e);
}
finally
{
Commit();
}
}
- ResetupDcsReal() method: note that AccessFactory.CurrentInstance().ConnectionFactory.Commit(); has to be called before building Dcs to get latest data.
private void ResetupDcsReal()
{
var pq = ProjectQuestionnaire.GetByPrimaryKey(_pqId);
var qcs = QuestionnaireCacheSpecification.GetBy(_dcsId);
var pqs = new List<ProjectQuestionnaire> { pq };
qcs.QuickSetup(pqs, true);
qcs.AxisSet = qcs.CreateDefaultAxisSet();
qcs.Save();
AccessFactory.CurrentInstance().ConnectionFactory.Commit();
DataCacheManager.Instance.BuildDCSIfNeeded(qcs, true, true);
}
Document revisions
Version No. | Date | Changed By | Description | Svn revision |
0.1 | 23.03.2010 | Trần Nguyễn Thanh Tùng | Technical design | NA |
0.2 | 01.04.2010 | Trần Nguyễn Thanh Tùng | Update to bug fixed - Finish | NA |