Apex Class Returning Null Value

The name of the pictureThe name of the pictureThe name of the pictureClash Royale CLAN TAG#URR8PPP





.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty margin-bottom:0;







up vote
2
down vote

favorite












I've got a FormAssembly form that creates a record in the EFI_Certificate__c object in Salesforce upon submit. The form accepts PayPal payments. Because the payment happens on PayPal's site, outside of FormAssembly, it creates the SF record before the person proceeds to the PayPal site for payment. Our staff needs to know when/if payment is posted so I need to be able to pass PayPal's IPN (Instant Payment Notification) that is normally posted on the FormAssembly record (once PayPal payment is complete) through to Salesforce. They have a nice article on how to do this using a VisualForce page and some apex coding. I have followed the instructions in the article, but the parmCustom variable in the apex is returning a null value instead of the value in the FormAssemblyID field. I have a included a link to the original article posted by FormAssembly, along with my apex class, VF page, and error log. Any help would be much appreciated.



https://help.formassembly.com/help/make-salesforce-and-paypal-work-together



Apex Class (IPNHandlerController)



public class IPNHandlerController 

public PageReference myIPNupdate()
try
PageReference pageRef = ApexPages.currentPage();
//Get the value of the 'custom' parameter from current page
String paramCustom = pageRef.getParameters().get('custom');
certificate = [select Id,paid__c from EFI_Certificate__c where FormAssemblyID__c = :paramCustom];

String content = '';
for(String key : pageRef.getParameters().keySet())
//Note that there is no guarantee of order in the parameter key map.
content += key + ' : ' + pageRef.getParameters().get(key) + 'n';

certificate.PayPalInfo__c = content;
certificate.paid__c = True;
update certificate;

PageReference newPage = new ApexPages.StandardController(certificate).view();
newPage.setRedirect(true);

return newPage;
catch (System.Exception e)
//A failure occurred
system.debug(e);
return null;



public EFI_Certificate__c certificate get; set;

public IPNHandlerController()




VisualForce page (IPNHandler)



<apex:page controller="IPNHandlerController" action="!myIPNupdate" />


Apex Log



