Customer dossier and address book — Pro
Customer contacts, delivery/payment defaults, separate stored flags and an on-demand address book.
UNOFFICIAL — NOT VALIDATED ON A REAL ERP INSTALLATION. Selected GP source registrations, field names and logical keys are evidenced by Microsoft's public GP migration code at commit e7ed235bc979c0283306e9639ff7cd22ce78341d and the GP Receivables manual. AL staging types/keys are not SQL DDL. No real GP/SQL Server results, installed release, physical types, constraints, owner or execution plans have been checked. Run the import read/compatibility test and validate the installed edition and permissions before business use.
For sales, customer service, delivery coordination and managers: choose a customer class, find the customer, inspect a grouped 37-field business dossier, then open its address book. Each address has its own contact, phone/fax, delivery address, shipping/tax defaults and site code. See the commercial and delivery context on your phone instead of only a list of names.
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 authorized source and your Cifru plan.
Pro: one source, two lists, one related button and explicit read-only SQL. The SQL selects only 37 master fields and 13 address fields plus a hidden full row key; no SELECT *. This avoids relying on the Android native-table preview's first-80-column projection for later customer fields, and avoids requesting bank/card or technical audit columns. The address list is loaded only when opened and is constrained by the selected customer. Both reads are bounded to 2,000 rows and have no scheduled refresh. Reaching a limit means potentially incomplete data; narrowing filters does not guarantee a cheap server scan. SQL Server-compatible syntax and wrapper behavior must still be tested on your source.
Customer and address business codes preserve leading zeroes; only right-padding is removed from these keys. Address identity includes both customer and address code, so two customers may use the same address code without mixing records. The source is the company database, not DYNAMICS, Business Central or a migration staging database. dbo must be verified locally. The address subset is not the entire GP customer module: no email table, country/address3 extension, orders, invoices, balances or computed credit availability is claimed.
Stored hold and inactive flags are distinct (1/true=yes; 0/false=no), not computed effective eligibility. National-account parent rules may override child flags. Complete shipments is a configured preference, not a completed-delivery status. Grace days are payment-term settings, not overdue days. Class, salesperson, territory, address, terms, shipping, tax schedule, site, price level and rate are native business codes; descriptive names and tax calculations are not invented. Default currency ID need not be ISO or the functional currency; no monetary conversion or cross-company amount is calculated. Empty values remain empty.
Use a separately authorised least-privilege SQL reporting login with SELECT access only to permitted company data. GP UI passwords are transformed and do not work as ordinary SQL login passwords. Do not use sa, sysadmin or DYNGRP. Cifru filters are not access control. The package contains no host, account, password or business rows; contact information and commercial defaults may still be confidential in your source. Screenshots are native Cifru with entirely fictional DEMO rows and synthetic transport, not a live GP connection. Unofficial and not endorsed by Microsoft. GP is a distinct installed-base product, not Business Central; check your edition's lifecycle. Product support is currently scheduled through December 31, 2029 and security patches through April 30, 2031.
Primary source registration: https://github.com/microsoft/ALAppExtensions/blob/e7ed235bc979c0283306e9639ff7cd22ce78341d/Apps/W1/HybridGP/app/src/codeunits/GPCloudMigration.codeunit.al
Customer field evidence: https://github.com/microsoft/ALAppExtensions/blob/e7ed235bc979c0283306e9639ff7cd22ce78341d/Apps/W1/HybridGP/app/src/Migration/Customers/GPRM00101.Table.al
Address field/key evidence: https://github.com/microsoft/ALAppExtensions/blob/e7ed235bc979c0283306e9639ff7cd22ce78341d/Apps/W1/HybridGP/app/src/Migration/Customers/GPCustomerAddress.Table.al
Functional manual: https://learn.microsoft.com/en-us/dynamics-gp/financials/receivables-management
Security: https://learn.microsoft.com/en-us/dynamics-gp/installation/securityplanning
Screenshots
What this package creates
- Home: Customers
- Details: Customer address book
- Sub-button: Customer addresses
Sources are mapped locally and verified before applying.
Custom queriesPRO2 SQL
Custom queries are a PRO feature. Cifru repeats read-only validation against the local source before execution.
$.components.workspaceSelection.datasets.0.sqlQuerySELECT RTRIM(m.CUSTNMBR) AS CUSTNMBR, m.CUSTNAME, m.CUSTCLAS, m.STMTNAME, m.SHRTNAME, m.CNTCPRSN, m.ADDRESS1, m.ADDRESS2, m.ADDRESS3, m.COUNTRY, m.CITY, m.STATE, m.ZIP, m.PHONE1, m.PHONE2, m.PHONE3, m.FAX, m.ADRSCODE, m.PRBTADCD, m.PRSTADCD, m.STADDRCD, m.SHIPMTHD, m.UPSZONE, m.SLPRSNID, m.SALSTERR, m.PYMTRMID, m.PRCLEVEL, m.CURNCYID, m.RATETPID, m.CPRCSTNM, m.INACTIVE, m.HOLD, m.COMMENT1, m.COMMENT2, m.SHIPCOMPLETE, m.DISGRPER, m.DUEGRPER FROM dbo.RM00101 m
static read-only checks passed
$.components.workspaceSelection.datasets.1.sqlQuerySELECT CONCAT(LEN(RTRIM(a.CUSTNMBR)),N':',RTRIM(a.CUSTNMBR),RTRIM(a.ADRSCODE)) AS AddressKey, RTRIM(a.CUSTNMBR) AS CUSTNMBR, RTRIM(a.ADRSCODE) AS ADRSCODE, a.CNTCPRSN, a.ADDRESS1, a.ADDRESS2, a.CITY, a.STATE, a.ZIP, a.PHONE1, a.FAX, a.SHIPMTHD, a.TAXSCHID, a.LOCNCODE FROM dbo.RM00102 a WHERE a.CUSTNMBR=:customer
static read-only checks passed
View the JSON being importedcollapsed by default
{
"components": {
"sourceSlots": [
{
"displayName": "Dynamics GP — authorised SQL company database",
"id": "6B2AB316-6BE9-5F7B-9AF7-F329E11FA54F",
"kind": "sqlServer",
"requiredObjects": [
"dbo.RM00101",
"dbo.RM00102"
],
"requiresCustomSQL": false
}
],
"workspaceSelection": {
"commonFields": [],
"datasets": [
{
"cacheMode": "live",
"calculatedFields": [],
"customQueryIntegrationName": "",
"endpointPath": "",
"fetchSortRules": [
{
"direction": "ascending",
"id": "ACE307E5-74FA-51D1-BC94-237D9ABB65B2",
"key": "CUSTNAME",
"type": "text"
},
{
"direction": "ascending",
"id": "EE9C52E5-1620-5AD5-8414-930D36846212",
"key": "CUSTNMBR",
"type": "text"
}
],
"id": "DEDE63B1-F048-5EF8-BADB-2B7E4C2D2448",
"mappings": [
{
"commonFieldKey": "",
"key": "CUSTNMBR",
"label": "Customer code",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "text",
"sourceColumn": "CUSTNMBR",
"type": "text",
"visibleInDetail": true,
"visibleInList": false
},
{
"commonFieldKey": "",
"key": "CUSTNAME",
"label": "Customer name",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "text",
"sourceColumn": "CUSTNAME",
"type": "text",
"visibleInDetail": true,
"visibleInList": false
},
{
"commonFieldKey": "",
"key": "CUSTCLAS",
"label": "Customer class",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "text",
"sourceColumn": "CUSTCLAS",
"type": "text",
"visibleInDetail": true,
"visibleInList": true
},
{
"commonFieldKey": "",
"key": "STMTNAME",
"label": "Statement name",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "text",
"sourceColumn": "STMTNAME",
"type": "text",
"visibleInDetail": true,
"visibleInList": false
},
{
"commonFieldKey": "",
"key": "SHRTNAME",
"label": "Short name",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "text",
"sourceColumn": "SHRTNAME",
"type": "text",
"visibleInDetail": true,
"visibleInList": false
},
{
"commonFieldKey": "",
"key": "CNTCPRSN",
"label": "Contact",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "text",
"sourceColumn": "CNTCPRSN",
"type": "text",
"visibleInDetail": true,
"visibleInList": true
},
{
"commonFieldKey": "",
"key": "ADDRESS1",
"label": "Address line 1",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "text",
"sourceColumn": "ADDRESS1",
"type": "text",
"visibleInDetail": true,
"visibleInList": false
},
{
"commonFieldKey": "",
"key": "ADDRESS2",
"label": "Address line 2",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "text",
"sourceColumn": "ADDRESS2",
"type": "text",
"visibleInDetail": true,
"visibleInList": false
},
{
"commonFieldKey": "",
"key": "ADDRESS3",
"label": "Address line 3",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "text",
"sourceColumn": "ADDRESS3",
"type": "text",
"visibleInDetail": true,
"visibleInList": false
},
{
"commonFieldKey": "",
"key": "COUNTRY",
"label": "Country",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "text",
"sourceColumn": "COUNTRY",
"type": "text",
"visibleInDetail": true,
"visibleInList": false
},
{
"commonFieldKey": "",
"key": "CITY",
"label": "City",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "text",
"sourceColumn": "CITY",
"type": "text",
"visibleInDetail": true,
"visibleInList": true
},
{
"commonFieldKey": "",
"key": "STATE",
"label": "State / region",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "text",
"sourceColumn": "STATE",
"type": "text",
"visibleInDetail": true,
"visibleInList": false
},
{
"commonFieldKey": "",
"key": "ZIP",
"label": "Postal code",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "text",
"sourceColumn": "ZIP",
"type": "text",
"visibleInDetail": true,
"visibleInList": false
},
{
"commonFieldKey": "",
"key": "PHONE1",
"label": "Phone 1",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "text",
"sourceColumn": "PHONE1",
"type": "text",
"visibleInDetail": true,
"visibleInList": true
},
{
"commonFieldKey": "",
"key": "PHONE2",
"label": "Phone 2",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "text",
"sourceColumn": "PHONE2",
"type": "text",
"visibleInDetail": true,
"visibleInList": false
},
{
"commonFieldKey": "",
"key": "PHONE3",
"label": "Phone 3",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "text",
"sourceColumn": "PHONE3",
"type": "text",
"visibleInDetail": true,
"visibleInList": false
},
{
"commonFieldKey": "",
"key": "FAX",
"label": "Fax",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "text",
"sourceColumn": "FAX",
"type": "text",
"visibleInDetail": true,
"visibleInList": false
},
{
"commonFieldKey": "",
"key": "ADRSCODE",
"label": "Master address code",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "text",
"sourceColumn": "ADRSCODE",
"type": "text",
"visibleInDetail": true,
"visibleInList": false
},
{
"commonFieldKey": "",
"key": "PRBTADCD",
"label": "Default billing address code",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "text",
"sourceColumn": "PRBTADCD",
"type": "text",
"visibleInDetail": true,
"visibleInList": false
},
{
"commonFieldKey": "",
"key": "PRSTADCD",
"label": "Default shipping address code",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "text",
"sourceColumn": "PRSTADCD",
"type": "text",
"visibleInDetail": true,
"visibleInList": false
},
{
"commonFieldKey": "",
"key": "STADDRCD",
"label": "Statement address code",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "text",
"sourceColumn": "STADDRCD",
"type": "text",
"visibleInDetail": true,
"visibleInList": false
},
{
"commonFieldKey": "",
"key": "SHIPMTHD",
"label": "Shipping method code",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "text",
"sourceColumn": "SHIPMTHD",
"type": "text",
"visibleInDetail": true,
"visibleInList": false
},
{
"commonFieldKey": "",
"key": "UPSZONE",
"label": "UPS zone",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "text",
"sourceColumn": "UPSZONE",
"type": "text",
"visibleInDetail": true,
"visibleInList": false
},
{
"commonFieldKey": "",
"key": "SLPRSNID",
"label": "Salesperson code",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "text",
"sourceColumn": "SLPRSNID",
"type": "text",
"visibleInDetail": true,
"visibleInList": false
},
{
"commonFieldKey": "",
"key": "SALSTERR",
"label": "Sales territory code",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "text",
"sourceColumn": "SALSTERR",
"type": "text",
"visibleInDetail": true,
"visibleInList": false
},
{
"commonFieldKey": "",
"key": "PYMTRMID",
"label": "Payment terms code",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "text",
"sourceColumn": "PYMTRMID",
"type": "text",
"visibleInDetail": true,
"visibleInList": true
},
{
"commonFieldKey": "",
"key": "PRCLEVEL",
"label": "Price level code",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "text",
"sourceColumn": "PRCLEVEL",
"type": "text",
"visibleInDetail": true,
"visibleInList": false
},
{
"commonFieldKey": "",
"key": "CURNCYID",
"label": "Default currency ID",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "text",
"sourceColumn": "CURNCYID",
"type": "text",
"visibleInDetail": true,
"visibleInList": true
},
{
"commonFieldKey": "",
"key": "RATETPID",
"label": "Exchange-rate type code",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "text",
"sourceColumn": "RATETPID",
"type": "text",
"visibleInDetail": true,
"visibleInList": false
},
{
"commonFieldKey": "",
"key": "CPRCSTNM",
"label": "National-account parent code",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "text",
"sourceColumn": "CPRCSTNM",
"type": "text",
"visibleInDetail": true,
"visibleInList": false
},
{
"commonFieldKey": "",
"key": "INACTIVE",
"label": "Stored inactive flag (1 = yes)",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "text",
"sourceColumn": "INACTIVE",
"type": "text",
"visibleInDetail": true,
"visibleInList": true
},
{
"commonFieldKey": "",
"key": "HOLD",
"label": "Stored hold flag (1 = yes)",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "text",
"sourceColumn": "HOLD",
"type": "text",
"visibleInDetail": true,
"visibleInList": true
},
{
"commonFieldKey": "",
"key": "COMMENT1",
"label": "Comment 1",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "text",
"sourceColumn": "COMMENT1",
"type": "text",
"visibleInDetail": true,
"visibleInList": false
},
{
"commonFieldKey": "",
"key": "COMMENT2",
"label": "Comment 2",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "text",
"sourceColumn": "COMMENT2",
"type": "text",
"visibleInDetail": true,
"visibleInList": false
},
{
"commonFieldKey": "",
"key": "SHIPCOMPLETE",
"label": "Complete shipments only (1 = yes)",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "text",
"sourceColumn": "SHIPCOMPLETE",
"type": "text",
"visibleInDetail": true,
"visibleInList": false
},
{
"commonFieldKey": "",
"key": "DISGRPER",
"label": "Discount grace days",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "automatic",
"sourceColumn": "DISGRPER",
"type": "number",
"visibleInDetail": true,
"visibleInList": false
},
{
"commonFieldKey": "",
"key": "DUEGRPER",
"label": "Due-date grace days",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "automatic",
"sourceColumn": "DUEGRPER",
"type": "number",
"visibleInDetail": true,
"visibleInList": false
}
],
"maxRows": 2000,
"name": "Customer dossier",
"primaryKey": "CUSTNMBR",
"queryParameters": [],
"refreshPolicy": {
"enabled": false,
"intervalMinutes": 60
},
"rootArrayPath": "",
"rowLimitEnabled": true,
"searchKeys": [
"CUSTNMBR",
"CUSTNAME",
"CUSTCLAS",
"STMTNAME",
"SHRTNAME",
"CNTCPRSN",
"ADDRESS1",
"ADDRESS2",
"ADDRESS3",
"COUNTRY",
"CITY",
"STATE",
"ZIP",
"PHONE1",
"PHONE2",
"PHONE3",
"FAX",
"ADRSCODE",
"PRBTADCD",
"PRSTADCD",
"STADDRCD",
"SHIPMTHD",
"UPSZONE",
"SLPRSNID",
"SALSTERR",
"PYMTRMID",
"PRCLEVEL",
"CURNCYID",
"RATETPID",
"CPRCSTNM",
"INACTIVE",
"HOLD",
"COMMENT1",
"COMMENT2",
"SHIPCOMPLETE",
"DISGRPER",
"DUEGRPER"
],
"sourceID": "6B2AB316-6BE9-5F7B-9AF7-F329E11FA54F",
"sqlQuery": "SELECT RTRIM(m.CUSTNMBR) AS CUSTNMBR, m.CUSTNAME, m.CUSTCLAS, m.STMTNAME, m.SHRTNAME, m.CNTCPRSN, m.ADDRESS1, m.ADDRESS2, m.ADDRESS3, m.COUNTRY, m.CITY, m.STATE, m.ZIP, m.PHONE1, m.PHONE2, m.PHONE3, m.FAX, m.ADRSCODE, m.PRBTADCD, m.PRSTADCD, m.STADDRCD, m.SHIPMTHD, m.UPSZONE, m.SLPRSNID, m.SALSTERR, m.PYMTRMID, m.PRCLEVEL, m.CURNCYID, m.RATETPID, m.CPRCSTNM, m.INACTIVE, m.HOLD, m.COMMENT1, m.COMMENT2, m.SHIPCOMPLETE, m.DISGRPER, m.DUEGRPER FROM dbo.RM00101 m",
"tableName": ""
},
{
"cacheMode": "live",
"calculatedFields": [],
"customQueryIntegrationName": "",
"endpointPath": "",
"fetchSortRules": [
{
"direction": "ascending",
"id": "26CBFC00-7BC5-58BE-A1BD-3389E75104D4",
"key": "ADRSCODE",
"type": "text"
}
],
"id": "BCC6391C-9F32-5B54-A3EF-F21F56BC576B",
"mappings": [
{
"commonFieldKey": "",
"key": "AddressKey",
"label": "Internal full customer/address identity",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "text",
"sourceColumn": "AddressKey",
"type": "text",
"visibleInDetail": false,
"visibleInList": false
},
{
"commonFieldKey": "",
"key": "CUSTNMBR",
"label": "Customer code",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "text",
"sourceColumn": "CUSTNMBR",
"type": "text",
"visibleInDetail": true,
"visibleInList": false
},
{
"commonFieldKey": "",
"key": "ADRSCODE",
"label": "Address code",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "text",
"sourceColumn": "ADRSCODE",
"type": "text",
"visibleInDetail": true,
"visibleInList": false
},
{
"commonFieldKey": "",
"key": "CNTCPRSN",
"label": "Address contact",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "text",
"sourceColumn": "CNTCPRSN",
"type": "text",
"visibleInDetail": true,
"visibleInList": true
},
{
"commonFieldKey": "",
"key": "ADDRESS1",
"label": "Address line 1",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "text",
"sourceColumn": "ADDRESS1",
"type": "text",
"visibleInDetail": true,
"visibleInList": true
},
{
"commonFieldKey": "",
"key": "ADDRESS2",
"label": "Address line 2",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "text",
"sourceColumn": "ADDRESS2",
"type": "text",
"visibleInDetail": true,
"visibleInList": false
},
{
"commonFieldKey": "",
"key": "CITY",
"label": "City",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "text",
"sourceColumn": "CITY",
"type": "text",
"visibleInDetail": true,
"visibleInList": true
},
{
"commonFieldKey": "",
"key": "STATE",
"label": "State / region",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "text",
"sourceColumn": "STATE",
"type": "text",
"visibleInDetail": true,
"visibleInList": true
},
{
"commonFieldKey": "",
"key": "ZIP",
"label": "Postal code",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "text",
"sourceColumn": "ZIP",
"type": "text",
"visibleInDetail": true,
"visibleInList": true
},
{
"commonFieldKey": "",
"key": "PHONE1",
"label": "Phone",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "text",
"sourceColumn": "PHONE1",
"type": "text",
"visibleInDetail": true,
"visibleInList": true
},
{
"commonFieldKey": "",
"key": "FAX",
"label": "Fax",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "text",
"sourceColumn": "FAX",
"type": "text",
"visibleInDetail": true,
"visibleInList": false
},
{
"commonFieldKey": "",
"key": "SHIPMTHD",
"label": "Shipping method code",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "text",
"sourceColumn": "SHIPMTHD",
"type": "text",
"visibleInDetail": true,
"visibleInList": true
},
{
"commonFieldKey": "",
"key": "TAXSCHID",
"label": "Tax schedule code",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "text",
"sourceColumn": "TAXSCHID",
"type": "text",
"visibleInDetail": true,
"visibleInList": false
},
{
"commonFieldKey": "",
"key": "LOCNCODE",
"label": "Default site code",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "text",
"sourceColumn": "LOCNCODE",
"type": "text",
"visibleInDetail": true,
"visibleInList": true
}
],
"maxRows": 2000,
"name": "Customer addresses",
"primaryKey": "AddressKey",
"queryParameters": [
{
"constantValue": "",
"dayOffset": 0,
"fieldKey": "CUSTNMBR",
"id": "E2FCAE5F-4351-528C-ABBD-416DA76A2496",
"name": "customer",
"source": "parentField",
"type": "text"
}
],
"refreshPolicy": {
"enabled": false,
"intervalMinutes": 60
},
"rootArrayPath": "",
"rowLimitEnabled": true,
"searchKeys": [
"CUSTNMBR",
"ADRSCODE",
"CNTCPRSN",
"ADDRESS1",
"ADDRESS2",
"CITY",
"STATE",
"ZIP",
"PHONE1",
"FAX",
"SHIPMTHD",
"TAXSCHID",
"LOCNCODE"
],
"sourceID": "6B2AB316-6BE9-5F7B-9AF7-F329E11FA54F",
"sqlQuery": "SELECT CONCAT(LEN(RTRIM(a.CUSTNMBR)),N':',RTRIM(a.CUSTNMBR),RTRIM(a.ADRSCODE)) AS AddressKey, RTRIM(a.CUSTNMBR) AS CUSTNMBR, RTRIM(a.ADRSCODE) AS ADRSCODE, a.CNTCPRSN, a.ADDRESS1, a.ADDRESS2, a.CITY, a.STATE, a.ZIP, a.PHONE1, a.FAX, a.SHIPMTHD, a.TAXSCHID, a.LOCNCODE FROM dbo.RM00102 a WHERE a.CUSTNMBR=:customer",
"tableName": ""
}
],
"pages": [
{
"actions": [
{
"id": "92A109BD-53FD-5940-92E2-928F2B68B2C3",
"kind": "showRelated",
"relatedInitiallyExpanded": false,
"relatedPresentation": "separate",
"relatedPreviewLimit": 12,
"relatedRowStyle": "cards",
"relatedShowsCount": true,
"relationID": "217114C3-3AFF-5919-8CA6-6FFDB6FC9D1F",
"systemImage": "list.bullet.rectangle",
"targetDatasetID": "BCC6391C-9F32-5B54-A3EF-F21F56BC576B",
"title": "Customer address book",
"urlKey": ""
}
],
"badgeKey": "",
"cardEnrichments": [],
"cardFieldLayout": [
{
"detailGroup": "",
"detailRole": "information",
"isVisible": true,
"key": "CNTCPRSN",
"label": "Contact",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "text"
},
{
"detailGroup": "",
"detailRole": "information",
"isVisible": true,
"key": "PHONE1",
"label": "Phone 1",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "text"
},
{
"detailGroup": "",
"detailRole": "information",
"isVisible": true,
"key": "CITY",
"label": "City",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "text"
},
{
"detailGroup": "",
"detailRole": "information",
"isVisible": true,
"key": "CUSTCLAS",
"label": "Customer class",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "text"
},
{
"detailGroup": "",
"detailRole": "information",
"isVisible": true,
"key": "PYMTRMID",
"label": "Terms",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "text"
},
{
"detailGroup": "",
"detailRole": "information",
"isVisible": true,
"key": "CURNCYID",
"label": "Default currency",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "text"
},
{
"detailGroup": "",
"detailRole": "information",
"isVisible": true,
"key": "HOLD",
"label": "Stored hold (1=yes)",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "text"
},
{
"detailGroup": "",
"detailRole": "information",
"isVisible": true,
"key": "INACTIVE",
"label": "Stored inactive (1=yes)",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "text"
}
],
"datasetID": "DEDE63B1-F048-5EF8-BADB-2B7E4C2D2448",
"dateFilterKey": "",
"dateFilterLastDays": 7,
"dateFilterPreset": "none",
"detailFieldLayout": [
{
"detailGroup": "Identity and classification",
"detailRole": "information",
"isVisible": true,
"key": "CUSTNAME",
"label": "Customer name",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "text"
},
{
"detailGroup": "Identity and classification",
"detailRole": "information",
"isVisible": true,
"key": "CUSTNMBR",
"label": "Customer code",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "text"
},
{
"detailGroup": "Identity and classification",
"detailRole": "information",
"isVisible": true,
"key": "SHRTNAME",
"label": "Short name",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "text"
},
{
"detailGroup": "Identity and classification",
"detailRole": "information",
"isVisible": true,
"key": "STMTNAME",
"label": "Statement name",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "text"
},
{
"detailGroup": "Identity and classification",
"detailRole": "information",
"isVisible": true,
"key": "CUSTCLAS",
"label": "Customer class",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "text"
},
{
"detailGroup": "Primary contact",
"detailRole": "information",
"isVisible": true,
"key": "CNTCPRSN",
"label": "Contact",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "text"
},
{
"detailGroup": "Primary contact",
"detailRole": "information",
"isVisible": true,
"key": "PHONE1",
"label": "Phone 1",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "text"
},
{
"detailGroup": "Primary contact",
"detailRole": "information",
"isVisible": true,
"key": "PHONE2",
"label": "Phone 2",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "text"
},
{
"detailGroup": "Primary contact",
"detailRole": "information",
"isVisible": true,
"key": "PHONE3",
"label": "Phone 3",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "text"
},
{
"detailGroup": "Primary contact",
"detailRole": "information",
"isVisible": true,
"key": "FAX",
"label": "Fax",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "text"
},
{
"detailGroup": "Master address",
"detailRole": "information",
"isVisible": true,
"key": "ADDRESS1",
"label": "Address line 1",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "text"
},
{
"detailGroup": "Master address",
"detailRole": "information",
"isVisible": true,
"key": "ADDRESS2",
"label": "Address line 2",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "text"
},
{
"detailGroup": "Master address",
"detailRole": "information",
"isVisible": true,
"key": "ADDRESS3",
"label": "Address line 3",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "text"
},
{
"detailGroup": "Master address",
"detailRole": "information",
"isVisible": true,
"key": "CITY",
"label": "City",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "text"
},
{
"detailGroup": "Master address",
"detailRole": "information",
"isVisible": true,
"key": "STATE",
"label": "State / region",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "text"
},
{
"detailGroup": "Master address",
"detailRole": "information",
"isVisible": true,
"key": "ZIP",
"label": "Postal code",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "text"
},
{
"detailGroup": "Master address",
"detailRole": "information",
"isVisible": true,
"key": "COUNTRY",
"label": "Country",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "text"
},
{
"detailGroup": "Master address",
"detailRole": "information",
"isVisible": true,
"key": "ADRSCODE",
"label": "Master address code",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "text"
},
{
"detailGroup": "Billing and delivery defaults",
"detailRole": "information",
"isVisible": true,
"key": "PRBTADCD",
"label": "Default billing address code",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "text"
},
{
"detailGroup": "Billing and delivery defaults",
"detailRole": "information",
"isVisible": true,
"key": "PRSTADCD",
"label": "Default shipping address code",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "text"
},
{
"detailGroup": "Billing and delivery defaults",
"detailRole": "information",
"isVisible": true,
"key": "STADDRCD",
"label": "Statement address code",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "text"
},
{
"detailGroup": "Billing and delivery defaults",
"detailRole": "information",
"isVisible": true,
"key": "SHIPMTHD",
"label": "Shipping method code",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "text"
},
{
"detailGroup": "Billing and delivery defaults",
"detailRole": "information",
"isVisible": true,
"key": "UPSZONE",
"label": "UPS zone",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "text"
},
{
"detailGroup": "Billing and delivery defaults",
"detailRole": "information",
"isVisible": true,
"key": "SHIPCOMPLETE",
"label": "Complete shipments only (1 = yes)",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "text"
},
{
"detailGroup": "Commercial defaults",
"detailRole": "information",
"isVisible": true,
"key": "SLPRSNID",
"label": "Salesperson code",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "text"
},
{
"detailGroup": "Commercial defaults",
"detailRole": "information",
"isVisible": true,
"key": "SALSTERR",
"label": "Sales territory code",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "text"
},
{
"detailGroup": "Commercial defaults",
"detailRole": "information",
"isVisible": true,
"key": "PYMTRMID",
"label": "Payment terms code",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "text"
},
{
"detailGroup": "Commercial defaults",
"detailRole": "information",
"isVisible": true,
"key": "PRCLEVEL",
"label": "Price level code",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "text"
},
{
"detailGroup": "Commercial defaults",
"detailRole": "information",
"isVisible": true,
"key": "DISGRPER",
"label": "Discount grace days",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "automatic"
},
{
"detailGroup": "Commercial defaults",
"detailRole": "information",
"isVisible": true,
"key": "DUEGRPER",
"label": "Due-date grace days",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "automatic"
},
{
"detailGroup": "Commercial defaults",
"detailRole": "information",
"isVisible": true,
"key": "CURNCYID",
"label": "Default currency ID",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "text"
},
{
"detailGroup": "Commercial defaults",
"detailRole": "information",
"isVisible": true,
"key": "RATETPID",
"label": "Exchange-rate type code",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "text"
},
{
"detailGroup": "Stored flags and national account",
"detailRole": "information",
"isVisible": true,
"key": "HOLD",
"label": "Stored hold flag (1 = yes)",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "text"
},
{
"detailGroup": "Stored flags and national account",
"detailRole": "information",
"isVisible": true,
"key": "INACTIVE",
"label": "Stored inactive flag (1 = yes)",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "text"
},
{
"detailGroup": "Stored flags and national account",
"detailRole": "information",
"isVisible": true,
"key": "CPRCSTNM",
"label": "National-account parent code",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "text"
},
{
"detailGroup": "Business notes",
"detailRole": "information",
"isVisible": true,
"key": "COMMENT1",
"label": "Comment 1",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "text"
},
{
"detailGroup": "Business notes",
"detailRole": "information",
"isVisible": true,
"key": "COMMENT2",
"label": "Comment 2",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "text"
}
],
"detailLiveRefreshSeconds": 0,
"fixedFilters": [],
"id": "56F9A98A-FDAE-5575-A8E7-8297674442E4",
"openFilters": [
{
"id": "3A3FF93C-BF96-5A6D-BCBD-EBDB8C72D455",
"includeAllOption": true,
"key": "CUSTCLAS",
"title": "Customer class",
"type": "text"
}
],
"pageSize": 100,
"requiresOpeningFilterSelection": true,
"showOnHome": true,
"sortRules": [
{
"direction": "ascending",
"id": "ACE307E5-74FA-51D1-BC94-237D9ABB65B2",
"key": "CUSTNAME",
"type": "text"
},
{
"direction": "ascending",
"id": "EE9C52E5-1620-5AD5-8414-930D36846212",
"key": "CUSTNMBR",
"type": "text"
}
],
"subtitle": "",
"subtitleKey": "CUSTNMBR",
"systemImage": "person.2",
"title": "Customers",
"titleKey": "CUSTNAME"
},
{
"actions": [],
"badgeKey": "",
"cardEnrichments": [],
"cardFieldLayout": [
{
"detailGroup": "",
"detailRole": "information",
"isVisible": true,
"key": "CNTCPRSN",
"label": "Address contact",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "text"
},
{
"detailGroup": "",
"detailRole": "information",
"isVisible": true,
"key": "PHONE1",
"label": "Phone",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "text"
},
{
"detailGroup": "",
"detailRole": "information",
"isVisible": true,
"key": "ADDRESS1",
"label": "Address line 1",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "text"
},
{
"detailGroup": "",
"detailRole": "information",
"isVisible": true,
"key": "CITY",
"label": "City",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "text"
},
{
"detailGroup": "",
"detailRole": "information",
"isVisible": true,
"key": "STATE",
"label": "State / region",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "text"
},
{
"detailGroup": "",
"detailRole": "information",
"isVisible": true,
"key": "ZIP",
"label": "Postal code",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "text"
},
{
"detailGroup": "",
"detailRole": "information",
"isVisible": true,
"key": "SHIPMTHD",
"label": "Shipping method code",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "text"
},
{
"detailGroup": "",
"detailRole": "information",
"isVisible": true,
"key": "LOCNCODE",
"label": "Default site code",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "text"
}
],
"datasetID": "BCC6391C-9F32-5B54-A3EF-F21F56BC576B",
"dateFilterKey": "",
"dateFilterLastDays": 7,
"dateFilterPreset": "none",
"detailFieldLayout": [
{
"detailGroup": "Business identity",
"detailRole": "information",
"isVisible": true,
"key": "ADRSCODE",
"label": "Address code",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "text"
},
{
"detailGroup": "Business identity",
"detailRole": "information",
"isVisible": true,
"key": "CUSTNMBR",
"label": "Customer code",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "text"
},
{
"detailGroup": "Address contact",
"detailRole": "information",
"isVisible": true,
"key": "CNTCPRSN",
"label": "Address contact",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "text"
},
{
"detailGroup": "Address contact",
"detailRole": "information",
"isVisible": true,
"key": "PHONE1",
"label": "Phone",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "text"
},
{
"detailGroup": "Address contact",
"detailRole": "information",
"isVisible": true,
"key": "FAX",
"label": "Fax",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "text"
},
{
"detailGroup": "Delivery address",
"detailRole": "information",
"isVisible": true,
"key": "ADDRESS1",
"label": "Address line 1",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "text"
},
{
"detailGroup": "Delivery address",
"detailRole": "information",
"isVisible": true,
"key": "ADDRESS2",
"label": "Address line 2",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "text"
},
{
"detailGroup": "Delivery address",
"detailRole": "information",
"isVisible": true,
"key": "CITY",
"label": "City",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "text"
},
{
"detailGroup": "Delivery address",
"detailRole": "information",
"isVisible": true,
"key": "STATE",
"label": "State / region",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "text"
},
{
"detailGroup": "Delivery address",
"detailRole": "information",
"isVisible": true,
"key": "ZIP",
"label": "Postal code",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "text"
},
{
"detailGroup": "Delivery defaults",
"detailRole": "information",
"isVisible": true,
"key": "SHIPMTHD",
"label": "Shipping method code",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "text"
},
{
"detailGroup": "Delivery defaults",
"detailRole": "information",
"isVisible": true,
"key": "TAXSCHID",
"label": "Tax schedule code",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "text"
},
{
"detailGroup": "Delivery defaults",
"detailRole": "information",
"isVisible": true,
"key": "LOCNCODE",
"label": "Default site code",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "text"
}
],
"detailLiveRefreshSeconds": 0,
"fixedFilters": [],
"id": "5AB64736-37D6-52EB-9F18-C26751413E4A",
"openFilters": [],
"pageSize": 100,
"requiresOpeningFilterSelection": false,
"showOnHome": false,
"sortRules": [
{
"direction": "ascending",
"id": "26CBFC00-7BC5-58BE-A1BD-3389E75104D4",
"key": "ADRSCODE",
"type": "text"
}
],
"subtitle": "",
"subtitleKey": "CITY",
"systemImage": "map",
"title": "Customer addresses",
"titleKey": "ADRSCODE"
}
],
"relations": [
{
"childDatasetID": "BCC6391C-9F32-5B54-A3EF-F21F56BC576B",
"childKey": "CUSTNMBR",
"id": "217114C3-3AFF-5919-8CA6-6FFDB6FC9D1F",
"name": "Customer address book",
"parentDatasetID": "DEDE63B1-F048-5EF8-BADB-2B7E4C2D2448",
"parentKey": "CUSTNMBR"
}
],
"widgets": []
}
},
"format": "cifru-configuration-package",
"formatVersion": 1,
"manifest": {
"applicationName": "Microsoft Dynamics GP",
"configurationLanguages": [
"en"
],
"countries": [
"US"
],
"createdAt": "2026-10-07T00:00:00Z",
"description": "UNOFFICIAL — NOT VALIDATED ON A REAL ERP INSTALLATION. Selected GP source registrations, field names and logical keys are evidenced by Microsoft's public GP migration code at commit e7ed235bc979c0283306e9639ff7cd22ce78341d and the GP Receivables manual. AL staging types/keys are not SQL DDL. No real GP/SQL Server results, installed release, physical types, constraints, owner or execution plans have been checked. Run the import read/compatibility test and validate the installed edition and permissions before business use.\n\nFor sales, customer service, delivery coordination and managers: choose a customer class, find the customer, inspect a grouped 37-field business dossier, then open its address book. Each address has its own contact, phone/fax, delivery address, shipping/tax defaults and site code. See the commercial and delivery context on your phone instead of only a list of names.\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 authorized source and your Cifru plan.\n\nPro: one source, two lists, one related button and explicit read-only SQL. The SQL selects only 37 master fields and 13 address fields plus a hidden full row key; no SELECT *. This avoids relying on the Android native-table preview's first-80-column projection for later customer fields, and avoids requesting bank/card or technical audit columns. The address list is loaded only when opened and is constrained by the selected customer. Both reads are bounded to 2,000 rows and have no scheduled refresh. Reaching a limit means potentially incomplete data; narrowing filters does not guarantee a cheap server scan. SQL Server-compatible syntax and wrapper behavior must still be tested on your source.\n\nCustomer and address business codes preserve leading zeroes; only right-padding is removed from these keys. Address identity includes both customer and address code, so two customers may use the same address code without mixing records. The source is the company database, not DYNAMICS, Business Central or a migration staging database. dbo must be verified locally. The address subset is not the entire GP customer module: no email table, country/address3 extension, orders, invoices, balances or computed credit availability is claimed.\n\nStored hold and inactive flags are distinct (1/true=yes; 0/false=no), not computed effective eligibility. National-account parent rules may override child flags. Complete shipments is a configured preference, not a completed-delivery status. Grace days are payment-term settings, not overdue days. Class, salesperson, territory, address, terms, shipping, tax schedule, site, price level and rate are native business codes; descriptive names and tax calculations are not invented. Default currency ID need not be ISO or the functional currency; no monetary conversion or cross-company amount is calculated. Empty values remain empty.\n\nUse a separately authorised least-privilege SQL reporting login with SELECT access only to permitted company data. GP UI passwords are transformed and do not work as ordinary SQL login passwords. Do not use sa, sysadmin or DYNGRP. Cifru filters are not access control. The package contains no host, account, password or business rows; contact information and commercial defaults may still be confidential in your source. Screenshots are native Cifru with entirely fictional DEMO rows and synthetic transport, not a live GP connection. Unofficial and not endorsed by Microsoft. GP is a distinct installed-base product, not Business Central; check your edition's lifecycle. Product support is currently scheduled through December 31, 2029 and security patches through April 30, 2031.\n\nPrimary source registration: https://github.com/microsoft/ALAppExtensions/blob/e7ed235bc979c0283306e9639ff7cd22ce78341d/Apps/W1/HybridGP/app/src/codeunits/GPCloudMigration.codeunit.al\nCustomer field evidence: https://github.com/microsoft/ALAppExtensions/blob/e7ed235bc979c0283306e9639ff7cd22ce78341d/Apps/W1/HybridGP/app/src/Migration/Customers/GPRM00101.Table.al\nAddress field/key evidence: https://github.com/microsoft/ALAppExtensions/blob/e7ed235bc979c0283306e9639ff7cd22ce78341d/Apps/W1/HybridGP/app/src/Migration/Customers/GPCustomerAddress.Table.al\nFunctional manual: https://learn.microsoft.com/en-us/dynamics-gp/financials/receivables-management\nSecurity: https://learn.microsoft.com/en-us/dynamics-gp/installation/securityplanning",
"licenseCode": "Cifru-Community-1.0",
"minimumCifruVersion": "1.1.0",
"minimumPlan": "pro",
"packageID": "86884515-224A-59D2-B48A-5DD68D419854",
"rootButtonCount": 1,
"summary": "Customer contacts, delivery/payment defaults, separate stored flags and an on-demand address book.",
"tags": [
"Dynamics GP",
"SQL Server",
"Customers",
"Address book",
"Sales",
"Customer service",
"Pro"
],
"title": "Customer dossier and address book — Pro"
}
}