ADFdi Excel worksheet exception on upload operation: ArgumentException: invalid area string: N5:Q5,S5

Full exception stack:

ArgumentException: invalid area string: N5:Q5,S5
Source: adfdi-excel-om-api
Stack:
   at oracle.adf.client.windows.excel.om.api.ExcelRangeAreas.ParseRangeAddress()
   at oracle.adf.client.windows.excel.om.api.cache.ExcelRangeCache.get_RangeAreas()
   at oracle.adf.client.windows.excel.om.api.ExcelRangeReader..ctor(ExcelRange range, Int32 maxRows)
   at oracle.adf.client.windows.excel.runtime.uicomponent.table.DEGUploadHelper.InitDataRangeIterator()
   at oracle.adf.client.windows.excel.runtime.uicomponent.table.TableOperationHelper.ProcessRows(Boolean abortOnFail)
   at oracle.adf.client.windows.excel.runtime.uicomponent.table.TableOperationHelper.Run(RTColumn rtColumnFlaggedOrChanged, Int32 cRowsFlaggedOrChanged, Boolean abortOnFail)
   at oracle.adf.client.windows.excel.runtime.uicomponent.table.DEGUploadHelper.Upload(Boolean haveOptions, Boolean abortOnFail, Boolean downloadAfterUpload)
   at oracle.adf.client.windows.excel.runtime.uicomponent.RTDataEntryGrid.Invoke(RTComponentAction rtAction)
   at oracle.adf.client.windows.excel.runtime.uicomponent.RTActionCollection.DoInvoke(RTColumnCollection parent)


This exception is thrown when data upload to server is requested. Range N5:Q5,S5 specifies cells that are being updated. In my case it happend only under following conditions:
  • In table component there were columns with decimal data
  • There were some read only columns and some editable. Their order was mixed (i.e. [editable] [editable] [readonly] [editable])
  • Client computer OS locale was different from server locale (client - Lithuanian, server - US)
After some time spent on investigating, I came up with following solutions/workarounds which forced things work:
  • Making client locale same as server's. In my case I switched to US. Locale became important after decimal numbers appeared on the table. Number format in Lithuanian and US locale is different (decimal part is separated with comma or dot). When there is not available decimal numbers everything works fine. But locale unification solved problem.

  • Making monolithic editable range in the table. This means that there can not be any read only columns interfered between editable columns. In the picture wrong example:
Here is correct example:

After changing editable/readonly column order like in preceding picture, everything works fine.

So this is two solutions I came up, believe that there should be smarter one, but for now I have only those. If  You experienced some other aspects of this problem, please, post a comment!
This issue is relevant to ADF version 11.1.1.7

Latest update!
I experienced same error when trying to update records using different than English locale. Try to change  more then one row, but with at least one unchanged row between them (i.e. change 4'th and 6'th row, 5th stays unchanged). After trying to upload changed data, same error is displayed. We've registered SR at Oracle support and got bug confirmed. And they made backport fix for 11.1.1.7 version (in 12c it is fixed). Related document ID in My Oracle Support - 1590786.1.

ADF dekstop integration (ADFdi) plugin with macro enabled file doesn't work when opened from MS Internet Explorer. File is opened but nothing is loaded. Why?

Actually this is not an issue or bug, it is not even directly related to ADFdi. Everything work as supposed to :)

ADFdi plugin can't function properly, because Excel opens file in a protected view. This happens because AES (Attachment Execution Services) marks file as downloaded from internet (only MS IE and Outlook can do this). Before showing file contents Excel checks AES records and automatically switch to protected view.

Possible solutions:
  • Disable protected view for files downloaded from internet ( [Open Excel] -> File -> Options -> Trust Center -> Trust Center Settings -> Protected View -> [Uncheck "Enable Protected View for files originatin from the Internet"])
  • Change Windows OS localhost real location (sounds like a hack). To accomplish this - open windows hosts file (sample location: C:\Windows\System32\drivers\etc), add record "[application servers, where resides Excel file, IP] localhost"
  • Some other

How to change logging level of standalone or integrated WebLogic in JDeveloper? For example how to capture SQL executed?

In Integrated WebLogic (JDeveloper) this can be done with just few clicks:

  • Open "IntegratedWeblogicServer - Log" window. On the right-hand top corner click "Actions" and choose "Configure Oracle Diagnostic Logging"
  • For getting SQL statements in the output, in the opened logging.xml choose "oracle.jbo" logger with desired logging level. Level "Finest" will generate maximum output. SQL staements shoud definitely be there.

