Site Tools


guides:ws_payloads_lock_unlock_finalize

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
guides:ws_payloads_lock_unlock_finalize [2020/08/24 00:45] brett.zamoraguides:ws_payloads_lock_unlock_finalize [2020/08/24 23:30] (current) brett.zamora
Line 155: Line 155:
 } }
 </code> </code>
 +
 +
 +**Comment 1:**
 +
 +Following is a C# / .NET sample code snippet that shows how to call the web services associated with locking, unlocking, and finalizing a payload.
 +
 +The lock, unlock, and finalize web services are web services that are used as part of the send payload and retrieve payload process flow.
 +
 +Payloads that are 'Sent' (uploaded) are uploaded as .tmp files and the finalize web service is used to rename the .tmp extension to .xml.
 +
 +Payloads that are 'Retrieved' must be locked before they can be retrieved. If the retrieval is successful and any validation requirements are satisfied, then the remote payload can be deleted with the [[guides:ws_payloads_delete_payload|payloads:delete_payload]] web service, otherwise the payload can be unlocked and the callers application will determine the next steps in their flow.
 +
 +The sample code snippets that appear below show the usage for all 3 web services. (Lock, Unlock, Finalize)
 +
 +These snippet of code was derived from the [[guides:web_service_toolbox_project|Web Service Toolbox]] that is available on the CeRTNA Wiki. The sample application is intended for easy to read demonstration purposes and not production quality code. The [[guides:web_service_toolbox_project|Web Service Toolbox]] application is documented, on the CeRTNA Wiki, to aid in understanding the code snippets shown below.
 +
 +
 +**Snippet 1: Lock/Unlock**
 +
 +
 +<code C#>
 +private bool LockUnlockRemoteFile(string strRepositoryType, string strFileName, string strAction)
 +{
 +    bool rc = false;  //Default
 +
 +    if (strAction == "lock")
 +    {
 +        tbMessageLine.Text = "Locking remote file " + strFileName;
 +    }
 +    else if (strAction == "unlock")
 +    {
 +        tbMessageLine.Text = "Unlocking remote file " + strFileName;
 +    }
 +    else
 +    {
 +        tbMessageLine.Text = "";
 +    }
 +
 +    RestClient client = null;
 +    RestRequest request = null;
 +    IRestResponse response = null;
 +
 +    string strURL = "https://apex-prd.certna.org/APEX/Service/APEXPublicServer.svc/user/login";
 +
 +    // Password has to be hashed.
 +    // New convention uses a Salt value from the user record
 +    // See the Login web service for more detail.
 +
 +    string strSalt = GetSalt(tbUserName.Text);
 +    string strPassword = tbPassword.Password.ToString();
 +
 +    string strHashedPassword = HashPassword(strPassword, strSalt);
 +
 +    string strParms = "{\n\t\"user_name\" : \"";
 +    strParms += tbUserName.Text;
 +    strParms += "\",\n\t\"password\" : \"";
 +    strParms += strHashedPassword;
 +    strParms += "\"\n}";
 +
 +    client = new RestClient(strURL);
 +    request = new RestRequest(Method.POST);
 +
 +    request.AddHeader("Cache-Control", "no-cache");
 +    request.AddHeader("Content-Type", "application/json");
 +
 +    request.AddParameter("Login", strParms, ParameterType.RequestBody);
 +    response = client.Execute(request);
 +
 +    if (response.IsSuccessful)
 +    {
 +        var jsonResult1 = JsonConvert.DeserializeObject<dynamic>(response.Content);
 +        string token = jsonResult1.access_token;
 +
 +        strURL = null;
 +        client = null;
 +        request = null;
 +        response = null;
 +
 +        strURL = "https://apex-prd.certna.org/APEX/Service/APEXPublicServer.svc/payloads/" + strRepositoryType + "/" + strFileName + "?operation=" + strAction;  
 +
 +        client = new RestClient(strURL);
 +        request = new RestRequest(Method.PATCH);
 +
 +        request.AddHeader("Cache-Control", "no-cache");
 +        request.AddHeader("access_token", token);
 +        response = client.Execute(request);
 +
 +        if (response.IsSuccessful)
 +        {
 +            if (strAction == "lock")
 +            {
 +                tbMessageLine.Text = "Remote file " + strFileName + " successfully locked.";
 +            }
 +            else if (strAction == "unlock")
 +            {
 +                tbMessageLine.Text = "Remote file " + strFileName + " successfully unlocked.";
 +            }
 +            else
 +            {
 +                tbMessageLine.Text = "";
 +            }
 +            rc = true;
 +        }
 +        else
 +        {
 +            var jsonResult2 = JsonConvert.DeserializeObject<dynamic>(response.Content);
 +            string strMessage = jsonResult2.Exception.Message;
 +            tbMessageLine.Clear();
 +            tbMessageLine.Text = strMessage;
 +        }
 +    }
 +    else
 +    {
 +        var jsonResult2 = JsonConvert.DeserializeObject<dynamic>(response.Content);
 +        tbMessageLine.Text = jsonResult2.ToString();
 +    }
 +    return (rc);
 +}
 +</code>
 +
 +
 +**Snippet 2: Finalize**
 +
 +The following is just a fragment of code that was copied over from the [[guides:ws_payloads_send_payload|payloads:send_payload]] documentation
 +
 +<code C#>
 +var jsonResult2 = JsonConvert.DeserializeObject<dynamic>(response.Content);
 +string strRemoteFileName = jsonResult2.result;
 +
 +// You must finalize the remote file to change the extension from .tmp to .xml
 +            
 +string strAction = "finalize";
 +
 +strURL = null;
 +client = null;
 +request = null;
 +response = null;
 +
 +strURL = "https://apex-prd.certna.org/APEX/Service/APEXPublicServer.svc/payloads/" + strRepositoryType + "/" + strRemoteFileName + "?operation=" + strAction;  
 +
 +client = new RestClient(strURL);
 +request = new RestRequest(Method.PATCH);
 +
 +request.AddHeader("Cache-Control", "no-cache");
 +request.AddHeader("access_token", token);
 +response = client.Execute(request);
 +
 +if (response.IsSuccessful)
 +{
 +    tbMessageLine.Text = "XML file " + strFileName+" successfully sent.";
 +    rc = true;
 +}
 +else
 +{
 +    var jsonResult3 = JsonConvert.DeserializeObject<dynamic>(response.Content);
 +    string strMessage = jsonResult3.Exception.Message;
 +    tbMessageLine.Text = strMessage;
 +}
 +</code>
 +
 +
 +
 +
 +**Comment 2:**
 +
 +A nice utility for experimenting with web service calls is POSTMAN. You can download a free version of POSTMAN from the following URL: https://www.getpostman.com/apps
 +
 +
 +
  
  
guides/ws_payloads_lock_unlock_finalize.1598229920.txt.gz · Last modified: by brett.zamora