43.0 APEX_CODE,FINEST;APEX_PROFILING,INFO;CALLOUT,INFO;DB,INFO;NBA,INFO;SYSTEM,DEBUG;VALIDATION,INFO;VISUALFORCE,INFO;WAVE,INFO;WORKFLOW,INFO
17:34:58.0 (538115)|USER_INFO|[EXTERNAL]|005A0000000PhGW|webforms@eflorida.force.com|Greenwich Mean Time|GMTZ
17:34:58.0 (631367)|EXECUTION_STARTED
17:34:58.0 (640269)|CODE_UNIT_STARTED|[EXTERNAL]|0662A000002Zn4D|VF: /apex/ipnhandler
17:34:58.0 (6820201)|PUSH_TRACE_FLAGS|[EXTERNAL]|01p2A000004Hegj|IPNHandlerController|APEX_CODE,FINEST;APEX_PROFILING,INFO;CALLOUT,INFO;DB,INFO;NBA,INFO;SYSTEM,DEBUG;VALIDATION,INFO;VISUALFORCE,INFO;WAVE,INFO;WORKFLOW,INFO
17:34:58.0 (6986310)|SYSTEM_MODE_ENTER|true
17:34:58.0 (7544101)|HEAP_ALLOCATE|[72]|Bytes:3
17:34:58.0 (7582302)|HEAP_ALLOCATE|[77]|Bytes:152
17:34:58.0 (7595133)|HEAP_ALLOCATE|[342]|Bytes:408
17:34:58.0 (7608139)|HEAP_ALLOCATE|[355]|Bytes:408
17:34:58.0 (7619720)|HEAP_ALLOCATE|[467]|Bytes:48
17:34:58.0 (7659053)|HEAP_ALLOCATE|[139]|Bytes:6
17:34:58.0 (7688909)|HEAP_ALLOCATE|[EXTERNAL]|Bytes:92
17:34:58.0 (7695469)|HEAP_ALLOCATE|[EXTERNAL]|Bytes:7
17:34:58.0 (7699284)|HEAP_ALLOCATE|[EXTERNAL]|Bytes:2
17:34:58.0 (7721471)|METHOD_ENTRY|[1]|01p2A000004Hegj|IPNHandlerController.IPNHandlerController()
17:34:58.0 (7732073)|STATEMENT_EXECUTE|[1]
17:34:58.0 (7738189)|STATEMENT_EXECUTE|[1]
17:34:58.0 (7748062)|METHOD_EXIT|[1]|IPNHandlerController
17:34:58.0 (8004463)|HEAP_ALLOCATE|[EXTERNAL]|Bytes:8
17:34:58.0 (8016225)|VARIABLE_SCOPE_BEGIN|[32]|this|IPNHandlerController|true|false
17:34:58.0 (8083355)|VARIABLE_ASSIGNMENT|[32]|this||0x4a67988c
17:34:58.0 (8095725)|STATEMENT_EXECUTE|[1]
17:34:58.0 (8098380)|STATEMENT_EXECUTE|[30]
17:34:58.0 (8119645)|HEAP_ALLOCATE|[EXTERNAL]|Bytes:6
17:34:58.0 (10166826)|STATEMENT_EXECUTE|[32]
17:34:58.0 (10445335)|POP_TRACE_FLAGS|[EXTERNAL]|01p2A000004Hegj|IPNHandlerController|APEX_CODE,FINEST;APEX_PROFILING,INFO;CALLOUT,INFO;DB,INFO;NBA,INFO;SYSTEM,DEBUG;VALIDATION,INFO;VISUALFORCE,INFO;WAVE,INFO;WORKFLOW,INFO
17:34:58.0 (10676401)|PUSH_TRACE_FLAGS|[EXTERNAL]|01p2A000004Hegj|IPNHandlerController|APEX_CODE,FINEST;APEX_PROFILING,INFO;CALLOUT,INFO;DB,INFO;NBA,INFO;SYSTEM,DEBUG;VALIDATION,INFO;VISUALFORCE,INFO;WAVE,INFO;WORKFLOW,INFO
17:34:58.0 (10759592)|HEAP_ALLOCATE|[EXTERNAL]|Bytes:8
17:34:58.0 (10770212)|VARIABLE_SCOPE_BEGIN|[3]|this|IPNHandlerController|true|false
17:34:58.0 (10807035)|VARIABLE_ASSIGNMENT|[3]|this||0x4a67988c
17:34:58.0 (10825571)|STATEMENT_EXECUTE|[3]
17:34:58.0 (10828420)|STATEMENT_EXECUTE|[4]
17:34:58.0 (10830729)|STATEMENT_EXECUTE|[4]
17:34:58.0 (10832839)|STATEMENT_EXECUTE|[5]
17:34:58.0 (10871007)|HEAP_ALLOCATE|[50]|Bytes:5
17:34:58.0 (10905427)|HEAP_ALLOCATE|[56]|Bytes:5
17:34:58.0 (10923598)|HEAP_ALLOCATE|[64]|Bytes:7
17:34:58.0 (11066280)|HEAP_ALLOCATE|[5]|Bytes:20
17:34:58.0 (11106526)|VARIABLE_SCOPE_BEGIN|[5]|pageRef|System.PageReference|true|false
17:34:58.0 (11522062)|VARIABLE_ASSIGNMENT|[5]|pageRef|"/apex/ipnhandler"|0x41d9e120
17:34:58.0 (11538638)|STATEMENT_EXECUTE|[7]
17:34:58.0 (11629454)|HEAP_ALLOCATE|[7]|Bytes:0
17:34:58.0 (11699437)|HEAP_ALLOCATE|[7]|Bytes:6
17:34:58.0 (11752839)|VARIABLE_SCOPE_BEGIN|[7]|paramCustom|String|false|false
17:34:58.0 (11772992)|VARIABLE_ASSIGNMENT|[7]|paramCustom|null
17:34:58.0 (11781040)|STATEMENT_EXECUTE|[8]
17:34:58.0 (11794704)|HEAP_ALLOCATE|[8]|Bytes:77
17:34:58.0 (11820179)|HEAP_ALLOCATE|[8]|Bytes:4
17:34:58.0 (11834837)|HEAP_ALLOCATE|[8]|Bytes:7
17:34:58.0 (14332924)|SOQL_EXECUTE_BEGIN|[8]|Aggregations:0|SELECT Id, paid__c FROM EFI_Certificate__c WHERE FormAssemblyID__c = :tmpVar1
17:34:58.0 (32780486)|SOQL_EXECUTE_END|[8]|Rows:926
17:34:58.0 (32820993)|HEAP_ALLOCATE|[8]|Bytes:3708
17:34:58.0 (33897895)|HEAP_ALLOCATE|[8]|Bytes:75932
17:34:58.0 (34000610)|HEAP_ALLOCATE|[8]|Bytes:3708
17:34:58.0 (34020214)|HEAP_ALLOCATE|[8]|Bytes:44
17:34:58.0 (34137597)|HEAP_ALLOCATE|[8]|Bytes:54
17:34:58.0 (34175672)|VARIABLE_SCOPE_BEGIN|[23]|e|Exception|true|false
17:34:58.0 (34375920)|VARIABLE_ASSIGNMENT|[23]|e|"common.apex.runtime.impl.ExecutionException: List has more than 1 row for assignment to SObject"|0x5f5f743e
17:34:58.0 (34389111)|STATEMENT_EXECUTE|[23]
17:34:58.0 (34391819)|STATEMENT_EXECUTE|[25]
17:34:58.0 (34456263)|USER_DEBUG|[25]|DEBUG|System.QueryException: List has more than 1 row for assignment to SObject
17:34:58.0 (34472417)|STATEMENT_EXECUTE|[26]
17:34:58.0 (34655716)|POP_TRACE_FLAGS|[EXTERNAL]|01p2A000004Hegj|IPNHandlerController|APEX_CODE,FINEST;APEX_PROFILING,INFO;CALLOUT,INFO;DB,INFO;NBA,INFO;SYSTEM,DEBUG;VALIDATION,INFO;VISUALFORCE,INFO;WAVE,INFO;WORKFLOW,INFO
17:34:58.42 (42638681)|CUMULATIVE_LIMIT_USAGE
17:34:58.42 (42638681)|LIMIT_USAGE_FOR_NS|(default)|
Number of SOQL queries: 1 out of 100
Number of query rows: 926 out of 50000
Number of SOSL queries: 0 out of 20
Number of DML statements: 0 out of 150
Number of DML rows: 0 out of 10000
Maximum CPU time: 0 out of 10000
Maximum heap size: 0 out of 6000000
Number of callouts: 0 out of 100
Number of Email Invocations: 0 out of 10
Number of future calls: 0 out of 50
Number of queueable jobs added to the queue: 0 out of 50
Number of Mobile Apex push calls: 0 out of 10

17:34:58.42 (42638681)|CUMULATIVE_LIMIT_USAGE_END

17:34:58.0 (42723288)|CODE_UNIT_FINISHED|VF: /apex/ipnhandler
17:34:58.0 (43781364)|EXECUTION_FINISHED









share|improve this question









New contributor