Be careful not to choose too many loggers with quite fine logging level. Otherwise log output can become too massive, flooded and be difficult to find useful info in there.

In standalone WebLogic can accomplish this task using Fusion Middleware Control:

Open Oracle Enterprise Manager, right click on ADF server (i.e. adf_server1), choose Logs -> Log Configuration:


Here You find similar structure like in JDeveloper:


ADFDI-00502: The client was unable to establish an unauthenticated session with the web application. What can be the reason?

I have experienced such error. The reason was, that web application didn't know, that servlet "adfdiRemoteServlet", responsible for Excel workbook connectivity, should be secured. Problem happens only when ADF security is set to "ADF Authentication and Authorization". This means, that ADF takes care not just for login, but for access to various resources (in our case it is adfdiRemoteServlet) as well. When security is set to "ADF Authentication", everything works fine without any additional configuration.
So what is the solution if You want to use ADF authentication and authorization as well? There is need to edit application web.xml file. You need to say, that adfdiRemoteServlet is also secured. To complete this, just append "security-constraint" XML element like this:

<security-constraint>
    <web-resource-collection>
      <web-resource-name>adfAuthentication</web-resource-name>
      <url-pattern>/adfAuthentication</url-pattern>
      <url-pattern>/adfdiRemoteServlet</url-pattern>
    </web-resource-collection>
    <auth-constraint>
      <role-name>valid-users</role-name>
    </auth-constraint>
  </security-constraint>

The line in bold is newly added. It is just additional URL pattern for adfdiRemoteServlet.
Thats it! It should work now.
This solution tested for ADF version 11.1.1.7

How to configure local integrated WebLogic non-SOA domain to access BPM worklist on separate SOA-enabled domain?

ADF and BPM task flow on separate domains? No doubt this is frequent issue for developers working with ADF/BPM.There are several advantages to have it working:
  • No need to install SOA stuff locally if You're developing just ADF
  • Faster deployments to integrated WebLogic
  • Possibility of debugging
  • Isolated ADF enviroment for developing
In my case the last one was most important. An application I was working on had interaction with BPM worklist through BPM API. Steps which I completed to access BPM worklist on remote SOA enabled domain from my integrated non-SOA domain:

  • Create foreign JNDI provider in local integrated non-SOA WebLogic:

 Provider URL - link to SOA infrastructure on SOA enabled domain.

  • Create foreign JNDI provider links:


  • Deploy these 4 libraries into integrated WebLogic:

 Those libraries can be found in "%MIDDLEWARE_HOME%\jdeveloper\soa\modules". Of course SOA and BPM jdeveloper extensions should be installed to find these libraries here.

  • Inject following grant for bpm-services.jar into system-jazn-data.xml (locatedin: ORACLE_WEBLOGIC_INSTALL/user_projects/domains/your_domain_name/config/fmwconfig )
<grant>
  <grantee>
   <codesource>
    <url>file: ORACLE_JDEV_HOME/jdeveloper/soa/modules/oracle.soa.workflow_
11.1.1/bpm-services.jar</url>
   </codesource>
  </grantee>
  <permissions>
   <permission>
    <class>oracle.security.jps.JpsPermission</class>
    <name>VerificationService.createInternalWorkflowContext</name>
   </permission>
  <permission>
  <class>oracle.security.jps.service.credstore.CredentialAccessPermission
  </class>
  <name>credstoressp.credstore.BPM-CRYPTO.BPM-CRYPTO</name>
  <actions>read,write</actions>
  </permission>
  <permission>
   <class>oracle.security.jps.JpsPermission</class>
   <name>IdentityAssertion</name>
   <actions>*</actions>
  </permission>
 </permissions>
</grant>

  • Establish trust between non-SOA (integrated WebLogic) domain and SOA-enabled domain:
To do this follow steps:
  • Select domain name (i.e. DefaultDomain) in left-hand domain structure menu.
  • Choose "Security" tab, "General" sub-tab
  • Expand "Advanced" pane
  • Enter 



  • Make sure your application (which runs on integrated WebLogic) has proper URL set for SOA-enabled server in wf_client_config.xml (by default it is located in "Your app"\model\src) file:




When a domain is created, a unique credential is generated for the domain. If you want to establish trust between two or more domains, decide on a credential that will be shared by the domains, then specify it here and in the other domains. In our case it is non-SOA and SOA-enabled domains.

Thats it. It was enough for me to get things working. If it is not enough for You, check these links which helped me to set up this enviroment:


      Weblogic version 10.3.6