exceptionfactory commented on code in PR #6047:
URL: https://github.com/apache/nifi/pull/6047#discussion_r873813296


##########
nifi-nar-bundles/nifi-salesforce-bundle/nifi-salesforce-processors/src/main/java/org/apache/nifi/processors/salesforce/QuerySalesforceObject.java:
##########
@@ -171,8 +171,8 @@ public class QuerySalesforceObject extends 
AbstractProcessor {
     static final PropertyDescriptor AGE_FIELD = new 
PropertyDescriptor.Builder()
             .name("age-field")
             .displayName("Age Field")
-            .description("The name of a TIMESTAMP field that will be used to 
limit all and filter already retrieved records."
-                    + " Only records that are older than the previous run time 
of this processor will be retrieved."
+            .description("The name of a TIMESTAMP field that will be used to 
time-window records."

Review Comment:
   Recommend adjusting the wording for greater clarity:
   ```suggestion
               .description("The name of a TIMESTAMP field that will be used to 
filter records using a bounded time window."
   ```



##########
nifi-nar-bundles/nifi-salesforce-bundle/nifi-salesforce-processors/src/main/java/org/apache/nifi/processors/salesforce/QuerySalesforceObject.java:
##########
@@ -182,9 +182,8 @@ public class QuerySalesforceObject extends 
AbstractProcessor {
     static final PropertyDescriptor AGE_DELAY = new 
PropertyDescriptor.Builder()
             .name("age-delay")
             .displayName("Age Delay")
-            .description("When 'Age Field' is set the age-based filter will be 
adjusted by this amount."
-                    + " Only records that are older than the previous run time 
of this processor, by at least this amount, will be retrieved."
-            )
+            .description("A time window is always between the previous run 
time of the processor and the current run time. " +
+                    "When 'Age Field' is set, the time window's right edge 
will be adjusted left by this amount.")

Review Comment:
   This initial sentence seems to indicate that the processor will apply a time 
window regardless of whether the Age Delay property is configured.
   
   Recommend adjusting the wording to indicate the conditional nature of the 
property. The `left` and `right` wording may be difficult to follow, so it 
seems better to use something else like `start` and `end`, and include an 
example.
   
   ```suggestion
               .description("When this property is configured, the processor 
will always apply a time window between the previous run time of the processor 
and the current run time. " +
                       "The ending timestamp of the time window will be 
adjusted earlier by the amount configured in this property. For example, with a 
property value of 10 seconds, an ending timestamp of 12:30:45 would be changed 
to 12:30:35.")
   ```



##########
nifi-nar-bundles/nifi-salesforce-bundle/nifi-salesforce-processors/src/main/resources/docs/org.apache.nifi.processors.salesforce.QuerySalesforceObject/additionalDetails.html:
##########
@@ -0,0 +1,73 @@
+<!DOCTYPE html>
+<html lang="en" xmlns="http://www.w3.org/1999/html";>
+<!--
+      Licensed to the Apache Software Foundation (ASF) under one or more
+      contributor license agreements.  See the NOTICE file distributed with
+      this work for additional information regarding copyright ownership.
+      The ASF licenses this file to You under the Apache License, Version 2.0
+      (the "License"); you may not use this file except in compliance with
+      the License.  You may obtain a copy of the License at
+          http://www.apache.org/licenses/LICENSE-2.0
+      Unless required by applicable law or agreed to in writing, software
+      distributed under the License is distributed on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+      See the License for the specific language governing permissions and
+      limitations under the License.
+    -->
+
+<head>
+    <meta charset="utf-8"/>
+    <title>QuerySalesforceObject</title>
+    <link rel="stylesheet" href="../../../../../css/component-usage.css" 
type="text/css"/>
+    <style>
+h2 {margin-top: 4em}
+h3 {margin-top: 3em}
+td {text-align: left}
+    </style>
+</head>
+
+<body>
+
+<h1>QuerySalesforceObject</h1>
+
+<h3>Description</h3>
+
+<p>
+    Objects in Salesforce are database tables, their rows are known as 
records, and their columns are called fields. The QuerySalesforceObject 
processor queries Salesforce objects and retrieves their records.
+    The processor constructs the query using SOQL (Salesforce Object Query 
Language) and retrieves the result record dataset using the Salesforce REST API.
+    The processor utilizes streams and NiFi record-based processing to be able 
to handle a large number of records and to allow arbitrary output format.
+</p>
+
+<h3>OAuth2 Access Token Provider Service</h3>
+
+<p>
+    The Salesforce REST API authorization is handled by the OAuth2 Access 
Token Provider Service. In order to use OAuth2 authorization create a new 
StandardOauth2AccessTokenProvider service and configure it
+    the following way.
+</p>
+
+<ul>
+    <li>Authorization Server URL: It is the concatenation of the base URL and 
the token request service URL (/services/oauth2/token).</li>
+    <li>Grant Type: User Password.</li>
+    <li>Username: The email address registered in the Salesforce account in 
use.</li>

Review Comment:
   ```suggestion
       <li>Username: The email address registered in the Salesforce 
account.</li>
   ```



##########
nifi-nar-bundles/nifi-salesforce-bundle/nifi-salesforce-processors/src/main/resources/docs/org.apache.nifi.processors.salesforce.QuerySalesforceObject/additionalDetails.html:
##########
@@ -0,0 +1,73 @@
+<!DOCTYPE html>
+<html lang="en" xmlns="http://www.w3.org/1999/html";>
+<!--
+      Licensed to the Apache Software Foundation (ASF) under one or more
+      contributor license agreements.  See the NOTICE file distributed with
+      this work for additional information regarding copyright ownership.
+      The ASF licenses this file to You under the Apache License, Version 2.0
+      (the "License"); you may not use this file except in compliance with
+      the License.  You may obtain a copy of the License at
+          http://www.apache.org/licenses/LICENSE-2.0
+      Unless required by applicable law or agreed to in writing, software
+      distributed under the License is distributed on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+      See the License for the specific language governing permissions and
+      limitations under the License.
+    -->
+
+<head>
+    <meta charset="utf-8"/>
+    <title>QuerySalesforceObject</title>
+    <link rel="stylesheet" href="../../../../../css/component-usage.css" 
type="text/css"/>
+    <style>
+h2 {margin-top: 4em}
+h3 {margin-top: 3em}
+td {text-align: left}
+    </style>
+</head>
+
+<body>
+
+<h1>QuerySalesforceObject</h1>
+
+<h3>Description</h3>
+
+<p>
+    Objects in Salesforce are database tables, their rows are known as 
records, and their columns are called fields. The QuerySalesforceObject 
processor queries Salesforce objects and retrieves their records.
+    The processor constructs the query using SOQL (Salesforce Object Query 
Language) and retrieves the result record dataset using the Salesforce REST API.
+    The processor utilizes streams and NiFi record-based processing to be able 
to handle a large number of records and to allow arbitrary output format.
+</p>
+
+<h3>OAuth2 Access Token Provider Service</h3>
+
+<p>
+    The Salesforce REST API authorization is handled by the OAuth2 Access 
Token Provider Service. In order to use OAuth2 authorization create a new 
StandardOauth2AccessTokenProvider service and configure it
+    the following way.

Review Comment:
   Adding some punctuation and adjusting the wording would improve the 
readability:
   ```suggestion
       The OAuth2 Access Token Provider Service handles Salesforce REST API 
authorization. In order to use OAuth2 authorization, create a new 
StandardOauth2AccessTokenProvider service and configure it as follows.
   ```



##########
nifi-nar-bundles/nifi-salesforce-bundle/nifi-salesforce-processors/src/main/java/org/apache/nifi/processors/salesforce/QuerySalesforceObject.java:
##########
@@ -194,9 +193,8 @@ public class QuerySalesforceObject extends 
AbstractProcessor {
     static final PropertyDescriptor INITIAL_AGE_FILTER = new 
PropertyDescriptor.Builder()
             .name("initial-age-filter")
             .displayName("Initial Age Filter")
-            .description("When 'Age Field' is set the value of this property 
will serve as a filter when this processor runs the first time."
-                    + " Only records that are older than this value be 
retrieved."
-            )
+            .description("Unless this parameter is specified as an initial 
start time, the time window's left edge is open" +
+                    " on the first run, and all records are fetched until the 
current runtime.")

Review Comment:
   As mentioned in the other property, the `left edge` terminology could be 
confusing.
   
   What do you think of the following?
   
   ```suggestion
               .description("This property specifies the start time that the 
processor applies when running the first query.")
   ```



##########
nifi-nar-bundles/nifi-salesforce-bundle/nifi-salesforce-processors/src/main/resources/docs/org.apache.nifi.processors.salesforce.QuerySalesforceObject/additionalDetails.html:
##########
@@ -0,0 +1,73 @@
+<!DOCTYPE html>
+<html lang="en" xmlns="http://www.w3.org/1999/html";>
+<!--
+      Licensed to the Apache Software Foundation (ASF) under one or more
+      contributor license agreements.  See the NOTICE file distributed with
+      this work for additional information regarding copyright ownership.
+      The ASF licenses this file to You under the Apache License, Version 2.0
+      (the "License"); you may not use this file except in compliance with
+      the License.  You may obtain a copy of the License at
+          http://www.apache.org/licenses/LICENSE-2.0
+      Unless required by applicable law or agreed to in writing, software
+      distributed under the License is distributed on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+      See the License for the specific language governing permissions and
+      limitations under the License.
+    -->
+
+<head>
+    <meta charset="utf-8"/>
+    <title>QuerySalesforceObject</title>
+    <link rel="stylesheet" href="../../../../../css/component-usage.css" 
type="text/css"/>
+    <style>
+h2 {margin-top: 4em}
+h3 {margin-top: 3em}
+td {text-align: left}
+    </style>
+</head>
+
+<body>
+
+<h1>QuerySalesforceObject</h1>
+
+<h3>Description</h3>
+
+<p>
+    Objects in Salesforce are database tables, their rows are known as 
records, and their columns are called fields. The QuerySalesforceObject 
processor queries Salesforce objects and retrieves their records.
+    The processor constructs the query using SOQL (Salesforce Object Query 
Language) and retrieves the result record dataset using the Salesforce REST API.
+    The processor utilizes streams and NiFi record-based processing to be able 
to handle a large number of records and to allow arbitrary output format.
+</p>
+
+<h3>OAuth2 Access Token Provider Service</h3>
+
+<p>
+    The Salesforce REST API authorization is handled by the OAuth2 Access 
Token Provider Service. In order to use OAuth2 authorization create a new 
StandardOauth2AccessTokenProvider service and configure it
+    the following way.
+</p>
+
+<ul>
+    <li>Authorization Server URL: It is the concatenation of the base URL and 
the token request service URL (/services/oauth2/token).</li>
+    <li>Grant Type: User Password.</li>
+    <li>Username: The email address registered in the Salesforce account in 
use.</li>
+    <li>Password: For the Password a Security token must be requested. Go to 
Profile -> Settings and under the Reset My Security Token option, request one, 
which will be emailed to you.
+        The password is made up of the Salesforce account password and the 
Security token concatenated together without a space.</li>
+    <li>Client ID: Create a new Connected App within Salesforce. Go to Setup 
-> On the left search panel find App Manager -> Create New Connected App. Once 
it’s done, the Consumer Key goes to the Client ID property.</li>
+    <li>Client Secret: It can be found on the same Connected App page under 
the name of Consumer Secret.</li>

Review Comment:
   ```suggestion
       <li>Client Secret: Available on the Connected App page under Consumer 
Secret.</li>
   ```



##########
nifi-nar-bundles/nifi-salesforce-bundle/nifi-salesforce-processors/src/main/resources/docs/org.apache.nifi.processors.salesforce.QuerySalesforceObject/additionalDetails.html:
##########
@@ -0,0 +1,73 @@
+<!DOCTYPE html>
+<html lang="en" xmlns="http://www.w3.org/1999/html";>
+<!--
+      Licensed to the Apache Software Foundation (ASF) under one or more
+      contributor license agreements.  See the NOTICE file distributed with
+      this work for additional information regarding copyright ownership.
+      The ASF licenses this file to You under the Apache License, Version 2.0
+      (the "License"); you may not use this file except in compliance with
+      the License.  You may obtain a copy of the License at
+          http://www.apache.org/licenses/LICENSE-2.0
+      Unless required by applicable law or agreed to in writing, software
+      distributed under the License is distributed on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+      See the License for the specific language governing permissions and
+      limitations under the License.
+    -->
+
+<head>
+    <meta charset="utf-8"/>
+    <title>QuerySalesforceObject</title>
+    <link rel="stylesheet" href="../../../../../css/component-usage.css" 
type="text/css"/>
+    <style>
+h2 {margin-top: 4em}
+h3 {margin-top: 3em}
+td {text-align: left}
+    </style>
+</head>
+
+<body>
+
+<h1>QuerySalesforceObject</h1>
+
+<h3>Description</h3>
+
+<p>
+    Objects in Salesforce are database tables, their rows are known as 
records, and their columns are called fields. The QuerySalesforceObject 
processor queries Salesforce objects and retrieves their records.
+    The processor constructs the query using SOQL (Salesforce Object Query 
Language) and retrieves the result record dataset using the Salesforce REST API.
+    The processor utilizes streams and NiFi record-based processing to be able 
to handle a large number of records and to allow arbitrary output format.
+</p>
+
+<h3>OAuth2 Access Token Provider Service</h3>
+
+<p>
+    The Salesforce REST API authorization is handled by the OAuth2 Access 
Token Provider Service. In order to use OAuth2 authorization create a new 
StandardOauth2AccessTokenProvider service and configure it
+    the following way.
+</p>
+
+<ul>
+    <li>Authorization Server URL: It is the concatenation of the base URL and 
the token request service URL (/services/oauth2/token).</li>

Review Comment:
   The source of the `base URL` is not clear. Is this the Base URL from the 
Processor?



##########
nifi-nar-bundles/nifi-salesforce-bundle/nifi-salesforce-processors/src/main/resources/docs/org.apache.nifi.processors.salesforce.QuerySalesforceObject/additionalDetails.html:
##########
@@ -0,0 +1,73 @@
+<!DOCTYPE html>
+<html lang="en" xmlns="http://www.w3.org/1999/html";>
+<!--
+      Licensed to the Apache Software Foundation (ASF) under one or more
+      contributor license agreements.  See the NOTICE file distributed with
+      this work for additional information regarding copyright ownership.
+      The ASF licenses this file to You under the Apache License, Version 2.0
+      (the "License"); you may not use this file except in compliance with
+      the License.  You may obtain a copy of the License at
+          http://www.apache.org/licenses/LICENSE-2.0
+      Unless required by applicable law or agreed to in writing, software
+      distributed under the License is distributed on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+      See the License for the specific language governing permissions and
+      limitations under the License.
+    -->
+
+<head>
+    <meta charset="utf-8"/>
+    <title>QuerySalesforceObject</title>
+    <link rel="stylesheet" href="../../../../../css/component-usage.css" 
type="text/css"/>
+    <style>
+h2 {margin-top: 4em}
+h3 {margin-top: 3em}
+td {text-align: left}
+    </style>
+</head>
+
+<body>
+
+<h1>QuerySalesforceObject</h1>
+
+<h3>Description</h3>
+
+<p>
+    Objects in Salesforce are database tables, their rows are known as 
records, and their columns are called fields. The QuerySalesforceObject 
processor queries Salesforce objects and retrieves their records.
+    The processor constructs the query using SOQL (Salesforce Object Query 
Language) and retrieves the result record dataset using the Salesforce REST API.
+    The processor utilizes streams and NiFi record-based processing to be able 
to handle a large number of records and to allow arbitrary output format.
+</p>
+
+<h3>OAuth2 Access Token Provider Service</h3>
+
+<p>
+    The Salesforce REST API authorization is handled by the OAuth2 Access 
Token Provider Service. In order to use OAuth2 authorization create a new 
StandardOauth2AccessTokenProvider service and configure it
+    the following way.
+</p>
+
+<ul>
+    <li>Authorization Server URL: It is the concatenation of the base URL and 
the token request service URL (/services/oauth2/token).</li>
+    <li>Grant Type: User Password.</li>
+    <li>Username: The email address registered in the Salesforce account in 
use.</li>
+    <li>Password: For the Password a Security token must be requested. Go to 
Profile -> Settings and under the Reset My Security Token option, request one, 
which will be emailed to you.

Review Comment:
   ```suggestion
       <li>Password: For the Password a Security token must be requested. Go to 
Profile -> Settings and under the Reset My Security Token option, request one, 
which will be sent to the registered email address.
   ```



##########
nifi-nar-bundles/nifi-salesforce-bundle/nifi-salesforce-processors/src/main/java/org/apache/nifi/processors/salesforce/QuerySalesforceObject.java:
##########
@@ -171,8 +171,8 @@ public class QuerySalesforceObject extends 
AbstractProcessor {
     static final PropertyDescriptor AGE_FIELD = new 
PropertyDescriptor.Builder()
             .name("age-field")
             .displayName("Age Field")
-            .description("The name of a TIMESTAMP field that will be used to 
limit all and filter already retrieved records."
-                    + " Only records that are older than the previous run time 
of this processor will be retrieved."
+            .description("The name of a TIMESTAMP field that will be used to 
time-window records."
+                    + "Only those records will be queried whose timestamp 
field is newer than the previous run time."

Review Comment:
   ```suggestion
                       + "The processor will return only those records with a 
timestamp value newer than the timestamp recorded after the last processor run."
   ```



##########
nifi-nar-bundles/nifi-salesforce-bundle/nifi-salesforce-processors/src/main/java/org/apache/nifi/processors/salesforce/QuerySalesforceObject.java:
##########
@@ -194,9 +193,8 @@ public class QuerySalesforceObject extends 
AbstractProcessor {
     static final PropertyDescriptor INITIAL_AGE_FILTER = new 
PropertyDescriptor.Builder()
             .name("initial-age-filter")
             .displayName("Initial Age Filter")

Review Comment:
   Based on the description, it may be better to change the property display 
name to something like "Initial Age Start Time", since it does not apply to the 
initial end time.
   ```suggestion
               .displayName("Initial Age Start Time")
   ```



##########
nifi-nar-bundles/nifi-salesforce-bundle/nifi-salesforce-processors/src/main/resources/docs/org.apache.nifi.processors.salesforce.QuerySalesforceObject/additionalDetails.html:
##########
@@ -0,0 +1,73 @@
+<!DOCTYPE html>
+<html lang="en" xmlns="http://www.w3.org/1999/html";>
+<!--
+      Licensed to the Apache Software Foundation (ASF) under one or more
+      contributor license agreements.  See the NOTICE file distributed with
+      this work for additional information regarding copyright ownership.
+      The ASF licenses this file to You under the Apache License, Version 2.0
+      (the "License"); you may not use this file except in compliance with
+      the License.  You may obtain a copy of the License at
+          http://www.apache.org/licenses/LICENSE-2.0
+      Unless required by applicable law or agreed to in writing, software
+      distributed under the License is distributed on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+      See the License for the specific language governing permissions and
+      limitations under the License.
+    -->
+
+<head>
+    <meta charset="utf-8"/>
+    <title>QuerySalesforceObject</title>
+    <link rel="stylesheet" href="../../../../../css/component-usage.css" 
type="text/css"/>
+    <style>
+h2 {margin-top: 4em}
+h3 {margin-top: 3em}
+td {text-align: left}
+    </style>
+</head>
+
+<body>
+
+<h1>QuerySalesforceObject</h1>
+
+<h3>Description</h3>
+
+<p>
+    Objects in Salesforce are database tables, their rows are known as 
records, and their columns are called fields. The QuerySalesforceObject 
processor queries Salesforce objects and retrieves their records.
+    The processor constructs the query using SOQL (Salesforce Object Query 
Language) and retrieves the result record dataset using the Salesforce REST API.
+    The processor utilizes streams and NiFi record-based processing to be able 
to handle a large number of records and to allow arbitrary output format.
+</p>
+
+<h3>OAuth2 Access Token Provider Service</h3>
+
+<p>
+    The Salesforce REST API authorization is handled by the OAuth2 Access 
Token Provider Service. In order to use OAuth2 authorization create a new 
StandardOauth2AccessTokenProvider service and configure it
+    the following way.
+</p>
+
+<ul>
+    <li>Authorization Server URL: It is the concatenation of the base URL and 
the token request service URL (/services/oauth2/token).</li>
+    <li>Grant Type: User Password.</li>
+    <li>Username: The email address registered in the Salesforce account in 
use.</li>
+    <li>Password: For the Password a Security token must be requested. Go to 
Profile -> Settings and under the Reset My Security Token option, request one, 
which will be emailed to you.
+        The password is made up of the Salesforce account password and the 
Security token concatenated together without a space.</li>
+    <li>Client ID: Create a new Connected App within Salesforce. Go to Setup 
-> On the left search panel find App Manager -> Create New Connected App. Once 
it’s done, the Consumer Key goes to the Client ID property.</li>
+    <li>Client Secret: It can be found on the same Connected App page under 
the name of Consumer Secret.</li>
+</ul>
+
+<h3>Age properties</h3>
+
+<p>
+    The age property is important if it is intended to query and process a 
record once. It provides a sliding window that starts with the processor’s 
prior run time and ends with the current run time minus the age delay.
+    Only records that are within the sliding window are queried and processed. 
On the processor, the Age Field property must be a datetime field of the 
queried object, this will be subject to the condition that it is greater
+    than the processor's previous but less than the current run time (e.g. 
LastModifiedDate). The first run, for example, will query records whose 
LastModifiedDate field is earlier than the current run time. The second will
+    look for records with LastModifiedDate fields that are later than the 
previous run time but earlier than the current run time.
+</p>
+
+<p>
+    The Initial Age Filter is used to provide a specific datetime that sets 
the beginning of the sliding window from which processing occurs in the first 
processor run. The format must adhere to

Review Comment:
   ```suggestion
       The processor uses the Initial Age Filter as a specific timestamp that 
sets the beginning of the sliding window from which processing builds the 
initial query. The format must adhere to
   ```



##########
nifi-nar-bundles/nifi-salesforce-bundle/nifi-salesforce-processors/src/main/resources/docs/org.apache.nifi.processors.salesforce.QuerySalesforceObject/additionalDetails.html:
##########
@@ -0,0 +1,73 @@
+<!DOCTYPE html>
+<html lang="en" xmlns="http://www.w3.org/1999/html";>
+<!--
+      Licensed to the Apache Software Foundation (ASF) under one or more
+      contributor license agreements.  See the NOTICE file distributed with
+      this work for additional information regarding copyright ownership.
+      The ASF licenses this file to You under the Apache License, Version 2.0
+      (the "License"); you may not use this file except in compliance with
+      the License.  You may obtain a copy of the License at
+          http://www.apache.org/licenses/LICENSE-2.0
+      Unless required by applicable law or agreed to in writing, software
+      distributed under the License is distributed on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+      See the License for the specific language governing permissions and
+      limitations under the License.
+    -->
+
+<head>
+    <meta charset="utf-8"/>
+    <title>QuerySalesforceObject</title>
+    <link rel="stylesheet" href="../../../../../css/component-usage.css" 
type="text/css"/>
+    <style>
+h2 {margin-top: 4em}
+h3 {margin-top: 3em}
+td {text-align: left}
+    </style>
+</head>
+
+<body>
+
+<h1>QuerySalesforceObject</h1>
+
+<h3>Description</h3>
+
+<p>
+    Objects in Salesforce are database tables, their rows are known as 
records, and their columns are called fields. The QuerySalesforceObject 
processor queries Salesforce objects and retrieves their records.
+    The processor constructs the query using SOQL (Salesforce Object Query 
Language) and retrieves the result record dataset using the Salesforce REST API.
+    The processor utilizes streams and NiFi record-based processing to be able 
to handle a large number of records and to allow arbitrary output format.
+</p>
+
+<h3>OAuth2 Access Token Provider Service</h3>
+
+<p>
+    The Salesforce REST API authorization is handled by the OAuth2 Access 
Token Provider Service. In order to use OAuth2 authorization create a new 
StandardOauth2AccessTokenProvider service and configure it
+    the following way.
+</p>
+
+<ul>
+    <li>Authorization Server URL: It is the concatenation of the base URL and 
the token request service URL (/services/oauth2/token).</li>
+    <li>Grant Type: User Password.</li>
+    <li>Username: The email address registered in the Salesforce account in 
use.</li>
+    <li>Password: For the Password a Security token must be requested. Go to 
Profile -> Settings and under the Reset My Security Token option, request one, 
which will be emailed to you.
+        The password is made up of the Salesforce account password and the 
Security token concatenated together without a space.</li>
+    <li>Client ID: Create a new Connected App within Salesforce. Go to Setup 
-> On the left search panel find App Manager -> Create New Connected App. Once 
it’s done, the Consumer Key goes to the Client ID property.</li>
+    <li>Client Secret: It can be found on the same Connected App page under 
the name of Consumer Secret.</li>
+</ul>
+
+<h3>Age properties</h3>
+
+<p>
+    The age property is important if it is intended to query and process a 
record once. It provides a sliding window that starts with the processor’s 
prior run time and ends with the current run time minus the age delay.

Review Comment:
   Recommend the following adjustments:
   ```suggestion
       The age properties are important to avoid processing duplicate records. 
Age filtering provides a sliding window that starts with the processor’s prior 
run time and ends with the current run time minus the age delay.
   ```



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to