Agent skill

dlake-crmpro-mdc

When an agent should use it: What the shipped CRMPro Standard templates set up when MDC is the destination, stated across every source ERP that ships them: the object API names the templates push to (`invoice`, `salesorder`, `salesorderdetail`), the `TimeStampRepository` key separator they build, the view and `TimeStamp_Prefix` conventions, and which template groups every source ships versus only some. Use it when standing up or reading a MDC template set, when deciding which templates to import and activate, or when a run completes without pushing records and the answer is in the view or the configuration row. It extends `dlake-crmpro`, which covers operating CRMPro generally, and it carries one child page per source ERP under `erps/`, which is where everything ERP-specific lives.

Extends dlake-crmpro.

11 source-ERP pages: what the shipped templates set up for each (also readable with dlake skills show dlake-crmpro-mdc/erps/<erp>)

Install with "dlake skills install" or read it in the terminal with "dlake skills show dlake-crmpro-mdc". Skills ship inside the CLI; the copy below mirrors the GitHub repository.

CRMPro → MDC: what the shipped templates set up

Keep this skill current. dlake ships updates often and this text is embedded in the CLI you have installed. Before relying on it, compare dlake --version with npm view @commercient/dlake version; if they differ, run npm install -g @commercient/dlake@latest and then dlake skills install, which overwrites the installed skill files with the current text.

The source ERP has its own page under this skill. erps/<erp>.md is a child file of this skill and describes what the shipped templates for that ERP → MDC pair set up. §6 lists every one of them and how to pick the right row; read this page first, then that one.

dlake-crmpro is the parent skill and the authority for everything general: the crmpro_* tools, CRM_Configuration and CRM_FieldList, TimeStampRepository, the three kinds of source view, the NULL-cursor rule and the silent zero-record run. Read it first; this page does not repeat it. What follows is only what the shipped Standard templates for MDC themselves set, and only the part of it that is the same across 11 source ERPs. Everything that belongs to one source — which groups ship, which clone tables the views read, which view names and prefixes are paired — is on that ERP’s own page under erps/. This page grows as the catalogue does.

1. The objects these templates push to

Every source ERP that ships MDC templates pushes to invoice, salesorder, salesorderdetail. Copy an object name from the template or from crmpro_crm_objects; case is part of the name.

These appear in some sources’ sets and not others:

CRM_Object_API_NameSources whose templates push it
invoicedetail10 of 11
pricelevel10 of 11
product10 of 11
uom10 of 11
uomschedule10 of 11
account4 of 11
quote2 of 11
quotedetail2 of 11
comrcint_apteanm2m_address1 of 11
comrcint_apteanm2m_contact1 of 11
comrcint_apteanm2m_customer1 of 11
comrcint_apteanm2m_invoicedetail1 of 11
comrcint_apteanm2m_invoiceheader1 of 11
comrcint_apteanm2m_salesperson1 of 11
comrcint_apteanm2m_sodetail1 of 11
comrcint_apteanm2m_soheader1 of 11
comrcint_baan_customer1 of 11
comrcint_baan_invoice1 of 11
comrcint_baan_salesorder1 of 11
comrcint_baan_salesorderdetail1 of 11
comrcint_baan_salesperson1 of 11
comrcint_baan_shiptoaddress1 of 11
comrcint_epicoreagle_invoice1 of 11
comrcint_epicoreagle_invoicedetail1 of 11
comrcint_epicoreagle_salesorder1 of 11
comrcint_epicoreagle_salesorderdetail1 of 11
comrcint_ifserp_invoice1 of 11
comrcint_ifserp_invoicedetail1 of 11
comrcint_ifserp_salesorder1 of 11
comrcint_ifserp_salesorderdetail1 of 11
comrcint_inforsytelinev9_address1 of 11
comrcint_inforsytelinev9_customer1 of 11
comrcint_inforsytelinev9_invoice1 of 11
comrcint_inforsytelinev9_invoicelineitem1 of 11
comrcint_inforsytelinev9_salesorder1 of 11
comrcint_inforsytelinev9_salesorderline1 of 11
comrcint_sage1002017_invoice1 of 11
comrcint_sage1002017_invoicedetail1 of 11
comrcint_sage1002017_salesorder1 of 11
comrcint_sage1002017_salesorderdetail1 of 11
contact1 of 11

