Table extension 8054 "Sales Line"
Subscription Billing · Microsoft.SubscriptionBilling
Across versions
- BC23-28not present
- BC29-30present
Neighbourhood 2 connected objects and pages
Subscription Billing · Microsoft.SubscriptionBilling · BC29-30 · source at ea08af5e · facts from BC29
Extends Sales Line.
Fields
Explanation: the field’s ToolTip in the code; without one, the ToolTip of a page control bound to the field (marked via the page); without that, its Caption (marked caption) when that differs from the name.
| No. | Name | Type | Explanation | Notes |
|---|---|---|---|---|
| 8053 | Recurring Billing from | Date | — | DataClassification CustomerContent |
| 8054 | Recurring Billing to | Date | — | DataClassification CustomerContent |
| 8055 | Subscription Lines | Integer | Specifies the number of Subscription Lines for the sales line. via Page extension 8009 “Blanket Sales Order Subform” | FlowField: count(“Sales Subscription Line” where(“Document Type” = field(“Document Type”), “Document No.” = field(“Document No.”), “Document Line No.” = field(“Line No.”))); not editable |
| 8057 | Subscription Option | Enum “Item Service Commitment Type” | — | FlowField: lookup(Item.“Subscription Option” where(“No.” = field(“No.”))); enum Enum 8056 “Item Service Commitment Type”; not editable |
| 8058 | Discount | Boolean | — | not editable; DataClassification CustomerContent |
| 8059 | Exclude from Doc. Total | Boolean | Exclude from Document Total caption | DataClassification CustomerContent |
Events published
OnBeforeSetExcludeFromDocTotal(var SalesLine: Record "Sales Line"; var IsHandled: Boolean)(integration)OnAfterUpdateSalesSubscriptionLineCalculationBaseAmount(var SalesLine: Record "Sales Line"; xSalesLine: Record "Sales Line")(integration)OnBeforeErrorIfServiceObjectTypeCannotBeSelectedManually(var SalesLine: Record "Sales Line"; FieldNo: Integer; var IsHandled: Boolean)(integration)
Procedures
InitCachedVar()IsSalesDocumentTypeWithServiceCommitments(): BooleanInitFromSalesHeader(SourceSalesHeader: Record "Sales Header")DeleteSalesServiceCommitment(): Deletes the Sales Subscription Lines that belong to this Sales Line. Call this whenever a Sales Line is removed without running its triggers (Delete(false), DeleteAll(false)), because the OnDelete() trigger of this table extension does not fire in that case and the Sales Subscription Lines would be …GetCombinedDimensionSetID(DimSetID1: Integer; DimSetID2: Integer)(internal)IsServiceCommitmentItem(): Boolean(internal)SetExcludeFromDocTotal()(internal)IsLineWithServiceObject(): Boolean(internal)IsTypeServiceObject(): Boolean(internal)InsertDescriptionSalesLine(SourceSalesHeader: Record "Sales Header"; NewDescription: Text; AttachedToLineNo: Integer)CreateAttachedSalesLine(SourceSalesHeader: Record "Sales Header"; NewDescription: Text; AttachedToLineNo: Integer)(internal)RetrieveFirstContractNo(ServicePartner: Enum "Service Partner"; Process: Enum Process): Code[20](internal)IsLineAttachedToBillingLine(): Boolean: Checks whether this sales line is linked to a Subscription Billing Line. The result is cached per line, so repeated calls on the same line do not re-query the database.CreateContractDeferrals(): Boolean(internal)IsContractRenewalQuote(): Boolean(internal)IsContractRenewal(): Boolean(internal)GetSalesDocumentSign(): Integer(internal)
Plus 3 local procedures.
Triggers
OnDelete
Relations
- extends Table 37 “Sales Line”
- Subscription Lines: CalcFormula Table 8068 “Sales Subscription Line”
Recent changes
- 2026-10-02 #10210 [Bug][Subscription Billing] “Delete Invoiced Sales Orders” leaves orphaned Sales Subscription Lines behind (main, BC30, fix)
- 2026-09-28 #10156 [Bug][SubscriptionBilling] Assign Subscription Lines dialog does not identify the sales line it was opened for (main, BC30, fix)
- 2026-09-25 #9217 [Extensibility][SubscriptionBilling]: Make IsLineAttachedToBillingLine accessible from external apps in Sales Line and Purchase Line (main, BC30, feature)
Ask your agent
Procedure bodies are not stored here (D10). For a procedure body or the calls of one procedure, ask bc-code-atlas (external, by Stefan Maron, MIT; default corpus w1-28), which the bc-observatory plugin connects: bcatlas_resolve_node(object_type: "tableextension", object_name: "Sales Line"), then bcatlas_get_procedure_body or bcatlas_get_neighbors on the returned id.