Customer contacts and trading settings — Pro
Customer settings, all contacts, multiple contact values and roles, with on-demand Details.
DOCUMENTARY AND SYNTHETIC VALIDATION ONLY — not tested on a real Sage 200 installation. For sales, customer service, account teams and managers: open customer accounts with account references, VAT registration, payment-term days and basis, invoice discount defaults, nominal cost centre/department, statement office type, associated head office and finance-charge setup code. Open every recorded contact, then their telephone, mobile, fax, email, website and recipient-name values and their assigned roles. Multiple values and roles are preserved; preferred values and preferred contacts for roles are separate settings. Blank default contacts remain visible. This is a current customer/contact and trading-settings dossier, not an invoice, credit-limit or aged-debt report.
Why Cifru? Adapt configurations to the way you work. Choose the fields, filters and details you need, and bring information to your phone that may not be available in your business software’s own mobile app. Available options depend on the data exposed by your authorised source and your Cifru plan.
Pro: one source, four lists, Details and three lazy related buttons; read-only custom SELECT. Up to 2,000 rows per list/read; no periodic refresh or automatic remote email/website opening. Local search and filters affect loaded rows only. Limits do not guarantee a cheap SQL query. Check execution plans, timeouts and installed keys; use a separately authorised, least-privilege SQL reader on one approved company database. Direct SQL does not inherit Sage user permissions or application roles. Child queries recheck customer and contact identity, but navigation is not an access-control boundary. No server addresses, source credentials or business rows are included.
Unofficial, not affiliated with Sage. Selected physical identifiers and relationships come from the Sage 200 2015 database guide (November 2014), not a complete DDL or a guarantee for current installations. Current Professional help supplies supplementary meanings, not proof that the legacy physical schema is unchanged. Requires SQL Server with the selected objects available in dbo; verify schema, data types, uniqueness and installed edition before import. Not Sage 200 Standard, Sage 200 Evolution or Sage 300. Account type means Balance Forward / Open Item / Auto Allocation, not Cash / Credit / Prospect. Payment days plus Calendar monthly do not calculate a due date here. Defaults can be overridden on transactions. This package intentionally omits monetary balances, credit limits, turnover and postal-address columns until their physical currency/address bindings are proved; it does not guess GBP or borrow supplier address fields. Native DEMO captures use wholly fictional local rows and are not a real ERP/SQL Server compatibility test.
Primary physical guide: https://desktophelp.sage.co.uk/sage200/PDF/2015/Understanding%20the%20Sage%20200%202015%20Database.pdf
Contact semantics: https://desktophelp.sage.co.uk/sage200/professional/Content/SL/EnterNewCustomerAccountContacts.htm
Screenshots
What this package creates
- Home: Customer accounts
- Details: Contacts
- Details: Contact methods
- Details: Contact roles
- Sub-button: Customer contacts
- Sub-button: Contact methods
- Sub-button: Contact roles
Sources are mapped locally and verified before applying.
Custom queriesPRO4 SQL
Custom queries are a PRO feature. Cifru repeats read-only validation against the local source before execution.
$.components.workspaceSelection.datasets.0.sqlQuerySELECT a.SLCustomerAccountID AS CustomerKey, a.CustomerAccountNumber AS CustomerCode, a.CustomerAccountName AS CustomerName, a.TaxRegistrationNumber AS VATReference, a.DefaultOrderPriority AS OrderPriority, a.DefaultNominalCostCentre AS CostCentre, a.DefaultNominalDepartment AS Department, a.PaymentTermsInDays AS PaymentDays, a.InvoiceLineDiscountPercent AS LineDiscount, a.InvoiceDiscountPercent AS InvoiceDiscount, CASE a.SYSAccountTypeID WHEN 0 THEN N'Balance Forward' WHEN 1 THEN N'Open Item' WHEN 2 THEN N'Auto Allocation' ELSE CASE WHEN a.SYSAccountTypeID IS NULL THEN N'Not recorded' ELSE CONCAT(N'Unknown native value: ',a.SYSAccountTypeID) END END AS AccountType, CASE a.SYSPaymentTermsBasisID WHEN 0 THEN N'Calendar monthly' WHEN 1 THEN N'From start of month' WHEN 2 THEN N'From end of month' WHEN 3 THEN N'From document date' ELSE CASE WHEN a.SYSPaymentTermsBasisID IS NULL THEN N'Not recorded' ELSE CONCAT(N'Unknown native value: ',a.SYSPaymentTermsBasisID) END END AS PaymentBasis, CASE a.UseConsolidatedBilling WHEN 1 THEN N'Yes' WHEN 0 THEN N'No' ELSE N'Not recorded / unknown' END AS ConsolidatedBilling, o.Name AS OfficeType, h.CustomerAccountNumber AS HeadOfficeCode, h.CustomerAccountName AS HeadOfficeName, f.FinanceChargeCode AS FinanceCharge FROM dbo.SLCustomerAccount a LEFT JOIN dbo.SLOfficeType o ON o.SLOfficeTypeID=a.SLAssociatedOfficeTypeID LEFT JOIN dbo.SLCustomerAccount h ON h.SLCustomerAccountID=a.AssociatedHeadOfficeAccountId AND a.SLAssociatedOfficeTypeID=1 LEFT JOIN dbo.SLFinanceCharge f ON f.SLFinanceChargeID=a.SLFinanceChargeID WHERE a.SLCustomerAccountID IS NOT NULL
static read-only checks passed
$.components.workspaceSelection.datasets.1.sqlQuerySELECT a.SLCustomerAccountID AS CustomerKey, p.SLCustomerContactID AS ContactKey, a.CustomerAccountName AS CustomerName, COALESCE(NULLIF(p.ContactName,N''),N'(Unnamed contact)') AS ContactName, p.Description AS ContactDescription FROM dbo.SLCustomerContact p INNER JOIN dbo.SLCustomerAccount a ON a.SLCustomerAccountID=p.SLCustomerAccountID WHERE a.SLCustomerAccountID=:customer AND p.SLCustomerContactID IS NOT NULL
static read-only checks passed
$.components.workspaceSelection.datasets.2.sqlQuerySELECT a.SLCustomerAccountID AS CustomerKey, p.SLCustomerContactID AS ContactKey, v.SLCustomerContactValueID AS MethodKey, COALESCE(NULLIF(p.ContactName,N''),N'(Unnamed contact)') AS ContactName, CASE v.SYSContactTypeID WHEN 0 THEN N'Telephone Number' WHEN 1 THEN N'Fax Number' WHEN 2 THEN N'Email Address' WHEN 3 THEN N'Web Address' WHEN 4 THEN N'Recipient name' WHEN 5 THEN N'Mobile Number' ELSE CASE WHEN v.SYSContactTypeID IS NULL THEN N'Not recorded' ELSE CONCAT(N'Unknown native value: ',v.SYSContactTypeID) END END AS MethodType, v.ContactValue AS ContactValue, CASE v.IsPreferredValue WHEN 1 THEN N'Preferred value' WHEN 0 THEN N'Additional value' ELSE N'Preference unknown' END AS PreferredMethod FROM dbo.SLCustomerContactValue v INNER JOIN dbo.SLCustomerContact p ON p.SLCustomerContactID=v.SLCustomerContactID INNER JOIN dbo.SLCustomerAccount a ON a.SLCustomerAccountID=p.SLCustomerAccountID WHERE a.SLCustomerAccountID=:customer AND p.SLCustomerContactID=:contact AND v.SLCustomerContactValueID IS NOT NULL
static read-only checks passed
$.components.workspaceSelection.datasets.3.sqlQuerySELECT a.SLCustomerAccountID AS CustomerKey, p.SLCustomerContactID AS ContactKey, v.SLCustomerContactRoleID AS RoleKey, COALESCE(NULLIF(p.ContactName,N''),N'(Unnamed contact)') AS ContactName, COALESCE(NULLIF(r.Role,N''),N'Role label unavailable') AS RoleName, CASE v.IsPreferredContactForRole WHEN 1 THEN N'Preferred contact' WHEN 0 THEN N'Other contact' ELSE N'Preference unknown' END AS PreferredRole FROM dbo.SLCustomerContactRole v INNER JOIN dbo.SLCustomerContact p ON p.SLCustomerContactID=v.SLCustomerContactID INNER JOIN dbo.SLCustomerAccount a ON a.SLCustomerAccountID=p.SLCustomerAccountID LEFT JOIN dbo.SYSTraderContactRole r ON r.SYSTraderContactRoleID=v.SYSTraderContactRoleID WHERE a.SLCustomerAccountID=:customer AND p.SLCustomerContactID=:contact AND v.SLCustomerContactRoleID IS NOT NULL
static read-only checks passed
View the JSON being importedcollapsed by default
{
"components": {
"sourceSlots": [
{
"displayName": "Sage 200 Professional UK — company SQL Server",
"id": "0D18F335-432B-53BF-A92D-18BE469DAD39",
"kind": "sqlServer",
"requiredObjects": [
"dbo.SLCustomerAccount",
"dbo.SLCustomerContact",
"dbo.SLCustomerContactRole",
"dbo.SLCustomerContactValue",
"dbo.SLFinanceCharge",
"dbo.SLOfficeType",
"dbo.SYSTraderContactRole"
],
"requiresCustomSQL": true
}
],
"workspaceSelection": {
"commonFields": [],
"datasets": [
{
"cacheMode": "live",
"calculatedFields": [],
"customQueryIntegrationName": "Sage 200 Professional UK",
"endpointPath": "",
"fetchSortRules": [
{
"direction": "ascending",
"id": "778FA25C-1A3D-53BE-9E4F-526D2095CA03",
"key": "CustomerCode",
"type": "text"
},
{
"direction": "ascending",
"id": "D389B707-4A2F-5643-8EAA-D9F4FE890B9E",
"key": "CustomerKey",
"type": "text"
}
],
"id": "884BB32D-CB27-566F-AB50-5D499E62F438",
"mappings": [
{
"commonFieldKey": "",
"key": "CustomerKey",
"label": "Internal customer key",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "automatic",
"sourceColumn": "CustomerKey",
"type": "text",
"visibleInDetail": false,
"visibleInList": false
},
{
"commonFieldKey": "",
"key": "CustomerCode",
"label": "Customer account reference",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "automatic",
"sourceColumn": "CustomerCode",
"type": "text",
"visibleInDetail": true,
"visibleInList": false
},
{
"commonFieldKey": "",
"key": "CustomerName",
"label": "Customer name",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "automatic",
"sourceColumn": "CustomerName",
"type": "text",
"visibleInDetail": true,
"visibleInList": false
},
{
"commonFieldKey": "",
"key": "VATReference",
"label": "VAT registration",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "automatic",
"sourceColumn": "VATReference",
"type": "text",
"visibleInDetail": true,
"visibleInList": false
},
{
"commonFieldKey": "",
"key": "OrderPriority",
"label": "Default order priority (native value)",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "automatic",
"sourceColumn": "OrderPriority",
"type": "number",
"visibleInDetail": true,
"visibleInList": false
},
{
"commonFieldKey": "",
"key": "CostCentre",
"label": "Default nominal cost centre",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "automatic",
"sourceColumn": "CostCentre",
"type": "text",
"visibleInDetail": true,
"visibleInList": true
},
{
"commonFieldKey": "",
"key": "Department",
"label": "Default nominal department",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "automatic",
"sourceColumn": "Department",
"type": "text",
"visibleInDetail": true,
"visibleInList": true
},
{
"commonFieldKey": "",
"key": "PaymentDays",
"label": "Payment terms — days",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "automatic",
"sourceColumn": "PaymentDays",
"type": "number",
"visibleInDetail": true,
"visibleInList": true
},
{
"commonFieldKey": "",
"key": "LineDiscount",
"label": "Default invoice line discount (%)",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "automatic",
"sourceColumn": "LineDiscount",
"type": "number",
"visibleInDetail": true,
"visibleInList": true
},
{
"commonFieldKey": "",
"key": "InvoiceDiscount",
"label": "Default invoice discount (%)",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "automatic",
"sourceColumn": "InvoiceDiscount",
"type": "number",
"visibleInDetail": true,
"visibleInList": true
},
{
"commonFieldKey": "",
"key": "AccountType",
"label": "Account allocation type",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "automatic",
"sourceColumn": "AccountType",
"type": "text",
"visibleInDetail": true,
"visibleInList": false
},
{
"commonFieldKey": "",
"key": "PaymentBasis",
"label": "Payment terms — basis",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "automatic",
"sourceColumn": "PaymentBasis",
"type": "text",
"visibleInDetail": true,
"visibleInList": true
},
{
"commonFieldKey": "",
"key": "ConsolidatedBilling",
"label": "Consolidated billing",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "automatic",
"sourceColumn": "ConsolidatedBilling",
"type": "text",
"visibleInDetail": true,
"visibleInList": false
},
{
"commonFieldKey": "",
"key": "OfficeType",
"label": "Statement office type",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "automatic",
"sourceColumn": "OfficeType",
"type": "text",
"visibleInDetail": true,
"visibleInList": false
},
{
"commonFieldKey": "",
"key": "HeadOfficeCode",
"label": "Associated head office reference",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "automatic",
"sourceColumn": "HeadOfficeCode",
"type": "text",
"visibleInDetail": true,
"visibleInList": false
},
{
"commonFieldKey": "",
"key": "HeadOfficeName",
"label": "Associated head office name",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "automatic",
"sourceColumn": "HeadOfficeName",
"type": "text",
"visibleInDetail": true,
"visibleInList": false
},
{
"commonFieldKey": "",
"key": "FinanceCharge",
"label": "Finance charge setup code",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "automatic",
"sourceColumn": "FinanceCharge",
"type": "text",
"visibleInDetail": true,
"visibleInList": false
}
],
"maxRows": 2000,
"name": "Customer accounts",
"primaryKey": "CustomerKey",
"queryParameters": [],
"refreshPolicy": {
"enabled": false,
"intervalMinutes": 60
},
"rootArrayPath": "",
"rowLimitEnabled": true,
"searchKeys": [
"CustomerCode",
"CustomerName",
"VATReference",
"CostCentre",
"Department",
"AccountType",
"PaymentBasis",
"ConsolidatedBilling",
"OfficeType",
"HeadOfficeCode",
"HeadOfficeName",
"FinanceCharge"
],
"sourceID": "0D18F335-432B-53BF-A92D-18BE469DAD39",
"sqlQuery": "SELECT a.SLCustomerAccountID AS CustomerKey, a.CustomerAccountNumber AS CustomerCode, a.CustomerAccountName AS CustomerName, a.TaxRegistrationNumber AS VATReference, a.DefaultOrderPriority AS OrderPriority, a.DefaultNominalCostCentre AS CostCentre, a.DefaultNominalDepartment AS Department, a.PaymentTermsInDays AS PaymentDays, a.InvoiceLineDiscountPercent AS LineDiscount, a.InvoiceDiscountPercent AS InvoiceDiscount, CASE a.SYSAccountTypeID WHEN 0 THEN N'Balance Forward' WHEN 1 THEN N'Open Item' WHEN 2 THEN N'Auto Allocation' ELSE CASE WHEN a.SYSAccountTypeID IS NULL THEN N'Not recorded' ELSE CONCAT(N'Unknown native value: ',a.SYSAccountTypeID) END END AS AccountType, CASE a.SYSPaymentTermsBasisID WHEN 0 THEN N'Calendar monthly' WHEN 1 THEN N'From start of month' WHEN 2 THEN N'From end of month' WHEN 3 THEN N'From document date' ELSE CASE WHEN a.SYSPaymentTermsBasisID IS NULL THEN N'Not recorded' ELSE CONCAT(N'Unknown native value: ',a.SYSPaymentTermsBasisID) END END AS PaymentBasis, CASE a.UseConsolidatedBilling WHEN 1 THEN N'Yes' WHEN 0 THEN N'No' ELSE N'Not recorded / unknown' END AS ConsolidatedBilling, o.Name AS OfficeType, h.CustomerAccountNumber AS HeadOfficeCode, h.CustomerAccountName AS HeadOfficeName, f.FinanceChargeCode AS FinanceCharge FROM dbo.SLCustomerAccount a LEFT JOIN dbo.SLOfficeType o ON o.SLOfficeTypeID=a.SLAssociatedOfficeTypeID LEFT JOIN dbo.SLCustomerAccount h ON h.SLCustomerAccountID=a.AssociatedHeadOfficeAccountId AND a.SLAssociatedOfficeTypeID=1 LEFT JOIN dbo.SLFinanceCharge f ON f.SLFinanceChargeID=a.SLFinanceChargeID WHERE a.SLCustomerAccountID IS NOT NULL",
"tableName": ""
},
{
"cacheMode": "live",
"calculatedFields": [],
"customQueryIntegrationName": "Sage 200 Professional UK",
"endpointPath": "",
"fetchSortRules": [
{
"direction": "ascending",
"id": "0D4462F7-1B82-5940-9A03-D0B65161D699",
"key": "ContactName",
"type": "text"
},
{
"direction": "ascending",
"id": "992EF8B7-F10C-54B1-A8C7-5989E8B1BD96",
"key": "ContactKey",
"type": "text"
}
],
"id": "C00D62BB-1AB7-537F-BABC-D32D19384604",
"mappings": [
{
"commonFieldKey": "",
"key": "CustomerKey",
"label": "Internal customer key",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "automatic",
"sourceColumn": "CustomerKey",
"type": "text",
"visibleInDetail": false,
"visibleInList": false
},
{
"commonFieldKey": "",
"key": "ContactKey",
"label": "Internal contact key",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "automatic",
"sourceColumn": "ContactKey",
"type": "text",
"visibleInDetail": false,
"visibleInList": false
},
{
"commonFieldKey": "",
"key": "CustomerName",
"label": "Customer name",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "automatic",
"sourceColumn": "CustomerName",
"type": "text",
"visibleInDetail": true,
"visibleInList": true
},
{
"commonFieldKey": "",
"key": "ContactName",
"label": "Contact name",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "automatic",
"sourceColumn": "ContactName",
"type": "text",
"visibleInDetail": true,
"visibleInList": false
},
{
"commonFieldKey": "",
"key": "ContactDescription",
"label": "Contact description",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "automatic",
"sourceColumn": "ContactDescription",
"type": "text",
"visibleInDetail": true,
"visibleInList": false
}
],
"maxRows": 2000,
"name": "Customer contacts",
"primaryKey": "ContactKey",
"queryParameters": [
{
"constantValue": "",
"dayOffset": 0,
"fieldKey": "CustomerKey",
"id": "E8BAA57E-2B24-5A91-BA40-27AD40B5835E",
"name": "customer",
"source": "parentField",
"type": "text"
}
],
"refreshPolicy": {
"enabled": false,
"intervalMinutes": 60
},
"rootArrayPath": "",
"rowLimitEnabled": true,
"searchKeys": [
"CustomerName",
"ContactName",
"ContactDescription"
],
"sourceID": "0D18F335-432B-53BF-A92D-18BE469DAD39",
"sqlQuery": "SELECT a.SLCustomerAccountID AS CustomerKey, p.SLCustomerContactID AS ContactKey, a.CustomerAccountName AS CustomerName, COALESCE(NULLIF(p.ContactName,N''),N'(Unnamed contact)') AS ContactName, p.Description AS ContactDescription FROM dbo.SLCustomerContact p INNER JOIN dbo.SLCustomerAccount a ON a.SLCustomerAccountID=p.SLCustomerAccountID WHERE a.SLCustomerAccountID=:customer AND p.SLCustomerContactID IS NOT NULL",
"tableName": ""
},
{
"cacheMode": "live",
"calculatedFields": [],
"customQueryIntegrationName": "Sage 200 Professional UK",
"endpointPath": "",
"fetchSortRules": [
{
"direction": "ascending",
"id": "36355530-5107-55C8-A1F0-C376379E2E9B",
"key": "MethodType",
"type": "text"
},
{
"direction": "ascending",
"id": "4D75F0DA-FA79-5981-A7A8-834B152A7E5F",
"key": "MethodKey",
"type": "text"
}
],
"id": "B5E92D51-78F8-5BFF-BF92-01CEF0BFE6B8",
"mappings": [
{
"commonFieldKey": "",
"key": "CustomerKey",
"label": "Internal customer key",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "automatic",
"sourceColumn": "CustomerKey",
"type": "text",
"visibleInDetail": false,
"visibleInList": false
},
{
"commonFieldKey": "",
"key": "ContactKey",
"label": "Internal contact key",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "automatic",
"sourceColumn": "ContactKey",
"type": "text",
"visibleInDetail": false,
"visibleInList": false
},
{
"commonFieldKey": "",
"key": "MethodKey",
"label": "Internal method key",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "automatic",
"sourceColumn": "MethodKey",
"type": "text",
"visibleInDetail": false,
"visibleInList": false
},
{
"commonFieldKey": "",
"key": "ContactName",
"label": "Contact name",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "automatic",
"sourceColumn": "ContactName",
"type": "text",
"visibleInDetail": true,
"visibleInList": true
},
{
"commonFieldKey": "",
"key": "MethodType",
"label": "Contact method",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "automatic",
"sourceColumn": "MethodType",
"type": "text",
"visibleInDetail": true,
"visibleInList": false
},
{
"commonFieldKey": "",
"key": "ContactValue",
"label": "Recorded contact value",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "automatic",
"sourceColumn": "ContactValue",
"type": "text",
"visibleInDetail": true,
"visibleInList": false
},
{
"commonFieldKey": "",
"key": "PreferredMethod",
"label": "Preferred value for this method",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "automatic",
"sourceColumn": "PreferredMethod",
"type": "text",
"visibleInDetail": true,
"visibleInList": true
}
],
"maxRows": 2000,
"name": "Contact methods",
"primaryKey": "MethodKey",
"queryParameters": [
{
"constantValue": "",
"dayOffset": 0,
"fieldKey": "CustomerKey",
"id": "E8BAA57E-2B24-5A91-BA40-27AD40B5835E",
"name": "customer",
"source": "parentField",
"type": "text"
},
{
"constantValue": "",
"dayOffset": 0,
"fieldKey": "ContactKey",
"id": "A2509A07-37DE-525D-A6A8-D7D6F31D6759",
"name": "contact",
"source": "parentField",
"type": "text"
}
],
"refreshPolicy": {
"enabled": false,
"intervalMinutes": 60
},
"rootArrayPath": "",
"rowLimitEnabled": true,
"searchKeys": [
"ContactName",
"MethodType",
"ContactValue",
"PreferredMethod"
],
"sourceID": "0D18F335-432B-53BF-A92D-18BE469DAD39",
"sqlQuery": "SELECT a.SLCustomerAccountID AS CustomerKey, p.SLCustomerContactID AS ContactKey, v.SLCustomerContactValueID AS MethodKey, COALESCE(NULLIF(p.ContactName,N''),N'(Unnamed contact)') AS ContactName, CASE v.SYSContactTypeID WHEN 0 THEN N'Telephone Number' WHEN 1 THEN N'Fax Number' WHEN 2 THEN N'Email Address' WHEN 3 THEN N'Web Address' WHEN 4 THEN N'Recipient name' WHEN 5 THEN N'Mobile Number' ELSE CASE WHEN v.SYSContactTypeID IS NULL THEN N'Not recorded' ELSE CONCAT(N'Unknown native value: ',v.SYSContactTypeID) END END AS MethodType, v.ContactValue AS ContactValue, CASE v.IsPreferredValue WHEN 1 THEN N'Preferred value' WHEN 0 THEN N'Additional value' ELSE N'Preference unknown' END AS PreferredMethod FROM dbo.SLCustomerContactValue v INNER JOIN dbo.SLCustomerContact p ON p.SLCustomerContactID=v.SLCustomerContactID INNER JOIN dbo.SLCustomerAccount a ON a.SLCustomerAccountID=p.SLCustomerAccountID WHERE a.SLCustomerAccountID=:customer AND p.SLCustomerContactID=:contact AND v.SLCustomerContactValueID IS NOT NULL",
"tableName": ""
},
{
"cacheMode": "live",
"calculatedFields": [],
"customQueryIntegrationName": "Sage 200 Professional UK",
"endpointPath": "",
"fetchSortRules": [
{
"direction": "ascending",
"id": "D2C9DD01-5581-5A37-BA11-89E5E24DD311",
"key": "RoleName",
"type": "text"
},
{
"direction": "ascending",
"id": "FBA38528-0D5C-5C03-9211-AF3DB221F847",
"key": "RoleKey",
"type": "text"
}
],
"id": "CBABBD60-8ECD-5B00-ACC6-02626659DD8A",
"mappings": [
{
"commonFieldKey": "",
"key": "CustomerKey",
"label": "Internal customer key",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "automatic",
"sourceColumn": "CustomerKey",
"type": "text",
"visibleInDetail": false,
"visibleInList": false
},
{
"commonFieldKey": "",
"key": "ContactKey",
"label": "Internal contact key",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "automatic",
"sourceColumn": "ContactKey",
"type": "text",
"visibleInDetail": false,
"visibleInList": false
},
{
"commonFieldKey": "",
"key": "RoleKey",
"label": "Internal role assignment key",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "automatic",
"sourceColumn": "RoleKey",
"type": "text",
"visibleInDetail": false,
"visibleInList": false
},
{
"commonFieldKey": "",
"key": "ContactName",
"label": "Contact name",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "automatic",
"sourceColumn": "ContactName",
"type": "text",
"visibleInDetail": true,
"visibleInList": true
},
{
"commonFieldKey": "",
"key": "RoleName",
"label": "Assigned role",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "automatic",
"sourceColumn": "RoleName",
"type": "text",
"visibleInDetail": true,
"visibleInList": false
},
{
"commonFieldKey": "",
"key": "PreferredRole",
"label": "Preferred contact for this role",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "automatic",
"sourceColumn": "PreferredRole",
"type": "text",
"visibleInDetail": true,
"visibleInList": false
}
],
"maxRows": 2000,
"name": "Contact roles",
"primaryKey": "RoleKey",
"queryParameters": [
{
"constantValue": "",
"dayOffset": 0,
"fieldKey": "CustomerKey",
"id": "E8BAA57E-2B24-5A91-BA40-27AD40B5835E",
"name": "customer",
"source": "parentField",
"type": "text"
},
{
"constantValue": "",
"dayOffset": 0,
"fieldKey": "ContactKey",
"id": "A2509A07-37DE-525D-A6A8-D7D6F31D6759",
"name": "contact",
"source": "parentField",
"type": "text"
}
],
"refreshPolicy": {
"enabled": false,
"intervalMinutes": 60
},
"rootArrayPath": "",
"rowLimitEnabled": true,
"searchKeys": [
"ContactName",
"RoleName",
"PreferredRole"
],
"sourceID": "0D18F335-432B-53BF-A92D-18BE469DAD39",
"sqlQuery": "SELECT a.SLCustomerAccountID AS CustomerKey, p.SLCustomerContactID AS ContactKey, v.SLCustomerContactRoleID AS RoleKey, COALESCE(NULLIF(p.ContactName,N''),N'(Unnamed contact)') AS ContactName, COALESCE(NULLIF(r.Role,N''),N'Role label unavailable') AS RoleName, CASE v.IsPreferredContactForRole WHEN 1 THEN N'Preferred contact' WHEN 0 THEN N'Other contact' ELSE N'Preference unknown' END AS PreferredRole FROM dbo.SLCustomerContactRole v INNER JOIN dbo.SLCustomerContact p ON p.SLCustomerContactID=v.SLCustomerContactID INNER JOIN dbo.SLCustomerAccount a ON a.SLCustomerAccountID=p.SLCustomerAccountID LEFT JOIN dbo.SYSTraderContactRole r ON r.SYSTraderContactRoleID=v.SYSTraderContactRoleID WHERE a.SLCustomerAccountID=:customer AND p.SLCustomerContactID=:contact AND v.SLCustomerContactRoleID IS NOT NULL",
"tableName": ""
}
],
"pages": [
{
"actions": [
{
"id": "CC6946EB-E157-5F92-9762-0253D55193E9",
"kind": "showRelated",
"relatedInitiallyExpanded": false,
"relatedPresentation": "separate",
"relatedPreviewLimit": 12,
"relatedRowStyle": "cards",
"relatedShowsCount": true,
"relationID": "4F1BE337-58A2-524F-ABF1-3887A51675BB",
"systemImage": "list.bullet.rectangle",
"targetDatasetID": "C00D62BB-1AB7-537F-BABC-D32D19384604",
"title": "Contacts",
"urlKey": ""
}
],
"badgeKey": "AccountType",
"cardEnrichments": [],
"cardFieldLayout": [
{
"detailGroup": "",
"detailRole": "information",
"isVisible": true,
"key": "CostCentre",
"label": "Default nominal cost centre",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "automatic"
},
{
"detailGroup": "",
"detailRole": "information",
"isVisible": true,
"key": "Department",
"label": "Default nominal department",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "automatic"
},
{
"detailGroup": "",
"detailRole": "information",
"isVisible": true,
"key": "PaymentDays",
"label": "Payment terms — days",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "automatic"
},
{
"detailGroup": "",
"detailRole": "information",
"isVisible": true,
"key": "LineDiscount",
"label": "Default invoice line discount (%)",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "automatic"
},
{
"detailGroup": "",
"detailRole": "information",
"isVisible": true,
"key": "InvoiceDiscount",
"label": "Default invoice discount (%)",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "automatic"
},
{
"detailGroup": "",
"detailRole": "information",
"isVisible": true,
"key": "PaymentBasis",
"label": "Payment terms — basis",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "automatic"
}
],
"datasetID": "884BB32D-CB27-566F-AB50-5D499E62F438",
"dateFilterKey": "",
"dateFilterLastDays": 7,
"dateFilterPreset": "none",
"detailFieldLayout": [
{
"detailGroup": "Current customer and nominal defaults",
"detailRole": "information",
"isVisible": true,
"key": "CustomerCode",
"label": "Customer account reference",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "automatic"
},
{
"detailGroup": "Current customer and nominal defaults",
"detailRole": "information",
"isVisible": true,
"key": "CustomerName",
"label": "Customer name",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "automatic"
},
{
"detailGroup": "Current customer and nominal defaults",
"detailRole": "information",
"isVisible": true,
"key": "VATReference",
"label": "VAT registration",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "automatic"
},
{
"detailGroup": "Current trading defaults — not historical invoice terms",
"detailRole": "information",
"isVisible": true,
"key": "OrderPriority",
"label": "Default order priority (native value)",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "automatic"
},
{
"detailGroup": "Current customer and nominal defaults",
"detailRole": "information",
"isVisible": true,
"key": "CostCentre",
"label": "Default nominal cost centre",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "automatic"
},
{
"detailGroup": "Current customer and nominal defaults",
"detailRole": "information",
"isVisible": true,
"key": "Department",
"label": "Default nominal department",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "automatic"
},
{
"detailGroup": "Current trading defaults — not historical invoice terms",
"detailRole": "information",
"isVisible": true,
"key": "PaymentDays",
"label": "Payment terms — days",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "automatic"
},
{
"detailGroup": "Current trading defaults — not historical invoice terms",
"detailRole": "information",
"isVisible": true,
"key": "LineDiscount",
"label": "Default invoice line discount (%)",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "automatic"
},
{
"detailGroup": "Current trading defaults — not historical invoice terms",
"detailRole": "information",
"isVisible": true,
"key": "InvoiceDiscount",
"label": "Default invoice discount (%)",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "automatic"
},
{
"detailGroup": "Current customer and nominal defaults",
"detailRole": "information",
"isVisible": true,
"key": "AccountType",
"label": "Account allocation type",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "automatic"
},
{
"detailGroup": "Current trading defaults — not historical invoice terms",
"detailRole": "information",
"isVisible": true,
"key": "PaymentBasis",
"label": "Payment terms — basis",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "automatic"
},
{
"detailGroup": "Current trading defaults — not historical invoice terms",
"detailRole": "information",
"isVisible": true,
"key": "ConsolidatedBilling",
"label": "Consolidated billing",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "automatic"
},
{
"detailGroup": "Current customer and nominal defaults",
"detailRole": "information",
"isVisible": true,
"key": "OfficeType",
"label": "Statement office type",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "automatic"
},
{
"detailGroup": "Current customer and nominal defaults",
"detailRole": "information",
"isVisible": true,
"key": "HeadOfficeCode",
"label": "Associated head office reference",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "automatic"
},
{
"detailGroup": "Current customer and nominal defaults",
"detailRole": "information",
"isVisible": true,
"key": "HeadOfficeName",
"label": "Associated head office name",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "automatic"
},
{
"detailGroup": "Current trading defaults — not historical invoice terms",
"detailRole": "information",
"isVisible": true,
"key": "FinanceCharge",
"label": "Finance charge setup code",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "automatic"
}
],
"detailLiveRefreshSeconds": 0,
"fixedFilters": [],
"id": "8044F5E9-3A78-5DA1-9CF2-F4B9ECB32562",
"openFilters": [],
"pageSize": 100,
"requiresOpeningFilterSelection": false,
"showOnHome": true,
"sortRules": [
{
"direction": "ascending",
"id": "778FA25C-1A3D-53BE-9E4F-526D2095CA03",
"key": "CustomerCode",
"type": "text"
},
{
"direction": "ascending",
"id": "D389B707-4A2F-5643-8EAA-D9F4FE890B9E",
"key": "CustomerKey",
"type": "text"
}
],
"subtitle": "",
"subtitleKey": "CustomerCode",
"systemImage": "doc.text",
"title": "Customer accounts",
"titleKey": "CustomerName"
},
{
"actions": [
{
"id": "3670E6B8-CDBD-57F6-AADC-7D07193CB046",
"kind": "showRelated",
"relatedInitiallyExpanded": false,
"relatedPresentation": "separate",
"relatedPreviewLimit": 12,
"relatedRowStyle": "cards",
"relatedShowsCount": true,
"relationID": "73BCD785-6110-5F5F-9C60-201BA1056F3B",
"systemImage": "list.bullet.rectangle",
"targetDatasetID": "B5E92D51-78F8-5BFF-BF92-01CEF0BFE6B8",
"title": "Contact methods",
"urlKey": ""
},
{
"id": "E331EDC3-0485-5D5B-B6B4-890EBED4F53F",
"kind": "showRelated",
"relatedInitiallyExpanded": false,
"relatedPresentation": "separate",
"relatedPreviewLimit": 12,
"relatedRowStyle": "cards",
"relatedShowsCount": true,
"relationID": "13557605-497E-5D05-A30D-E85A41D2D2DF",
"systemImage": "list.bullet.rectangle",
"targetDatasetID": "CBABBD60-8ECD-5B00-ACC6-02626659DD8A",
"title": "Contact roles",
"urlKey": ""
}
],
"badgeKey": "",
"cardEnrichments": [],
"cardFieldLayout": [
{
"detailGroup": "",
"detailRole": "information",
"isVisible": true,
"key": "CustomerName",
"label": "Customer name",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "automatic"
}
],
"datasetID": "C00D62BB-1AB7-537F-BABC-D32D19384604",
"dateFilterKey": "",
"dateFilterLastDays": 7,
"dateFilterPreset": "none",
"detailFieldLayout": [
{
"detailGroup": "Current recorded contacts",
"detailRole": "information",
"isVisible": true,
"key": "CustomerName",
"label": "Customer name",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "automatic"
},
{
"detailGroup": "Current recorded contacts",
"detailRole": "information",
"isVisible": true,
"key": "ContactName",
"label": "Contact name",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "automatic"
},
{
"detailGroup": "Current recorded contacts",
"detailRole": "information",
"isVisible": true,
"key": "ContactDescription",
"label": "Contact description",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "automatic"
}
],
"detailLiveRefreshSeconds": 0,
"fixedFilters": [],
"id": "A73EF713-2D3A-5331-B968-0E649CD74830",
"openFilters": [],
"pageSize": 100,
"requiresOpeningFilterSelection": false,
"showOnHome": false,
"sortRules": [
{
"direction": "ascending",
"id": "0D4462F7-1B82-5940-9A03-D0B65161D699",
"key": "ContactName",
"type": "text"
},
{
"direction": "ascending",
"id": "992EF8B7-F10C-54B1-A8C7-5989E8B1BD96",
"key": "ContactKey",
"type": "text"
}
],
"subtitle": "",
"subtitleKey": "ContactDescription",
"systemImage": "doc.text",
"title": "Customer contacts",
"titleKey": "ContactName"
},
{
"actions": [],
"badgeKey": "PreferredMethod",
"cardEnrichments": [],
"cardFieldLayout": [
{
"detailGroup": "",
"detailRole": "information",
"isVisible": true,
"key": "ContactName",
"label": "Contact name",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "automatic"
}
],
"datasetID": "B5E92D51-78F8-5BFF-BF92-01CEF0BFE6B8",
"dateFilterKey": "",
"dateFilterLastDays": 7,
"dateFilterPreset": "none",
"detailFieldLayout": [
{
"detailGroup": "Current recorded contacts",
"detailRole": "information",
"isVisible": true,
"key": "ContactName",
"label": "Contact name",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "automatic"
},
{
"detailGroup": "Current recorded contacts",
"detailRole": "information",
"isVisible": true,
"key": "MethodType",
"label": "Contact method",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "automatic"
},
{
"detailGroup": "Current recorded contacts",
"detailRole": "information",
"isVisible": true,
"key": "ContactValue",
"label": "Recorded contact value",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "automatic"
},
{
"detailGroup": "Current recorded contacts",
"detailRole": "information",
"isVisible": true,
"key": "PreferredMethod",
"label": "Preferred value for this method",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "automatic"
}
],
"detailLiveRefreshSeconds": 0,
"fixedFilters": [],
"id": "6E366DC1-1C77-5D02-BFD7-A85EEC1712EC",
"openFilters": [],
"pageSize": 100,
"requiresOpeningFilterSelection": false,
"showOnHome": false,
"sortRules": [
{
"direction": "ascending",
"id": "36355530-5107-55C8-A1F0-C376379E2E9B",
"key": "MethodType",
"type": "text"
},
{
"direction": "ascending",
"id": "4D75F0DA-FA79-5981-A7A8-834B152A7E5F",
"key": "MethodKey",
"type": "text"
}
],
"subtitle": "",
"subtitleKey": "ContactValue",
"systemImage": "doc.text",
"title": "Contact methods",
"titleKey": "MethodType"
},
{
"actions": [],
"badgeKey": "PreferredRole",
"cardEnrichments": [],
"cardFieldLayout": [],
"datasetID": "CBABBD60-8ECD-5B00-ACC6-02626659DD8A",
"dateFilterKey": "",
"dateFilterLastDays": 7,
"dateFilterPreset": "none",
"detailFieldLayout": [
{
"detailGroup": "Current recorded contacts",
"detailRole": "information",
"isVisible": true,
"key": "ContactName",
"label": "Contact name",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "automatic"
},
{
"detailGroup": "Current recorded contacts",
"detailRole": "information",
"isVisible": true,
"key": "RoleName",
"label": "Assigned role",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "automatic"
},
{
"detailGroup": "Current recorded contacts",
"detailRole": "information",
"isVisible": true,
"key": "PreferredRole",
"label": "Preferred contact for this role",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "automatic"
}
],
"detailLiveRefreshSeconds": 0,
"fixedFilters": [],
"id": "8D90D166-479B-52FB-ABFD-AE1DF69D7407",
"openFilters": [],
"pageSize": 100,
"requiresOpeningFilterSelection": false,
"showOnHome": false,
"sortRules": [
{
"direction": "ascending",
"id": "D2C9DD01-5581-5A37-BA11-89E5E24DD311",
"key": "RoleName",
"type": "text"
},
{
"direction": "ascending",
"id": "FBA38528-0D5C-5C03-9211-AF3DB221F847",
"key": "RoleKey",
"type": "text"
}
],
"subtitle": "",
"subtitleKey": "ContactName",
"systemImage": "doc.text",
"title": "Contact roles",
"titleKey": "RoleName"
}
],
"relations": [
{
"childDatasetID": "C00D62BB-1AB7-537F-BABC-D32D19384604",
"childKey": "CustomerKey",
"id": "4F1BE337-58A2-524F-ABF1-3887A51675BB",
"name": "Contacts",
"parentDatasetID": "884BB32D-CB27-566F-AB50-5D499E62F438",
"parentKey": "CustomerKey"
},
{
"childDatasetID": "B5E92D51-78F8-5BFF-BF92-01CEF0BFE6B8",
"childKey": "ContactKey",
"id": "73BCD785-6110-5F5F-9C60-201BA1056F3B",
"name": "Contact methods",
"parentDatasetID": "C00D62BB-1AB7-537F-BABC-D32D19384604",
"parentKey": "ContactKey"
},
{
"childDatasetID": "CBABBD60-8ECD-5B00-ACC6-02626659DD8A",
"childKey": "ContactKey",
"id": "13557605-497E-5D05-A30D-E85A41D2D2DF",
"name": "Contact roles",
"parentDatasetID": "C00D62BB-1AB7-537F-BABC-D32D19384604",
"parentKey": "ContactKey"
}
],
"widgets": []
}
},
"format": "cifru-configuration-package",
"formatVersion": 1,
"manifest": {
"applicationName": "Sage 200 Professional UK",
"configurationLanguages": [
"en"
],
"countries": [
"GB"
],
"createdAt": "2026-10-10T00:00:00Z",
"description": "DOCUMENTARY AND SYNTHETIC VALIDATION ONLY — not tested on a real Sage 200 installation. For sales, customer service, account teams and managers: open customer accounts with account references, VAT registration, payment-term days and basis, invoice discount defaults, nominal cost centre/department, statement office type, associated head office and finance-charge setup code. Open every recorded contact, then their telephone, mobile, fax, email, website and recipient-name values and their assigned roles. Multiple values and roles are preserved; preferred values and preferred contacts for roles are separate settings. Blank default contacts remain visible. This is a current customer/contact and trading-settings dossier, not an invoice, credit-limit or aged-debt report.\n\nWhy Cifru? Adapt configurations to the way you work. Choose the fields, filters and details you need, and bring information to your phone that may not be available in your business software’s own mobile app. Available options depend on the data exposed by your authorised source and your Cifru plan.\n\nPro: one source, four lists, Details and three lazy related buttons; read-only custom SELECT. Up to 2,000 rows per list/read; no periodic refresh or automatic remote email/website opening. Local search and filters affect loaded rows only. Limits do not guarantee a cheap SQL query. Check execution plans, timeouts and installed keys; use a separately authorised, least-privilege SQL reader on one approved company database. Direct SQL does not inherit Sage user permissions or application roles. Child queries recheck customer and contact identity, but navigation is not an access-control boundary. No server addresses, source credentials or business rows are included.\n\nUnofficial, not affiliated with Sage. Selected physical identifiers and relationships come from the Sage 200 2015 database guide (November 2014), not a complete DDL or a guarantee for current installations. Current Professional help supplies supplementary meanings, not proof that the legacy physical schema is unchanged. Requires SQL Server with the selected objects available in dbo; verify schema, data types, uniqueness and installed edition before import. Not Sage 200 Standard, Sage 200 Evolution or Sage 300. Account type means Balance Forward / Open Item / Auto Allocation, not Cash / Credit / Prospect. Payment days plus Calendar monthly do not calculate a due date here. Defaults can be overridden on transactions. This package intentionally omits monetary balances, credit limits, turnover and postal-address columns until their physical currency/address bindings are proved; it does not guess GBP or borrow supplier address fields. Native DEMO captures use wholly fictional local rows and are not a real ERP/SQL Server compatibility test.\n\nPrimary physical guide: https://desktophelp.sage.co.uk/sage200/PDF/2015/Understanding%20the%20Sage%20200%202015%20Database.pdf\nContact semantics: https://desktophelp.sage.co.uk/sage200/professional/Content/SL/EnterNewCustomerAccountContacts.htm",
"licenseCode": "Cifru-Community-1.0",
"minimumCifruVersion": "1.1.0",
"minimumPlan": "pro",
"packageID": "0D2800DD-DF9C-5382-97F0-A81297933533",
"rootButtonCount": 1,
"summary": "Customer settings, all contacts, multiple contact values and roles, with on-demand Details.",
"tags": [
"Sage 200 Professional UK",
"SQL Server",
"Customer accounts",
"Sales",
"Contacts",
"Payment terms",
"Pro"
],
"title": "Customer contacts and trading settings — Pro"
}
}