lbyars is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.

























    up vote
    2
    down vote

    favorite












    I've got a FormAssembly form that creates a record in the EFI_Certificate__c object in Salesforce upon submit. The form accepts PayPal payments. Because the payment happens on PayPal's site, outside of FormAssembly, it creates the SF record before the person proceeds to the PayPal site for payment. Our staff needs to know when/if payment is posted so I need to be able to pass PayPal's IPN (Instant Payment Notification) that is normally posted on the FormAssembly record (once PayPal payment is complete) through to Salesforce. They have a nice article on how to do this using a VisualForce page and some apex coding. I have followed the instructions in the article, but the parmCustom variable in the apex is returning a null value instead of the value in the FormAssemblyID field. I have a included a link to the original article posted by FormAssembly, along with my apex class, VF page, and error log. Any help would be much appreciated.



    https://help.formassembly.com/help/make-salesforce-and-paypal-work-together



    Apex Class (IPNHandlerController)



    public class IPNHandlerController 

    public PageReference myIPNupdate()
    try
    PageReference pageRef = ApexPages.currentPage();
    //Get the value of the 'custom' parameter from current page
    String paramCustom = pageRef.getParameters().get('custom');
    certificate = [select Id,paid__c from EFI_Certificate__c where FormAssemblyID__c = :paramCustom];

    String content = '';
    for(String key : pageRef.getParameters().keySet())
    //Note that there is no guarantee of order in the parameter key map.
    content += key + ' : ' + pageRef.getParameters().get(key) + 'n';

    certificate.PayPalInfo__c = content;
    certificate.paid__c = True;
    update certificate;

    PageReference newPage = new ApexPages.StandardController(certificate).view();
    newPage.setRedirect(true);

    return newPage;
    catch (System.Exception e)
    //A failure occurred
    system.debug(e);
    return null;



    public EFI_Certificate__c certificate get; set;

    public IPNHandlerController()




    VisualForce page (IPNHandler)



    <apex:page controller="IPNHandlerController" action="!myIPNupdate" />


    Apex Log



    43.0 APEX_CODE,FINEST;APEX_PROFILING,INFO;CALLOUT,INFO;DB,INFO;NBA,INFO;SYSTEM,DEBUG;VALIDATION,INFO;VISUALFORCE,INFO;WAVE,INFO;WORKFLOW,INFO
    17:34:58.0 (538115)|USER_INFO|[EXTERNAL]|005A0000000PhGW|webforms@eflorida.force.com|Greenwich Mean Time|GMTZ
    17:34:58.0 (631367)|EXECUTION_STARTED
    17:34:58.0 (640269)|CODE_UNIT_STARTED|[EXTERNAL]|0662A000002Zn4D|VF: /apex/ipnhandler
    17:34:58.0 (6820201)|PUSH_TRACE_FLAGS|[EXTERNAL]|01p2A000004Hegj|IPNHandlerController|APEX_CODE,FINEST;APEX_PROFILING,INFO;CALLOUT,INFO;DB,INFO;NBA,INFO;SYSTEM,DEBUG;VALIDATION,INFO;VISUALFORCE,INFO;WAVE,INFO;WORKFLOW,INFO
    17:34:58.0 (6986310)|SYSTEM_MODE_ENTER|true
    17:34:58.0 (7544101)|HEAP_ALLOCATE|[72]|Bytes:3
    17:34:58.0 (7582302)|HEAP_ALLOCATE|[77]|Bytes:152
    17:34:58.0 (7595133)|HEAP_ALLOCATE|[342]|Bytes:408
    17:34:58.0 (7608139)|HEAP_ALLOCATE|[355]|Bytes:408
    17:34:58.0 (7619720)|HEAP_ALLOCATE|[467]|Bytes:48
    17:34:58.0 (7659053)|HEAP_ALLOCATE|[139]|Bytes:6
    17:34:58.0 (7688909)|HEAP_ALLOCATE|[EXTERNAL]|Bytes:92
    17:34:58.0 (7695469)|HEAP_ALLOCATE|[EXTERNAL]|Bytes:7
    17:34:58.0 (7699284)|HEAP_ALLOCATE|[EXTERNAL]|Bytes:2
    17:34:58.0 (7721471)|METHOD_ENTRY|[1]|01p2A000004Hegj|IPNHandlerController.IPNHandlerController()
    17:34:58.0 (7732073)|STATEMENT_EXECUTE|[1]
    17:34:58.0 (7738189)|STATEMENT_EXECUTE|[1]
    17:34:58.0 (7748062)|METHOD_EXIT|[1]|IPNHandlerController
    17:34:58.0 (8004463)|HEAP_ALLOCATE|[EXTERNAL]|Bytes:8
    17:34:58.0 (8016225)|VARIABLE_SCOPE_BEGIN|[32]|this|IPNHandlerController|true|false
    17:34:58.0 (8083355)|VARIABLE_ASSIGNMENT|[32]|this||0x4a67988c
    17:34:58.0 (8095725)|STATEMENT_EXECUTE|[1]
    17:34:58.0 (8098380)|STATEMENT_EXECUTE|[30]
    17:34:58.0 (8119645)|HEAP_ALLOCATE|[EXTERNAL]|Bytes:6
    17:34:58.0 (10166826)|STATEMENT_EXECUTE|[32]
    17:34:58.0 (10445335)|POP_TRACE_FLAGS|[EXTERNAL]|01p2A000004Hegj|IPNHandlerController|APEX_CODE,FINEST;APEX_PROFILING,INFO;CALLOUT,INFO;DB,INFO;NBA,INFO;SYSTEM,DEBUG;VALIDATION,INFO;VISUALFORCE,INFO;WAVE,INFO;WORKFLOW,INFO
    17:34:58.0 (10676401)|PUSH_TRACE_FLAGS|[EXTERNAL]|01p2A000004Hegj|IPNHandlerController|APEX_CODE,FINEST;APEX_PROFILING,INFO;CALLOUT,INFO;DB,INFO;NBA,INFO;SYSTEM,DEBUG;VALIDATION,INFO;VISUALFORCE,INFO;WAVE,INFO;WORKFLOW,INFO
    17:34:58.0 (10759592)|HEAP_ALLOCATE|[EXTERNAL]|Bytes:8
    17:34:58.0 (10770212)|VARIABLE_SCOPE_BEGIN|[3]|this|IPNHandlerController|true|false
    17:34:58.0 (10807035)|VARIABLE_ASSIGNMENT|[3]|this||0x4a67988c
    17:34:58.0 (10825571)|STATEMENT_EXECUTE|[3]
    17:34:58.0 (10828420)|STATEMENT_EXECUTE|[4]
    17:34:58.0 (10830729)|STATEMENT_EXECUTE|[4]
    17:34:58.0 (10832839)|STATEMENT_EXECUTE|[5]
    17:34:58.0 (10871007)|HEAP_ALLOCATE|[50]|Bytes:5
    17:34:58.0 (10905427)|HEAP_ALLOCATE|[56]|Bytes:5
    17:34:58.0 (10923598)|HEAP_ALLOCATE|[64]|Bytes:7
    17:34:58.0 (11066280)|HEAP_ALLOCATE|[5]|Bytes:20
    17:34:58.0 (11106526)|VARIABLE_SCOPE_BEGIN|[5]|pageRef|System.PageReference|true|false
    17:34:58.0 (11522062)|VARIABLE_ASSIGNMENT|[5]|pageRef|"/apex/ipnhandler"|0x41d9e120
    17:34:58.0 (11538638)|STATEMENT_EXECUTE|[7]
    17:34:58.0 (11629454)|HEAP_ALLOCATE|[7]|Bytes:0
    17:34:58.0 (11699437)|HEAP_ALLOCATE|[7]|Bytes:6
    17:34:58.0 (11752839)|VARIABLE_SCOPE_BEGIN|[7]|paramCustom|String|false|false
    17:34:58.0 (11772992)|VARIABLE_ASSIGNMENT|[7]|paramCustom|null
    17:34:58.0 (11781040)|STATEMENT_EXECUTE|[8]
    17:34:58.0 (11794704)|HEAP_ALLOCATE|[8]|Bytes:77
    17:34:58.0 (11820179)|HEAP_ALLOCATE|[8]|Bytes:4
    17:34:58.0 (11834837)|HEAP_ALLOCATE|[8]|Bytes:7
    17:34:58.0 (14332924)|SOQL_EXECUTE_BEGIN|[8]|Aggregations:0|SELECT Id, paid__c FROM EFI_Certificate__c WHERE FormAssemblyID__c = :tmpVar1
    17:34:58.0 (32780486)|SOQL_EXECUTE_END|[8]|Rows:926
    17:34:58.0 (32820993)|HEAP_ALLOCATE|[8]|Bytes:3708
    17:34:58.0 (33897895)|HEAP_ALLOCATE|[8]|Bytes:75932
    17:34:58.0 (34000610)|HEAP_ALLOCATE|[8]|Bytes:3708
    17:34:58.0 (34020214)|HEAP_ALLOCATE|[8]|Bytes:44
    17:34:58.0 (34137597)|HEAP_ALLOCATE|[8]|Bytes:54
    17:34:58.0 (34175672)|VARIABLE_SCOPE_BEGIN|[23]|e|Exception|true|false
    17:34:58.0 (34375920)|VARIABLE_ASSIGNMENT|[23]|e|"common.apex.runtime.impl.ExecutionException: List has more than 1 row for assignment to SObject"|0x5f5f743e
    17:34:58.0 (34389111)|STATEMENT_EXECUTE|[23]
    17:34:58.0 (34391819)|STATEMENT_EXECUTE|[25]
    17:34:58.0 (34456263)|USER_DEBUG|[25]|DEBUG|System.QueryException: List has more than 1 row for assignment to SObject
    17:34:58.0 (34472417)|STATEMENT_EXECUTE|[26]
    17:34:58.0 (34655716)|POP_TRACE_FLAGS|[EXTERNAL]|01p2A000004Hegj|IPNHandlerController|APEX_CODE,FINEST;APEX_PROFILING,INFO;CALLOUT,INFO;DB,INFO;NBA,INFO;SYSTEM,DEBUG;VALIDATION,INFO;VISUALFORCE,INFO;WAVE,INFO;WORKFLOW,INFO
    17:34:58.42 (42638681)|CUMULATIVE_LIMIT_USAGE
    17:34:58.42 (42638681)|LIMIT_USAGE_FOR_NS|(default)|
    Number of SOQL queries: 1 out of 100
    Number of query rows: 926 out of 50000
    Number of SOSL queries: 0 out of 20
    Number of DML statements: 0 out of 150
    Number of DML rows: 0 out of 10000
    Maximum CPU time: 0 out of 10000
    Maximum heap size: 0 out of 6000000
    Number of callouts: 0 out of 100
    Number of Email Invocations: 0 out of 10
    Number of future calls: 0 out of 50
    Number of queueable jobs added to the queue: 0 out of 50
    Number of Mobile Apex push calls: 0 out of 10

    17:34:58.42 (42638681)|CUMULATIVE_LIMIT_USAGE_END

    17:34:58.0 (42723288)|CODE_UNIT_FINISHED|VF: /apex/ipnhandler
    17:34:58.0 (43781364)|EXECUTION_FINISHED









    share|improve this question









    New contributor




    lbyars is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
    Check out our Code of Conduct.





















      up vote
      2
      down vote

      favorite









      up vote
      2
      down vote

      favorite











      I've got a FormAssembly form that creates a record in the EFI_Certificate__c object in Salesforce upon submit. The form accepts PayPal payments. Because the payment happens on PayPal's site, outside of FormAssembly, it creates the SF record before the person proceeds to the PayPal site for payment. Our staff needs to know when/if payment is posted so I need to be able to pass PayPal's IPN (Instant Payment Notification) that is normally posted on the FormAssembly record (once PayPal payment is complete) through to Salesforce. They have a nice article on how to do this using a VisualForce page and some apex coding. I have followed the instructions in the article, but the parmCustom variable in the apex is returning a null value instead of the value in the FormAssemblyID field. I have a included a link to the original article posted by FormAssembly, along with my apex class, VF page, and error log. Any help would be much appreciated.



      https://help.formassembly.com/help/make-salesforce-and-paypal-work-together



      Apex Class (IPNHandlerController)



      public class IPNHandlerController 

      public PageReference myIPNupdate()
      try
      PageReference pageRef = ApexPages.currentPage();
      //Get the value of the 'custom' parameter from current page
      String paramCustom = pageRef.getParameters().get('custom');
      certificate = [select Id,paid__c from EFI_Certificate__c where FormAssemblyID__c = :paramCustom];

      String content = '';
      for(String key : pageRef.getParameters().keySet())
      //Note that there is no guarantee of order in the parameter key map.
      content += key + ' : ' + pageRef.getParameters().get(key) + 'n';

      certificate.PayPalInfo__c = content;
      certificate.paid__c = True;
      update certificate;

      PageReference newPage = new ApexPages.StandardController(certificate).view();
      newPage.setRedirect(true);

      return newPage;
      catch (System.Exception e)
      //A failure occurred
      system.debug(e);
      return null;



      public EFI_Certificate__c certificate get; set;

      public IPNHandlerController()




      VisualForce page (IPNHandler)



      <apex:page controller="IPNHandlerController" action="!myIPNupdate" />


      Apex Log



      43.0 APEX_CODE,FINEST;APEX_PROFILING,INFO;CALLOUT,INFO;DB,INFO;NBA,INFO;SYSTEM,DEBUG;VALIDATION,INFO;VISUALFORCE,INFO;WAVE,INFO;WORKFLOW,INFO
      17:34:58.0 (538115)|USER_INFO|[EXTERNAL]|005A0000000PhGW|webforms@eflorida.force.com|Greenwich Mean Time|GMTZ
      17:34:58.0 (631367)|EXECUTION_STARTED
      17:34:58.0 (640269)|CODE_UNIT_STARTED|[EXTERNAL]|0662A000002Zn4D|VF: /apex/ipnhandler
      17:34:58.0 (6820201)|PUSH_TRACE_FLAGS|[EXTERNAL]|01p2A000004Hegj|IPNHandlerController|APEX_CODE,FINEST;APEX_PROFILING,INFO;CALLOUT,INFO;DB,INFO;NBA,INFO;SYSTEM,DEBUG;VALIDATION,INFO;VISUALFORCE,INFO;WAVE,INFO;WORKFLOW,INFO
      17:34:58.0 (6986310)|SYSTEM_MODE_ENTER|true
      17:34:58.0 (7544101)|HEAP_ALLOCATE|[72]|Bytes:3
      17:34:58.0 (7582302)|HEAP_ALLOCATE|[77]|Bytes:152
      17:34:58.0 (7595133)|HEAP_ALLOCATE|[342]|Bytes:408
      17:34:58.0 (7608139)|HEAP_ALLOCATE|[355]|Bytes:408
      17:34:58.0 (7619720)|HEAP_ALLOCATE|[467]|Bytes:48
      17:34:58.0 (7659053)|HEAP_ALLOCATE|[139]|Bytes:6
      17:34:58.0 (7688909)|HEAP_ALLOCATE|[EXTERNAL]|Bytes:92
      17:34:58.0 (7695469)|HEAP_ALLOCATE|[EXTERNAL]|Bytes:7
      17:34:58.0 (7699284)|HEAP_ALLOCATE|[EXTERNAL]|Bytes:2
      17:34:58.0 (7721471)|METHOD_ENTRY|[1]|01p2A000004Hegj|IPNHandlerController.IPNHandlerController()
      17:34:58.0 (7732073)|STATEMENT_EXECUTE|[1]
      17:34:58.0 (7738189)|STATEMENT_EXECUTE|[1]
      17:34:58.0 (7748062)|METHOD_EXIT|[1]|IPNHandlerController
      17:34:58.0 (8004463)|HEAP_ALLOCATE|[EXTERNAL]|Bytes:8
      17:34:58.0 (8016225)|VARIABLE_SCOPE_BEGIN|[32]|this|IPNHandlerController|true|false
      17:34:58.0 (8083355)|VARIABLE_ASSIGNMENT|[32]|this||0x4a67988c
      17:34:58.0 (8095725)|STATEMENT_EXECUTE|[1]
      17:34:58.0 (8098380)|STATEMENT_EXECUTE|[30]
      17:34:58.0 (8119645)|HEAP_ALLOCATE|[EXTERNAL]|Bytes:6
      17:34:58.0 (10166826)|STATEMENT_EXECUTE|[32]
      17:34:58.0 (10445335)|POP_TRACE_FLAGS|[EXTERNAL]|01p2A000004Hegj|IPNHandlerController|APEX_CODE,FINEST;APEX_PROFILING,INFO;CALLOUT,INFO;DB,INFO;NBA,INFO;SYSTEM,DEBUG;VALIDATION,INFO;VISUALFORCE,INFO;WAVE,INFO;WORKFLOW,INFO
      17:34:58.0 (10676401)|PUSH_TRACE_FLAGS|[EXTERNAL]|01p2A000004Hegj|IPNHandlerController|APEX_CODE,FINEST;APEX_PROFILING,INFO;CALLOUT,INFO;DB,INFO;NBA,INFO;SYSTEM,DEBUG;VALIDATION,INFO;VISUALFORCE,INFO;WAVE,INFO;WORKFLOW,INFO
      17:34:58.0 (10759592)|HEAP_ALLOCATE|[EXTERNAL]|Bytes:8
      17:34:58.0 (10770212)|VARIABLE_SCOPE_BEGIN|[3]|this|IPNHandlerController|true|false
      17:34:58.0 (10807035)|VARIABLE_ASSIGNMENT|[3]|this||0x4a67988c
      17:34:58.0 (10825571)|STATEMENT_EXECUTE|[3]
      17:34:58.0 (10828420)|STATEMENT_EXECUTE|[4]
      17:34:58.0 (10830729)|STATEMENT_EXECUTE|[4]
      17:34:58.0 (10832839)|STATEMENT_EXECUTE|[5]
      17:34:58.0 (10871007)|HEAP_ALLOCATE|[50]|Bytes:5
      17:34:58.0 (10905427)|HEAP_ALLOCATE|[56]|Bytes:5
      17:34:58.0 (10923598)|HEAP_ALLOCATE|[64]|Bytes:7
      17:34:58.0 (11066280)|HEAP_ALLOCATE|[5]|Bytes:20
      17:34:58.0 (11106526)|VARIABLE_SCOPE_BEGIN|[5]|pageRef|System.PageReference|true|false
      17:34:58.0 (11522062)|VARIABLE_ASSIGNMENT|[5]|pageRef|"/apex/ipnhandler"|0x41d9e120
      17:34:58.0 (11538638)|STATEMENT_EXECUTE|[7]
      17:34:58.0 (11629454)|HEAP_ALLOCATE|[7]|Bytes:0
      17:34:58.0 (11699437)|HEAP_ALLOCATE|[7]|Bytes:6
      17:34:58.0 (11752839)|VARIABLE_SCOPE_BEGIN|[7]|paramCustom|String|false|false
      17:34:58.0 (11772992)|VARIABLE_ASSIGNMENT|[7]|paramCustom|null
      17:34:58.0 (11781040)|STATEMENT_EXECUTE|[8]
      17:34:58.0 (11794704)|HEAP_ALLOCATE|[8]|Bytes:77
      17:34:58.0 (11820179)|HEAP_ALLOCATE|[8]|Bytes:4
      17:34:58.0 (11834837)|HEAP_ALLOCATE|[8]|Bytes:7
      17:34:58.0 (14332924)|SOQL_EXECUTE_BEGIN|[8]|Aggregations:0|SELECT Id, paid__c FROM EFI_Certificate__c WHERE FormAssemblyID__c = :tmpVar1
      17:34:58.0 (32780486)|SOQL_EXECUTE_END|[8]|Rows:926
      17:34:58.0 (32820993)|HEAP_ALLOCATE|[8]|Bytes:3708
      17:34:58.0 (33897895)|HEAP_ALLOCATE|[8]|Bytes:75932
      17:34:58.0 (34000610)|HEAP_ALLOCATE|[8]|Bytes:3708
      17:34:58.0 (34020214)|HEAP_ALLOCATE|[8]|Bytes:44
      17:34:58.0 (34137597)|HEAP_ALLOCATE|[8]|Bytes:54
      17:34:58.0 (34175672)|VARIABLE_SCOPE_BEGIN|[23]|e|Exception|true|false
      17:34:58.0 (34375920)|VARIABLE_ASSIGNMENT|[23]|e|"common.apex.runtime.impl.ExecutionException: List has more than 1 row for assignment to SObject"|0x5f5f743e
      17:34:58.0 (34389111)|STATEMENT_EXECUTE|[23]
      17:34:58.0 (34391819)|STATEMENT_EXECUTE|[25]
      17:34:58.0 (34456263)|USER_DEBUG|[25]|DEBUG|System.QueryException: List has more than 1 row for assignment to SObject
      17:34:58.0 (34472417)|STATEMENT_EXECUTE|[26]
      17:34:58.0 (34655716)|POP_TRACE_FLAGS|[EXTERNAL]|01p2A000004Hegj|IPNHandlerController|APEX_CODE,FINEST;APEX_PROFILING,INFO;CALLOUT,INFO;DB,INFO;NBA,INFO;SYSTEM,DEBUG;VALIDATION,INFO;VISUALFORCE,INFO;WAVE,INFO;WORKFLOW,INFO
      17:34:58.42 (42638681)|CUMULATIVE_LIMIT_USAGE
      17:34:58.42 (42638681)|LIMIT_USAGE_FOR_NS|(default)|
      Number of SOQL queries: 1 out of 100
      Number of query rows: 926 out of 50000
      Number of SOSL queries: 0 out of 20
      Number of DML statements: 0 out of 150
      Number of DML rows: 0 out of 10000
      Maximum CPU time: 0 out of 10000
      Maximum heap size: 0 out of 6000000
      Number of callouts: 0 out of 100
      Number of Email Invocations: 0 out of 10
      Number of future calls: 0 out of 50
      Number of queueable jobs added to the queue: 0 out of 50
      Number of Mobile Apex push calls: 0 out of 10

      17:34:58.42 (42638681)|CUMULATIVE_LIMIT_USAGE_END

      17:34:58.0 (42723288)|CODE_UNIT_FINISHED|VF: /apex/ipnhandler
      17:34:58.0 (43781364)|EXECUTION_FINISHED









      share|improve this question









      New contributor




      lbyars is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.











      I've got a FormAssembly form that creates a record in the EFI_Certificate__c object in Salesforce upon submit. The form accepts PayPal payments. Because the payment happens on PayPal's site, outside of FormAssembly, it creates the SF record before the person proceeds to the PayPal site for payment. Our staff needs to know when/if payment is posted so I need to be able to pass PayPal's IPN (Instant Payment Notification) that is normally posted on the FormAssembly record (once PayPal payment is complete) through to Salesforce. They have a nice article on how to do this using a VisualForce page and some apex coding. I have followed the instructions in the article, but the parmCustom variable in the apex is returning a null value instead of the value in the FormAssemblyID field. I have a included a link to the original article posted by FormAssembly, along with my apex class, VF page, and error log. Any help would be much appreciated.



      https://help.formassembly.com/help/make-salesforce-and-paypal-work-together



      Apex Class (IPNHandlerController)



      public class IPNHandlerController 

      public PageReference myIPNupdate()
      try
      PageReference pageRef = ApexPages.currentPage();
      //Get the value of the 'custom' parameter from current page
      String paramCustom = pageRef.getParameters().get('custom');
      certificate = [select Id,paid__c from EFI_Certificate__c where FormAssemblyID__c = :paramCustom];

      String content = '';
      for(String key : pageRef.getParameters().keySet())
      //Note that there is no guarantee of order in the parameter key map.
      content += key + ' : ' + pageRef.getParameters().get(key) + 'n';

      certificate.PayPalInfo__c = content;
      certificate.paid__c = True;
      update certificate;

      PageReference newPage = new ApexPages.StandardController(certificate).view();
      newPage.setRedirect(true);

      return newPage;
      catch (System.Exception e)
      //A failure occurred
      system.debug(e);
      return null;



      public EFI_Certificate__c certificate get; set;

      public IPNHandlerController()




      VisualForce page (IPNHandler)



      <apex:page controller="IPNHandlerController" action="!myIPNupdate" />


      Apex Log



      43.0 APEX_CODE,FINEST;APEX_PROFILING,INFO;CALLOUT,INFO;DB,INFO;NBA,INFO;SYSTEM,DEBUG;VALIDATION,INFO;VISUALFORCE,INFO;WAVE,INFO;WORKFLOW,INFO
      17:34:58.0 (538115)|USER_INFO|[EXTERNAL]|005A0000000PhGW|webforms@eflorida.force.com|Greenwich Mean Time|GMTZ
      17:34:58.0 (631367)|EXECUTION_STARTED
      17:34:58.0 (640269)|CODE_UNIT_STARTED|[EXTERNAL]|0662A000002Zn4D|VF: /apex/ipnhandler
      17:34:58.0 (6820201)|PUSH_TRACE_FLAGS|[EXTERNAL]|01p2A000004Hegj|IPNHandlerController|APEX_CODE,FINEST;APEX_PROFILING,INFO;CALLOUT,INFO;DB,INFO;NBA,INFO;SYSTEM,DEBUG;VALIDATION,INFO;VISUALFORCE,INFO;WAVE,INFO;WORKFLOW,INFO
      17:34:58.0 (6986310)|SYSTEM_MODE_ENTER|true
      17:34:58.0 (7544101)|HEAP_ALLOCATE|[72]|Bytes:3
      17:34:58.0 (7582302)|HEAP_ALLOCATE|[77]|Bytes:152
      17:34:58.0 (7595133)|HEAP_ALLOCATE|[342]|Bytes:408
      17:34:58.0 (7608139)|HEAP_ALLOCATE|[355]|Bytes:408
      17:34:58.0 (7619720)|HEAP_ALLOCATE|[467]|Bytes:48
      17:34:58.0 (7659053)|HEAP_ALLOCATE|[139]|Bytes:6
      17:34:58.0 (7688909)|HEAP_ALLOCATE|[EXTERNAL]|Bytes:92
      17:34:58.0 (7695469)|HEAP_ALLOCATE|[EXTERNAL]|Bytes:7
      17:34:58.0 (7699284)|HEAP_ALLOCATE|[EXTERNAL]|Bytes:2
      17:34:58.0 (7721471)|METHOD_ENTRY|[1]|01p2A000004Hegj|IPNHandlerController.IPNHandlerController()
      17:34:58.0 (7732073)|STATEMENT_EXECUTE|[1]
      17:34:58.0 (7738189)|STATEMENT_EXECUTE|[1]
      17:34:58.0 (7748062)|METHOD_EXIT|[1]|IPNHandlerController
      17:34:58.0 (8004463)|HEAP_ALLOCATE|[EXTERNAL]|Bytes:8
      17:34:58.0 (8016225)|VARIABLE_SCOPE_BEGIN|[32]|this|IPNHandlerController|true|false
      17:34:58.0 (8083355)|VARIABLE_ASSIGNMENT|[32]|this||0x4a67988c
      17:34:58.0 (8095725)|STATEMENT_EXECUTE|[1]
      17:34:58.0 (8098380)|STATEMENT_EXECUTE|[30]
      17:34:58.0 (8119645)|HEAP_ALLOCATE|[EXTERNAL]|Bytes:6
      17:34:58.0 (10166826)|STATEMENT_EXECUTE|[32]
      17:34:58.0 (10445335)|POP_TRACE_FLAGS|[EXTERNAL]|01p2A000004Hegj|IPNHandlerController|APEX_CODE,FINEST;APEX_PROFILING,INFO;CALLOUT,INFO;DB,INFO;NBA,INFO;SYSTEM,DEBUG;VALIDATION,INFO;VISUALFORCE,INFO;WAVE,INFO;WORKFLOW,INFO
      17:34:58.0 (10676401)|PUSH_TRACE_FLAGS|[EXTERNAL]|01p2A000004Hegj|IPNHandlerController|APEX_CODE,FINEST;APEX_PROFILING,INFO;CALLOUT,INFO;DB,INFO;NBA,INFO;SYSTEM,DEBUG;VALIDATION,INFO;VISUALFORCE,INFO;WAVE,INFO;WORKFLOW,INFO
      17:34:58.0 (10759592)|HEAP_ALLOCATE|[EXTERNAL]|Bytes:8
      17:34:58.0 (10770212)|VARIABLE_SCOPE_BEGIN|[3]|this|IPNHandlerController|true|false
      17:34:58.0 (10807035)|VARIABLE_ASSIGNMENT|[3]|this||0x4a67988c
      17:34:58.0 (10825571)|STATEMENT_EXECUTE|[3]
      17:34:58.0 (10828420)|STATEMENT_EXECUTE|[4]
      17:34:58.0 (10830729)|STATEMENT_EXECUTE|[4]
      17:34:58.0 (10832839)|STATEMENT_EXECUTE|[5]
      17:34:58.0 (10871007)|HEAP_ALLOCATE|[50]|Bytes:5
      17:34:58.0 (10905427)|HEAP_ALLOCATE|[56]|Bytes:5
      17:34:58.0 (10923598)|HEAP_ALLOCATE|[64]|Bytes:7
      17:34:58.0 (11066280)|HEAP_ALLOCATE|[5]|Bytes:20
      17:34:58.0 (11106526)|VARIABLE_SCOPE_BEGIN|[5]|pageRef|System.PageReference|true|false
      17:34:58.0 (11522062)|VARIABLE_ASSIGNMENT|[5]|pageRef|"/apex/ipnhandler"|0x41d9e120
      17:34:58.0 (11538638)|STATEMENT_EXECUTE|[7]
      17:34:58.0 (11629454)|HEAP_ALLOCATE|[7]|Bytes:0
      17:34:58.0 (11699437)|HEAP_ALLOCATE|[7]|Bytes:6
      17:34:58.0 (11752839)|VARIABLE_SCOPE_BEGIN|[7]|paramCustom|String|false|false
      17:34:58.0 (11772992)|VARIABLE_ASSIGNMENT|[7]|paramCustom|null
      17:34:58.0 (11781040)|STATEMENT_EXECUTE|[8]
      17:34:58.0 (11794704)|HEAP_ALLOCATE|[8]|Bytes:77
      17:34:58.0 (11820179)|HEAP_ALLOCATE|[8]|Bytes:4
      17:34:58.0 (11834837)|HEAP_ALLOCATE|[8]|Bytes:7
      17:34:58.0 (14332924)|SOQL_EXECUTE_BEGIN|[8]|Aggregations:0|SELECT Id, paid__c FROM EFI_Certificate__c WHERE FormAssemblyID__c = :tmpVar1
      17:34:58.0 (32780486)|SOQL_EXECUTE_END|[8]|Rows:926
      17:34:58.0 (32820993)|HEAP_ALLOCATE|[8]|Bytes:3708
      17:34:58.0 (33897895)|HEAP_ALLOCATE|[8]|Bytes:75932
      17:34:58.0 (34000610)|HEAP_ALLOCATE|[8]|Bytes:3708
      17:34:58.0 (34020214)|HEAP_ALLOCATE|[8]|Bytes:44
      17:34:58.0 (34137597)|HEAP_ALLOCATE|[8]|Bytes:54
      17:34:58.0 (34175672)|VARIABLE_SCOPE_BEGIN|[23]|e|Exception|true|false
      17:34:58.0 (34375920)|VARIABLE_ASSIGNMENT|[23]|e|"common.apex.runtime.impl.ExecutionException: List has more than 1 row for assignment to SObject"|0x5f5f743e
      17:34:58.0 (34389111)|STATEMENT_EXECUTE|[23]
      17:34:58.0 (34391819)|STATEMENT_EXECUTE|[25]
      17:34:58.0 (34456263)|USER_DEBUG|[25]|DEBUG|System.QueryException: List has more than 1 row for assignment to SObject
      17:34:58.0 (34472417)|STATEMENT_EXECUTE|[26]
      17:34:58.0 (34655716)|POP_TRACE_FLAGS|[EXTERNAL]|01p2A000004Hegj|IPNHandlerController|APEX_CODE,FINEST;APEX_PROFILING,INFO;CALLOUT,INFO;DB,INFO;NBA,INFO;SYSTEM,DEBUG;VALIDATION,INFO;VISUALFORCE,INFO;WAVE,INFO;WORKFLOW,INFO
      17:34:58.42 (42638681)|CUMULATIVE_LIMIT_USAGE
      17:34:58.42 (42638681)|LIMIT_USAGE_FOR_NS|(default)|
      Number of SOQL queries: 1 out of 100
      Number of query rows: 926 out of 50000
      Number of SOSL queries: 0 out of 20
      Number of DML statements: 0 out of 150
      Number of DML rows: 0 out of 10000
      Maximum CPU time: 0 out of 10000
      Maximum heap size: 0 out of 6000000
      Number of callouts: 0 out of 100
      Number of Email Invocations: 0 out of 10
      Number of future calls: 0 out of 50
      Number of queueable jobs added to the queue: 0 out of 50
      Number of Mobile Apex push calls: 0 out of 10

      17:34:58.42 (42638681)|CUMULATIVE_LIMIT_USAGE_END

      17:34:58.0 (42723288)|CODE_UNIT_FINISHED|VF: /apex/ipnhandler
      17:34:58.0 (43781364)|EXECUTION_FINISHED






      apex visualforce






      share|improve this question









      New contributor




      lbyars is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.











      share|improve this question









      New contributor




      lbyars is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.









      share|improve this question




      share|improve this question








      edited 1 hour ago









      Mark Pond

      17.9k13184




      17.9k13184






      New contributor




      lbyars is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.









      asked 1 hour ago









      lbyars

      111




      111




      New contributor




      lbyars is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.





      New contributor





      lbyars is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.






      lbyars is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.




















          1 Answer
          1






          active

          oldest

          votes

















          up vote
          4
          down vote













          The error in the log says: System.QueryException: List has more than 1 row for assignment to SObject



          If you have more than one certificate with that FormAssemblyID then that is why you are receiving the error.



          On the line: certificate = [select Id,paid__c from EFI_Certificate__c where FormAssemblyID__c = :paramCustom];, if this query returns more than one record then an error will occur.






          share|improve this answer




















            Your Answer







            StackExchange.ready(function()
            var channelOptions =
            tags: "".split(" "),
            id: "459"
            ;
            initTagRenderer("".split(" "), "".split(" "), channelOptions);

            StackExchange.using("externalEditor", function()
            // Have to fire editor after snippets, if snippets enabled
            if (StackExchange.settings.snippets.snippetsEnabled)
            StackExchange.using("snippets", function()
            createEditor();
            );

            else
            createEditor();

            );

            function createEditor()
            StackExchange.prepareEditor(
            heartbeatType: 'answer',
            convertImagesToLinks: false,
            noModals: false,
            showLowRepImageUploadWarning: true,
            reputationToPostImages: null,
            bindNavPrevention: true,
            postfix: "",
            onDemand: true,
            discardSelector: ".discard-answer"
            ,immediatelyShowMarkdownHelp:true
            );



            );






            lbyars is a new contributor. Be nice, and check out our Code of Conduct.









             

            draft saved


            draft discarded


















            StackExchange.ready(
            function ()
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fsalesforce.stackexchange.com%2fquestions%2f235506%2fapex-class-returning-null-value%23new-answer', 'question_page');

            );

            Post as a guest






























            1 Answer
            1






            active

            oldest

            votes








            1 Answer
            1






            active

            oldest

            votes









            active

            oldest

            votes






            active

            oldest

            votes








            up vote
            4
            down vote













            The error in the log says: System.QueryException: List has more than 1 row for assignment to SObject



            If you have more than one certificate with that FormAssemblyID then that is why you are receiving the error.



            On the line: certificate = [select Id,paid__c from EFI_Certificate__c where FormAssemblyID__c = :paramCustom];, if this query returns more than one record then an error will occur.






            share|improve this answer
























              up vote
              4
              down vote













              The error in the log says: System.QueryException: List has more than 1 row for assignment to SObject



              If you have more than one certificate with that FormAssemblyID then that is why you are receiving the error.



              On the line: certificate = [select Id,paid__c from EFI_Certificate__c where FormAssemblyID__c = :paramCustom];, if this query returns more than one record then an error will occur.






              share|improve this answer






















                up vote
                4
                down vote










                up vote
                4
                down vote









                The error in the log says: System.QueryException: List has more than 1 row for assignment to SObject



                If you have more than one certificate with that FormAssemblyID then that is why you are receiving the error.



                On the line: certificate = [select Id,paid__c from EFI_Certificate__c where FormAssemblyID__c = :paramCustom];, if this query returns more than one record then an error will occur.






                share|improve this answer












                The error in the log says: System.QueryException: List has more than 1 row for assignment to SObject



                If you have more than one certificate with that FormAssemblyID then that is why you are receiving the error.



                On the line: certificate = [select Id,paid__c from EFI_Certificate__c where FormAssemblyID__c = :paramCustom];, if this query returns more than one record then an error will occur.







                share|improve this answer












                share|improve this answer



                share|improve this answer










                answered 1 hour ago









                fred

                486214




                486214




















                    lbyars is a new contributor. Be nice, and check out our Code of Conduct.









                     

                    draft saved


                    draft discarded


















                    lbyars is a new contributor. Be nice, and check out our Code of Conduct.












                    lbyars is a new contributor. Be nice, and check out our Code of Conduct.











                    lbyars is a new contributor. Be nice, and check out our Code of Conduct.













                     


                    draft saved


                    draft discarded














                    StackExchange.ready(
                    function ()
                    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fsalesforce.stackexchange.com%2fquestions%2f235506%2fapex-class-returning-null-value%23new-answer', 'question_page');

                    );

                    Post as a guest













































































                    Comments

                    Popular posts from this blog

                    What does second last employer means? [closed]

                    Installing NextGIS Connect into QGIS 3?

                    One-line joke