2. The repository key these templates build

Every one of these template sets builds its TimeStampRepository key as <TimeStamp_Prefix>:<key>. The literal in the view and the TimeStamp_Prefix on the configuration row have to be the same string, case included; a key built with the other separator matches nothing the engine wrote.

The views these templates create are named with the vw_ prefix form. The TimeStamp_Prefix is not reliably the view name — the ERP pages carry the pairings — and it is what every downstream view joins on, so it is effectively public API between processes.

3. What the template groups deliver

The rest are shipped by some sources only:

Template groupSources that ship it
CRM invoice10 of 11
CRM Product10 of 11
CRM salesorder10 of 11
CRM salesorderdetail10 of 11
CRM UOM10 of 11
CRM invoicedetail9 of 11
CRM PriceLevel9 of 11
CRM UoMSchedule8 of 11
CRM Account3 of 11
CRM Contact2 of 11
CRM Quote and Line2 of 11
CRM UOMSchedule2 of 11
apteanm2m Address1 of 11
apteanm2m Contact1 of 11
apteanm2m customer1 of 11
apteanm2m Invoice Detail1 of 11
apteanm2m Invoice Header1 of 11
apteanm2m Sales Person1 of 11
apteanm2m SalesOrder Detail1 of 11
apteanm2m SalesOrder Header1 of 11
BAAN Customer1 of 11
BAAN Invoice1 of 11
BAAN Sales Person1 of 11
BAAN SalesOrder1 of 11
BAAN SalesOrderDetail1 of 11
BAAN ShipTo Address1 of 11
CRM account1 of 11
CRM PriceBook1 of 11
CRM quotedetail1 of 11
EPICOREAGLE Invoice1 of 11
EPICOREAGLE Invoice Detail1 of 11
EPICOREAGLE Salesorder1 of 11
EPICOREAGLE Salesorder Detail1 of 11
IFSERP Invoice1 of 11
IFSERP Invoice Detail1 of 11
IFSERP Sales Order1 of 11
IFSERP Sales Order Detail1 of 11
INFORSYTELINEV9 Address1 of 11
INFORSYTELINEV9 Customer1 of 11
INFORSYTELINEV9 Invoice1 of 11

That is the 40 most widely shipped; the ERP pages carry the rest.

Every one of these templates inserts Is_Active as 0, so an imported process is inactive until an operator activates it, and the Registration API’s import does not populate CRM_FieldList — an object with no CRM_FieldList rows pushes nothing and records no error. Read MappingJson off the template with dlake admin crmpro_templates, then check crmpro_field_mapping on the created process before activating it.

4. When a run pushes no records

The signature failure is the one dlake-crmpro §7d describes: every object logs a start and an end in about 0.00 seconds, the total is zero, and no error is written anywhere. For this destination, check in this order.

  1. Does the view return rows? Zero rows means the answer is in the view.
  2. Does TimeStamp_Prefix equal the literal the view builds its key from, case included — and not, by reflex, the view’s own name?
  3. Is the separator the one §2 names, in both the view literal and the prefix?
  4. Does CRM_FieldList have rows for that Object_Name, spelled as the API name?
  5. Any NULL nullable text column on the configuration row? The templates set '' throughout, and a NULL throws inside the engine, which catches it — so the object is skipped with no recorded error.
  6. Is the parent’s prefix the one that actually holds the ids? A view that reads another process’s prefix returns nothing until that process has run, which is what makes Sync_Order a dependency order rather than a preference.
  7. Do the clone tables the view reads carry the prefix this ERP’s templates expect? That is on the ERP’s own page, and it differs between sources.

