Ejemplo n.º 1
0
        /// <summary>
        /// Edit a record utilizing a generic parameter type to house the fields to be edited.
        /// </summary>
        /// <typeparam name="T">Type parameter for this edit.</typeparam>
        /// <param name="req">The edit request object.</param>
        /// <returns></returns>
        public override async Task <IEditResponse> SendAsync <T>(IEditRequest <T> req)
        {
            if (string.IsNullOrEmpty(req.Layout))
            {
                throw new ArgumentException("Layout is required on the request.");
            }
            if (req.RecordId <= 0)
            {
                throw new ArgumentException("RecordId is required on the request and non negative.");
            }

            HttpResponseMessage response = await ExecuteRequestAsync(req);

            if (response.StatusCode == HttpStatusCode.NotFound)
            {
                return(new BaseResponse("404", "Error") as EditResponse);
            }

            try
            {
                var responseJson = await response.Content.ReadAsStringAsync();

                var responseObject = JsonConvert.DeserializeObject <EditResponse>(responseJson);

                return(responseObject);
            }
            catch (Exception ex)
            {
                // something bad happened. TODO: improve non-OK response handling
                throw new Exception($"Non-OK Response: Status = {response.StatusCode}.", ex);
            }
        }
Ejemplo n.º 2
0
 /// <summary>
 /// Adds a script to the request, with a parameter.
 /// </summary>
 /// <param name="request">The request. This is the 'this' parameter.</param>
 /// <param name="scriptName">Name of the script to be called.</param>
 /// <param name="scriptParameter">Script parameter.</param>
 /// <returns>The request instanced that was implicitly passed in which is useful for method chaining.</returns>
 public static IEditRequest <T> SetScript <T>(
     this IEditRequest <T> request,
     string scriptName,
     string scriptParameter = null)
 {
     request.Script = scriptName;
     if (!string.IsNullOrEmpty(scriptParameter))
     {
         request.ScriptParameter = scriptParameter;
     }
     return(request);
 }
Ejemplo n.º 3
0
        /// <summary>
        /// Executes an edit request.
        /// </summary>
        public override async Task <IEditResponse> SendAsync <T>(IEditRequest <T> req)
        {
            HttpResponseMessage response = await ExecuteRequestAsync(req);

            if (response.IsSuccessStatusCode)
            {
                // process response data return OK
                var resp = new EditResponse
                {
                    Messages = new List <ResponseMessage> {
                        new ResponseMessage {
                            Code = "", Message = "OK"
                        }
                    }
                };
                return(resp);
            }

            throw new Exception("Unable to complete request");
        }
Ejemplo n.º 4
0
 /// <summary>
 /// Send an Edit Record request to the FileMaker API.
 /// </summary>
 public abstract Task <IEditResponse> SendAsync <T>(IEditRequest <T> req) where T : class, new();
Ejemplo n.º 5
0
 /// <summary>
 /// Helper For Getting Raw Responses from Data API.
 /// </summary>
 public Task <HttpResponseMessage> ExecuteRequestAsync <T>(IEditRequest <T> req) => ExecuteRequestAsync(new HttpMethod("PATCH"), UpdateEndpoint(req.Layout, req.RecordId), req);
Ejemplo n.º 6
0
 /// <summary>
 /// Specify a layout to use for this request.
 /// </summary>
 /// <param name="request">The request. This is the 'this' parameter.</param>
 /// <param name="instance">Object to pull the layout from using its DataContract attribute.</param>
 /// <typeparam name="T">The type used for the edit request/response.</typeparam>
 /// <returns>The request instanced that was implicitly passed in which is useful for method chaining.</returns>
 public static IEditRequest <T> UseLayout <T>(this IEditRequest <T> request, T instance)
 {
     request.Layout = FileMakerApiClientBase.GetLayoutName(instance);
     return(request);
 }
Ejemplo n.º 7
0
 /// <summary>
 /// Specify a layout to use for this request.
 /// </summary>
 /// <param name="request">The request. This is the 'this' parameter.</param>
 /// <param name="layout">Name of the layout to use</param>
 /// <typeparam name="T">The type used for the edit request/response.</typeparam>
 /// <returns>The request instanced that was implicitly passed in which is useful for method chaining.</returns>
 public static IEditRequest <T> UseLayout <T>(this IEditRequest <T> request, string layout)
 {
     request.Layout = layout;
     return(request);
 }
Ejemplo n.º 8
0
 /// <summary>
 /// Set the data for this request.
 /// </summary>
 /// <param name="request">The request. This is the 'this' parameter.</param>
 /// <param name="data">Object containing the data for this find request record.</param>
 /// <typeparam name="T">The type used for the edit request/response.</typeparam>
 /// <returns>The request instanced that was implicitly passed in which is useful for method chaining.</returns>
 public static IEditRequest <T> SetData <T>(this IEditRequest <T> request, T data)
 {
     request.Data = data;
     return(request);
 }