by Mien Trung Software

Run multiple companies inside one SuiteCRM with full data isolation, per-company record numbering, and zero extra infrastructure. One instance, any number of companies, no compromises.

Includes a 30 day guarantee
Try it Now

FAQ

MTS Multi Organization — Frequently Asked Questions


General Questions

Q: What is MTS Multi Organization? It is a SuiteCRM plugin that lets you run multiple companies inside a single SuiteCRM instance with complete data isolation. Each company's users only see their own records, and per-company auto-numbering is supported for any module and field.

Q: Does it work with SuiteCRM 8? Yes. The plugin is compatible with both SuiteCRM 7.12+ and SuiteCRM 8.x. The PHP logic hook, ACL extension, and admin UI all work on both versions.

Q: How many companies can I create? There is no hard limit. Performance depends on your server and database, but the SQL filtering is indexed on mts_cm_company_id_c and designed for production workloads.

Q: Does it replace SuiteCRM's built-in Security Groups? No. MTS Multi Organization and SuiteCRM Security Groups serve different purposes. Security Groups control field-level and record-level visibility within one organization. MTS Multi Organization isolates entirely separate companies at the tenant level. They can coexist.


Installation Questions

Q: Which ZIP do I install — Yearly or Onetime? Install the one matching your license type from the SuiteCRM Store. Both packages are functionally identical; they differ only in the license key they validate against.

Q: Do I need to run Quick Repair after installing? Yes. After installation, run Admin → Repair → Quick Repair and Rebuild and execute any pending SQL. Also run Repair → Rebuild Extensions.

Q: Can I install on a live production instance? Yes, but always take a database backup first. The install process creates two new tables (mts_company and mts_company_numbering) and installs extension files — it does not modify existing tables.


Configuration Questions

Q: How do I enable company isolation for the Accounts module? Go to Admin → MTS Multi Organization → Enable Modules, click the Accounts tile to activate it, then click Save. The plugin automatically installs the mts_cm_company_id_c relate field on the Accounts table.

Q: What is a "visible admin" user? A visible admin is a SuiteCRM admin user you explicitly designate in the plugin config. They can see all companies' records and manage plugin settings. Other admin users are treated as regular users scoped to their assigned company.

Q: Can I change the numbering format after records have been created? Yes, but be careful. Changing the format affects only new records. Existing records keep their old format. The counter continues from where it left off, so sequence continuity is maintained.

Q: Can I have different numbering rules for different companies on the same module? Yes. Each numbering rule is tied to one company + one module combination. Company A can use ACME-{YYYY}-{N:5} while Company B uses BETA/{MM}/{N:4} on the same module.

Q: What happens if I disable a module that already has tagged records? The mts_cm_company_id_c field is removed from the module's schema and isolation stops. Existing data in the field is preserved in the database but no longer used for filtering. Re-enabling the module restores filtering.


Usage Questions

Q: Why does the auto-number not appear on a record I just saved? Two common reasons: (1) the target field already had a value — auto-numbering skips non-empty fields; (2) the numbering rule is inactive or no rule is configured for that company + module.

Q: Can a user belong to multiple companies? Yes. When they log in, a company picker appears. They choose which company context to work in for that session. A Switch Company link in the navigation allows switching during the session without logging out.

Q: Is the company context applied to imported records? Import is not covered by the auto-tag hook. Records imported via SuiteCRM's native import wizard will not automatically receive a company tag. Assign mts_cm_company_id_c manually or via a post-import script.

Q: Can regular users edit the Company record (bank details, legal info)? No. Company records follow the standard SuiteCRM ACL rules. Only admin-level users or users with explicit edit access on the MTS_Company module can modify them.


Security Questions

Q: Is the SQL WHERE clause injection-safe? Yes. All company IDs inserted into SQL queries are passed through $db->quote(), the standard SuiteCRM database escape function. Company IDs are also validated at the point of writing to the session (UUID / 32-char hex format only).

Q: Can a user escalate their company context by manipulating the session? The session value mts_cm_company_id_c is validated on every read: the company must exist in the mts_company table with deleted = 0. A stale or injected company ID causes the session value to be discarded and the user is logged out.

Q: Are admin user IDs validated on save? Yes. The config page validates submitted admin user IDs against the real database — only existing active admin users can be saved as visible admins.


Troubleshooting Questions

Q: After install, the Companies module is not in the navigation. Run Repair → Rebuild Extensions and clear your browser cache. If it still does not appear, check that the module is registered in custom/Extension/application/Ext/Include/.

Q: License validation always fails with "Unable to reach license server." Your server cannot reach https://store.suitecrm.com. Check: (1) outbound HTTPS (443) is not blocked by a firewall; (2) cURL is enabled in PHP (phpinfo() → curl); (3) no proxy misconfiguration.

Q: After enabling a module, some existing records do not show for any company. Existing records have a null mts_cm_company_id_c. The WHERE clause filters only for the current company's ID, so null-tagged records are excluded. You need to bulk-assign them via SQL: UPDATE {table} SET mts_cm_company_id_c = '{id}' WHERE mts_cm_company_id_c IS NULL.

Q: The company picker appears for a user who should only belong to one company. Check the Companies → Users subpanel — the user may have been added to more than one company. Remove them from the extra companies.

Q: Numbering generates duplicate numbers under heavy load. This should not happen — the counter uses an atomic UPDATE ... SET next_number = next_number + 1. If you see duplicates, check whether multiple hook registrations are firing (e.g., a second plugin also hooked before_save on the same module at a conflicting position).


Billing Questions

Q: What is the difference between the Yearly and One-Time license? The Yearly plan renews annually and includes all updates released during the subscription. The One-Time plan is a perpetual license with one year of updates included from the purchase date.

Q: What happens when my Yearly license expires? The plugin disables itself — company isolation and numbering stop working — after the next license validation cycle (up to 7 days after expiry). Renew on the SuiteCRM Store to restore functionality.

Q: Can I upgrade from Yearly to One-Time? Yes. Purchase the One-Time license, uninstall the Yearly package, install the Onetime package, and validate the new key.

Q: Is there a refund policy? Refunds are handled through the SuiteCRM Store's standard policy. Contact support within 30 days of purchase if the plugin does not work in your environment after following the troubleshooting steps.


Technical Questions

Q: Where is the company tag stored? In a custom field mts_cm_company_id_c on each enabled module's table (e.g., accounts_cstm.mts_cm_company_id_c). This is a standard SuiteCRM relate field pointing to mts_company.id.

Q: Where are numbering rules stored? In a dedicated table mts_company_numbering with columns: id, company_id, module_name, format_pattern, prefix, padding, next_number, reset_period, last_reset_date, target_field, active, deleted.

Q: How does the plugin handle SuiteCRM 8's Symfony-based v8 API? The plugin works through SuiteCRM's legacy MVC layer (index.php actions). It does not intercept or modify the v8 REST API routes. Records created via the v8 API will not have auto-numbering applied unless the logic hooks are also triggered by that path.

Q: Can I extend the format pattern with custom tokens? Not without modifying NumberingService::format(). The method is clean and well-structured — you can add custom str_replace calls for additional tokens. Consider raising a feature request on the SuiteCRM Store support channel.

Q: Is there a way to preview a numbering format before saving? Yes. The numbering form includes a Live Preview field that shows a sample output (#1) as you type the format pattern and prefix.


  • Website: mientrungsoft.com
  • Email: anhnhatuit@gmail.com
  • WhatsApp: +84973131884
Saving Comment Saving Comment...