EndOrderedGroup メソッド
変更バッチ内で順序付けられている、前に開かれたグループを閉じます。
名前空間: Microsoft.Synchronization
アセンブリ: Microsoft.Synchronization (Microsoft.Synchronization.dll 内)
構文
'宣言
Public Sub EndOrderedGroup ( _
itemId As SyncId, _
madeWithKnowledge As SyncKnowledge _
)
'使用
Dim instance As ChangeBatchBase
Dim itemId As SyncId
Dim madeWithKnowledge As SyncKnowledge
instance.EndOrderedGroup(itemId, madeWithKnowledge)
public void EndOrderedGroup(
SyncId itemId,
SyncKnowledge madeWithKnowledge
)
public:
void EndOrderedGroup(
SyncId^ itemId,
SyncKnowledge^ madeWithKnowledge
)
member EndOrderedGroup :
itemId:SyncId *
madeWithKnowledge:SyncKnowledge -> unit
public function EndOrderedGroup(
itemId : SyncId,
madeWithKnowledge : SyncKnowledge
)
パラメーター
- itemId
型 : Microsoft.Synchronization. . :: . .SyncId
この順序付けられているグループの項目 ID の閉じた上限です。上限として無限を指定するには、Infinity を使用します。
- madeWithKnowledge
型 : Microsoft.Synchronization. . :: . .SyncKnowledge
このグループを作成したレプリカのナレッジです。
例外
例外 | 条件 |
---|---|
ArgumentNullException | itemId または madeWithKnowledge が null Nothing nullptr unit NULL 参照 (Visual Basic では Nothing) です。 |
ObjectDisposedException | この ChangeBatchBase は破棄されています。 |
SyncInvalidOperationException | 完全な列挙体を必要とする変更が発生しましたが、現在のバッチが最後のバッチであり、バッチ境界が無限です。 |
説明
グループを閉じると、新しいグループを開くまで、項目変更を変更バッチに追加できなくなります。
例
次の例では、変更バッチ内の順序付られているグループに項目を追加して、GetChangeBatch を実装します。項目は、その項目の変更バージョンが同期先ナレッジに含まれていない場合にのみ追加されます。
Public Overrides Function GetChangeBatch(ByVal batchSize As UInteger, ByVal destinationKnowledge As SyncKnowledge) As ChangeBatch
' The destination knowledge must be converted to be compatible with the source replica
' before it can be used.
Dim mappedDestKnowledge As SyncKnowledge = _knowledge.MapRemoteKnowledgeToLocal(destinationKnowledge)
' Create a new change batch, initialized by using the current knowledge of the source replica
' and a new ForgottenKnowledge object.
Dim changeBatch As New ChangeBatch(IdFormats, GetKnowledge(), New ForgottenKnowledge())
' Start a group of changes in the change batch. The group is ordered by item ID.
' _getChangeBatchCurrent is 0 the first time GetChangeBatch is called, and is used to track the
' position in the metadata store for subsequent calls to GetChangeBatch.
changeBatch.BeginOrderedGroup(_items.Values(_getChangeBatchCurrent).GlobalId)
' itemsAdded is incremented each time a change is added to the change batch. When itemsAdded
' is greater than the requested batch size, enumeration stops and the change batch is returned.
Dim itemsAdded As Integer = 0
Dim itemMeta As ItemMetadata
' Enumerate items and add a change to the change batch if it is not contained in the
' destination knowledge.
' _items is a SortedList that contains ItemMetadata objects that are ordered by item ID.
While itemsAdded <= batchSize AndAlso _getChangeBatchCurrent < _items.Count
itemMeta = _items.Values(_getChangeBatchCurrent)
Dim kind As ChangeKind = If((itemMeta.IsDeleted), ChangeKind.Deleted, ChangeKind.Update)
Dim change As New ItemChange(IdFormats, ReplicaId, itemMeta.GlobalId, kind, itemMeta.CreationVersion, itemMeta.ChangeVersion)
' If the change is not contained in the destination knowledge, add it to the change batch.
If Not mappedDestKnowledge.Contains(change) Then
changeBatch.AddChange(change)
itemsAdded += 1
End If
_getChangeBatchCurrent += 1
End While
' End the group of changes in the change batch. Pass the current source knowledge.
changeBatch.EndOrderedGroup(_items.Values(_getChangeBatchCurrent - 1).GlobalId, _knowledge)
' When all items in the metadata store have been enumerated, set this batch as the
' last batch.
If _getChangeBatchCurrent = _items.Count Then
changeBatch.SetLastBatch()
End If
Return changeBatch
End Function
public override ChangeBatch GetChangeBatch(uint batchSize, SyncKnowledge destinationKnowledge)
{
// The destination knowledge must be converted to be compatible with the source replica
// before it can be used.
SyncKnowledge mappedDestKnowledge = _knowledge.MapRemoteKnowledgeToLocal(destinationKnowledge);
// Create a new change batch, initialized by using the current knowledge of the source replica
// and a new ForgottenKnowledge object.
ChangeBatch changeBatch = new ChangeBatch(IdFormats, GetKnowledge(), new ForgottenKnowledge());
// Start a group of changes in the change batch. The group is ordered by item ID.
// _getChangeBatchCurrent is 0 the first time GetChangeBatch is called, and is used to track the
// position in the metadata store for subsequent calls to GetChangeBatch.
changeBatch.BeginOrderedGroup(_items.Values[_getChangeBatchCurrent].GlobalId);
// itemsAdded is incremented each time a change is added to the change batch. When itemsAdded
// is greater than the requested batch size, enumeration stops and the change batch is returned.
int itemsAdded = 0;
ItemMetadata itemMeta;
// Enumerate items and add a change to the change batch if it is not contained in the
// destination knowledge.
// _items is a SortedList that contains ItemMetadata objects that are ordered by item ID.
for (; itemsAdded <= batchSize && _getChangeBatchCurrent < _items.Count; _getChangeBatchCurrent++)
{
itemMeta = _items.Values[_getChangeBatchCurrent];
ChangeKind kind = (itemMeta.IsDeleted) ? ChangeKind.Deleted : ChangeKind.Update;
ItemChange change = new ItemChange(IdFormats, ReplicaId, itemMeta.GlobalId, kind, itemMeta.CreationVersion,
itemMeta.ChangeVersion);
// If the change is not contained in the destination knowledge, add it to the change batch.
if (!mappedDestKnowledge.Contains(change))
{
changeBatch.AddChange(change);
itemsAdded++;
}
}
// End the group of changes in the change batch. Pass the current source knowledge.
changeBatch.EndOrderedGroup(_items.Values[_getChangeBatchCurrent - 1].GlobalId, _knowledge);
// When all items in the metadata store have been enumerated, set this batch as the
// last batch.
if (_getChangeBatchCurrent == _items.Count)
{
changeBatch.SetLastBatch();
}
return changeBatch;
}