Example #1
0
        private async Task InitializeInternal(EditInitializeParams initParams, Connector connector,
                                              QueryRunner queryRunner, Func <Task> successHandler, Func <Exception, Task> failureHandler)
        {
            try
            {
                // Step 1) Look up the SMO metadata
                string[] namedParts = GetEditTargetName(initParams);
                objectMetadata = metadataFactory.GetObjectMetadata(await connector(), namedParts,
                                                                   initParams.ObjectType);

                // Step 2) Get and execute a query for the rows in the object we're looking up
                EditSessionQueryExecutionState state = await queryRunner(ConstructInitializeQuery(objectMetadata, initParams.Filters));

                if (state.Query == null)
                {
                    string message = state.Message ?? SR.EditDataQueryFailed;
                    throw new Exception(message);
                }

                // Step 3) Setup the internal state
                associatedResultSet = ValidateQueryForSession(state.Query);
                NextRowId           = associatedResultSet.RowCount;
                EditCache           = new ConcurrentDictionary <long, RowEditBase>();
                IsInitialized       = true;
                objectMetadata.Extend(associatedResultSet.Columns);

                // Step 4) Return our success
                await successHandler();
            }
            catch (Exception e)
            {
                await failureHandler(e);
            }
        }