本文整理汇总了C#中SIL.FieldWorks.FDO.FdoCache.StoreSync方法的典型用法代码示例。如果您正苦于以下问题:C# FdoCache.StoreSync方法的具体用法?C# FdoCache.StoreSync怎么用?C# FdoCache.StoreSync使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类SIL.FieldWorks.FDO.FdoCache
的用法示例。
在下文中一共展示了FdoCache.StoreSync方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: Synchronize
/// ------------------------------------------------------------------------------------
/// <summary>
/// Cycle through the applications main windows and synchronize them with database
/// changes.
/// </summary>
/// <param name="sync">synchronization information record</param>
/// <param name="cache">database cache</param>
/// <returns>false if a refreshall was performed or presync failed; this suppresses
/// subsequent sync messages. True to continue processing.</returns>
/// ------------------------------------------------------------------------------------
public virtual bool Synchronize(SyncInfo sync, FdoCache cache)
{
CheckDisposed();
if (m_suppressedCaches.ContainsKey(cache))
{
Queue<SyncInfo> messages = m_suppressedCaches[cache].Queue;
if (!messages.Contains(sync))
messages.Enqueue(sync);
return true;
}
cache.StoreSync(SyncGuid, sync);
if (sync.msg == SyncMsg.ksyncFullRefresh || sync.msg == SyncMsg.ksyncCustomField)
{
RefreshAllViews(cache);
return false;
}
foreach (IFwMainWnd wnd in MainWindows)
{
if (wnd.Cache == cache && !wnd.PreSynchronize(sync))
return false;
}
if (sync.msg == SyncMsg.ksyncWs)
{
// REVIEW TeTeam: AfLpInfo::Synchronize calls AfLpInfo::FullRefresh, which
// clears the cache, loads the styles, loads ws and updates wsf, load project
// basics, updates external link root, load overlays and refreshes possibility
// lists. I don't think we need to do any of these here.
RefreshAllViews(cache);
return false;
}
else if (sync.msg == SyncMsg.ksyncPromoteEntry)
{
// Review: Write code here to deal with this case. Look at
// AfLpInfo::Syncronize to see what's necessary.
// This would be relevant to an application that uses subentries (like Data Notebook--
// if it used FwApp).
}
else if (sync.msg == SyncMsg.ksyncSimpleEdit)
{
// Use the UpdatePropIfCached method to update anything that changed that we care about.
// Todo: need to get Synchronize called for each new syncinfo in DB on window activate.
IVwOleDbDa odd = cache.VwOleDbDaAccessor;
int hvo = sync.hvo;
int flid = sync.flid;
FieldType iType = cache.GetFieldType(flid);
switch(iType)
{
case FieldType.kcptMultiString:
case FieldType.kcptMultiUnicode:
case FieldType.kcptMultiBigString:
case FieldType.kcptMultiBigUnicode:
// Try all active WS to see if cached. (Pathologically, if some wss are used for both,
// they will be updated twice.)
foreach (int ws in cache.LangProject.VernWssRC.HvoArray)
odd.UpdatePropIfCached(hvo, flid, (int)iType, ws);
foreach (int ws in cache.LangProject.AnalysisWssRC.HvoArray)
odd.UpdatePropIfCached(hvo, flid, (int)iType, ws);
// This will usually prevent a double-update; pathologically, one might still happen
// if the user ws is in the analysis or vernacular lists but is not the first analysis one.
if (cache.DefaultUserWs != cache.DefaultAnalWs)
odd.UpdatePropIfCached(hvo, flid, (int)iType, cache.DefaultUserWs);
break;
case 0:
// This is very rare but possible. Do nothing since kcptNull is not a real data
// type, hence cannot have any data.
break;
default:
odd.UpdatePropIfCached(hvo, flid, (int)iType, 0);
break;
}
return true;
}
foreach (IFwMainWnd wnd in MainWindows)
{
if (wnd.Cache == cache && !wnd.Synchronize(sync))
{
// The window itself was not able to process the message successfully;
// play safe and refresh everything
RefreshAllViews(cache);
return false;
}
}
//.........这里部分代码省略.........