Thursday, October 6, 2022

22C - Issue with DocuSign OAuth 2.0 Authentication for Contracts

Oracle identified an issue introduced with the 22C feature Use DocuSign OAuth 2.0 Authentication When SigningContracts.

To mitigate the impact, Oracle has reverted the functionality back to 22B and will continue to use Basic Authentication(username/pwd).

Section1:

If you are a Cohort A or Cohort B customer and are seeing the OAuth2.0 setup fields in the Manage ElectronicSignature page for DocuSign integration and getting an error, do the steps below to revert the functionality back to 22B to use Basic Authentication.

1. Navigate to Setup and Maintenance> Search for "Manage Profile Options" task.
2. Search for the Profile Option Code "OKC_DOCUSIGN_OAUTH_DISABLED"
3. If the Profile Option is not found, then create the profile option with values:
    
a. Profile Option Code "OKC_DOCUSIGN_OAUTH_DISABLED"
b. Profile Display Name "Disable DocuSign OAuth 2.0 Authentication for Contracts"
c. Application "Enterprise Contracts"
d. Module "Enterprise Contracts"
e. Description: 'Disable OAuth 2.0 authentication when submitting contracts for electronic signing using DocuSign'
f. SQL Validation leave it blank
g. Start date, set the date in past date.
4. Within "OKC_DOCUSIGN_OAUTH_DISABLED: Profile Option Levels", check "Enabled" and "Updatable"
5. Save and exit
6. Search for the task "Manage Administrator Profile Values"
7. Search for Profile Option Code "OKC_DOCUSIGN_OAUTH_DISABLED"
8. In "OKC_DOCUSIGN_OAUTH_DISABLED: Profile Values" add new "Site" with value "Y"
9. Save and close, log out and back in.

Now you can continue to setup the Basic Authentication for DocuSign integration.

If you need to use OAuth2.0 configuration, then there are 2 options:

1. The permanent fix is already available in 22D.
2. Reach out to Oracle Support to provide approval to enroll for any 22C CWB on or after 02-Sep-2022

Section 2:

If you are seeing the Basic Authentication setup screen for DocuSign Integration but would like to useOAuth2.0 Authentication for integration with DocuSign, then:

Please note:
The permanent solution to the issue is available in 22D release or any 22C Cumulative Weekly Bundle (CWB) on or after02-Sep-2022.
As a customer, if you want to use the OAuth2.0 Authentication immediately, please reach out to Oracle Support to provideapproval to enroll for any 22C CWB on or after 02-Sep-2022.
After the CWB is applied, you will have to follow the steps below:

A. Set the Profile Option to N
1. Navigate to Setup and Maintenance > Manage Administrator Profile Options task
2. Search for the Profile Option Code: OKC_DOCUSIGN_OAUTH_DISABLED
3. At the Site level, set the value to : N
4. Save and Close.
5. Log out and Log back in.

B. In the Manage Electronic Signature page
Enter the User ID associated with the user profile in DocuSign that has administrator privileges. This user must be the onewho completes all the steps below to grant consent and validate the integration.
1. Enter the Account ID and Endpoint URL. These are the API Account ID and Account Base URI respectively on yourDocuSign account.
2. Provide the OAuth URL for the DocuSign instance to which you intend to connect when submitting your contractsfor electronic signing. This could either be your development or production instance of DocuSign:
Development Account: https://account-d.docusign.com
Production Account: https://account.docusign.com
3. Use the Validate action to provide one-time user consent to use DocuSign integration. The user who performs thisstep must be the same user identified by the user ID entered in step 1 in the Manage Electronic Signature page.
4. Click on the Allow Access button to grant consent.
5. You'll see a message confirming the link between Oracle Enterprise Contracts and DocuSign.
6. IMPORTANT - Make sure you hit Validate once again to save the changes.


Before

After






Thursday, April 14, 2022

Extract Table Data Using Python

This is a very simple example. But you will know the dynamics to alter for achieving the right results. 

from time import sleep
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.options import Options
options = Options()
options.headless = True
driver = webdriver.Chrome(options=options)
driver.maximize_window()
driver.get('https://www.w3schools.com/html/html_tables.asp')

# Make Python sleep for some time
sleep(2)

rows = len(driver.find_elements("xpath","/html/body/div[7]/div[1]/div[1]/div[3]/div/table/tbody/tr"))

