Source ERP · 2 of 18
TxDownloaderPro ← Dynamics CRM — Infor SyteLine: what the shipped default templates set up
Read it in the terminal with "dlake skills show dlake-txdownloaderpro-dynamicscrm/erps/infor-syteline". It extends the dlake-txdownloaderpro-dynamicscrm skill, which holds what is true whatever the source ERP.
TxDownloaderPro ← Dynamics CRM — Infor SyteLine: what the shipped default templates set up
Keep this skill current.
dlakeships updates often and this text is embedded in the CLI you have installed. Before relying on it, comparedlake --versionwithnpm view @commercient/dlake version; if they differ, runnpm install -g @commercient/dlake@latestand thendlake skills install, which overwrites the installed skill files with the current text.
dlake-txdownloaderpro is the parent skill and the authority for everything general: what the
writeback objects are and how they are exposed to the Data API (§1–§7), how a key is scoped to
them, the TxDownloaderPro configuration table and the TxDownloaderProTrans transaction table
and their columns (§9, §10), the SFUpdated state machine (§10), the field-mapping columns
ProcessStructure, ResultStructure, XMLResult, ERPResponse, JsonRequest and
JsonResponse and the {{Object.Field}} template paths that read them (§11), the
filter-operator vocabulary (§12), and the txdownloaderpro_* tools that are the preferred way
to configure any of it (§14). Read it first; this page does not repeat it.
dlake-txdownloaderpro-dynamicscrm is the Dynamics CRM page and carries the destination-side
detail: it is the skill this page is a child of, and the authority for the conventions that hold
across every ERP, so read it before this page. This page is
dlake-txdownloaderpro-dynamicscrm/erps/infor-syteline.md, and that skill’s ERP table is what
points at it.
What follows is only what the shipped default templates for this pair themselves set,
described from their DefaultQuery, DefaultProcessStructure and DefaultResultStructure
columns. It is a description of structure: which objects and marker columns are read, which
parts and members are filled, which token names appear. No template text is reproduced. This
page grows as the default catalogue does. The community templates the catalogue also carries for
this pair are listed in a section of their own below, by count, object and name only.
1. What the templates deliver
One row per process the default set ships for this pair. The business language is the
catalogue’s own, where it carries any; where it does not, the row says what the source and
destination objects are and what the operation flags allow. Operations are the union of the
IsInsert, IsUpdate and IsDelete flags over that process’s templates.
| Process | What it delivers | Source → destination | Templates | Operations |
|---|---|---|---|---|
| Create New Contact | Dynamics 365 Contact to Infor LN Contact_v3 (insert) | Contact → SLContacts, Contact_v3 | 2 | create |
| Create New Customer | Dynamics 365 Account to Infor LN Customer360_WT (insert) | Account → SLCustomers, Customer360_WT | 2 | create |
| Create or Update Blanket Order Item | Dynamics 365 Order Product to Infor SyteLine SLCoitems blanket release (insert) | Order Product → SLCoitems | 2 | create / update |
| Create or Update Blanket Order Line | Dynamics 365 Order Product to Infor SyteLine SLCoBlns blanket release (insert) | Order Product → SLCoBlns | 2 | create / update |
| Create/Update Customer Item Prices | Dynamics 365 Price List Item to Infor SyteLine SLItemCusts customer price (insert) | Price List Item → SLItemCusts | 2 | create / update |
| Create/update New Estimate/Quote With Blanket Lines | Dynamics 365 Sales Order to Infor SyteLine SLCos blanket estimate (insert) | Sales Order → SLCos | 2 | create / update |
| Create/Update/Delete Opportunity | Dynamics 365 Opportunity to Infor SyteLine SLOpportunities (insert) | Opportunity → SLOpportunities | 2 | create / update |
| Create/Update/Delete Product Item | Dynamics 365 Product to Infor SyteLine SLProdMixItems (insert) | Product → SLProdMixItems | 2 | create / update |
| Update Customer | Dynamics 365 Account to Infor SyteLine SLCustomers (update) | Account → SLCustomers, Customer360_WT | 2 | update |
| Create New Customer Order | — | Sales Order → SLCos | 1 | create |
| Create New Estimate | Create New Estimate/Quote from DynamicsCRM | Quotes → Quotes | 1 | create |
| Create New Prospects | — | Account → Prospect | 1 | create |
| Create New Sales Order | Dynamics 365 Sales Order to Infor LN SalesOrderDetails (insert) | Sales Order → SalesOrderDetails | 1 | create |
| Create New Ship To Address | Dynamics 365 account address to Infor SyteLine SLCustomers ship-to (insert) | Account Address → SLCustomers | 1 | create |
| Create/Update/Delete Ship To Address | Dynamics 365 account address to Infor SyteLine SLShipTos (update) | Account Address → SLShipTos | 1 | update |
| Update Contact | Dynamics 365 Contact to Infor LN Contact_v3 (update) | Contact → Contact_v3 | 1 | update |
| Update Estimate/Quote | Dynamics 365 Quote to Infor SyteLine SLCos estimate (update) | Quote → SLCos | 1 | update |
| Update Ship To Address | Dynamics 365 account address to Infor SyteLine SLCustomers ship-to (update) | Account Address → SLCustomers | 1 | update |
Across the 27 default templates: 15 carry IsInsert, 12 carry IsUpdate, 0 carry IsDelete. A
flag decides which operation the process is allowed to perform, not which one it performs on a
given record. 4 catalogue descriptions were not printed because they are placeholders or carry
text that is not ours to publish.
2. The process rows the import creates
Importing one of these templates writes one TxDownloaderPro row. The columns the import fills
from the template are the ones the parent’s §9 describes: the query goes into Query, the
inbound mapping into ProcessStructure, the outbound mapping into ResultStructure, and the
operation flags onto the row. In-flight state is never in this table — it is in
TxDownloaderProTrans (parent §10), keyed by SFUpdated.
A default template carries no TxDownloaderDllName and no template name of its own. It is
identified by its field-process version, and the version is what supplies the DLL on a create.
That is where erpProcessId comes from, so a create against the wrong version produces a row
that never matches a run.
| What the import sets | Where it comes from |
|---|---|
Query | the template’s DefaultQuery — section 3 |
ProcessStructure | the template’s DefaultProcessStructure — section 4 |
ResultStructure | the template’s DefaultResultStructure — section 5 |
IsInsert / IsUpdate / IsDelete | the template’s own flags — section 1 |
the DLL and erpProcessId | the field-process version, not the template |
The field-process versions this pair’s default templates belong to: TxDownloader_32_19,
TxDownloader_32_25, TxDownloader_32_18, TxDownloader_32_23, TxDownloader_32_20,
TxDownloader_32_3, TxDownloader_32_2, TxDownloader_32_27, TxDownloader_32_8,
TxDownloader_32_15, TxDownloader_32_14, TxDownloader_32_16, TxDownloader_32_11,
TxDownloader_32_5, TxDownloader_32_6, TxDownloader_32_7, TxDownloader_32_26,
TxDownloader_32_12, TxDownloader_32_24, TxDownloader_32_10, TxDownloader_32_13.
3. What the query retrieves
Query does not have one shape across the product (parent §9). For this pair, 27 carry a
FetchXML document. No query text is reproduced here; what follows is what those queries read
and filter on.
- Objects read:
contact,account,salesorder,salesorderdetail,quote,quotedetail,systemuser,comrcint_inforsytelinev9_address,customeraddress,productpricelevel,product,opportunity,opportunityproduct. - Child collections pulled in the same query:
account,salesorderdetail,quotedetail,contact,systemuser,comrcint_inforsytelinev9_address,salesorder,product,opportunityproduct. A header retrieved without its lines is a query that does not name the child collection. - FetchXML elements used:
fetch,entity,attribute,link-entity,filter,condition,order; condition operators:not-null,null,eq. - Where the filtering happens: in the query, on the CRM side, before anything reaches the source system. Narrowing a template means editing its query — not its mapping.
4. The inbound mapping document
ProcessStructure is a flat JSON object: each member names a field on the source side and its
value is a template resolved against the retrieved record’s XML document (parent §11). Of this
pair’s 27 default templates, 27 carry a DefaultProcessStructure. A parseable document carries
about 17 members.
- Template path roots used:
quote,salesorder,salesorderdetail,account,contact,customeraddress,productpricelevel,opportunity,quotedetail,opportunityproduct,product. A path’s first segment has to match the element the engine emits, and the document root itself is never part of the path. Line.section members present:Line.mainXml,Line.Item,Line.UM,Line.Description,Line.DueDate,Line.PriceConv,Line.QtyOrderedConv,Line.ItmDescription,Line.CoNum,Line.AdrCurrCode,Line.ItmcstUM,Line.ContPrice,Line.Qty,Line.UnitPrice,Line.QtyOrdered,Line.Price,Line.AdrName,Line.CoStat,Line.ItDescription,Line.ProspectId, and 14 more. 10 templates name the collection throughLine.mainXml; the members beside it are resolved against that collection’s own root rather than through the header.$FUN_value tokens the documents carry:$FUN_STRREPLACE,$FUN_SPLIT. The names are what the templates carry; no semantics are claimed for them here — the parent’s §12 is explicit that the platform-side resolver is dotted path substitution only, and these tokens are evaluated on the customer’s own host.
5. Result structure — what goes back to the CRM
ResultStructure is the outbound half: up to four parts, each optional, filled from the source
system’s response after the write (parent §11). Of this pair’s 27 default templates, 15 carry a
parseable DefaultResultStructure, 12 carry none.
| Part | Filled by | What it addresses | Members present |
|---|---|---|---|
Part1 | 15 templates | the record the run is already working with | a source-path-to-CRM-field map |
Part2 | 0 templates (15 explicitly null) | the child/line records under it | — |
Part3 | 0 templates (15 explicitly null) | a new record, matched on an external id field | — |
Part4 | 0 templates (15 explicitly null) | a different record, addressed by an id field | — |
- CRM fields
Part1writes to:comrcint_externalkey,comrcint_arcustomercode,comrcint_estimateid,comrcint_prospectid. These are the fields on the flagged record that carry the source system’s key or outcome once the write has happened — the names only; what lands in them is the response, per record. - Response fields it reads them from:
CoNum,RowPointer,ContactID,contactCode,CustNum,Customer_CustomerID,ProspectGuid,ProspectID,salesOrder,CustSeq,OpportunityID,Item. The map is written source-path first, CRM-field second (parent §11); the wrong way round resolves to the same silent empty string as a mistyped path.
6. Community templates
The catalogue carries community templates for this pair as well as the default set above: templates written on a tenant rather than shipped. Their content is not read and not described here — no query, no mapping document, no field. What this section states is how many there are, which objects they start from, what they are called where the name is a product artefact name, and which field-process versions they belong to.
- How many: 2 community templates, across 2 field-process versions.
- Operations: 2 carry
IsInsert, 0 carryIsUpdate, 0 carryIsDelete. A flag decides which operation the template is allowed to perform, as it does for a default template.
| Source → destination | Templates |
|---|---|
Estimate → — | 1 |
Prospect → — | 1 |
None of these rows carries a destination object name in the catalogue, so the destination side of every shape above is empty.
- Template names the catalogue carries:
Create New Estimate/Quote(1),Create New Prospects(1). - Field-process versions they belong to:
TxDownloader_32_3,TxDownloader_32_2.
Importing one of these writes the same TxDownloaderPro row that importing a default template
writes (parent §9); what differs is where the template came from, not how it is stored. What any
one of them contains is read from the imported row itself, with the tools below.
7. Verifying
Read the imported row before a run, not after. The parent’s §14 is the authority on these tools and §10 on the state they report.
# the processes this tenant has, with their unresolved-error counts
dlake admin txdownloaderpro_list_processes
# one process in its edit shape, including the query and both mapping documents
dlake admin txdownloaderpro_get_process --processId <id>
# run the SAVED query against the live CRM and render one record as the engine’s XML
dlake admin txdownloaderpro_preview_xml --processId <id>
# the state breakdown the parent §10 reads
dlake txdownloaderpro transactions <processId> --status <state>
The two failures this pair’s templates actually produce: a run that retrieves nothing, which is
the query’s own condition and not the mapping; and a record that arrives with fields empty,
which is a path that does not match the emitted document. Both are read through
txdownloaderpro_preview_xml, against a real record.
8. Where this sits
dlake-txdownloaderpro— the parent: exposure, key scoping, the two tables,SFUpdated, the mapping columns, the filter vocabulary, thetxdownloaderpro_*tools. Read it first.dlake-txdownloaderpro-dynamicscrm— the Dynamics CRM destination page, which this page is a child of: the query shape, marker conventions and mapping conventions this destination uses across every ERP, and the ERP table that lists this page and its siblings.dlake-integration-setup— registration, CRM choice and the ERP connector, of which writeback is one step.dlake-crmproanddlake-normalsync— the inbound leg, going the other way.dlake— general tenant operation.
This page describes the shipped default template set for this pair, and grows as that set does.