Relational Junction will work on any web application server, including WebLogic, if the app server supports Java 1.8. Nearly all of our customers use Tomcat, since it provides all the services required for the web administration without any licensing costs. Relational Junction is primarily a batch system. You can fire off jobs in the web user interface, but stopping Tomcat does not kill the jobs. It is far better to have a dedicated server for Relational Junction, because of the batch orientation, than use a web application server with many other transactional applications running.
Yes, but it would be naive to think that it doesn’t require carefully though out decisions and preparations to make so the new records fit into the target org, such as
- Is the target org empty or does it contain existing users, products, and other slowly changing data? On professional service engagements, our team has used mapping tables to marry up the business keys in the source or with the target records by their Salesforce ID in the target org. Unique business keys are required to make this work smoothly.
- How do you want to detect and handle duplicates? If you are merging business units, how do you determine if you have a common customer and which record “wins” in that event?
Yes. There is a button you can press in the user interface that will gracefully cancel any job with full two-phase of all transactions in Salesforce and status flags in the database. This makes restores fully restartable without creating duplicates in Salesforce.
We do not create foreign key constraints because it would prevent copying records if they were done out of order, as you would get constraint violations if the child was copied before the parent. Also, some of the relationships (such as the ParentID of Attachment) point to multiple objects.
Yes. The relationship fields are stored in the database. When records are restored, the relationship fields are updated for all the child records as the parent records get new Salesforce ID’s. This is a patented process that allows one-pass restore of related data, including recursive relationships.
Contact.AccountID –> Account.ID
Contact.ReportsToID — Contact.ID
Even multi-level relationships are supported (Account1 has Contact1 as its child, which has Account2 as its child in a custom relationship).
There is no limit. We have customers with terabytes of data.
Relational Junction uses patented and patent-pending technology to limit queries to manageable sizes, preventing fatal timeouts and staying within limits of the Salesforce API. Performance of the product is an order of magnitude faster than the Salesforce Bulk API and does not require intermediate landing files.
Yes. Content Version can also be backed up and restore, within reasonable limitations of your hardware to store the entire record in memory.
Yes. You would need to have Salesforce turn on the “Preserve Audit Fields” option to keep CreatedDate and LastModifiedDate as they were.
Yes. The only limitations are
- The object must be “Createable” — a term which Salesforce means the Salesforce application allows an API user to create new records. For instance, AccountHistory and OpportunityHistory records are not Createable; they are created internally by Salesforce.
- The user must have security permission to create records in Salesforce.
Yes, the product automatically adds new objects and fields, and keeps old objects and fields that are removed from Salesforce until you specifically request that they be dropped from the database. The only non-automated process is if you change data types in Salesforce, in which the database was originally a number or a date. In that case, you would get a warning message every time a job runs on that object telling you what field didn’t match. If there was every any actual data that couldn’t be copied, the job would fail and let you know that you have to make a decision to drop and re-add the column with the correct data type, using the following command:
RJ4Salesforce -config [config name] -dropColumnForce [object name] [field name]
This is not automated because you might want to preserve or even recover the old data, since Salesforce drops and re-adds the field, leading to possible loss of data.