Dual-App Deployment
Deploying Dual-App requires specific order and considerations. This page explains the deployment process.
Deployment Order
Critical: App 1 First
Apps must be deployed in order:
- Deploy App 1 (tables)
- Wait for completion
- Deploy App 2 (pages)
App 2 depends on App 1. Installing App 2 without App 1 fails.
Why Order Matters
App 2 references → App 1 objects
(must exist first)
If App 1 isn't installed, App 2 can't resolve its dependencies.
Deployment Methods
Direct Publish
When publishing from SOD:
- SOD publishes App 1
- Waits for completion
- Publishes App 2
- Reports final status
SOD handles the ordering automatically.
Manual Installation
When you choose to download instead of publish, SOD produces a single ZIP archive containing both .app files (one for App 1, one for App 2). To install manually:
- Download the ZIP
- Extract both
.appfiles - Install App 1 via Extension Management
- Wait for App 1 to complete
- Install App 2 via Extension Management
- Wait for App 2 to complete
Updating Dual-Apps
Update Process
When updating customizations:
- SOD updates App 1 (if needed)
- Waits for App 1 deployment
- Updates App 2 (if needed)
- Reports completion
Version Considerations
- Update App 1 first if it has changes
- Update App 2 after App 1 completes
- Keep versions coordinated
Object Number Reshuffling on Republish
In Dual-App mode, object numbers can be shuffled between App 1 and App 2 when you republish. Because of that reshuffling, an object — an API page, typically — can end up defined in both apps across versions, and deployment fails:
The application object of type 'Page' with the ID '<number>' is defined in multiple apps.
The apps are: <App name> <version>; <App name> <version>.
Resolution: uninstall App 2, then republish.
This is a known quirk of Dual-App mode: it is sometimes simply necessary to uninstall App 2 before publishing. App 2 is always safe to uninstall — it contains page extensions, API pages and page-level logic, it depends on App 1, and nothing depends on it.
If the collision is not Dual-App related, another installed extension may be using the object number; the ToolBox app's Object Inspector will show what holds it.
Removing a field that App 2 references
App 2 holds page extensions, report extensions and API pages; App 1 holds the table extensions. App 2 therefore references fields defined in App 1.
When you remove a field from a table in App 1, App 2 still references it and compilation fails during publish.
Before republishing after removing a field, uninstall App 2 first, then publish.
The reference clean-up requirement is exactly the same as in Single-App mode — the field must still be removed from every page, report and API reference in SOD. Uninstalling App 2 does not substitute for that. See Create New Fields and Force Mode.
Uninstalling Dual-Apps
Uninstall Order
Reverse of installation:
- Uninstall App 2 first
- Wait for completion
- Uninstall App 1
Why This Order
App 2 depends on App 1:
- Can't uninstall App 1 while App 2 uses it
- Uninstall dependent app first
Deployment Environments
Sandbox Deployment
In sandbox:
- Automatic ordering by SOD
- Schema sync defaults to Synchronize; switch to Force Sync only when a deployment is blocked by a destructive change
- Faster deployment
Production Deployment
In production:
- Consider deployment window
- Communicate to users
- Follow change management
- Test in sandbox first
Multi-Environment Deployment
Using .app Files
For consistent multi-environment deployment:
- Generate .app files in sandbox
- Download both .app files
- Deploy to other environments in order
Ensuring Consistency
- Same versions across environments
- Same deployment order
- Document which version where
Troubleshooting Deployment
App 2 Fails with Dependency Error
Cause: App 1 not installed or not completed
Solution:
- Check App 1 deployment status
- Wait for App 1 completion
- Retry App 2
Schema Sync Issues
If App 1 sync fails:
- Review error message
- May need Force Sync mode
- Fix and retry
If App 2 sync fails:
- Verify App 1 is fully installed
- Review error details
- May indicate object conflicts
Version Mismatch
If updating causes issues:
- Ensure both apps updated together
- Versions should be compatible
- Consider clean install if problematic
Rollback Strategy
If Deployment Fails
- Note which app failed
- Review error messages
- Fix issues
- Retry deployment
If Rollback Needed
- Uninstall App 2 (if installed)
- Uninstall App 1 (if needed)
- Install previous versions (if available)
- Verify system works
Best Practices
Always Test First
- Deploy to sandbox before production
- Verify both apps work together
- Test key functionality
Coordinate Deployments
- Deploy both apps in same maintenance window
- Don't leave partially updated
- Communicate with users
Keep Versions Aligned
- Update both apps together when possible
- Document version relationships
- Track what's deployed where
Monitor Deployment
- Check status after each app
- Don't proceed until completion
- Review any warnings