5. Verifying

# per-prefix counts; every synced record carries its destination id
dlake tool query --profile <tenant> --sql "SELECT LEFT([Key], CHARINDEX(':',[Key])-1) AS prefix, COUNT(*) n, COUNT(NULLIF(SFDCID,'')) withId FROM dbo.TimeStampRepository WHERE CHARINDEX(':',[Key])>0 GROUP BY LEFT([Key], CHARINDEX(':',[Key])-1)"

withId = n for every prefix is the success condition dlake-crmpro defines. The split is on the first colon, which is the prefix boundary whether the key separator is : or ::.

6. The source ERP’s own page

One row per source ERP the catalogue carries MDC templates for. Each page is a child file of this skill, addressed as dlake-crmpro-mdc/erps/<erp>dlake skills show dlake-crmpro-mdc/erps/<erp> prints one, and dlake skills install writes them beside this file.

ERPPageWhat its templates deliver
Aptean Made2Manageerps/aptean-made2manage.md18 Standard templates in 18 groups, pushing uomschedule, uom, pricelevel, product and more; : repository keys
Baanerps/baan.md14 Standard templates in 14 groups, pushing uomschedule, uom, product, pricelevel and more; : repository keys
Epicor Eagleerps/epicor-eagle.md12 Standard templates in 12 groups, pushing uomschedule, uom, pricelevel, product and more; : repository keys
IFSerps/ifs.md12 Standard templates in 12 groups, pushing uomschedule, uom, pricelevel, product and more; : repository keys
Infor SyteLine V9erps/infor-syteline-v9.md15 Standard templates in 15 groups, pushing uomschedule, uom, pricelevel, product and more; : repository keys
Sage 100 (US)erps/sage-100-us.md8 Standard templates in 8 groups, pushing uomschedule, uom, pricelevel, product and more; : repository keys
Sage 100 2017erps/sage-100-2017.md10 Standard templates in 10 groups, pushing salesorder, salesorderdetail, invoice, invoicedetail and more; : repository keys
Sage 100 US (SAGE100US)erps/sage-100-us-sage100us.md10 Standard templates in 10 groups, pushing uomschedule, uom, pricelevel, product and more; : repository keys
Sage 50 UKerps/sage-50-uk.md8 Standard templates in 8 groups, pushing uomschedule, uom, pricelevel, product and more; : repository keys
SAP B1erps/sap-b1.md10 Standard templates in 10 groups, pushing uomschedule, uom, pricelevel, product and more; : repository keys
SYSPRO 7 and aboveerps/syspro-7-and-above.md8 Standard templates in 8 groups, pushing uomschedule, uom, pricelevel, product and more; : repository keys

Work out which row applies before reading one. The source is the ERP the tenant was registered with: dlake register erps lists the catalogue’s names and codes, and dlake admin crmpro_templates shows what that tenant can actually import. Match that ERP to a row above, then read its page alongside this one — this page for the conventions that hold across every source, that page for what this source’s own templates set. If no row matches the tenant’s ERP, this skill alone applies: the catalogue ships no Standard templates for that pair, so there is nothing ERP-specific to read and nothing to import.

7. Where this sits

dlake-crmpro is the general operating surface — the crmpro_* tools, the setup and transaction tables, field mapping, and the source-view contract that applies to every destination. This skill adds what the shipped MDC templates set up, and its erps/ pages add what each source ERP’s own templates set. dlake-crmpro-hubspot, dlake-crmpro-salesforce and dlake-crmpro-shopify are the hand-written destination skills for their CRMs, and the conventions genuinely differ between destinations. For the extract leg that fills the clone tables, see dlake-normalsync; for the on-premises agent that runs it, dlake-syncagent; for the writeback leg, dlake-txdownloaderpro; for standing an integration up, dlake-integration-setup.