internal ExecutionScope(ClientRuntimeContext context, string name, ExecutionScopeDisposingCallback disposingCallback) { if (context == null) { throw new ArgumentNullException("context"); } this.m_context = context; this.m_name = name; this.m_id = this.m_context.NextSequenceId; this.m_context.PendingRequest.ExecutionScopes.Push(this); this.m_clientActionExecutionScopeStart = new ClientActionExecutionScopeStart(this, this.m_name); this.m_context.PendingRequest.AddQuery(this.m_clientActionExecutionScopeStart); this.m_disposingCallback = disposingCallback; }
private ChunkStringBuilder BuildQuery() { SerializationContext serializationContext = this.SerializationContext; ChunkStringBuilder chunkStringBuilder = new ChunkStringBuilder(); XmlWriterSettings xmlWriterSettings = new XmlWriterSettings(); xmlWriterSettings.OmitXmlDeclaration = true; xmlWriterSettings.NewLineHandling = NewLineHandling.Entitize; XmlWriter xmlWriter = XmlWriter.Create(chunkStringBuilder.CreateTextWriter(CultureInfo.InvariantCulture), xmlWriterSettings); xmlWriter.WriteStartElement("Request", "http://schemas.microsoft.com/sharepoint/clientquery/2009"); xmlWriter.WriteAttributeString("AddExpandoFieldTypeSuffix", "true"); xmlWriter.WriteAttributeString("SchemaVersion", this.Context.RequestSchemaVersion.ToString()); xmlWriter.WriteAttributeString("LibraryVersion", "16.0.0.0"); if (!string.IsNullOrEmpty(this.m_context.ApplicationName)) { xmlWriter.WriteAttributeString("ApplicationName", this.m_context.ApplicationName); } xmlWriter.WriteStartElement("Actions"); Stack<ExecutionScope> stack = new Stack<ExecutionScope>(); foreach (ClientAction current in this.m_queries) { if (current is ClientActionExecutionScopeStart) { ClientActionExecutionScopeStart clientActionExecutionScopeStart = (ClientActionExecutionScopeStart)current; clientActionExecutionScopeStart.Scope.WriteStart(xmlWriter, serializationContext); stack.Push(clientActionExecutionScopeStart.Scope); } else if (current is ClientActionExecutionScopeEnd) { ClientActionExecutionScopeEnd clientActionExecutionScopeEnd = (ClientActionExecutionScopeEnd)current; if (stack.Count == 0 || stack.Pop() != clientActionExecutionScopeEnd.Scope) { throw ExceptionHandlingScope.CreateInvalidUsageException(); } clientActionExecutionScopeEnd.Scope.WriteEnd(xmlWriter, serializationContext); } else { current.WriteToXml(xmlWriter, serializationContext); } } if (stack.Count > 0) { throw ExceptionHandlingScope.CreateInvalidUsageException(); } xmlWriter.WriteEndElement(); xmlWriter.WriteStartElement("ObjectPaths"); Dictionary<long, ObjectPath> dictionary = new Dictionary<long, ObjectPath>(); while (true) { List<long> list = new List<long>(); foreach (long current2 in serializationContext.Paths.Keys) { if (!dictionary.ContainsKey(current2)) { list.Add(current2); } } if (list.Count == 0) { break; } for (int i = 0; i < list.Count; i++) { ObjectPath objectPath = this.m_context.ObjectPaths[list[i]]; objectPath.WriteToXml(xmlWriter, serializationContext); dictionary[list[i]] = objectPath; } } xmlWriter.WriteEndElement(); xmlWriter.WriteEndElement(); xmlWriter.Flush(); return chunkStringBuilder; }