# Obtain the number of columns in table
cols = len(driver.find_elements("xpath","/html/body/div[7]/div[1]/div[1]/div[3]/div/table/tbody/tr/td"))

# Printing the data of the table
for r in range(2, rows+1):
for p in range(1,4):
#obtaining the text from each column of the table
value = driver.find_element("xpath","/html/body/div[7]/div[1]/div[1]/div[3]/div/table/tbody/tr["+str(r)+"]/td["+str(p)+"]").text
print(value)



Friday, February 4, 2022

Execute Selenium in Jupyter Notebook - Headless Mode

In the previous example, when you run the script, you will be able to see the chrome browser getting activated and follows the command in the script. 

Headless mode runs the code without the need of the physical browser. It executes the same script behind the scenes, without opening the browser window at all. 

This makes automation much easier and efficient in a way. Speed and performance is amazing in this scenario. You can run multiple tests in parallel without the overhead of multiple browsers being open all through the execution time frame. 

Below is what how you can run the code from the previous post in the headless mode. 

from time import sleep
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.options import Options
options = Options()
options.headless = True
driver = webdriver.Chrome(options=options)

driver.maximize_window()
driver.get('https://google.com')
driver.find_element("name", "q").send_keys("Elon Musk")
driver.find_element("xpath","/html/body/div[1]/div[3]/form/div[1]/div[1]/div[4]/center/input[1]").send_keys(Keys.ENTER)
print(driver.find_element(By.XPATH,"/html/body/div[7]/div/div[11]/div[3]/div[2]/div/div/div[2]/div/div/div/div[1]/div/div/div/div/span[1]").text)
sleep(3)
driver.close()

Result will be the same, but no browsers are opened. 



Saturday, January 8, 2022

Execute Selenium in Jupyter Notebook

Installing and running selenium is so simple with Jupyter Notebook. Follow the below steps to create a sample program. Creating POCs will be superfast with this method. Steps to run Selenium with Python on Jupyter notebook below:

Install Selenium in Jupyter

!pip install selenium

If its successful, you will get the below message

Install Chrome Webdriver

Install from this link: https://chromedriver.chromium.org/

Make sure that you are downloading the version that matches with your chrome browser version. 

Run the sample program below

Intent of this code sample is to search for a person in Google and retreive the Wiki text displayed on the right side of the page. 

from time import sleep
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()
driver.maximize_window()  
driver.get('https://google.com')
driver.find_element("name", "q").send_keys("Elon Musk")  
driver.find_element("xpath","/html/body/div[1]/div[3]/form/div[1]/div[1]/div[4]/center/input[1]").send_keys(Keys.ENTER) 
print(driver.find_element(By.XPATH,"/html/body/div[7]/div/div[11]/div[3]/div[2]/div/div/div[2]/div/div/div/div[1]/div/div/div/div/span[1]").text)

sleep(3)
driver.close()

Run the code and you will get the below result. 

Sunday, June 10, 2018

Access PeopleSoft (or anything) from Slack



Within the team, we started using slack for one reason.

Continuous, non-interrupted and managed communication.

There is yet another reason why this is my favorite recommended application for collaboration:

De-orchestrated productivity

You place a resource targeted request in the channel and, someone will pick it up to cater your need. No bottlenecks or unproductive waiting periods, like when you request something via email and it sits in the queue for several reasons.

This isn't going to happen without the team effort and, is something that I like within the team to it's best. Productivity shot up by 40%.

Below is one example. The integration team, who is new to the PeopleSoft world, had a query about a PeopleSoft record. Using PS_ is a part of the PeopleSoft life, but not for any other teams and might end up in a query which says, "table doesn't exist".


What if, similar queries can be answered by an automated app within Slack? Much more efficient right.

So came up with the below solution. Serving PeopleSoft details via Slack using the event driven mechanism.




This is what the integration does:
  1. Slash command triggers the event
  2. Post the request to the server
  3. Server reads the request
  4. Triggers PeopleSoft Rest API for fetching the information and parse the response
  5. goog_2079004393Respond back to Slack using Web Hooks

This is just one simplified example. You can serve data from any database and the implementation scope is limitless.

Let's take another example. Tracking the PeopleSoft scheduled job information within the slack channel. You will get notified on the program start and end timings with any other information, say, quick log access with Success and Error counts etc.


Analytics, HR services, Workflows Approvals - there are no limits to the use cases that can be served with slack integration.